From a7b3c818f26c80f414eb5a05844d2b54b5eadf6e Mon Sep 17 00:00:00 2001 From: Gaudenz Steinlin Date: Mon, 7 May 2012 13:02:07 +0200 Subject: [PATCH 001/254] Delete own comments Add permission to allow comment authors to delete their own comments if there are no replies yet. --- CHANGES.txt | 8 +++++ plone/app/discussion/browser/comments.pt | 13 ++++++++ plone/app/discussion/browser/comments.py | 24 +++++++++++++- plone/app/discussion/browser/configure.zcml | 10 +++++- .../browser/javascripts/comments.js | 3 ++ plone/app/discussion/browser/moderation.py | 31 +++++++++++++++++++ plone/app/discussion/permissions.zcml | 5 +++ .../discussion/profiles/default/rolemap.xml | 6 ++++ 8 files changed, 98 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index bb27a70..33f7280 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -3,9 +3,17 @@ Changelog 2.1.6 (unreleased) ------------------ +- Add permission to allow comment authors to delete their own comments if + there are no replies yet. + [gaudenz] + - Add Site Administrator role to Review comments permission. [gaudenz] +- Add permission to allow comment authors to delete their own comments if + there are no replies yet. + [gaudenz] + - Fix excessive JS comment deletion. [gaudenz] diff --git a/plone/app/discussion/browser/comments.pt b/plone/app/discussion/browser/comments.pt index ac38d1a..fbc95eb 100644 --- a/plone/app/discussion/browser/comments.pt +++ b/plone/app/discussion/browser/comments.pt @@ -83,6 +83,19 @@
+
+ +
@@ -34,7 +34,7 @@ The comment form is rendered inside a "commenting" div::
diff --git a/plone/app/discussion/browser/javascripts/moderation.js b/plone/app/discussion/browser/javascripts/moderation.js index a5cade1..320477d 100644 --- a/plone/app/discussion/browser/javascripts/moderation.js +++ b/plone/app/discussion/browser/javascripts/moderation.js @@ -1,22 +1,22 @@ /****************************************************************************** - * + * * jQuery functions for the plone.app.discussion bulk moderation. - * + * ******************************************************************************/ (function ($) { - // This unnamed function allows us to use $ inside of a block of code + // This unnamed function allows us to use $ inside of a block of code // without permanently overwriting $. // http://docs.jquery.com/Using_jQuery_with_Other_Libraries - + //#JSCOVERAGE_IF 0 - + /************************************************************************** - * Window Load Function: Executes when complete page is fully loaded, + * Window Load Function: Executes when complete page is fully loaded, * including all frames, - **************************************************************************/ + **************************************************************************/ $(window).load(function () { - + /********************************************************************** * Delete a single comment. **********************************************************************/ @@ -47,8 +47,8 @@ } }); }); - - + + /********************************************************************** * Publish a single comment. **********************************************************************/ @@ -78,8 +78,8 @@ } }); }); - - + + /********************************************************************** * Bulk actions for comments (delete, publish) **********************************************************************/ @@ -116,8 +116,8 @@ selectField.find("option[value='-1']").attr('selected', 'selected'); } }); - - + + /********************************************************************** * Check or uncheck all checkboxes from the batch moderation page. **********************************************************************/ @@ -134,12 +134,12 @@ $(this).val("0"); } }); - - + + /********************************************************************** * Show full text of a comment in the batch moderation page. **********************************************************************/ - $(".show-full-comment-text").click(function (e) { + $(".show-full-comment-text").click(function (e) { e.preventDefault(); var target = $(this).attr("href"); var td = $(this).parent(); @@ -156,9 +156,9 @@ } }); }); - + }); - + //#JSCOVERAGE_ENDIF - + }(jQuery)); From 1c25c5c10adcbf2c004b398cf081d07ea80fa47e Mon Sep 17 00:00:00 2001 From: maartenkling Date: Tue, 13 Nov 2012 09:40:32 +0100 Subject: [PATCH 008/254] add permissions to type, fixes #11497 --- plone/app/discussion/comment.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plone/app/discussion/comment.py b/plone/app/discussion/comment.py index b16101e..a14eec8 100644 --- a/plone/app/discussion/comment.py +++ b/plone/app/discussion/comment.py @@ -41,6 +41,8 @@ from Products.CMFCore.CMFCatalogAware import CatalogAware from Products.CMFCore.CMFCatalogAware import WorkflowAware from OFS.role import RoleManager +from AccessControl import ClassSecurityInfo +from Products.CMFCore import permissions COMMENT_TITLE = _( @@ -186,6 +188,7 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable, """ return self.creator + security.declareProtected(permissions.View, 'Type') def Type(self): """The Discussion Item content type. """ From 33e7c1ef3937ec8459713a9655b8275fbbfca797 Mon Sep 17 00:00:00 2001 From: maartenkling Date: Tue, 13 Nov 2012 09:41:57 +0100 Subject: [PATCH 009/254] update changes --- CHANGES.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 69ffb3c..e77e101 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,13 @@ Changelog 2.2.1 (unreleased) ------------------ +- fix insufficient privileges when trying to view + the RSS feed of a comment collection + [maartenkling] + +- removed inline border=0 and move it to css + [maartenkling] + - For migrations of comments without a valid old_status, apply the 'published' state. [thet] From 3f82467828fc812e775c49af54f12d1f3374156e Mon Sep 17 00:00:00 2001 From: maartenkling Date: Tue, 13 Nov 2012 09:45:17 +0100 Subject: [PATCH 010/254] add missing declaration --- plone/app/discussion/comment.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plone/app/discussion/comment.py b/plone/app/discussion/comment.py index a14eec8..93bab67 100644 --- a/plone/app/discussion/comment.py +++ b/plone/app/discussion/comment.py @@ -80,6 +80,7 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable, """ implements(IComment) + security = ClassSecurityInfo() meta_type = portal_type = 'Discussion Item' # This needs to be kept in sync with types/Discussion_Item.xml title From 6bd31ad490a1be394770f4d655e5f34818bc1f55 Mon Sep 17 00:00:00 2001 From: Kees Hink Date: Wed, 14 Nov 2012 13:25:10 +0100 Subject: [PATCH 011/254] Make conversation view not break when comment-id cannot be converted to long, fixes #13327 --- CHANGES.txt | 4 ++ plone/app/discussion/conversation.py | 6 +- .../tests/functional_test_comment_url.txt | 70 +++++++++++++++++++ plone/app/discussion/tests/test_functional.py | 3 +- 4 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 plone/app/discussion/tests/functional_test_comment_url.txt diff --git a/CHANGES.txt b/CHANGES.txt index e77e101..c83a9d5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,10 @@ Changelog 2.2.1 (unreleased) ------------------ +- Make conversation view not break when comment-id cannot be converted to long. + Fixes #13327 + [khink] + - fix insufficient privileges when trying to view the RSS feed of a comment collection [maartenkling] diff --git a/plone/app/discussion/conversation.py b/plone/app/discussion/conversation.py index 2d870fe..ec2520c 100644 --- a/plone/app/discussion/conversation.py +++ b/plone/app/discussion/conversation.py @@ -210,7 +210,11 @@ class Conversation(Traversable, Persistent, Explicit): def __getitem__(self, key): """Get an item by its long key """ - return self._comments[long(key)].__of__(self) + try: + comment_id = long(key) + except ValueError: + return + return self._comments[comment_id].__of__(self) def __delitem__(self, key, suppress_container_modified=False): """Delete an item by its long key diff --git a/plone/app/discussion/tests/functional_test_comment_url.txt b/plone/app/discussion/tests/functional_test_comment_url.txt new file mode 100644 index 0000000..b2fde39 --- /dev/null +++ b/plone/app/discussion/tests/functional_test_comment_url.txt @@ -0,0 +1,70 @@ +=================================== + Dealing with faulty comment links +=================================== + +Make sure that calling specially crafted URLs doesn't break the conversation +view. + +See also https://dev.plone.org/ticket/13327 + + +Setting up and logging in +========================= + +First we have to set up some things and login. + + >>> app = layer['app'] + >>> from plone.testing.z2 import Browser + >>> browser = Browser(app) + >>> browser.addHeader('Authorization', 'Basic admin:secret') + >>> portal = layer['portal'] + >>> portal_url = 'http://nohost/plone' + +As we're expecting to see 404s, the test should not break on HTTP errors. + + >>> browser.raiseHttpErrors = False + +Enable commenting. + + >>> from zope.component import queryUtility + >>> from plone.registry.interfaces import IRegistry + >>> from plone.app.discussion.interfaces import IDiscussionSettings + >>> registry = queryUtility(IRegistry) + >>> settings = registry.forInterface(IDiscussionSettings) + >>> settings.globally_enabled = True + +Create a public page with comments allowed. + + >>> browser.open(portal_url) + >>> browser.getLink(id='document').click() + >>> browser.getControl(name='title').value = "Doc1" + >>> browser.getControl(name='allowDiscussion:boolean').value = True + >>> browser.getControl(name='form.button.save').click() + >>> urldoc1 = browser.url + +Check that the form has been properly submitted + + >>> browser.url + 'http://nohost/plone/doc1' + + +Checking invalid comment links +============================== + +URL has invalid comment id +-------------------------- + +Test a URL with a comment id that cannot be converted to long integer. + + >>> url_invalid_comment_id = "%s/++conversation++default/ThisCantBeRight" % urldoc1 + >>> browser.open(url_invalid_comment_id) + +We should not get an error, + + >>> "500 Internal Server Error" in str(browser.headers) + False + +but we should get a 404: + + >>> "404 Not Found" in str(browser.headers) + True diff --git a/plone/app/discussion/tests/test_functional.py b/plone/app/discussion/tests/test_functional.py index 25730b0..f269ec3 100644 --- a/plone/app/discussion/tests/test_functional.py +++ b/plone/app/discussion/tests/test_functional.py @@ -20,7 +20,8 @@ optionflags = ( doctest.REPORT_ONLY_FIRST_FAILURE) normal_testfiles = [ 'functional_test_comments.txt', - 'functional_test_comment_review_workflow.txt' + 'functional_test_comment_review_workflow.txt', + 'functional_test_comment_url.txt', ] From e57d3a2ad4a8fc66844da6d83cdedfdbc9022fe0 Mon Sep 17 00:00:00 2001 From: Kees Hink Date: Fri, 16 Nov 2012 10:28:00 +0100 Subject: [PATCH 012/254] Convert test for invalid comment id in url to integration test. --- .../tests/functional_test_comment_url.txt | 70 ------------------- .../app/discussion/tests/test_conversation.py | 8 +++ plone/app/discussion/tests/test_functional.py | 1 - 3 files changed, 8 insertions(+), 71 deletions(-) delete mode 100644 plone/app/discussion/tests/functional_test_comment_url.txt diff --git a/plone/app/discussion/tests/functional_test_comment_url.txt b/plone/app/discussion/tests/functional_test_comment_url.txt deleted file mode 100644 index b2fde39..0000000 --- a/plone/app/discussion/tests/functional_test_comment_url.txt +++ /dev/null @@ -1,70 +0,0 @@ -=================================== - Dealing with faulty comment links -=================================== - -Make sure that calling specially crafted URLs doesn't break the conversation -view. - -See also https://dev.plone.org/ticket/13327 - - -Setting up and logging in -========================= - -First we have to set up some things and login. - - >>> app = layer['app'] - >>> from plone.testing.z2 import Browser - >>> browser = Browser(app) - >>> browser.addHeader('Authorization', 'Basic admin:secret') - >>> portal = layer['portal'] - >>> portal_url = 'http://nohost/plone' - -As we're expecting to see 404s, the test should not break on HTTP errors. - - >>> browser.raiseHttpErrors = False - -Enable commenting. - - >>> from zope.component import queryUtility - >>> from plone.registry.interfaces import IRegistry - >>> from plone.app.discussion.interfaces import IDiscussionSettings - >>> registry = queryUtility(IRegistry) - >>> settings = registry.forInterface(IDiscussionSettings) - >>> settings.globally_enabled = True - -Create a public page with comments allowed. - - >>> browser.open(portal_url) - >>> browser.getLink(id='document').click() - >>> browser.getControl(name='title').value = "Doc1" - >>> browser.getControl(name='allowDiscussion:boolean').value = True - >>> browser.getControl(name='form.button.save').click() - >>> urldoc1 = browser.url - -Check that the form has been properly submitted - - >>> browser.url - 'http://nohost/plone/doc1' - - -Checking invalid comment links -============================== - -URL has invalid comment id --------------------------- - -Test a URL with a comment id that cannot be converted to long integer. - - >>> url_invalid_comment_id = "%s/++conversation++default/ThisCantBeRight" % urldoc1 - >>> browser.open(url_invalid_comment_id) - -We should not get an error, - - >>> "500 Internal Server Error" in str(browser.headers) - False - -but we should get a 404: - - >>> "404 Not Found" in str(browser.headers) - True diff --git a/plone/app/discussion/tests/test_conversation.py b/plone/app/discussion/tests/test_conversation.py index 76babf9..a424a28 100644 --- a/plone/app/discussion/tests/test_conversation.py +++ b/plone/app/discussion/tests/test_conversation.py @@ -699,6 +699,14 @@ class ConversationTest(unittest.TestCase): self.assertEqual('http://nohost/plone/doc1/++conversation++default', conversation.absolute_url()) + def test_unconvertible_id(self): + # make sure the conversation view doesn't break when given comment id + # can't be converted to long + + conversation = self.portal.doc1.restrictedTraverse( + '++conversation++default/ThisCantBeRight') + self.assertEqual(conversation, None) + def test_parent(self): # Check that conversation has a content object as parent diff --git a/plone/app/discussion/tests/test_functional.py b/plone/app/discussion/tests/test_functional.py index f269ec3..0c7f31e 100644 --- a/plone/app/discussion/tests/test_functional.py +++ b/plone/app/discussion/tests/test_functional.py @@ -21,7 +21,6 @@ optionflags = ( normal_testfiles = [ 'functional_test_comments.txt', 'functional_test_comment_review_workflow.txt', - 'functional_test_comment_url.txt', ] From face5bf5d6befbc3f197a973da6f466e313be216 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Fri, 16 Nov 2012 12:07:06 +0100 Subject: [PATCH 013/254] Prepare 2.2.1 release. --- CHANGES.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index c83a9d5..9e36c64 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,7 @@ Changelog ========= -2.2.1 (unreleased) +2.2.1 (2012-11-16) ------------------ - Make conversation view not break when comment-id cannot be converted to long. diff --git a/setup.py b/setup.py index 32b5b48..b2a22f9 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.1.dev0' +version = '2.2.1' install_requires = [ 'setuptools', From 6dffe930f9987b798ef4c46f54c90a43db49e2fd Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Fri, 16 Nov 2012 12:09:40 +0100 Subject: [PATCH 014/254] Pep8. --- setup.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/setup.py b/setup.py index b2a22f9..b4dcd5d 100644 --- a/setup.py +++ b/setup.py @@ -22,22 +22,22 @@ install_requires = [ 'zope.lifecycleevent', 'zope.site', 'z3c.form>=2.3.3', - ] +] setup(name='plone.app.discussion', version=version, description="Enhanced discussion support for Plone", long_description=open("README.rst").read() + "\n" + - open("CHANGES.txt").read(), + open("CHANGES.txt").read(), classifiers=[ - "Framework :: Plone", - "Framework :: Plone :: 3.3", - "Framework :: Plone :: 4.0", - "Framework :: Plone :: 4.1", - "Framework :: Plone :: 4.2", - "Framework :: Plone :: 4.3", - "Programming Language :: Python", - ], + "Framework :: Plone", + "Framework :: Plone :: 3.3", + "Framework :: Plone :: 4.0", + "Framework :: Plone :: 4.1", + "Framework :: Plone :: 4.2", + "Framework :: Plone :: 4.3", + "Programming Language :: Python", + ], keywords='plone discussion', author='Timo Stollenwerk - Plone Foundation', author_email='plone-developers@lists.sourceforge.net', From 412cfed5c5fde729436cf4a82ffa34c623210772 Mon Sep 17 00:00:00 2001 From: maartenkling Date: Mon, 26 Nov 2012 14:50:07 +0100 Subject: [PATCH 015/254] first check if captcha is installed before we open browsers zcml files that depend on these packages, fixes #12118 and #12774 --- plone/app/discussion/configure.zcml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/plone/app/discussion/configure.zcml b/plone/app/discussion/configure.zcml index 57c23d5..ed82463 100644 --- a/plone/app/discussion/configure.zcml +++ b/plone/app/discussion/configure.zcml @@ -18,6 +18,17 @@ + + + + + + + + + + + @@ -81,14 +92,6 @@ name="plone.app.discussion.vocabularies.TextTransformVocabulary" provides="zope.schema.interfaces.IVocabularyFactory" /> - - - - - - - - From 4b7ecf9e290b898891b3c480fb434f9aef8996fc Mon Sep 17 00:00:00 2001 From: maartenkling Date: Mon, 26 Nov 2012 14:51:29 +0100 Subject: [PATCH 016/254] update changes --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 9e36c64..97cc265 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,10 @@ Changelog 2.2.1 (2012-11-16) ------------------ +- first check if captcha is installed before we open browsers zcml + files that depend on these packages, fixes #12118 and #12774 + [maartenkling] + - Make conversation view not break when comment-id cannot be converted to long. Fixes #13327 [khink] From d9885020d5fec53b33f4a3cf2cdc2d555f4e5877 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Tue, 27 Nov 2012 08:01:05 +0100 Subject: [PATCH 017/254] Back to development. --- CHANGES.txt | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 9e36c64..c55cee7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,12 @@ Changelog ========= +2.2.2 (unreleased) +------------------ + +- + + 2.2.1 (2012-11-16) ------------------ diff --git a/setup.py b/setup.py index b4dcd5d..aea65b9 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.1' +version = '2.2.2dev' install_requires = [ 'setuptools', From 485571325f349d666c0c022d9c8226d8ee217d96 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Tue, 27 Nov 2012 21:32:07 -0800 Subject: [PATCH 018/254] fix migration of author_name and author_username --- plone/app/discussion/browser/migration.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plone/app/discussion/browser/migration.py b/plone/app/discussion/browser/migration.py index 7c55491..2762f2a 100644 --- a/plone/app/discussion/browser/migration.py +++ b/plone/app/discussion/browser/migration.py @@ -70,6 +70,8 @@ class View(BrowserView): workflow = context.portal_workflow oldchain = workflow.getChainForPortalType('Discussion Item') new_workflow = workflow.comment_review_workflow + mt = getToolByName(self.context, 'portal_membership') + if type(oldchain) == TupleType and len(oldchain) > 0: oldchain = oldchain[0] @@ -96,6 +98,9 @@ class View(BrowserView): comment.text = reply.cooked_text comment.mime_type = 'text/html' comment.creator = reply.Creator() + comment.author_username = reply.getProperty('author_username',reply.Creator()) + member = mt.getMemberById(comment.author_username) + comment.author_name = member.getProperty('fullname',None) email = reply.getProperty('email', None) if email: From 3445674d6437db486184d7295d8230eed4bb3930 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 28 Nov 2012 09:45:52 +0100 Subject: [PATCH 019/254] Fix changelog. the latest pull request has not been included in the 2.2.1 release. --- CHANGES.txt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index e780315..3247012 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,16 +4,14 @@ Changelog 2.2.2 (unreleased) ------------------ -- +- first check if captcha is installed before we open browsers zcml + files that depend on these packages, fixes #12118 and #12774 + [maartenkling] 2.2.1 (2012-11-16) ------------------ -- first check if captcha is installed before we open browsers zcml - files that depend on these packages, fixes #12118 and #12774 - [maartenkling] - - Make conversation view not break when comment-id cannot be converted to long. Fixes #13327 [khink] From 44eb1507cab6bba5c14e41f7119826067e496a69 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 28 Nov 2012 10:20:42 +0100 Subject: [PATCH 020/254] Prepare 2.2.2 release. --- CHANGES.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 3247012..0172622 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,7 @@ Changelog ========= -2.2.2 (unreleased) +2.2.2 (2012-11-16) ------------------ - first check if captcha is installed before we open browsers zcml diff --git a/setup.py b/setup.py index aea65b9..10e65fd 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.2dev' +version = '2.2.2' install_requires = [ 'setuptools', From 84ba3661e03017d1bafeb1b4b0a39a80aa89f93f Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 28 Nov 2012 11:41:02 +0100 Subject: [PATCH 021/254] Back to development. --- CHANGES.txt | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 0172622..6a50030 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,12 @@ Changelog ========= +2.2.3 (unreleased) +------------------ + +- + + 2.2.2 (2012-11-16) ------------------ diff --git a/setup.py b/setup.py index 10e65fd..37f4b89 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.2' +version = '2.2.3dev' install_requires = [ 'setuptools', From ff1f65a75ea72227a11884847fbb304d48c1dca2 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Thu, 13 Dec 2012 21:14:40 -0800 Subject: [PATCH 022/254] simplify some of the logic and get some tests in place to cover them. TDB: test against actual site to ensure the changes to the logic don't break a real environment, but still work with the tests.. --- plone/app/discussion/browser/migration.py | 21 ++++--- plone/app/discussion/tests/test_migration.py | 63 ++++++++++++++++++++ 2 files changed, 77 insertions(+), 7 deletions(-) diff --git a/plone/app/discussion/browser/migration.py b/plone/app/discussion/browser/migration.py index 2762f2a..30d285b 100644 --- a/plone/app/discussion/browser/migration.py +++ b/plone/app/discussion/browser/migration.py @@ -72,7 +72,6 @@ class View(BrowserView): new_workflow = workflow.comment_review_workflow mt = getToolByName(self.context, 'portal_membership') - if type(oldchain) == TupleType and len(oldchain) > 0: oldchain = oldchain[0] @@ -91,8 +90,7 @@ class View(BrowserView): new_in_reply_to = None if should_migrate: - - # create a reply object + # create a reply object comment = CommentFactory() comment.title = reply.Title() comment.text = reply.cooked_text @@ -100,11 +98,20 @@ class View(BrowserView): comment.creator = reply.Creator() comment.author_username = reply.getProperty('author_username',reply.Creator()) member = mt.getMemberById(comment.author_username) - comment.author_name = member.getProperty('fullname',None) + if member: +# comment.author_name = member.get('fullname') + comment.author_name = member.fullname +# import pdb; pdb.set_trace() - email = reply.getProperty('email', None) - if email: - comment.author_email = email +# .get is overloaded into zope somewhere.. so it'snot getting reply.email +## email = reply.get('email') +## if email: +## comment.author_email = email + + try: + comment.author_email = reply.email + except AttributeError: + comment.author_email = None comment.creation_date = DT2dt(reply.creation_date) comment.modification_date = DT2dt(reply.modification_date) diff --git a/plone/app/discussion/tests/test_migration.py b/plone/app/discussion/tests/test_migration.py index 3d86bb0..d4ac2fd 100644 --- a/plone/app/discussion/tests/test_migration.py +++ b/plone/app/discussion/tests/test_migration.py @@ -95,6 +95,69 @@ class MigrationTest(unittest.TestCase): ], list(conversation.getThreads())) self.assertFalse(self.doc.talkback) + + def test_migrate_comment_with_creator(self): + + # Create a user Jimmy Jones so comments creator migration can work? + acl_users = getToolByName(self.portal, 'acl_users') + acl_users.userFolderAddUser('Jim', 'secret', ['Member'], []) + mt = getToolByName(self.portal, 'portal_membership') + member = mt.getMemberById('Jim') + member.fullname = 'Jimmy Jones' + + + # Create a comment + talkback = self.discussion.getDiscussionFor(self.doc) + self.doc.talkback.createReply('My Title', 'My Text', Creator='Jim') + reply = talkback.getReplies()[0] + reply.setReplyTo(self.doc) + reply.creation_date = DateTime(2003, 3, 11, 9, 28, 6, 'GMT') + reply.modification_date = DateTime(2009, 7, 12, 19, 38, 7, 'GMT') + reply.author_username = 'Jim' + reply.email = 'jimmy@jones.xyz' + + self._publish(reply) + self.assertEqual(reply.Title(), 'My Title') + self.assertEqual(reply.EditableBody(), 'My Text') + self.assertTrue('Jim' in reply.listCreators()) + self.assertEqual(talkback.replyCount(self.doc), 1) + self.assertEqual(reply.inReplyTo(), self.doc) + self.assertEqual(reply.author_username,'Jim') + self.assertEqual(reply.email,'jimmy@jones.xyz') + + # Call migration script + self.view() + + # Make sure a conversation has been created + self.assertTrue('plone.app.discussion:conversation' in + IAnnotations(self.doc)) + conversation = IConversation(self.doc) + + # Check migration + self.assertEqual(conversation.total_comments, 1) + self.assertTrue(conversation.getComments().next()) + comment1 = conversation.values()[0] + self.assertTrue(IComment.providedBy(comment1)) + self.assertEqual(comment1.Title(), 'My Title') + self.assertEqual(comment1.text, '

My Text

\n') + self.assertEqual(comment1.mime_type, 'text/html') + self.assertEqual(comment1.Creator(), 'Jim') + self.assertEqual(comment1.creation_date, + datetime(2003, 3, 11, 9, 28, 6)) + self.assertEqual(comment1.modification_date, + datetime(2009, 7, 12, 19, 38, 7)) + self.assertEqual([ + {'comment': comment1, 'depth': 0, 'id': long(comment1.id)} + ], list(conversation.getThreads())) + self.assertFalse(self.doc.talkback) + + # Though this should be Jimmy, but looks like getProperty won't pick up 'author_username' + # (reply.author_username is not None), so it's propagating Creator()..? + self.assertEqual(comment1.author_username,'Jim') + + self.assertEqual(comment1.author_name,'Jimmy Jones') + self.assertEqual(comment1.author_email,'jimmy@jones.xyz') + def test_migrate_nested_comments(self): # Create some nested comments and migrate them # From 372b573cb12f6c2ee7036facf38cc074f266f6a2 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Sat, 15 Dec 2012 16:45:56 -0800 Subject: [PATCH 023/254] move creation of test user to test setup, rather than just in the new test_migrate_comment_with_creator() method --- plone/app/discussion/tests/test_migration.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/plone/app/discussion/tests/test_migration.py b/plone/app/discussion/tests/test_migration.py index d4ac2fd..98a12d5 100644 --- a/plone/app/discussion/tests/test_migration.py +++ b/plone/app/discussion/tests/test_migration.py @@ -50,6 +50,13 @@ class MigrationTest(unittest.TestCase): self.workflowTool.setChainForPortalTypes(('Discussion Item',), 'comment_review_workflow') + # Create a user Jimmy Jones so comments creator migration can work? + acl_users = getToolByName(self.portal, 'acl_users') + acl_users.userFolderAddUser('Jim', 'secret', ['Member'], []) + mt = getToolByName(self.portal, 'portal_membership') + member = mt.getMemberById('Jim') + member.fullname = 'Jimmy Jones' + self.doc = self.portal.doc def test_migrate_comment(self): @@ -98,12 +105,6 @@ class MigrationTest(unittest.TestCase): def test_migrate_comment_with_creator(self): - # Create a user Jimmy Jones so comments creator migration can work? - acl_users = getToolByName(self.portal, 'acl_users') - acl_users.userFolderAddUser('Jim', 'secret', ['Member'], []) - mt = getToolByName(self.portal, 'portal_membership') - member = mt.getMemberById('Jim') - member.fullname = 'Jimmy Jones' # Create a comment From 68d195375ef37c6c275cb9e99f9a9f231bf7c4e1 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Sat, 15 Dec 2012 16:47:01 -0800 Subject: [PATCH 024/254] use member.getProperty('fullname') if member.fullname is an empty string. Not sure in what case this would happen, but it did happen in my site migration --- plone/app/discussion/browser/migration.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/plone/app/discussion/browser/migration.py b/plone/app/discussion/browser/migration.py index 30d285b..fa806d0 100644 --- a/plone/app/discussion/browser/migration.py +++ b/plone/app/discussion/browser/migration.py @@ -96,18 +96,20 @@ class View(BrowserView): comment.text = reply.cooked_text comment.mime_type = 'text/html' comment.creator = reply.Creator() - comment.author_username = reply.getProperty('author_username',reply.Creator()) + + try: + comment.author_username = reply.author_username + except AttributeError: + comment.author_username = reply.Creator() + member = mt.getMemberById(comment.author_username) if member: -# comment.author_name = member.get('fullname') comment.author_name = member.fullname -# import pdb; pdb.set_trace() - -# .get is overloaded into zope somewhere.. so it'snot getting reply.email -## email = reply.get('email') -## if email: -## comment.author_email = email + if not comment.author_name: + # In migrated site member.fullname ='' while member.getProperty('fullname') has the correct value + comment.author_name = member.getProperty('fullname') + try: comment.author_email = reply.email except AttributeError: From a16958c1c7dbcc24808e51518b0d2ac53043801c Mon Sep 17 00:00:00 2001 From: JeanMichel FRANCOIS Date: Fri, 4 Jan 2013 19:00:24 +0100 Subject: [PATCH 025/254] add anonymous_email_enabled settings to really let integrator activate it. add the migration script which add the option to the registry and do not change the behavior: the email will not be displayed by default --- plone/app/discussion/browser/comments.py | 9 ++++----- plone/app/discussion/interfaces.py | 9 +++++++++ plone/app/discussion/profiles/default/metadata.xml | 2 +- plone/app/discussion/upgrades.py | 7 +++++++ plone/app/discussion/upgrades.zcml | 8 ++++++++ 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/plone/app/discussion/browser/comments.py b/plone/app/discussion/browser/comments.py index ffd2e32..7bbd391 100644 --- a/plone/app/discussion/browser/comments.py +++ b/plone/app/discussion/browser/comments.py @@ -105,13 +105,12 @@ class CommentForm(extensible.ExtensibleForm, form.Form): self.widgets['author_name'].mode = interfaces.HIDDEN_MODE self.widgets['author_email'].mode = interfaces.HIDDEN_MODE - # Todo: Since we are not using the author_email field in the - # current state, we hide it by default. But we keep the field for - # integrators or later use. - self.widgets['author_email'].mode = interfaces.HIDDEN_MODE - registry = queryUtility(IRegistry) settings = registry.forInterface(IDiscussionSettings, check=False) + + if mtool.isAnonymousUser() and not settings.anonymous_email_enabled: + self.widgets['author_email'].mode = interfaces.HIDDEN_MODE + member = mtool.getAuthenticatedMember() member_email = member.getProperty('email') diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index 2965289..d305bcb 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -322,6 +322,15 @@ class IDiscussionSettings(Interface): required=False, default=False) + anonymous_email_enabled = schema.Bool( + title=_(u"label_anonymous_email_enabled", + default=u"Enable anonymous email field"), + description=_(u"help_anonymous_email_enabled", + default=u"If selected, anonymous user will have to " + "give their email."), + required=False, + default=False) + class IDiscussionLayer(Interface): """Request marker installed via browserlayer.xml. diff --git a/plone/app/discussion/profiles/default/metadata.xml b/plone/app/discussion/profiles/default/metadata.xml index ffedb11..82d4326 100644 --- a/plone/app/discussion/profiles/default/metadata.xml +++ b/plone/app/discussion/profiles/default/metadata.xml @@ -1,5 +1,5 @@ - 100 + 110 profile-plone.app.registry:default diff --git a/plone/app/discussion/upgrades.py b/plone/app/discussion/upgrades.py index bf9df71..618fd4e 100644 --- a/plone/app/discussion/upgrades.py +++ b/plone/app/discussion/upgrades.py @@ -6,3 +6,10 @@ from plone.app.discussion.interfaces import IDiscussionSettings def update_registry(context): registry = getUtility(IRegistry) registry.registerInterface(IDiscussionSettings) + + +def add_anonymous_email_enabled_settings(context): + registry = getUtility(IRegistry) + key = 'plone.app.discussion.interfaces.IDiscussionSettings.' + key += 'anonymous_email_enabled' + registry[key] = False diff --git a/plone/app/discussion/upgrades.zcml b/plone/app/discussion/upgrades.zcml index b1854d0..92495c5 100644 --- a/plone/app/discussion/upgrades.zcml +++ b/plone/app/discussion/upgrades.zcml @@ -11,4 +11,12 @@ handler=".upgrades.update_registry" /> + From 0e72ce12a6237cef1cae7fb0ac2cf99dfd86e584 Mon Sep 17 00:00:00 2001 From: JeanMichel FRANCOIS Date: Tue, 8 Jan 2013 10:31:16 +0100 Subject: [PATCH 026/254] remove upgrade step from here. all upgrade step of plone goes to plone.app.upgrades --- plone/app/discussion/profiles/default/metadata.xml | 2 +- plone/app/discussion/upgrades.py | 6 ------ plone/app/discussion/upgrades.zcml | 8 -------- 3 files changed, 1 insertion(+), 15 deletions(-) diff --git a/plone/app/discussion/profiles/default/metadata.xml b/plone/app/discussion/profiles/default/metadata.xml index 82d4326..ffedb11 100644 --- a/plone/app/discussion/profiles/default/metadata.xml +++ b/plone/app/discussion/profiles/default/metadata.xml @@ -1,5 +1,5 @@ - 110 + 100 profile-plone.app.registry:default diff --git a/plone/app/discussion/upgrades.py b/plone/app/discussion/upgrades.py index 618fd4e..9b255e3 100644 --- a/plone/app/discussion/upgrades.py +++ b/plone/app/discussion/upgrades.py @@ -7,9 +7,3 @@ def update_registry(context): registry = getUtility(IRegistry) registry.registerInterface(IDiscussionSettings) - -def add_anonymous_email_enabled_settings(context): - registry = getUtility(IRegistry) - key = 'plone.app.discussion.interfaces.IDiscussionSettings.' - key += 'anonymous_email_enabled' - registry[key] = False diff --git a/plone/app/discussion/upgrades.zcml b/plone/app/discussion/upgrades.zcml index 92495c5..b1854d0 100644 --- a/plone/app/discussion/upgrades.zcml +++ b/plone/app/discussion/upgrades.zcml @@ -11,12 +11,4 @@ handler=".upgrades.update_registry" /> - From 1b9dff806bbff5c808e8cbf278fe7c46c05917da Mon Sep 17 00:00:00 2001 From: JeanMichel FRANCOIS Date: Tue, 8 Jan 2013 10:43:47 +0100 Subject: [PATCH 027/254] update changelog --- CHANGES.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 6a50030..adaaffa 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,8 +4,9 @@ Changelog 2.2.3 (unreleased) ------------------ -- - +- add anonymous_email_enabled settings to really let integrator activate + the email field on comment add form when anonymous. + [toutpt] 2.2.2 (2012-11-16) ------------------ From 69b628c38685890dccc78b91a0fa12b15d83eeb7 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 10 Jan 2013 18:33:46 +0100 Subject: [PATCH 028/254] Pep8. --- plone/app/discussion/tests/test_comment.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/plone/app/discussion/tests/test_comment.py b/plone/app/discussion/tests/test_comment.py index 5a4deb1..0745e69 100644 --- a/plone/app/discussion/tests/test_comment.py +++ b/plone/app/discussion/tests/test_comment.py @@ -34,9 +34,11 @@ class CommentTest(unittest.TestCase): self.request = self.layer['request'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory(id='doc1', - title='Document 1', - type_name='Document') + self.portal.invokeFactory( + id='doc1', + title='Document 1', + type_name='Document' + ) self.catalog = getToolByName(self.portal, 'portal_catalog') self.document_brain = self.catalog.searchResults( portal_type='Document')[0] @@ -74,7 +76,8 @@ class CommentTest(unittest.TestCase): comment1 = createObject('plone.Comment') conversation.addComment(comment1) comment_brain = self.catalog.searchResults( - portal_type='Discussion Item')[0] + portal_type='Discussion Item' + )[0] self.assertTrue(comment_brain.UID) def test_uid_is_unique(self): @@ -84,7 +87,8 @@ class CommentTest(unittest.TestCase): comment2 = createObject('plone.Comment') conversation.addComment(comment2) brains = self.catalog.searchResults( - portal_type='Discussion Item') + portal_type='Discussion Item' + ) self.assertNotEqual(brains[0].UID, brains[1].UID) def test_comment_uid_differs_from_content_uid(self): @@ -92,7 +96,8 @@ class CommentTest(unittest.TestCase): comment1 = createObject('plone.Comment') conversation.addComment(comment1) comment_brain = self.catalog.searchResults( - portal_type='Discussion Item')[0] + portal_type='Discussion Item' + )[0] self.assertNotEqual(self.document_brain.UID, comment_brain.UID) def test_title(self): From a6afdf265cfecfbec5dfc71d141175e4b285887e Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 10 Jan 2013 18:40:04 +0100 Subject: [PATCH 029/254] Pep8 --- plone/app/discussion/tests/test_comment.py | 164 ++++++++++++++------- 1 file changed, 111 insertions(+), 53 deletions(-) diff --git a/plone/app/discussion/tests/test_comment.py b/plone/app/discussion/tests/test_comment.py index 0745e69..1f39098 100644 --- a/plone/app/discussion/tests/test_comment.py +++ b/plone/app/discussion/tests/test_comment.py @@ -114,9 +114,11 @@ class CommentTest(unittest.TestCase): self.assertEqual("Anonymous on Document 1", comment1.Title()) def test_title_special_characters(self): - self.portal.invokeFactory(id='doc_sp_chars', - title=u'Document äüö', - type_name='Document') + self.portal.invokeFactory( + id='doc_sp_chars', + title=u'Document äüö', + type_name='Document' + ) conversation = IConversation(self.portal.doc_sp_chars) comment1 = createObject('plone.Comment') comment1.author_name = u"Tarek Ziadé" @@ -141,41 +143,53 @@ class CommentTest(unittest.TestCase): comment1.text = """First paragraph Second paragraph""" - self.assertEqual(comment1.getText(), - "

First paragraph

Second paragraph

") + self.assertEqual( + comment1.getText(), + "

First paragraph

Second paragraph

" + ) def test_getText_escapes_HTML(self): comment1 = createObject('plone.Comment') comment1.text = """Got HTML?""" - self.assertEqual(comment1.getText(), - "

<b>Got HTML?</b>

") + self.assertEqual( + comment1.getText(), + "

<b>Got HTML?</b>

" + ) def test_getText_with_non_ascii_characters(self): comment1 = createObject('plone.Comment') comment1.text = u"""Umlaute sind ä, ö und ü.""" - self.assertEqual(comment1.getText(), - '

Umlaute sind \xc3\xa4, \xc3\xb6 und \xc3\xbc.

') + self.assertEqual( + comment1.getText(), + '

Umlaute sind \xc3\xa4, \xc3\xb6 und \xc3\xbc.

' + ) def test_getText_doesnt_link(self): comment1 = createObject('plone.Comment') comment1.text = "Go to http://www.plone.org" - self.assertEqual(comment1.getText(), - "

Go to http://www.plone.org

") + self.assertEqual( + comment1.getText(), + "

Go to http://www.plone.org

" + ) def test_getText_uses_comment_mime_type(self): comment1 = createObject('plone.Comment') comment1.text = "Go to http://www.plone.org" comment1.mime_type = 'text/x-web-intelligent' - self.assertEqual(comment1.getText(), + self.assertEqual( + comment1.getText(), 'Go to http://www.plone.org') + 'rel="nofollow">http://www.plone.org' + ) def test_getText_uses_comment_mime_type_html(self): comment1 = createObject('plone.Comment') comment1.text = 'Go to plone.org' comment1.mime_type = 'text/html' - self.assertEqual(comment1.getText(), - 'Go to plone.org') + self.assertEqual( + comment1.getText(), + 'Go to plone.org' + ) def test_getText_w_custom_targetMimetype(self): comment1 = createObject('plone.Comment') @@ -207,19 +221,28 @@ class CommentTest(unittest.TestCase): '++conversation++default/%s' % new_comment1_id) self.assertTrue(IComment.providedBy(comment)) - self.assertEqual(('', 'plone', 'doc1', '++conversation++default', - str(new_comment1_id)), comment.getPhysicalPath()) - self.assertEqual('http://nohost/plone/doc1/++conversation++default/' + - str(new_comment1_id), comment.absolute_url()) + self.assertEqual( + ( + '', 'plone', 'doc1', '++conversation++default', + str(new_comment1_id) + ), + comment.getPhysicalPath() + ) + self.assertEqual( + 'http://nohost/plone/doc1/++conversation++default/' + + str(new_comment1_id), comment.absolute_url() + ) def test_view_blob_types(self): """ Make sure that traversal to images/files redirects to the version of the url with a /view in it. """ - self.portal.invokeFactory(id='image1', - title='Image', - type_name='Image') + self.portal.invokeFactory( + id='image1', + title='Image', + type_name='Image' + ) conversation = IConversation(self.portal.image1) comment1 = createObject('plone.Comment') @@ -251,18 +274,26 @@ class CommentTest(unittest.TestCase): self.assertEqual(('comment_review_workflow',), chain) # Ensure the initial state was entered and recorded - self.assertEqual(1, - len(comment.workflow_history['comment_review_workflow'])) - self.assertEqual(None, - comment.workflow_history['comment_review_workflow'][0]['action']) - self.assertEqual('pending', - self.portal.portal_workflow.getInfoFor(comment, 'review_state')) + self.assertEqual( + 1, + len(comment.workflow_history['comment_review_workflow']) + ) + self.assertEqual( + None, + comment.workflow_history['comment_review_workflow'][0]['action'] + ) + self.assertEqual( + 'pending', + self.portal.portal_workflow.getInfoFor(comment, 'review_state') + ) def test_fti(self): # test that we can look up an FTI for Discussion Item - self.assertTrue("Discussion Item" in - self.portal.portal_types.objectIds()) + self.assertTrue( + "Discussion Item" in + self.portal.portal_types.objectIds() + ) comment1 = createObject('plone.Comment') @@ -307,9 +338,11 @@ class RepliesTest(unittest.TestCase): def setUp(self): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory(id='doc1', - title='Document 1', - type_name='Document') + self.portal.invokeFactory( + id='doc1', + title='Document 1', + type_name='Document' + ) def test_add_comment(self): # Add comments to a CommentReplies adapter @@ -404,7 +437,8 @@ class RepliesTest(unittest.TestCase): replies = IReplies(comment) new_re_id = replies.addComment(re_comment) re_comment = self.portal.doc1.restrictedTraverse( - '++conversation++default/%s' % new_re_id) + '++conversation++default/%s' % new_re_id + ) # Add a reply to the reply re_re_comment = createObject('plone.Comment') @@ -412,7 +446,8 @@ class RepliesTest(unittest.TestCase): replies = IReplies(re_comment) new_re_re_id = replies.addComment(re_re_comment) re_re_comment = self.portal.doc1.restrictedTraverse( - '++conversation++default/%s' % new_re_re_id) + '++conversation++default/%s' % new_re_re_id + ) # Add a reply to the replies reply re_re_re_comment = createObject('plone.Comment') @@ -422,24 +457,47 @@ class RepliesTest(unittest.TestCase): re_re_re_comment = self.portal.doc1.restrictedTraverse( '++conversation++default/%s' % new_re_re_re_id) - self.assertEqual(('', 'plone', 'doc1', '++conversation++default', - str(new_id)), comment.getPhysicalPath()) - self.assertEqual('http://nohost/plone/doc1/++conversation++default/' + - str(new_id), comment.absolute_url()) - self.assertEqual(('', 'plone', 'doc1', '++conversation++default', - str(new_re_id)), re_comment.getPhysicalPath()) - self.assertEqual('http://nohost/plone/doc1/++conversation++default/' + - str(new_re_id), re_comment.absolute_url()) - self.assertEqual(('', 'plone', 'doc1', '++conversation++default', - str(new_re_re_id)), re_re_comment.getPhysicalPath()) - self.assertEqual('http://nohost/plone/doc1/++conversation++default/' + - str(new_re_re_id), re_re_comment.absolute_url()) - self.assertEqual(('', 'plone', 'doc1', '++conversation++default', - str(new_re_re_re_id)), - re_re_re_comment.getPhysicalPath()) - self.assertEqual('http://nohost/plone/doc1/++conversation++default/' + - str(new_re_re_re_id), - re_re_re_comment.absolute_url()) + self.assertEqual( + ('', 'plone', 'doc1', '++conversation++default', str(new_id)), + comment.getPhysicalPath() + ) + self.assertEqual( + 'http://nohost/plone/doc1/++conversation++default/' + + str(new_id), comment.absolute_url() + ) + self.assertEqual( + ('', 'plone', 'doc1', '++conversation++default', str(new_re_id)), + re_comment.getPhysicalPath() + ) + self.assertEqual( + 'http://nohost/plone/doc1/++conversation++default/' + + str(new_re_id), + re_comment.absolute_url() + ) + self.assertEqual( + ( + '', 'plone', 'doc1', '++conversation++default', + str(new_re_re_id) + ), + re_re_comment.getPhysicalPath() + ) + self.assertEqual( + 'http://nohost/plone/doc1/++conversation++default/' + + str(new_re_re_id), + re_re_comment.absolute_url() + ) + self.assertEqual( + ( + '', 'plone', 'doc1', '++conversation++default', + str(new_re_re_re_id) + ), + re_re_re_comment.getPhysicalPath() + ) + self.assertEqual( + 'http://nohost/plone/doc1/++conversation++default/' + + str(new_re_re_re_id), + re_re_re_comment.absolute_url() + ) def test_suite(): From 42048f518af7a55a096a98d5c3ae2ea1cc38431c Mon Sep 17 00:00:00 2001 From: Eric Steele Date: Sun, 13 Jan 2013 22:15:35 -0500 Subject: [PATCH 030/254] Preparing release 2.2.3 --- CHANGES.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index adaaffa..97dc5f5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,7 @@ Changelog ========= -2.2.3 (unreleased) +2.2.3 (2013-01-13) ------------------ - add anonymous_email_enabled settings to really let integrator activate diff --git a/setup.py b/setup.py index 37f4b89..42d7a01 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.3dev' +version = '2.2.3' install_requires = [ 'setuptools', From a113019fdc3a9e7eb66159ced910609ea1a8e510 Mon Sep 17 00:00:00 2001 From: Eric Steele Date: Sun, 13 Jan 2013 22:17:14 -0500 Subject: [PATCH 031/254] Back to development: 2.2.4 --- CHANGES.txt | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 97dc5f5..64925fb 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,12 @@ Changelog ========= +2.2.4 (unreleased) +------------------ + +- Nothing changed yet. + + 2.2.3 (2013-01-13) ------------------ diff --git a/setup.py b/setup.py index 42d7a01..01e80ca 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.3' +version = '2.2.4.dev0' install_requires = [ 'setuptools', From 321f725bdae074b488c7abe49dee7cdfb0c68ad8 Mon Sep 17 00:00:00 2001 From: ichim-david Date: Sun, 3 Feb 2013 18:11:00 +0200 Subject: [PATCH 032/254] Added Romanian translation --- CHANGES.txt | 3 +- .../ro/LC_MESSAGES/plone.app.discussion.po | 380 ++++++++++++++++++ 2 files changed, 382 insertions(+), 1 deletion(-) create mode 100644 plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po diff --git a/CHANGES.txt b/CHANGES.txt index 64925fb..06ee3ec 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,7 +4,8 @@ Changelog 2.2.4 (unreleased) ------------------ -- Nothing changed yet. +- Added Romanian translation + [ichimdav] 2.2.3 (2013-01-13) diff --git a/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po new file mode 100644 index 0000000..62a55c8 --- /dev/null +++ b/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po @@ -0,0 +1,380 @@ +# David Ichim , 2013. +msgid "" +msgstr "" +"Project-Id-Version: plone.app.discussion\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" +"PO-Revision-Date: 2013-02-03 15:33-0600\n" +"Last-Translator: David Ichim \n" +"Language-Team: ro \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" +"Language-Code: ro\n" +"Language-Name: Romanian\n" +"Preferred-Encodings: utf-8 latin1\n" +"Domain: plone.app.discussion\n" + +#: ../comment.py:264 +msgid "A comment has been posted." +msgstr "Un comentariu a fost postat." + +#: ../interfaces.py:257 +msgid "A comment id unique to this conversation" +msgstr "Un id de comentariu unic pentru aceasta conversatie" + +#: ../browser/comments.py:67 +msgid "Add a comment" +msgstr "Adauga comentariu" + +#: ../browser/controlpanel.py:62 +msgid "Anonymous Comments" +msgstr "Comentarii de la anonimi" + +#: ../interfaces.py:282 +msgid "Author name (for display)" +msgstr "Nume autor (pentru afisare)" + +#: ../browser/comments.py:248 +#: ../browser/controlpanel.py:80 +msgid "Cancel" +msgstr "Anuleaza" + +#: ../browser/controlpanel.py:76 +msgid "Changes saved" +msgstr "Schimbari salvate" + +#: ../browser/moderation.py:133 +msgid "Comment approved." +msgstr "Comentariul a fost aprobat." + +#: ../browser/moderation.py:94 +msgid "Comment deleted." +msgstr "Comentariul a fost sters." + +#: ../browser/controlpanel.py:63 +msgid "Commenter Image" +msgstr "Imaginea comentatorului" + +msgid "Commenting infrastructure for Plone" +msgstr "Infrastructura de comentarii pentru Plone" + +#: ../interfaces.py:252 +msgid "Conversation" +msgstr "Conversatie" + +#: ../interfaces.py:283 +msgid "Creation date" +msgstr "Data creerii" + +#: ../interfaces.py:162 +msgid "Date of the most recent comment" +msgstr "Data celui mai recent comentariu" + +#: ../vocabularies.py:44 +msgid "Disabled" +msgstr "Dezactivat" + +#: ../browser/controlpanel.py:32 +msgid "Discussion settings" +msgstr "Setarile Discutiilor" + +#: ../browser/controlpanel.py:82 +msgid "Edit cancelled" +msgstr "Editare anulata" + +#: ../interfaces.py:269 +msgid "Email" +msgstr "Email" + +#: ../browser/controlpanel.py:61 +msgid "Enable Comments" +msgstr "Permite Comentarii" + +#: ../interfaces.py:260 +msgid "Id of comment this comment is in reply to" +msgstr "Id-ul comentariului pentru care acest comentariu raspunde" + +#: ../interfaces.py:274 +msgid "MIME type" +msgstr "Tip MIME" + +#: ../browser/controlpanel.py:65 +msgid "Moderator Email Notification" +msgstr "Notificare Moderatorului prin Email" + +#: ../interfaces.py:284 +msgid "Modification date" +msgstr "Data modificarii" + +#: ../interfaces.py:254 +msgid "Name" +msgstr "Nume" + +#: ../interfaces.py:278 +msgid "Notify me of new comments via email." +msgstr "Anuntama de noi comentarii prin email." + +#: ./plone.app.discussion/plone/app/discussion/configure.zcml +msgid "Plone Discussions" +msgstr "Discutii Plone" + +#: ../interfaces.py:247 +msgid "Portal type" +msgstr "Tip obiect" + +#: ../browser/controlpanel.py:69 +msgid "Save" +msgstr "Salveaza" + +#: ../interfaces.py:167 +msgid "The set of unique commentators (usernames)" +msgstr "Setul comentatorilor unici (nume de utilizator)" + +#: ../interfaces.py:156 +msgid "Total number of comments on this item" +msgstr "Numarul total de comentarii al acestui obiect" + +#: ../browser/controlpanel.py:67 +msgid "User Email Notification" +msgstr "Notificarea utilizatorului prin email" + +#: ../browser/comments.py:241 +msgid "Your comment awaits moderator approval." +msgstr "Comentariul tau asteapta sa fie moderat." + +#. Default: "Comment" +#: ../browser/comments.py:123 +msgid "add_comment_button" +msgstr "Comentariu" + +#. Default: "Delete" +#: ../browser/moderation.pt:68 +msgid "bulkactions_delete" +msgstr "Sterge" + +#. Default: "Approve" +#: ../browser/moderation.pt:65 +msgid "bulkactions_publish" +msgstr "Aproba" + +#. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." +#: ../browser/comments.py:52 +msgid "comment_description_intelligent_text" +msgstr "Poti adauga un comentariu completand formularul de mai jos. Formatare de text simpla doar. Adresele de email si web sunt transformate in link-uri." + +#. Default: "Comments are moderated." +#: ../browser/comments.py:58 +msgid "comment_description_moderation_enabled" +msgstr "Comentariile sunt moderate." + +#. Default: "You can add a comment by filling out the form below. Plain text formatting." +#: ../browser/comments.py:47 +msgid "comment_description_plain_text" +msgstr "Poti adauga un comentariu prin completarea formularului de mai jos. Format de text simplu doar." + +#. Default: "${creator} on ${content}" +#: ../comment.py:46 +msgid "comment_title" +msgstr "${creator} al ${content}" + +#. Default: "Action" +#: ../browser/moderation.pt:85 +msgid "heading_action" +msgstr "Actiune" + +#. Default: "Comment" +#: ../browser/moderation.pt:84 +msgid "heading_comment" +msgstr "Comentariu" + +#. Default: "Commenter" +#: ../browser/moderation.pt:81 +msgid "heading_commenter" +msgstr "Autor" + +#. Default: "Date" +#: ../browser/moderation.pt:82 +msgid "heading_date" +msgstr "Data" + +#. Default: "In Response To" +#: ../browser/moderation.pt:83 +msgid "heading_in_reponse_to" +msgstr "In raspuns lui" + +#. Default: "Moderate comments" +#: ../browser/moderation.pt:24 +msgid "heading_moderate_comments" +msgstr "Modereaza comentarii" + +#. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." +#: ../interfaces.py:38 +msgid "help_anonymous_comments" +msgstr "Daca selectat, utilizatorii anonimi vor putea posta comentarii fara a fi autentificati. Este recomandat a se folosi o solutie captcha pentru a preveni spam-ul daca aceasta setare este activata." + +#. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." +#: ../interfaces.py:82 +msgid "help_captcha" +msgstr "Foloseste aceasta setare pentru a activa sau dezactiva validarea Captcha a comentariilor. Instaleaza plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet sau collective.z3cform.norobots daca nu este nici o optiune disponibila." + +#. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." +#: ../browser/controlpanel.py:33 +msgid "help_discussion_settings_editform" +msgstr "Unele setari legate de discutii nu sunt localizate in Panoul de Discutii.\nPentru a activa comentarii pentru un tip specific de obiect, dute la Panoul de Control al Tipurilor pentru acest obiect si selecteaza \"Permite comentarii\".\nPentru a alege workflow-ul de moderare pentru comentarii, dute la Panoul de Control pentru Tipuri de obiect, alege \"Comentariu\" si seteaza workflow-ul la \"Workflow de moderare al Comentariilor\"." + +#. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." +#: ../interfaces.py:26 +msgid "help_globally_enabled" +msgstr "Daca selectat, utilizatorii pot posta comentarii in acest site. Totusi, trebuie sa activezi comentariile pentru tipurile de obiecte in mod specific, fie directoare sau alte tipurile de obiect inainte ca utilizatorii sa poata posta comentarii." + +#. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." +#: ../interfaces.py:50 +msgid "help_moderation_enabled" +msgstr "Daca selectat, comentariile vor intra intr-o stare de 'Asteptare' in care ele sunt invizibile publicului. Un utilizator cu permisia 'Modereaza Comentarii' ('Moderator' sau 'Manager') poate aprova comentariile pentru a le face vizibile publicului. Daca doresti sa activezi un workflow de comentariu specific, trebuie sa mergi la panoul de control al obiectelor" + +#. Default: "Address to which moderator notifications will be sent." +#: ../interfaces.py:118 +msgid "help_moderator_email" +msgstr "Adresa de email la care notificarile de moderare vor fi trimise." + +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" +#: ../interfaces.py:107 +msgid "help_moderator_notification_enabled" +msgstr "Daca selectat, moderatorul este notificat daca un comentariu are nevoie de atentie. Adresa de email al moderatorului poate fi gasita in panoul de control numit 'Setari mail' (Adresa 'De la' pentru Site)" + +#. Default: "If selected, an image of the user is shown next to the comment." +#: ../interfaces.py:97 +msgid "help_show_commenter_image" +msgstr "Daca selectat, o imagine al utilizatorului este afisata langa comentariul sau." + +#. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." +#: ../interfaces.py:66 +msgid "help_text_transform" +msgstr "Foloseste aceasta setare pentru a alege daca textul comentariului ar trebui sa fie transformat intr-un fel. Poti alege intre 'Text simplu' si 'Text inteligent'. 'Text inteligent' transforma textul simplu in HTML unde indentarea si liniile sunt pastrate si adresele de email si web sunt transformate in link-uri." + +#. Default: "If selected, users can choose to be notified of new comments by email." +#: ../interfaces.py:127 +msgid "help_user_notification_enabled" +msgstr "Daca selectat, utilizatorii pot alege sa fie notificati de noi comentarii prin email." + +#. Default: "Anonymous" +#: ../comment.py:156 +msgid "label_anonymous" +msgstr "Anonimi" + +#. Default: "Enable anonymous comments" +#: ../interfaces.py:36 +msgid "label_anonymous_comments" +msgstr "Permite comentariile anonime" + +#. Default: "Apply" +#: ../browser/moderation.pt:71 +msgid "label_apply" +msgstr "Aplica" + +#. Default: "Captcha" +#: ../interfaces.py:80 +msgid "label_captcha" +msgstr "Captcha" + +#. Default: "Comment" +#: ../interfaces.py:275 +msgid "label_comment" +msgstr "Comentariu" + +#. Default: "Commenting has been disabled." +#: ../browser/comments.pt:130 +msgid "label_commenting_disabled" +msgstr "Comentariile au fost dezactivate." + +#. Default: "Delete" +#: ../browser/moderation.pt:130 +msgid "label_delete" +msgstr "Sterge" + +#. Default: "Globally enable comments" +#: ../interfaces.py:24 +msgid "label_globally_enabled" +msgstr "Activeaza comentariile in mod global" + +#. Default: "Enable comment moderation" +#: ../interfaces.py:48 +msgid "label_moderation_enabled" +msgstr "Activeaza moderarea comentariilor" + +#. Default: "Moderator Email Address" +#: ../interfaces.py:117 +msgid "label_moderator_email" +msgstr "Adresa de email al moderatorului de comentarii" + +#. Default: "Enable moderator email notification" +#: ../interfaces.py:105 +msgid "label_moderator_notification_enabled" +msgstr "Activeaza notificarea moderatorului de comentarii prin email" + +#. Default: "Approve" +#: ../browser/moderation.pt:121 +msgid "label_publish" +msgstr "Aproba" + +#. Default: "says:" +#: ../browser/comments.pt:74 +msgid "label_says" +msgstr "zice:" + +#. Default: "Show commenter image" +#: ../interfaces.py:95 +msgid "label_show_commenter_image" +msgstr "Arata imaginea comentatorului" + +#. Default: "show full comment text" +#: ../browser/moderation.pt:114 +msgid "label_show_full_comment_text" +msgstr "Arata textul intreg al comentariului" + +#. Default: "Subject" +#: ../interfaces.py:271 +msgid "label_subject" +msgstr "Subiect" + +#. Default: "Comment text transform" +#: ../interfaces.py:64 +msgid "label_text_transform" +msgstr "Transformarea textului comentariului" + +#. Default: "Enable user email notification" +#: ../interfaces.py:125 +msgid "label_user_notification_enabled" +msgstr "Activeaza notificarea utilizatorului prin email" + +#. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" +#: ../comment.py:50 +msgid "mail_notification_message" +msgstr "Un comentariu pe '${title}' a fost postat aici: ${link}\n\n---\n${text}\n---\n" + +#. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" +#: ../comment.py:58 +msgid "mail_notification_message_moderator" +msgstr "Un comentariu pe '${title}' a fost postat aici: ${link}\n\n---\n${text}\n---\nAproba comentariul:\n${link_approve}\n\nSterge comentariul:\n${link_delete}\n" + +#. Default: "enable the 'Comment Review Workflow' for the Comment content type" +#: ../browser/moderation.pt:33 +msgid "message_enable_comment_workflow" +msgstr "Activeaza 'Workflow-ul de Moderare al Comentariilor' pentru tipul de obiect Comentariu" + +#. Default: "Moderation workflow is disabled. You have to ${enable_comment_workflow} before you can moderate comments here." +#: ../browser/moderation.pt:33 +msgid "message_moderation_disabled" +msgstr "Workflow-ul de Moderare este dezactivat. Trebuie sa ${enable_comment_workflow} inainte de a putea modera comentarii aici." + +#. Default: "No comments to moderate." +#: ../browser/moderation.pt:43 +msgid "message_nothing_to_moderate" +msgstr "Nici un comentariu nu a fost introdus pentru moderare." + +#. Default: "Bulk Actions" +#: ../browser/moderation.pt:64 +msgid "title_bulkactions" +msgstr "Actiuni in masa" + From c08fe7835503b518f6fa9d037c8cbbb9abf5fad5 Mon Sep 17 00:00:00 2001 From: ichim-david Date: Sun, 3 Feb 2013 21:58:12 +0200 Subject: [PATCH 033/254] Added a better fix for ticket #13037 to the 2.1.X branch, previous fix was done in master branch --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 06ee3ec..4fee121 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,9 @@ Changelog 2.2.4 (unreleased) ------------------ +- Better fix for #13037 by removing submit event trigger altogether + [ichimdav] + - Added Romanian translation [ichimdav] From e2d8543020b97f01310c849aecc4d6a3532a3c4c Mon Sep 17 00:00:00 2001 From: ichim-david Date: Sun, 3 Feb 2013 22:01:46 +0200 Subject: [PATCH 034/254] Cherry-picked 7a48d5 and 10f031 from 2.1.x branch to master --- CHANGES.txt | 3 +++ plone/app/discussion/browser/javascripts/controlpanel.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 4fee121..51576ee 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,9 @@ Changelog 2.2.4 (unreleased) ------------------ +- Check for 'checked' attribute in a way that work also for jQuery 1.7 + [ichimdav] + - Better fix for #13037 by removing submit event trigger altogether [ichimdav] diff --git a/plone/app/discussion/browser/javascripts/controlpanel.js b/plone/app/discussion/browser/javascripts/controlpanel.js index 8449f6e..ba32492 100644 --- a/plone/app/discussion/browser/javascripts/controlpanel.js +++ b/plone/app/discussion/browser/javascripts/controlpanel.js @@ -103,7 +103,7 @@ $("input,select").live("change", function (e) { var id = $(this).attr("id"); if (id === "form-widgets-globally_enabled-0") { - if ($(this).attr("checked") === true) { + if ($(this).attr("checked")) { $("#content").addClass("globally_enabled"); } else { From 948d7d495671dcf11f0e11ccdacbe76c76cb608b Mon Sep 17 00:00:00 2001 From: Roman Kozlovskyi Date: Mon, 4 Feb 2013 13:39:17 +0200 Subject: [PATCH 035/254] Updated Ukrainian translation --- plone/app/discussion/i18n/plone-uk.po | 38 +--- .../uk/LC_MESSAGES/plone.app.discussion.po | 207 ++++++++++-------- 2 files changed, 126 insertions(+), 119 deletions(-) diff --git a/plone/app/discussion/i18n/plone-uk.po b/plone/app/discussion/i18n/plone-uk.po index 2e205c9..169c885 100644 --- a/plone/app/discussion/i18n/plone-uk.po +++ b/plone/app/discussion/i18n/plone-uk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-02-04 10:32+0000\n" "PO-Revision-Date: 2011-08-18 14:54+0300\n" "Last-Translator: Olha \n" "Language-Team: Hanno Schlichting \n" @@ -16,7 +16,7 @@ msgstr "" #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" -msgstr "" +msgstr "Простий робочий проце для розгляду коментарів" #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" @@ -32,16 +32,11 @@ msgstr "Коментар" #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" -msgstr "" - -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "" +msgstr "Робочий процес розгляду коментарів" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" -msgstr "" +msgstr "Коментар про останню зміну стану" #: ../profiles/default/portal_atct.xml msgid "Commentators" @@ -55,45 +50,37 @@ msgstr "Коментарі, додані до об'єкта." msgid "Discussion" msgstr "Коментування" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "" - #: ../profiles/default/actions.xml msgid "Moderate comments" -msgstr "" +msgstr "Модерування коментарів" #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Непідтверджений" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" -msgstr "" +msgstr "Попередня зміна стану" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" -msgstr "" +msgstr "Надає доступ до історії робочого процесу" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "Опублікований" #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" -msgstr "" +msgstr "Рецензент затвердив зміст" #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Подано на публікацію." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" -msgstr "" +msgstr "Ідентифікатор користувача який спровокував останню зміну стану" #: ../profiles/default/portal_atct.xml msgid "Total number of comments" @@ -107,16 +94,11 @@ msgstr "Загальне число коментарів до цього об'є msgid "Users who have commented on the item" msgstr "Користувачі, які прокоментували цей об'єкт." -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "Видимий для всіх, редагує автор." - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Видимий для всіх, не редагується." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" -msgstr "" +msgstr "Коли була здійснена попередня зміна стану" diff --git a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po index 5d695f7..2cf27b7 100644 --- a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po @@ -1,67 +1,68 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: \n" +"POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" "PO-Revision-Date: \n" "Last-Translator: Olha \n" "Language-Team: Hanno Schlichting \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0\n" +"Language-Code: en\n" +"Language-Name: English\n" +"Preferred-Encodings: utf-8 latin1\n" +"Domain: DOMAIN\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "Коментар додано." -#: ../interfaces.py:257 +#: ../interfaces.py:135 msgid "A comment id unique to this conversation" -msgstr "" +msgstr "Унікальний ідентифікатор коментаря для цієї розмови" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Додати коментар" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Анонімне коментування" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Ім'я автора (яке показувати)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:247 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Скасувати" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "Зміни збережено" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Коментар опубліковано." -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:99 msgid "Comment deleted." msgstr "Коментар знищено." -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Зображення коментатора" msgid "Commenting infrastructure for Plone" msgstr "Інфраструктура коментування в Plone" -#: ../interfaces.py:252 +#: ../interfaces.py:130 msgid "Conversation" -msgstr "" +msgstr "Розмова" -#: ../interfaces.py:283 +#: ../interfaces.py:161 msgid "Creation date" msgstr "Дата створення" -#: ../interfaces.py:162 +#: ../interfaces.py:40 msgid "Date of the most recent comment" msgstr "Дата останнього коментаря" @@ -69,43 +70,43 @@ msgstr "Дата останнього коментаря" msgid "Disabled" msgstr "Вимкнено" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Налаштуванняя коментування" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "Редагування скасовано" -#: ../interfaces.py:269 +#: ../interfaces.py:147 msgid "Email" -msgstr "" +msgstr "Електронна адреса" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Увімкнути можливість додавати коментарі" -#: ../interfaces.py:260 +#: ../interfaces.py:138 msgid "Id of comment this comment is in reply to" msgstr "Id коментаря, відповіддю на який - є цей коментар" -#: ../interfaces.py:274 +#: ../interfaces.py:152 msgid "MIME type" -msgstr "" +msgstr "MIME-тип" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" -msgstr "" +msgstr "Сповіщення модератора електронною поштою" -#: ../interfaces.py:284 +#: ../interfaces.py:162 msgid "Modification date" msgstr "Дата зміни" -#: ../interfaces.py:254 +#: ../interfaces.py:132 msgid "Name" msgstr "Ім'я" -#: ../interfaces.py:278 +#: ../interfaces.py:156 msgid "Notify me of new comments via email." msgstr "Повідомляти про нові коментарі поштою." @@ -113,32 +114,40 @@ msgstr "Повідомляти про нові коментарі поштою." msgid "Plone Discussions" msgstr "Коментування в Plone" -#: ../interfaces.py:247 +#: ../interfaces.py:125 msgid "Portal type" msgstr "Портал тип" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "Зберегти" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Перелік коментаторів (імена користувачів)" -#: ../interfaces.py:156 +#: ../interfaces.py:34 msgid "Total number of comments on this item" msgstr "Загальна кількість коментарів до цього об'єкта" -#: ../browser/controlpanel.py:67 -msgid "User Email Notification" -msgstr "" +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "Не доступне перетворення '%s' => '%s'. Не вдалося перетворити коментар '%s'." -#: ../browser/comments.py:241 +#: ../browser/controlpanel.py:69 +msgid "User Email Notification" +msgstr "Сповіщення користувача електронною поштою" + +#: ../interfaces.py:160 +msgid "Username of the commenter" +msgstr "Ім'я автора коментаря" + +#: ../browser/comments.py:240 msgid "Your comment awaits moderator approval." -msgstr "" +msgstr "Ваш коментар очікує затвердження модератором." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Коментар" @@ -153,29 +162,34 @@ msgid "bulkactions_publish" msgstr "Опублікувати" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Ви можете додати коментар, заповнивши наступну форму. Просте форматування тексту. Веб адреси та адреси електронної пошти перетворюються на посилання." +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "Ви можете додати коментар, заповнивши наступну форму. Просте форматування тексту. Ви можете використовувати Markdown синтаксис для посилань і зображень." + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" -msgstr "" +msgstr "Коментарі модеруються." #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Ви можете додати коментар, заповнивши наступну форму. Просте форматування тексту. " -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 msgid "comment_title" -msgstr "" +msgstr "${author_name} до ${content}" #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" -msgstr "" +msgstr "Дія" #. Default: "Comment" #: ../browser/moderation.pt:84 @@ -200,20 +214,25 @@ msgstr "У відповідь на" #. Default: "Moderate comments" #: ../browser/moderation.pt:24 msgid "heading_moderate_comments" -msgstr "" +msgstr "Модерування коментарів" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:230 msgid "help_anonymous_comments" msgstr "Якщо вибрано - то анонімні користувачі зможуть додавати коментарі без входу в систему. Для таких випадків рекомендуєтсья використовувати капчу, щоб запобігти надсиланню спаму." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:328 +msgid "help_anonymous_email_enabled" +msgstr "Якщо вибрано, анонімний користувач повинен буде вказати свою електронну пошту." + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:273 msgid "help_captcha" msgstr "Використовуйте цей параметр, щоб увімкнути або вимкнути капчу для коментарів. Для цього спершу встановіть plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet або collective.z3cform.norobots." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" "Не всі налаштування коментувань знаходяться на цій сторінці.\n" @@ -221,62 +240,68 @@ msgstr "" "To enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\".\"" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:218 msgid "help_globally_enabled" msgstr "Якщо вибрано, користувачі зможуть додавати коментарі на сайт. Але спочатку необхідно увімкнути можливість коментування для певних типів вмісту, тек, об'єктів." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:242 msgid "help_moderation_enabled" -msgstr "" +msgstr "Якщо вибрано, коментарі увійде в стан 'В очікуванні', у якому вони невидимі для громадськості. Користувач з правом 'Огляд коментарів' ('Рецензент' або 'Менеджер') може схвалити коментар, щоб зробити їх видимими для громадськості. Якщо ви хочете налаштувати робочий процес коментарів, ви повинні піти в панель керування типів." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:310 msgid "help_moderator_email" -msgstr "" +msgstr "Адреса, за якою модератору будуть надсилатися повідомлення." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:298 msgid "help_moderator_notification_enabled" -msgstr "" +msgstr "Якщо вибрано, модератор отримує повідомлення, якщо коментар вимагає уваги. Адресу електронної пошти модератора можна знайти в 'Пошта' панелі керування (Адреса 'Від')" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:288 msgid "help_show_commenter_image" msgstr "Якщо вибрано, зображення коментатора буде відображатись поруч з коментарем." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:257 msgid "help_text_transform" -msgstr "" +msgstr "Виберіть як повинен бути перетворений текст коментаря. Ви можете вибрати між 'Звичайний текст' і 'Інтелектуальні тексту'. 'Інтелектуальний текст' перетворює текст в HTML, де рядки і відступи зберігаються, інтернет адреси та адреси електронної пошти перетворяться в активні посилання." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Якщо вибрано, користувачі зможуть обрати можливість отримувати нотифікації про нові коментарі поштою." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Анонім" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:228 msgid "label_anonymous_comments" msgstr "Увімкнути можливість анонімного коментування" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:326 +msgid "label_anonymous_email_enabled" +msgstr "Увімкнути поле електронної адреси для аноніма" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Застосувати" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:271 msgid "label_captcha" msgstr "Капча" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:153 msgid "label_comment" msgstr "Коментар" @@ -291,24 +316,24 @@ msgid "label_delete" msgstr "Знищити" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:216 msgid "label_globally_enabled" msgstr "Увімкнути коментування для цілого сайту" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:240 msgid "label_moderation_enabled" -msgstr "" +msgstr "Увімкнути модерування коментарів" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:308 msgid "label_moderator_email" -msgstr "" +msgstr "Електронна адреса модератора" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:296 msgid "label_moderator_notification_enabled" -msgstr "" +msgstr "Увімкнути сповіщення модератора" #. Default: "Approve" #: ../browser/moderation.pt:121 @@ -318,35 +343,35 @@ msgstr "Опублікувати" #. Default: "says:" #: ../browser/comments.pt:74 msgid "label_says" -msgstr "" +msgstr "каже:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:286 msgid "label_show_commenter_image" msgstr "Показати зображення коментатора" #. Default: "show full comment text" #: ../browser/moderation.pt:114 msgid "label_show_full_comment_text" -msgstr "" +msgstr "показати повний текст коментаря" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:149 msgid "label_subject" msgstr "Тема" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:255 msgid "label_text_transform" -msgstr "" +msgstr "Перетворення тексту коментаря" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:317 msgid "label_user_notification_enabled" -msgstr "Увімкнути надилання нотифікації користувачу через електронну адресу" +msgstr "Увімкнути надcилання нотифікації користувачу через електронну адресу" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" msgstr "" "Коментар до '${title}' було додано тут: ${link}\n" @@ -356,7 +381,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" "Коментар до '${title}' було додано тут: ${link}\n" @@ -374,20 +399,20 @@ msgstr "" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 msgid "message_enable_comment_workflow" -msgstr "" +msgstr "увімкнути 'Робочий процес розгляду коментарів' для контент типу Коментар" #. Default: "Moderation workflow is disabled. You have to ${enable_comment_workflow} before you can moderate comments here." #: ../browser/moderation.pt:33 msgid "message_moderation_disabled" -msgstr "" +msgstr "Робочий процес модерування відключений. Ви повинні ${enable_comment_workflow} перш, ніж ви зможете модерувати коментарі." #. Default: "No comments to moderate." #: ../browser/moderation.pt:43 msgid "message_nothing_to_moderate" -msgstr "" +msgstr "Немає коментарів до модерування" #. Default: "Bulk Actions" #: ../browser/moderation.pt:64 msgid "title_bulkactions" -msgstr "" +msgstr "Масові Дії" From 11b4ebfaff37628a99853e89164b81b84f2544a3 Mon Sep 17 00:00:00 2001 From: Roman Kozlovskyi Date: Mon, 4 Feb 2013 13:52:11 +0200 Subject: [PATCH 036/254] Updated CHANGES.txt --- CHANGES.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 51576ee..b8e507b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -13,6 +13,8 @@ Changelog - Added Romanian translation [ichimdav] +- Updated Ukrainian translation + [kroman0] 2.2.3 (2013-01-13) ------------------ From 3b637b8e01f2390604561769291c99050b741fe4 Mon Sep 17 00:00:00 2001 From: Eric Steele Date: Tue, 5 Mar 2013 15:56:22 -0500 Subject: [PATCH 037/254] Preparing release 2.2.4 --- CHANGES.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index b8e507b..2b86001 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,7 @@ Changelog ========= -2.2.4 (unreleased) +2.2.4 (2013-03-05) ------------------ - Check for 'checked' attribute in a way that work also for jQuery 1.7 diff --git a/setup.py b/setup.py index 01e80ca..13aa961 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.4.dev0' +version = '2.2.4' install_requires = [ 'setuptools', From 600d014d07843ff4fa5443ff848fc23d6da52bdd Mon Sep 17 00:00:00 2001 From: Eric Steele Date: Tue, 5 Mar 2013 16:00:42 -0500 Subject: [PATCH 038/254] Bump version. --- CHANGES.txt | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 2b86001..1f2905e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,12 @@ Changelog ========= +2.2.5 (unreleased) +------------------ + +- Nothing changed yet. + + 2.2.4 (2013-03-05) ------------------ diff --git a/setup.py b/setup.py index 13aa961..97a5d84 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.4' +version = '2.2.5.dev0' install_requires = [ 'setuptools', From 317bbca6d83faa90a2806a4fb86ff38d4d6de31e Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 27 Mar 2013 16:58:35 +0100 Subject: [PATCH 039/254] Whitespace. --- plone/app/discussion/profiles/default/workflows.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plone/app/discussion/profiles/default/workflows.xml b/plone/app/discussion/profiles/default/workflows.xml index 22e5237..9738f7c 100644 --- a/plone/app/discussion/profiles/default/workflows.xml +++ b/plone/app/discussion/profiles/default/workflows.xml @@ -1,9 +1,9 @@ - - - - + + + + - - + + From 0c6b873befd02ab38ebb6382e3d44b9b926efeac Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 27 Mar 2013 17:06:14 +0100 Subject: [PATCH 040/254] Do not raise an error when no workflow is assigned to the comment type. --- plone/app/discussion/browser/comments.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plone/app/discussion/browser/comments.py b/plone/app/discussion/browser/comments.py index 7bbd391..e1f4916 100644 --- a/plone/app/discussion/browser/comments.py +++ b/plone/app/discussion/browser/comments.py @@ -233,7 +233,11 @@ class CommentForm(extensible.ExtensibleForm, form.Form): can_review = getSecurityManager().checkPermission('Review comments', context) workflowTool = getToolByName(context, 'portal_workflow') - comment_review_state = workflowTool.getInfoFor(comment, 'review_state') + comment_review_state = workflowTool.getInfoFor( + comment, + 'review_state', + None + ) if comment_review_state == 'pending' and not can_review: # Show info message when comment moderation is enabled IStatusMessage(self.context.REQUEST).addStatusMessage( From 6320048b372bf1b9d0173fcca0151520409c14f5 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 27 Mar 2013 17:06:49 +0100 Subject: [PATCH 041/254] Update CHANGES. --- CHANGES.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 1f2905e..f9c53f6 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,7 +4,8 @@ Changelog 2.2.5 (unreleased) ------------------ -- Nothing changed yet. +- Do not raise an error when no workflow is assigned to the comment type. + [timo] 2.2.4 (2013-03-05) From 05f0e7e4d8ed8978382e1e651554b5b9611d6f84 Mon Sep 17 00:00:00 2001 From: Patrick Gerken Date: Thu, 28 Mar 2013 14:28:22 +0100 Subject: [PATCH 042/254] Many updates to handle non public comments properly --- CHANGES.txt | 15 +++++++++++-- plone/app/discussion/browser/moderation.py | 8 +++++-- plone/app/discussion/catalog.py | 2 +- plone/app/discussion/conversation.py | 21 +++++++++++++++---- plone/app/discussion/interfaces.py | 10 +++++++-- ...unctional_test_comment_review_workflow.txt | 18 ++++++++++++++++ plone/app/discussion/tests/test_catalog.py | 12 ++++++++++- .../app/discussion/tests/test_conversation.py | 14 ++++++++++++- 8 files changed, 87 insertions(+), 13 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index f9c53f6..dc04a9f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -5,13 +5,24 @@ Changelog ------------------ - Do not raise an error when no workflow is assigned to the comment type. - [timo] + [timo] + +- Add a conversation property public_commentators that only lists + commentators of comments that are public. + The commentators indexer indexes this field now. + The behavior of the conversation property commentators is + unchanged. + [do3cc] + +- The last comment date now only returns the date of the newest + published comment. + [do3cc] 2.2.4 (2013-03-05) ------------------ -- Check for 'checked' attribute in a way that work also for jQuery 1.7 +- Check for 'checked' attribute in a way that work also for jQuery 1.7 [ichimdav] - Better fix for #13037 by removing submit event trigger altogether diff --git a/plone/app/discussion/browser/moderation.py b/plone/app/discussion/browser/moderation.py index 91e3290..aa7bb91 100644 --- a/plone/app/discussion/browser/moderation.py +++ b/plone/app/discussion/browser/moderation.py @@ -95,6 +95,7 @@ class DeleteComment(BrowserView): conversation = aq_parent(comment) content_object = aq_parent(conversation) del conversation[comment.id] + content_object.reindexObject() IStatusMessage(self.context.REQUEST).addStatusMessage( _("Comment deleted."), type="info") @@ -201,12 +202,13 @@ class BulkActionsView(BrowserView): context = aq_inner(self.context) for path in self.paths: comment = context.restrictedTraverse(path) + content_object = aq_parent(aq_parent(comment)) workflowTool = getToolByName(comment, 'portal_workflow') current_state = workflowTool.getInfoFor(comment, 'review_state') if current_state != 'published': workflowTool.doActionFor(comment, 'publish') - catalog = getToolByName(comment, 'portal_catalog') - catalog.reindexObject(comment) + comment.reindexObject() + content_object.reindexObject() def mark_as_spam(self): raise NotImplementedError @@ -223,4 +225,6 @@ class BulkActionsView(BrowserView): for path in self.paths: comment = context.restrictedTraverse(path) conversation = aq_parent(comment) + content_object = aq_parent(conversation) del conversation[comment.id] + content_object.reindexObject() diff --git a/plone/app/discussion/catalog.py b/plone/app/discussion/catalog.py index e7d321b..12382df 100644 --- a/plone/app/discussion/catalog.py +++ b/plone/app/discussion/catalog.py @@ -61,7 +61,7 @@ def commentators(object): if object.meta_type != 'Discussion Item': try: conversation = IConversation(object) - return tuple(conversation.commentators.keys()) + return conversation.public_commentators except TypeError: # pragma: no cover # The item is contentish but nobody # implemented an adapter for it diff --git a/plone/app/discussion/conversation.py b/plone/app/discussion/conversation.py index ec2520c..6e529a8 100644 --- a/plone/app/discussion/conversation.py +++ b/plone/app/discussion/conversation.py @@ -95,15 +95,28 @@ class Conversation(Traversable, Persistent, Explicit): @property def last_comment_date(self): - try: - return self._comments[self._comments.maxKey()].creation_date - except (ValueError, KeyError, AttributeError,): - return None + # self._comments is an Instance of a btree. The keys + # are always ordered + comment_keys = self._comments.keys() + for comment_key in reversed(comment_keys): + comment = self._comments[comment_key] + if user_nobody.has_permission('View', comment): + return comment.creation_date + return None @property def commentators(self): return self._commentators + @property + def public_commentators(self): + retval = set() + for comment in self._comments.values(): + if not user_nobody.has_permission('View', comment): + continue + retval.add(comment.author_username) + return tuple(retval) + def objectIds(self): return self._comments.keys() diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index d305bcb..15c674d 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -31,13 +31,13 @@ class IConversation(IIterableMapping): """ total_comments = schema.Int( - title=_(u"Total number of comments on this item"), + title=_(u"Total number of public comments on this item"), min=0, readonly=True, ) last_comment_date = schema.Date( - title=_(u"Date of the most recent comment"), + title=_(u"Date of the most recent public comment"), readonly=True, ) @@ -46,6 +46,12 @@ class IConversation(IIterableMapping): readonly=True, ) + public_commentators = schema.Set( + title=_(u"The set of unique commentators (usernames) of" + " published_comments"), + readonly=True, + ) + def addComment(comment): """Adds a new comment to the list of comments, and returns the comment id that was assigned. The comment_id property on the comment diff --git a/plone/app/discussion/tests/functional_test_comment_review_workflow.txt b/plone/app/discussion/tests/functional_test_comment_review_workflow.txt index 4628341..6e03a4f 100644 --- a/plone/app/discussion/tests/functional_test_comment_review_workflow.txt +++ b/plone/app/discussion/tests/functional_test_comment_review_workflow.txt @@ -124,6 +124,11 @@ Anonymous user can not see any posts or comment actions >>> 'form.button.PublishComment' in unprivileged_browser.contents False +The catalog does not list the comments yet: + + >>> portal.portal_catalog.searchResults(id='doc', total_comments=0) + [>> 'First anonymous comment' in unprivileged_browser.contents True +Make sure the catalog only lists the public comments. + + >>> portal.portal_catalog.searchResults(id='doc', total_comments=1) + [>> 'Second anonymous comment' in browser.contents False +Delete the first, published comment. + >>> browser.open(urldoc) + >>> browser.getControl('Delete', index=0).click() + +Make sure the catalog has been updated properly. + + >>> portal.portal_catalog.searchResults(id='doc', total_comments=0) + [ Date: Sat, 6 Apr 2013 09:48:44 -0300 Subject: [PATCH 043/254] Sync translations --- .../af/LC_MESSAGES/plone.app.discussion.po | 159 +++++++++------ .../ca/LC_MESSAGES/plone.app.discussion.po | 159 +++++++++------ .../cs/LC_MESSAGES/plone.app.discussion.po | 179 +++++++++------- .../da/LC_MESSAGES/plone.app.discussion.po | 172 +++++++++------- .../de/LC_MESSAGES/plone.app.discussion.po | 181 ++++++++++------- .../es/LC_MESSAGES/plone.app.discussion.po | 159 +++++++++------ .../eu/LC_MESSAGES/plone.app.discussion.po | 152 ++++++++------ .../fi/LC_MESSAGES/plone.app.discussion.po | 158 +++++++++------ .../fr/LC_MESSAGES/plone.app.discussion.po | 159 +++++++++------ .../it/LC_MESSAGES/plone.app.discussion.po | 191 +++++++++++------- .../ja/LC_MESSAGES/plone.app.discussion.po | 172 +++++++++------- .../nl/LC_MESSAGES/plone.app.discussion.po | 165 ++++++++------- .../no/LC_MESSAGES/plone.app.discussion.po | 158 +++++++++------ .../locales/plone.app.discussion.pot | 160 ++++++++------- .../pt_BR/LC_MESSAGES/plone.app.discussion.po | 159 +++++++++------ .../ro/LC_MESSAGES/plone.app.discussion.po | 183 ++++++++++------- .../sk/LC_MESSAGES/plone.app.discussion.po | 113 ++++++----- .../sv/LC_MESSAGES/plone.app.discussion.po | 163 ++++++++------- .../uk/LC_MESSAGES/plone.app.discussion.po | 86 ++++---- .../zh_CN/LC_MESSAGES/plone.app.discussion.po | 162 ++++++++------- .../zh_TW/LC_MESSAGES/plone.app.discussion.po | 181 ++++++++++------- 21 files changed, 1986 insertions(+), 1385 deletions(-) diff --git a/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po index 8154e04..29fcd36 100644 --- a/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po @@ -33,103 +33,99 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "'n Opmerking is geplaas." -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "'n ID uniek tot hierdie gesprek" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Voeg 'n opmerking by" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Anonieme kommentaar" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Outeur naam (om te vertoon)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Kanselleer" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Opmerking goedgekeur" -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Opmerking verwyder" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Kommentator se Profielfoto" msgid "Commenting infrastructure for Plone" msgstr "Kommentaarinfrastruktuur vir Plone" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Gesprek" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Skeppingsdatum" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Datum van die laaste opmerking" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Uitgeskakel" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Kommentaar instellings" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "E-pos" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Laat kommentare toe" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Id van dié opmerking waarop hierdie een antwoord" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME-tipe" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "E-pos in kennis stelling vir die redaksie" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Wysigingsdatum" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Naam" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "Stel my in kennis van nuwe opmerkings m.b.v e-pos" @@ -137,32 +133,44 @@ msgstr "Stel my in kennis van nuwe opmerkings m.b.v e-pos" msgid "Plone Discussions" msgstr "Plone Kommentare" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Portaaltipe" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Lys van kommentators (gebruikersname)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Totale aantal opmerkings op hierdie item" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "Gebruik e-pos in kennis stelling" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Die opmerking sal geplaas word sodra dit goedgekeur is." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Lewer kommentaar" @@ -177,22 +185,28 @@ msgid "bulkactions_publish" msgstr "Keur goed" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "" +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "" #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "" -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} op ${content}" @@ -227,80 +241,91 @@ msgid "heading_moderate_comments" msgstr "Modereer kommentaar" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Indien geselekteer, sal anonieme besoekers opmerkings kan laat sonder om aan te meld. Die captcha-oplossing word aanbeveel indien hierdie opsie aangeskakel word, om gemorspos te voorkom." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Gebruik hierdie instelling om Captcha validasie vir kommentaar aan of af te skakel. Installeer plone.formwidget of plone.formwidget.captcha indien daar geen opsies beskikbaar is nie." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" "Sommige besprekingsinstellings kom nie op hierdie bladsy voor nie.\n" "Om kommentaar vir 'n spesifieke inhoudstipe aan te skakel, gaan na die Tipes Konfigurasie, kies 'Comment' en stel die werksvloei na \"Comment Review Workflow\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Indien geselekteer, sal gebruikers op die werf kommentare kan plaas. Kommentare moet moontlik ook nog vir sekere inhoudstipe, vouers en objekte aangeskakel word, voordat kommentaar daar gelewer kan word." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Indien geselekteer, sal die moderator in kennis gestel word wanneer 'n opmerking aandag verg." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Indien geselekteer, sal die profielfoto van 'n gebruiker langs sy opmerking vertoon." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Indien geselekteer, sal gebruikers kan kies om per e-pos van nuwe kommentaar in kennis gestel te word." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anoniem" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Skakel anonieme kommentaar aan" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Pas toe" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Opmerking" @@ -315,22 +340,22 @@ msgid "label_delete" msgstr "Skrap" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Laat kommentare globaal toe" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Skakel moderator e-pos in kennis stelling aan" @@ -345,7 +370,7 @@ msgid "label_says" msgstr "sê:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Vertoon kommentaarleweraar se foto" @@ -355,28 +380,28 @@ msgid "label_show_full_comment_text" msgstr "Toon die volledige opmerking" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Onderwerp" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Kommentaar tekstransformasie" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Skakel e-pos in kennis stelling aan vir gebruikers" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 #, fuzzy msgid "mail_notification_message" msgstr "'n Opmerking is op '${title}' gelewer: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po index d67d7b0..d73e295 100644 --- a/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po @@ -14,103 +14,99 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "Comentari afegit." -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "Un identificador exclusiu assignat al comentari per aquesta conversa" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Afegir un comentari" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Comentaris anònims" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Nom de l'autor (per mostrar)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Cancel·la" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Comentari aprovat." -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Comentari esborrat." -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Imatge de l'autor" msgid "Commenting infrastructure for Plone" msgstr "Infraestructura de comentaris per Plone" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Conversa" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Data de creació" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Data del comentari més recent" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Desactivat" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Configuració dels comentaris" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "Correu electrònic" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Permetre comentaris" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Identificador únic del comentari en relació al comentari del qual és resposta" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "Tipus MIME" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Notificació al moderador per correu electrònic" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Data de modificació" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Nom" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "Notifica'm de la creació de nous comentaris via correu electrònic." @@ -118,32 +114,44 @@ msgstr "Notifica'm de la creació de nous comentaris via correu electrònic." msgid "Plone Discussions" msgstr "Plone Discussions" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Tipus d'objecte" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Llistat d'usuaris que han comentat (noms d'usuari)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Número total de comentaris en aquest contingut" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "Notificació a l'usuari via mail" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "El vostre comentari està pendent d'aprovació per part del moderador de l'espai" #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Comenta" @@ -158,22 +166,28 @@ msgid "bulkactions_publish" msgstr "Publica" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "" +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "" #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "" -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} sobre ${content}" @@ -208,78 +222,89 @@ msgid "heading_moderate_comments" msgstr "Moderar comentaris" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Si està seleccionada, els usuaris anònims podran afegir comentaris sense identificar-se. Es recomana la utilització de una eina de captcha per evitar comentaris spam si aquesta opció està activada." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Utilitzeu aquesta opció per activar o desactivar una eina de captcha pels comentaris. Instal·leu plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet o collective.z3cform.norobots si no teniu cap opció disponible." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "Algunes de les configuracions dels comentaris no estan en la element de configuració 'Comentaris' del panell de control de l'espai. Per activar els comentaris per un tipus de contingut específic, dirigiu-vos al element de configuració 'Tipus' i activeu la opció 'Permetre comentaris'. Per activar el circuit de treball (workflow) de moderació de comentaris, dirigiu-vos al element de configuració de 'Tipus', seleccioneu 'Comentari' i escolliu el 'Workflow de moderació de comentaris'." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Si està seleccionada, es permet que els usuaris puguin afegir comentaris a l'espai. De tota manera, teniu que activar els comentaris per a cada tipus de contingut específicament abans de que pogueu afegir comentaris." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Si està seleccionada, es notificarà per correu electrònic al moderador els nous comentaris." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Si està seleccionada, es mostrarà el retrat (o imatge) que hagi configurat l'usuari en el seu perfil juntament amb el comentari." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Si està seleccionada, els usuaris poden escollir si volen ser notificats cada cop que s'afegeixi un nou comentari al contingut." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anònim" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Permetre comentaris anònims" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Aplica" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Comentari" @@ -294,22 +319,22 @@ msgid "label_delete" msgstr "Esborra" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Activa els comentaris de forma global" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Activa la notificació al moderador" @@ -324,7 +349,7 @@ msgid "label_says" msgstr "diu:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Mostra el retrat (o imatge) de l'autor" @@ -334,28 +359,28 @@ msgid "label_show_full_comment_text" msgstr "Mostra text complet" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Tema" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Transformacions aplicades al text del comentari" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Activa les notificacions als usuaris" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 #, fuzzy msgid "mail_notification_message" msgstr "S'ha publicat un comentari sobre el contingut ${title} en aquesta adreça: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po index 9f42f65..538c27e 100644 --- a/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po @@ -14,103 +14,99 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "Komentář byl přidán." -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "Identifikátor komentáře v této konverzaci." -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Přidat komentář" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Anonymní komentáře" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Jméno autora (pro zobrazení)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Storno" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "Změny byly uloženy" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Komentář byl schválen." -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Komentář byl odebrán." -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Portét komentujícího" msgid "Commenting infrastructure for Plone" msgstr "Komentářový systém pro Plone" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Konverzace" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Datum vytvoření" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Datum nejnovějšího komentáře" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Zakázáno" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Nastavení komentářů" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "Úpravy byly stornovány" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "Email" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Povolit komentáře" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Id předchozího komentáře, na který je tento odpovědí" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME typ" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Notifikace moderátorů emailem" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Datum změny" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Jméno" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "Chci zasílat notifikace o nových komentářích emailem." @@ -118,32 +114,44 @@ msgstr "Chci zasílat notifikace o nových komentářích emailem." msgid "Plone Discussions" msgstr "Komentáře" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Typ položky" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "Uložit" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Seznam komentujících" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Celkový počet komentářů k této položce" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "Notifikace emailem" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Váš komentář čeká na schválení." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Přidat komentář" @@ -158,22 +166,28 @@ msgid "bulkactions_publish" msgstr "Schválit" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Pokud chcete přidat komentář, zadejte jej do formuláře níže. Nejsou povoleny žádné formátovací značky. Adresy na web nebo emailové adresy budou automaticky transformovány na aktivní odkazy." +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Komentáře jsou moderovány." #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Pokud chcete přidat komentář, zadejte jej do formuláře níže. Nejsou povoleny žádné formátovací značky." -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} k ${content}" @@ -208,17 +222,22 @@ msgid "heading_moderate_comments" msgstr "Správa komentářů" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Je-li zaškrtnuto, nepřihlášení uživatelé mohou posílat komentáře. Doporučujeme použití Captcha, pokud povolíte tuto volbu." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Zde můžete povolit nebo zakázat Captcha pro komentáře. Pokud zde není žádná možnost k výběru, nainstalujte prosím balíček plone.formwidget.captcha nebo plone.formwidget.recaptcha, collective.akismet nebo collective.z3cform.norobots." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" "Nekterá nastavení pro diskuse nejsou k dispozici v ovládacím panelu komentářů.\n" @@ -226,62 +245,68 @@ msgstr "" " Pokud chcete povolit moderování komentářů, přejděte do ovládacích panelů Typy, vyberte typ položky \"Komentář\" a nastavte workflow na \"Schvalovací workflow pro komentáře\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Je-li zaškrtnuto, uživatelé mohou přidávat komentáře. Navíc však musíte ověřit, že je povoleno přidávání komentářů k příslušným typům položek." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "Je-li zaškrtnuto, pakbudou komentáře moderované. Po zadání komentáře bude tento komentář ve stavu \"čeká na schválení\" a nebude viditelný nepřihlášeným návštěvníkům. Moderátor (uživatel, ktewrý má opravnění schvalovat komentáře) může takové komentáře schválit a tedy zviditelnit všem." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "Adresa, na kterou budou zasílány notifikační emaily moderátorlů" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "Je-li zaškrtnuto, moderátor je upozorněn na komentáře, které vyžadují jeho zásah." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Je-li zaškrtnuto, je vedle komentáře zobrazen portrét autora komentáře." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "Zde můžete nastavit, zda mají být komentáře nějak upraveny. Je možné vybrat mezi Plain text (prostý, neupravený text) nebo \"Intelligent text\". Intelligent text konvertuje odkazy na aktivní linky a převádí text do HTML tak, jak je vidět na obrazovce (tedy se zachováním nových řádků a odsazení)." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Je-li zaškrtnuto, uživatelé se mohou rozhodnout zda si přejí být upozorněni na nové komentáře emailem." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anonym" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Povolit anonymní komentáře" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Provést" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Komentář" @@ -296,22 +321,22 @@ msgid "label_delete" msgstr "Odebrat" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Globální povolení komentářů" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "Povolit moderování komentářů" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Email adresa moderátora" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Povolit emailovou notifikaci moderátorů" @@ -326,7 +351,7 @@ msgid "label_says" msgstr "píše:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Zobrazit portrét komentujícího" @@ -336,29 +361,45 @@ msgid "label_show_full_comment_text" msgstr "zobrazit celý text příspěvku" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Předmět" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Transformace textu" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Povolit notifikaci uživatelů emailem" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" -msgstr "Na adrese ${link} byl přidán komentář k položce '${title}'}\n\n---\n${text}\n---" +msgstr "" +"Na adrese ${link} byl přidán komentář k položce '${title}'}\n" +"\n" +"---\n" +"${text}\n" +"---" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" -msgstr "Na adrese ${link} byl vložen komentář k položce '${title}'\n\n---\n${text}\n---\n\nSchválit komentář:\n${link_approve}\n\nSmazat komentář:\n${link_delete}" +msgstr "" +"Na adrese ${link} byl vložen komentář k položce '${title}'\n" +"\n" +"---\n" +"${text}\n" +"---\n" +"\n" +"Schválit komentář:\n" +"${link_approve}\n" +"\n" +"Smazat komentář:\n" +"${link_delete}" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 diff --git a/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po index 61ea128..ec13feb 100644 --- a/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po @@ -14,103 +14,99 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone.app.discussion\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "En kommentar er gem." -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "En kommentar-id som er unik for denne dialog" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Tilføj en kommentar" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Anonyme kommentarer" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Forfatter" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Afbryd" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "Ændringer gemt" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Kommentar godkendt." -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Kommentar slettet." -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Kommentar-billede" msgid "Commenting infrastructure for Plone" msgstr "Kommentar-funktionalitet til Plone" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Dialog" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Oprettelses-dato" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Dato for den seneste kommentar" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Slået fra" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Indstilling for kommentarer" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "Redigering blev afbrudt" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "Email" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Slå kommentarer til" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Id'en på den kommentar, denne kommentar er et svar til" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME-type" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Notificering af moderator" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Ændringsdato" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Navn" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "Send besked om nye kommentarer pr. email." @@ -118,32 +114,44 @@ msgstr "Send besked om nye kommentarer pr. email." msgid "Plone Discussions" msgstr "Plone diskussioner" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Portal type" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "Gem" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Liste over kommentatorer (brugernavne)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Kommentarer i alt på denne side" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "Email-notificering af brugere" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Din kommentar venter på godkendelse." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Gem" @@ -158,22 +166,28 @@ msgid "bulkactions_publish" msgstr "Godkend" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Du kan tilføje en kommentar ved at udfylde formularen nedenfor. Ren tekst-formattering. Web- og emailadresser bliver automatisk lavet om til klikbare links." +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Kommentarer er modereret." #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Du kan tilføje en kommentar ved at udfylde formularen nedenfor. Ren tekst-formattering." -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} på ${content}" @@ -208,77 +222,88 @@ msgid "heading_moderate_comments" msgstr "Moderer kommentarer" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Hvis du krydser af, kan anonyme brugere skrive kommentarer uden at være logget ind. I så fald er det en god ide at bruge CAPTCHA for at forhindre spam." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Her kan du slå CAPTCHA til og fra for kommentarer. Installer plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet eller collective.z3cform.norobots, hvis der ikke er nogen valgmuligheder nedenfor." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "Du kan justere kommentarindstillingerne nedenfor. Bemærk, at der også er indstillinger andre steder, som påvirker kommentarer. For at slå kommentarer til for en bestemt indholdstype, så klik \"Typer\" på Kontrolpanelet og afkryds \"Tillad kommentarer\" for typen. For at slå modereringsworkflow til kommentarer, så vælg \"Kommentar\" under \"Typer\" på Kontrolpanelet og vælg workflowet \"Godkendelses-workflow for kommentarer\"" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Hvis du krydser af, kan brugere skrive kommentarer på sitet. Du skal dog først slå kommentering til for bestemte indholdstyper, mapper eller indholdsobjekter, før det virker." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "Hvis du krydser af, vil kommentarer automatisk bliver sat i en \"Afventer\"-tilstand, hvor de er usynlige for offentligheden. En bruger med rettigheder til at moderere kommentarer kan godkende kommentarer og gøre dem synlige for offentligheden." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "Adresse på den person, som skal modtage moderator-notificeringer." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "Hvis du krydser af, får en moderator besked, hvis en kommentarer skal vurderes." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Hvis du krydser af, bliver der vist et billede af brugeren ved siden af kommentaren." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "Vælg, hvordan kommentartekster skal vises. Du kan vælge mellem \"Plan text\", \"Markdown\" og \"Intelligent text\". Plain text gør ingenting. Markdown fortolker teksten efter Markdown-standarden. Intelligent text oversætter teksten til HTML og bibeholder indrykninger, linjeskift og oversætter emails og webadresser til klikbare links." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Hvis den er slået til, kan brugere få besked om nye kommentarer over email." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anonym" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Slå anonym kommentering til" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Udfør" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "CAPTCHA" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Kommentar" @@ -293,22 +318,22 @@ msgid "label_delete" msgstr "Slet" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Tænd for kommentarer" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "Slå kommentarmoderering til" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Email på moderator" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Slå moderatorer-notificering til" @@ -323,7 +348,7 @@ msgid "label_says" msgstr "siger:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Vis kommentator-billede" @@ -333,30 +358,41 @@ msgid "label_show_full_comment_text" msgstr "Hvis fuld kommentar" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Emne" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Formattering af kommentar-tekst" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Slå bruger-notificering til" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 #, fuzzy msgid "mail_notification_message" msgstr "En kommentarer om '${title}' er blevet gemt her: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" -msgstr "En kommentar til '${title}' er blevet indsendt her: ${link}\n\n---\n${text}\n---\n\nGodkend kommentar:\n${link_approve}\n\nSlet kommentar:\n${link_delete}\n" +msgstr "" +"En kommentar til '${title}' er blevet indsendt her: ${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" +"\n" +"Godkend kommentar:\n" +"${link_approve}\n" +"\n" +"Slet kommentar:\n" +"${link_delete}\n" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 diff --git a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po index a72e73a..3f99105 100644 --- a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po @@ -14,100 +14,99 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "Ein Kommentar wurde abgegeben." -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "Eine eindeutige ID des Kommentars" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Kommentar hinzufügen" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Anonyme Kommentare" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Name des Autors (wird angezeigt)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Abbrechen" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "Änderungen gespeichert" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Kommentar zur Veröffentlichung freigegeben." -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Kommentar gelöscht" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Porträt des Benutzers" -#: ../interfaces.py:252 +msgid "Commenting infrastructure for Plone" +msgstr "" + +#: ../interfaces.py:136 msgid "Conversation" msgstr "Diskussion" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Erstellungsdatum" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Datum des letzten Kommentars" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Ausgeschaltet" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Kommentierungseinstellungen" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "E-Mail" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Kommentare einschalten" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "ID des Kommentars, auf den geantwortet wird." -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME-Typ" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Moderator E-Mail Benachrichtigung" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Änderungsdatum" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Name" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "E-Mail-Benachrichtigung bei neuen Kommentaren" @@ -115,32 +114,44 @@ msgstr "E-Mail-Benachrichtigung bei neuen Kommentaren" msgid "Plone Discussions" msgstr "Plone Diskussionen" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Artikeltyp" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "Speichern" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Liste von Benutzern, die Kommentare abgegeben haben" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Anzahl der Kommentare zu diesem Artikel" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "E-Mail-Benachrichtigungen für Benutzer" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Ihr Kommentar muss noch vom Moderator freigegeben werden." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Kommentieren" @@ -155,22 +166,27 @@ msgid "bulkactions_publish" msgstr "Veröffentlichen" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Sie können einen Kommentar abgeben, indem Sie das untenstehende Formular ausfüllen. Nur Text. Web- und E-Mailadressen werden in anklickbare Links umgewandelt." +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Kommentare werden moderiert." #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Sie können einen Kommentar abgeben, indem Sie das untenstehende Formular ausfüllen. Nur Text." -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 msgid "comment_title" msgstr "" @@ -205,18 +221,23 @@ msgid "heading_moderate_comments" msgstr "Kommentare moderieren" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Wenn Sie diese Einstellung aktivieren, können anonyme Benutzer Kommentare abgeben. Es ist empfehlenswert, dann auch Captchas zu aktivieren." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 #, fuzzy msgid "help_captcha" msgstr "Wenn Sie diese Einstellung aktivieren, wird mit Hilfe der Captcha-Validierung überprüft, ob die Kommentare von einem echten Benutzer oder von einem automatisierten Skript stammen. Falls Sie die Option nicht einschalten können, fehlt evtl. ein benötigtes Programmmodul. Stellen Sie sicher, dass entweder plone.formwidget.captcha oder plone.formwidget.recaptcha installiert ist." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 #, fuzzy msgid "help_discussion_settings_editform" msgstr "" @@ -225,63 +246,69 @@ msgstr "" "Um die Moderation von Kommentaren zu aktivieren, wählen Sie den Artikeltyp 'Kommentar' aus und wählen Sie als neuen Arbeitsablauf 'Arbeitsablauf für moderierte Kommentare'." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 #, fuzzy msgid "help_globally_enabled" msgstr "Wenn Sie diese Einstellung aktivieren, können Artikel generell kommentiert werden." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "E-Mail Adresse an welche die Moderatoren-Benachrichtigungen gesendet werden." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Wenn Sie diese Einstellung aktivieren, wird das Porträt des kommentierenden Benutzers neben dem Kommentar angezeigt." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anonymer Benutzer" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Anonyme Kommentare" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Anwenden" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Kommentar" @@ -296,22 +323,22 @@ msgid "label_delete" msgstr "Löschen" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Kommentierungsfunktion generell einschalten" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Email-Benachrichtigungen für Moderatoren aktivieren" @@ -326,7 +353,7 @@ msgid "label_says" msgstr "sagt" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Zeige das Portrait des Kommentators" @@ -336,29 +363,45 @@ msgid "label_show_full_comment_text" msgstr "Den vollständigen Kommentar anzeigen" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Betreff" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Text transformationen" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "E-Mail-Benachrichtigungen für Benutzer aktivieren" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" -msgstr "Ein Kommentar zu '${title}' wurde hier abgegeben: ${link}\n\n---\n${text}\n---\n" +msgstr "" +"Ein Kommentar zu '${title}' wurde hier abgegeben: ${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" -msgstr "Ein Kommentar zu '${title}' wurde hier abgegeben: ${link}\n\n---\n${text}\n---\n\nKommentar zur Veröffentlichung freigeben:\n${link_approve}\n\nKommentar löschen:\n${link_delete}\n" +msgstr "" +"Ein Kommentar zu '${title}' wurde hier abgegeben: ${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" +"\n" +"Kommentar zur Veröffentlichung freigeben:\n" +"${link_approve}\n" +"\n" +"Kommentar löschen:\n" +"${link_delete}\n" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 diff --git a/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po index 712b5a4..8d97d19 100644 --- a/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po @@ -16,103 +16,99 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Is-Fallback-For: es-ar es-bo es-cl es-co es-cr es-do es-ec es-es es-sv es-gt es-hn es-mx es-ni es-pa es-py es-pe es-pr es-us es-uy es-ve\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "Comentario añadido." -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "Un comentario de ID exclusivo para esta conversación" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Añadir un comentario" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Comentarios anónimos" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Nombre del autor (para mostrar)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Cancelar" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "Cambios guardados" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Comentario aprobado." -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Comentario eliminado." -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Imagen del autor" msgid "Commenting infrastructure for Plone" msgstr "Infraestructura de comentarios para Plone" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Conversación" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Fecha de creación" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Fecha del comentario más reciente" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Desactivado" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Ajustes de discusión" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "Edición cancelada" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "Correo electrónico" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Permitir comentarios" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "ID del comentario este comentario es en respuesta a" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "Tipo MIME" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Notificación al moderador por correo electrónico" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Fecha de modificación" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Nombre" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "Recibir avisos por correo cuando haya nuevos comentarios." @@ -120,32 +116,44 @@ msgstr "Recibir avisos por correo cuando haya nuevos comentarios." msgid "Plone Discussions" msgstr "Plone Discussions" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Tipo de objeto" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "Guardar" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Listado de usuarios que han comentado (nombres de usuario)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Número total de comentarios en este elemento" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "Notificaciones de correo para usuarios" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Su comentario está pendiente de aprobación por el moderador." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Comentar" @@ -160,22 +168,28 @@ msgid "bulkactions_publish" msgstr "Aprobar" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Puede agregar un comentario llenando el siguiente formulario. Formato de texto plano. Las direcciones web y de correo electrónico se transforman en vínculos." +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Los comentarios son moderados." #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Puede agregar un comentario llenando el sigueinte formulario. Formato de texto plano." -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} sobre ${content}" @@ -210,17 +224,22 @@ msgid "heading_moderate_comments" msgstr "Moderar comentarios" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Si está seleccionado, los usuarios anónimos podrán añadir comentarios sin tener que iniciar una sesión. Recomendamos encarecidamente que utilice una solución Captcha para evitar el spam si esta opción está activada." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Utilice esta opción para activar o desactivar Captcha para los comentarios. Instale plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet o collective.z3cform.norobots si no tiene ninguna opción disponible." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" "Algunos de los ajustes sobre los comentarios no están en el Panel de Control de Discusiones.\n" @@ -228,62 +247,68 @@ msgstr "" "Para activar el workflow de moderación de comentarios, vaya al Panel de Control de Tipos, elija 'Comentario' y elija el 'Workflow de Moderación de Comentarios'." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Si está seleccionado, se permite que los visitantes hagan comentarios en la web. Sin embargo, tiene que activar los comentarios para cada tipo de objeto específicamente antes de que se puedan añadir los comentarios." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "Si está seleccionado, los comentarios entraran en un estado 'Pendiente' en el cual ellos no son visibles para el público. Un usuario con el permiso 'Revisar comentarios' ('Revisor' o 'Administrador') puede aprobar los comentarios y hacerlos visibles al público. Si desea habilitar un workflow de comentarios diferente, puede hacerlo a través de la opción 'Configuración de Tipos' en el panel de control." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "La dirección de correo electrónico a la cual se enviarán las notificaciones de moderación." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "Si está seleccionado, se notifica al moderador cuando un nuevo comentario requiere de su atención. La dirección de correo electrónico del moderador se puede encontrar en la opción 'Configuración de correo' del panel de control (Dirección del remitente del sitio)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Si está seleccionado, se mostrará una imagen del autor junto al comentario." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "Elija si el texto de los comentario será transformado de algún modo. Puede seleccionar entre 'Texto plano' y 'Texto inteligente'. 'Texto inteligente' convierte el texto plano en HTML, conservando los cambios de línea y la indentación, y transformando las direcciones web y de correo electrónico en vínculos." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Si está seleccionado, los usuarios pueden solicitar recibir avisos por correo cuando haya nuevos comentarios." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anónimo" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Permitir comentarios anónimos" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Aplicar" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Comentario" @@ -298,22 +323,22 @@ msgid "label_delete" msgstr "Borrar" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Activar comentarios de forma global" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "Habilitar la moderación de comentarios" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Dirección de correo electrónico del moderador" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Activar notificación al moderador" @@ -328,7 +353,7 @@ msgid "label_says" msgstr "dice:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Mostrar imagen del autor" @@ -338,22 +363,22 @@ msgid "label_show_full_comment_text" msgstr "Mostrar texto completo" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Tema" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Transformaciones aplicadas al texto del comentario" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Activar notificación de correo a los usuarios" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" msgstr "" "Se ha agregado un comentario a ${title} aquí: ${link}\n" @@ -363,7 +388,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" "Se ha agregado un comentario a '${title}' aquí: ${link}\n" diff --git a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po index bd1037c..df9ac4a 100644 --- a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po @@ -15,103 +15,99 @@ msgstr "" "Domain: DOMAIN\n" "X-Poedit-Language: Basque\n" -#: ../comment.py:294 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "Erantzun bat argitaratu da." -#: ../interfaces.py:135 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "Eztabaida honetarako bakarra den erantzunaren id-a." -#: ../browser/comments.py:73 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Erantzuna gehitu" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Erantzun anonimoak" -#: ../interfaces.py:160 -msgid "Author name (for display)" -msgstr "Egilearen izena (argitaratuko dena)" - -#: ../browser/comments.py:245 -#: ../browser/controlpanel.py:81 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Utzi" -#: ../browser/controlpanel.py:77 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "Aldaketak gordeta" -#: ../browser/moderation.py:138 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Erantzuna onartuta." -#: ../browser/moderation.py:99 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Erantzuna ezabatuta." -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Erantzuna eman duenaren irudia." msgid "Commenting infrastructure for Plone" msgstr "Ploneren Erantzunen Azpiegitura" -#: ../interfaces.py:130 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Eztabaida" -#: ../interfaces.py:161 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Sorrera data" #: ../interfaces.py:40 -msgid "Date of the most recent comment" -msgstr "Azken erantzunaren data" +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Desaktibatuta" -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Eztabaidaren ezarpenak" -#: ../browser/controlpanel.py:83 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "Edizioa utzita" -#: ../interfaces.py:147 +#: ../interfaces.py:153 msgid "Email" msgstr "E-posta" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Erantzunak aktibatu" -#: ../interfaces.py:138 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Erantzun honek erreferentzia egiten dion erantzunaren id-a" -#: ../interfaces.py:152 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME mota" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Moderatzailea e-postaz abisatu" -#: ../interfaces.py:162 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Aldaketa data" -#: ../interfaces.py:132 +#: ../interfaces.py:138 msgid "Name" msgstr "Izena" -#: ../interfaces.py:156 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "Erantzun berriak e-postaz bidali" @@ -119,11 +115,11 @@ msgstr "Erantzun berriak e-postaz bidali" msgid "Plone Discussions" msgstr "Plone Eztabaidak" -#: ../interfaces.py:125 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Elementu mota" -#: ../browser/controlpanel.py:70 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "Gorde" @@ -131,20 +127,32 @@ msgstr "Gorde" msgid "The set of unique commentators (usernames)" msgstr "Erantzunak eman dituzten erabiltzaileak (erabiltzaile-izenak)" -#: ../interfaces.py:34 -msgid "Total number of comments on this item" -msgstr "Elementu honen erantzun kopurua" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:68 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "E-posta abisuak" -#: ../browser/comments.py:238 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Zure erantzuna moderazio kolan dago." #. Default: "Comment" -#: ../browser/comments.py:129 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Eman erantzuna" @@ -159,27 +167,28 @@ msgid "bulkactions_publish" msgstr "Onartu" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:58 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Erantzuna formulario hau betez utzi dezakezu. Formatua testu arruntarena da. Web eta e-posta helbideak automatikoki klikagarri agertuko dira." #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." -#: ../browser/comments.py:52 +#: ../browser/comments.py:51 msgid "comment_description_markdown" msgstr "Erantzuna formulario hau betez utzi dezakezu. Formatua testu arruntarena da. Lotura era irudientzat 'Markdown' sintaxia erabili dezakezu." #. Default: "Comments are moderated." -#: ../browser/comments.py:64 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Erantzunak moderatuta daude." #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Erantzuna formulario hau betez utzi dezakezu. Formatua testu arruntarena da." -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} ${content} buruz" @@ -214,17 +223,22 @@ msgid "heading_moderate_comments" msgstr "Erantzunak moderatu" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:230 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Aukeratuta badago, erabiltzaile anonimoek erantzunak gehitu ditzakete login egin gabe. Berariaz gomendatzen dizugu Captcha kontrolen bat aktibatzea anonimoen erantzunak baimentzen badituzu." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:273 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Erabili aukera hau Captcha aktibatu edo desaktibatzeko. Instalatu plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet edo collective.z3cform.norobots aukerarik ez baldin badago." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" "Erantzunei dagozkien ezarpen batzuk ez daude Eztabaiden Kontrol Panelean.\n" @@ -232,62 +246,68 @@ msgstr "" "Erantzunen Moderazio Workflowa aktibatzeko, joan elementu-moten kontrol panelera, aukeratu 'Erantzuna' eta ezarri 'Erantzunen Moderazio Workflowa'." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:218 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Aukeratuta badago, atarian erantzunak gehitu daitezke. Edonola ere, elementu-mota bakoitzarentzat erantzunak baimendu beharko dituzu erabiltzaileak erantzunak ematen hasi aurretik." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:242 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "Aukeratuta badago, erantzuna 'Zain' izeneko egoeran geldituko da eta ez da argitaratuko. 'Erantzunak errebisatu' baimena duten erabiltzaileek ('Zuzentzailea' edo 'Kudeatzailea') argitaratu ditzakete albisteak. Erantzunen worfklowa pertsonalizatu nahi baduzu, elementu-moten kontrol panelera joan zaitez." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:310 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "Moderatzailearen notifikazioak bidali behar diren helbidea." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:298 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "Aukeratuta badago, moderatzaileari e-posta abisua helduko zaio erantzun bat gehitzean. Moderatzailearen e-posta atariaren E-postaren konfigurazioan dago (Atariaren 'Nork' helbidea)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:288 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Aukeratuta badago, erantzuna eman duenaren irudi bat agertuko da testuaren ondoan." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:257 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "Erabili aukera hau erantzunaren testua nolabait eraldatu behar bada. 'Testu arrunta' edo 'Testu argia'ren artean aukeratu dezakezu. 'Testu argia'-k testu arrunta HTML bihurtzen du lerro saltoak eta espazioak mantenduz, eta web helbideak eta e-postak klikagarri eginez." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Aukeratuta badago, erabiltzaileek euren erantzunen erantzunak e-postaz jasotzea aktibatu dezakete." #. Default: "Anonymous" -#: ../comment.py:158 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anonimoak" #. Default: "Enable anonymous comments" -#: ../interfaces.py:228 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Aktibatu erabiltzaile anonimoen erantzunak" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Aplikatu" #. Default: "Captcha" -#: ../interfaces.py:271 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:153 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Erantzuna" @@ -302,22 +322,22 @@ msgid "label_delete" msgstr "Ezabatu" #. Default: "Globally enable comments" -#: ../interfaces.py:216 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Erantzunak globalki aktibatu" #. Default: "Enable comment moderation" -#: ../interfaces.py:240 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "Erantzunen moderazioa aktibatu." #. Default: "Moderator Email Address" -#: ../interfaces.py:308 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Moderatzailearen e-posta helbidea" #. Default: "Enable moderator email notification" -#: ../interfaces.py:296 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Aktibatu moderatzaileari e-postaz abisatzea" @@ -332,7 +352,7 @@ msgid "label_says" msgstr "dio:" #. Default: "Show commenter image" -#: ../interfaces.py:286 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Erantzuna eman duenaren irudia erakutsi" @@ -342,22 +362,22 @@ msgid "label_show_full_comment_text" msgstr "Erakutsi testu osoa" #. Default: "Subject" -#: ../interfaces.py:149 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Gaia" #. Default: "Comment text transform" -#: ../interfaces.py:255 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Erantzunari aplikatu beharreko transformazioa" #. Default: "Enable user email notification" -#: ../interfaces.py:317 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Aktibatu erabiltzaileek e-postaz jakinaraztea" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" msgstr "" "Erantzuna berria:Izenburua: ${title} \n" @@ -367,7 +387,7 @@ msgstr "" "--" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" "Erantzun berria:\n" diff --git a/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po index 4433426..682e50e 100644 --- a/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po @@ -16,103 +16,99 @@ msgstr "" "X-Poedit-Language: Finnish\n" "X-Poedit-Country: FINLAND\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "" -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "Tämän keskustelun sisällä uniikki tunniste" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Lisää viesti" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Viestit tunnistamattomilta käyttäjiltä" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Kirjoittajan nimi" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Peru" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Viesti hyväksytty." -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Viesti poistettu." -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Kirjoittajan kuva" msgid "Commenting infrastructure for Plone" msgstr "Plone:n kommentointi- ja keskustelutoiminnot" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Keskustelu" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Luotu" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Viimeisimmän viestin ajankohta" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Ei käytössä" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Kommentointi- ja keskustelutoimintojen asetukset" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "Sähköposti" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Salli Kommentointi & Keskustelut" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Sen viestin tunniste johon tämä viesti vastaa" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME-tyyppi" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Ilmoitukset sähköpostitse tarkistajille" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Muutettu" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Nimi" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "" @@ -120,32 +116,44 @@ msgstr "" msgid "Plone Discussions" msgstr "Kommentointi & Keskustelut (Plone Discussions)" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Sisältötyyppi" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Kirjoittajat (käyttäjätunnukset)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Viestien kokonaismäärä" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Viestisi on vastaanotettu. Se tulee näkyviin heti kun ylläpito on hyväksynyt sen julkaistavaksi." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Lisää" @@ -160,22 +168,27 @@ msgid "bulkactions_publish" msgstr "Hyväksy valitut" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "" +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "" #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "" -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 msgid "comment_title" msgstr "" @@ -210,80 +223,91 @@ msgid "heading_moderate_comments" msgstr "Viestien esitarkistus" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Jos viestit tunnistamattomilta käyttäjiltä sallitaan, on erittäin suositeltavaa käyttää automaattisten roskapostittimien estintä (engl. captcha)." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 #, fuzzy msgid "help_captcha" msgstr "Roskaviestiautomaattien estimen (engl. captcha) käyttö. Jos mitään estintä ei ole valittavissa, järjestelmään ei ole asennettu mitään estintä. Soveltuvia estimiä ovat plone.formwidget.captcha ('Captcha') ja plone.formwidget.recaptcha ('ReCapthca')." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "Tarkista myös keskusteluun / kommentointiin liittyvät asetukset sisältötyyppien hallintapaneelissa ('Sisältötyypit')." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 #, fuzzy msgid "help_globally_enabled" msgstr "Huomaa, että keskustelu/kommentointi pitää myös lisäksi erikseen asettaa päälle halutuille sisältötyypeille ja/tai yksittäisille sisällöille." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Tarkistajana toimivalle ylläpitäjälle ilmoitetaan toimenpiteitä edellyttävistä viesteistä." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Näytetäänkö kirjoittajan kuva viestin yhteydessä." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Salli viestit tunnistamattomilta käyttäjiltä" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "toteuta" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Roskaviestien estin" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Viesti" @@ -298,22 +322,22 @@ msgid "label_delete" msgstr "Poista" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Keskustelu/kommentointitoiminnot käytössä" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Ilmoita viesteistä sähköpostitse ylläpitäjälle" @@ -328,7 +352,7 @@ msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Näytä kirjoittajan kuva" @@ -338,27 +362,27 @@ msgid "label_show_full_comment_text" msgstr "Näytä kokonaan" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Aihe" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po index c38af6a..267a2e9 100644 --- a/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po @@ -14,103 +14,99 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "Un commentaire a été posté." -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "Un id de commentaire unique pour cette conversation" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Ajouter un commentaire" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Commentaires anonymes" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Nom de l'auteur (pour l'affichage)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Annuler" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "Modifications enregistrées" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Commentaire approuvé." -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Commentaire supprimé." -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Portrait de l'utilisateur" msgid "Commenting infrastructure for Plone" msgstr "Infrastructure pour déposer des commentaires." -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Conversation" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Date de création" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Date du commentaire le plus récent" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Désactivé" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Paramètres des discussions" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "Édition annulée" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "Adresse courriel" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Activation des commentaires" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Id du commentaire dont ce commentaire répond" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "Type MIME" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Notification du modérateur par courriel" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Date de modification" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Nom" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "M'avertir des nouveaux commentaires par courriel." @@ -118,32 +114,44 @@ msgstr "M'avertir des nouveaux commentaires par courriel." msgid "Plone Discussions" msgstr "Plone Discussions" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Portal type" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "Enregistrer" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "L'ensemble des commentateurs uniques (identifiants)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Nombre total de commentaires pour cet élément" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "Notification des utilisateurs par courriel" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Votre commentaire attend d'être modéré." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Commenter" @@ -158,22 +166,28 @@ msgid "bulkactions_publish" msgstr "Approuver" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Vous pouvez ajouter un commentaire en complétant le formulaire ci-dessous. Le format doit être plain text. Les url et les courriels sont transformés en liens cliquables." +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Les commentaires sont modérés." #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Vous pouvez ajouter un commentaire en complétant le formulaire ci-dessous. Le format doit être plain text." -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} sur ${content}" @@ -208,79 +222,90 @@ msgid "heading_moderate_comments" msgstr "Modération des commentaires" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Si activé, les utilisateurs anonymes peuvent poster des commentaires sans se connecter. Il est fortement recommandé d'utiliser un captcha pour prévenir du spam si cette option est activée." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Utilisez cette option pour activer la validation par captcha pour les commentaires. Installez plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet ou collective.z3cform.norobots s'il n'y a aucune option de disponible." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" "Certaines options liées aux discussions ne sont pas dans \"Paramètres des discussions\".\n" "Pour activer les commentaires pour un type de contenu spécifique, allez dans \"Paramètres des types\", choisissez \"Commentaire\" et sélectionnez le workflow \"Workflow de modération des commentaires\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Si vous cochez cette case, les utilisateurs pourront poster des commentaires sur ce site. Vous devez néanmoins activer les commentaires pour des types de contenu spécifiques, dossiers, ou éléments avant que les utilisateurs puissent poster des commentaires." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "Si cette case est cochée, les commentaires ajoutés seront mis 'en attente' et seront invisibles pour les visiteurs. Un utilisateur ayant la permission 'Review comments' (Modérateur ou Administrateur) peut approuver les commentaires pour les rendre visibles. Vous pouvez choisir un workflow spécifique pour les commentaires depuis le menu de configuration des types de contenu." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "Addresse à laquelle les notifications de modération seront envoyées." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "Si activé, le modérateur est notifié si un commentaire requiert une attention particulière. Le courriel du modérateur est défini sur la page 'Envoi de courriels' de la configuration du site (Adresse d'expéditeur des courriels)." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Si activé, le portrait de l'utilisateur apparait à côté du commentaire." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "Choisissez si le texte des commentaires doit être éventuellement transformé. Vous pouvez choisir entre 'Plain text' et 'Intelligent text'. Ce dernier convertit le texte en HTML, en préservant notamment les retours chariots et l'indentation, et en transformant les url et les addresses courriel en liens cliquables." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Si vous cochez cette case, les utilisateurs pourront choisir d'être avertis par courriel des nouveaux commentaires." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anonyme" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Activer les commentaires anonymes" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Appliquer" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Commentaire" @@ -295,22 +320,22 @@ msgid "label_delete" msgstr "Supprimer" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Activer globalement les commentaires" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "Activer la modération des commentaires" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Addresse courriel du modérateur" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Activer la notification du modérateur par courriel" @@ -325,7 +350,7 @@ msgid "label_says" msgstr "a écrit :" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Afficher le portrait de l'utilisateur" @@ -335,28 +360,28 @@ msgid "label_show_full_comment_text" msgstr "afficher le texte complet du commentaire" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Sujet" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Transformation du texte du commentaire" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Activer la notification par courriel des utilisateurs" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 #, fuzzy msgid "mail_notification_message" msgstr "Un commentaire a été ajouté sur '${title}' à cette addresse : ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po index 525237d..8f8a427 100644 --- a/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po @@ -1,10 +1,10 @@ -# Translation of plone.app.discussion.pot to Italian +# Translation of plone.app.discussion.pot to Italian # Luca Fabbri , 2010 -# +# msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" "PO-Revision-Date: 2011-05-13 18:10+0100\n" "Last-Translator: Giorgio Borelli \n" "Language-Team: Plone i18n \n" @@ -18,103 +18,99 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Is-Fallback-For: it-it it-ch it-sm it-hr it-si\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "Un commento è stato inserito." -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "Id univoco del commento per questa conversazione" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Aggiungi un commento" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Commenti Anonimi" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Nome autore (per visualizzazione)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Annulla" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "Modifiche salvate" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Commento approvato." -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Commento eliminato." -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Immagine Commentatore" msgid "Commenting infrastructure for Plone" msgstr "Infrastruttura dei commenti per Plone" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Conversazione" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Data di creazione" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Data del commento più recente" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Disabilitato" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Impostazioni dei commenti" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "Modifiche annullate" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "E-mail" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Abilita commenti" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Id del commento a cui si risponde" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME type" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Notifiche e-mail" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Data di modifica" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Nome" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "Notificami nuovi commenti via e-mail" @@ -122,32 +118,44 @@ msgstr "Notificami nuovi commenti via e-mail" msgid "Plone Discussions" msgstr "Supporto ai commenti Plone" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Tipo di contenuto" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "Salva" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "L'insieme unico dei commentatori (username)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Totale dei commenti per questo contenuto" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "Notifiche utenti via e-mail" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Il tuo commento è in attesa di approvazione" #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Commenta" @@ -161,23 +169,31 @@ msgstr "Elimina" msgid "bulkactions_publish" msgstr "Approva" -#. Default: "You can add a comment by filling out the form below. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." +#: ../browser/comments.py:57 +#, fuzzy msgid "comment_description_intelligent_text" msgstr "Puoi aggiungere un commento compilando la form qui sotto. Utilizza testo semplice. Indirizzi web ed email saranno trasformati in collegamenti cliccabili." +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "I commenti vengono moderati." -#. Default: "You can add a comment by filling out the form below." -#: ../browser/comments.py:47 +#. Default: "You can add a comment by filling out the form below. Plain text formatting." +#: ../browser/comments.py:46 +#, fuzzy msgid "comment_description_plain_text" msgstr "Puoi aggiungere un commento compilando la form sotto. Utilizza il testo semplice." -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} su ${content}" @@ -212,17 +228,22 @@ msgid "heading_moderate_comments" msgstr "Moderazione commenti" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Se selezionato, gli utenti anonimi saranno in grado di inserire commenti senza autenticazione. E' altamente consigliato l'uso di captcha to prevenire spam se questa impostazione viene abilitata." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Usa questa impostazione per abilitare o disabilitare la validazione tramite captcha. Se nessuna opzione di captcha è disponibile, installa plone.formwidget.captcha o plone.formwidget.recaptcha." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" "Alcune impostazioni legate ai commenti non sono nel Pannello di controllo commenti.\n" @@ -230,62 +251,68 @@ msgstr "" "Per abilitare il workflow per la moderazione dei commenti, vai al Pannello dei Tipi di Contenuto, scegli \"Comment\" e imposta il workflow \"Comment Review Workflow\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Se selezionato, gli utenti saranno in grado di inserire commenti nel sito. Comunque, dovrai abilitare i commenti per specifici tipi di contenuto, cartelle o oggetti prima che gli utenti siano in grado di commentare." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "Se selezionato, i commenti verranno creati in stato 'In attesa' in cui sono non sono visibili pubblicamente. Un utento con il permesso 'Revisiona i commenti' ('Revisore' o 'Manager') possono approvare i commenti per renderli pubblici. Se si vuole abilitare un workflow personalizzato per i commenti, bisogna andare nel pannello di controllo dei tipi." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "Indirizzo a cui verranno spedite le notifiche per la moderazione." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "Se selezionato il moderatore riceverà una notifica se il commento dovrà necessita della sua attenzione. L'indirizzo email del moderatore può essere impostato nel pannello di controllo nella sezione 'Posta' (Indirizzo 'mittente' del sito)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Se selezionato, un'immagine dell'utente verrà mostrata a fianco dei commenti." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "Utilizzare questa impostazione per scegliere se il testo del commento deve essere trasformato in qualche modo. E' possibile scegliere tra 'Plain text' e 'Testo intelligente'. 'Testo intelligente' converte il testo in HTML dove le interruzioni di linea e le indentazioni vengono preservate, e gli indirizzi web o email vengono trasformati in collegamenti cliccabili." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Se selezionato, gli utenti possono scegliere di essere notificati ad ogni nuovo commenti via e-mail." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anonimo" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Abilita i commenti agli utenti anonimi" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Applica" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Commento" @@ -300,22 +327,22 @@ msgid "label_delete" msgstr "Elimina" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Abilita globalmente i commenti" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "Abilita la moderazione dei commenti" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Indirizzo email del moderatore" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Abilita le notifiche ai moderatori" @@ -330,7 +357,7 @@ msgid "label_says" msgstr ":" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Visualizza le immagini dei commentatori" @@ -340,29 +367,45 @@ msgid "label_show_full_comment_text" msgstr "mostra testo completo del commento" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Oggetto" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Transformazioni testo del commento" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Abilita notifica via e-mail" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" -msgstr "Un commento a '${title}' è stato inserito qui: ${link}\n\n---\n${text}\n---" +msgstr "" +"Un commento a '${title}' è stato inserito qui: ${link}\n" +"\n" +"---\n" +"${text}\n" +"---" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" -msgstr "Un commento su '${title}' è stato aggiunto qui: ${link}\n\n---\n${text}\n---\n\nApprova commento:\n${link_approve}\n\nElimina commento:\n${link_delete}" +msgstr "" +"Un commento su '${title}' è stato aggiunto qui: ${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" +"\n" +"Approva commento:\n" +"${link_approve}\n" +"\n" +"Elimina commento:\n" +"${link_delete}" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 diff --git a/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po index b8d95d4..a4d4142 100644 --- a/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po @@ -1,111 +1,112 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: \n" +"POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" "PO-Revision-Date: \n" "Last-Translator: Takeshi Yamamoto \n" "Language-Team: Hanno Schlichting \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0\n" +"Language-Code: en\n" +"Language-Name: English\n" +"Preferred-Encodings: utf-8 latin1\n" +"Domain: DOMAIN\n" -#: ../comment.py:249 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "コメントが投稿されました" -#: ../interfaces.py:282 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "このカンバセーションにユニークなコメントID" -#: ../browser/comments.py:71 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "コメントを追加" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "無名コメント" -#: ../interfaces.py:307 -msgid "Author name (for display)" -msgstr "作者名(表示用)" - -#: ../browser/comments.py:252 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "取り消す" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "変更が保存されました" -#: ../browser/moderation.py:141 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "コメントが承認されました" -#: ../browser/moderation.py:102 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "コメントが削除されました" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "コメント者の画像" msgid "Commenting infrastructure for Plone" msgstr "Ploneのコメント基盤" -#: ../interfaces.py:277 +#: ../interfaces.py:136 msgid "Conversation" msgstr "カンバセーション" -#: ../interfaces.py:308 +#: ../interfaces.py:167 msgid "Creation date" msgstr "作成日付" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "最も最近のコメントの日付" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "無効になりました" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "議論の設定" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "編集が取り消されました" -#: ../interfaces.py:294 +#: ../interfaces.py:153 msgid "Email" msgstr "メール" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "コメントを有効にする" -#: ../interfaces.py:285 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "このコメントが回答する先であるコメントのID" -#: ../interfaces.py:299 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIMEタイプ" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "モデレータへのメール通知" -#: ../interfaces.py:309 +#: ../interfaces.py:168 msgid "Modification date" msgstr "変更日付" -#: ../interfaces.py:279 +#: ../interfaces.py:138 msgid "Name" msgstr "名前" -#: ../interfaces.py:303 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "新しいコメントを私にメールで知らせる" @@ -113,32 +114,44 @@ msgstr "新しいコメントを私にメールで知らせる" msgid "Plone Discussions" msgstr "Plone 議論" -#: ../interfaces.py:272 +#: ../interfaces.py:131 msgid "Portal type" msgstr "ポータルタイプ" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "保存" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "ユニークなコメント者(ユーザ名)のセット" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "このアイテムでのコメントの合計数" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "ユーザへのメール通知" -#: ../browser/comments.py:245 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "コメントは司会の承認を待ちます" #. Default: "Comment" -#: ../browser/comments.py:127 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "コメント" @@ -153,22 +166,28 @@ msgid "bulkactions_publish" msgstr "承認する" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:56 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "下のフォームに書き込むことで、コメントを追加することができます。Webアドレスやメールアドレスは、クリッカブルリンクに変換されます。" +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:62 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "コメントはモデレートされました" #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:51 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "下のフォームに書き込むことで、コメントを追加することができます。プレーンテキスト形式です。" -#. Default: "${creator} on ${content}" -#: ../comment.py:50 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} が ${content} にコメント" @@ -203,17 +222,22 @@ msgid "heading_moderate_comments" msgstr "コメントをモデレートする" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "選ばれると、ログインせずに無名ユーザがコメントを投稿できるようになります。もしこの設定が有効にされるなら、キャプチャを使ってスパムを防ぐ解決策をとることをお勧めします。" +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "コメントでのキャプチャ検査を有効にするか無効にするかを設定するのにこれを使います。もし選択できないようになっていたら、 plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet または collective.z3cform.norobots をインストールしてください。" #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" "議論に関係するいくつかの設定は、議論コントロールパネルに置かれていません。\n" @@ -221,62 +245,68 @@ msgstr "" "コメントに対してモデレーションワークフローを有効にするには、タイプコントロールパネルに行き、「コメント」を選び、ワークフローを「コメント審査ワークフロー」に設定します。" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "選ばれると、このサイトでユーザがコメントを投稿できるようになります。とはいえ、ユーザがコメントを投稿できるようになるためには、さらにコンテンツタイプ、フォルダ、コンテンツオブジェクトに対して、コメントを有効にしなければなりません。" #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "選ばれると、コメントは投稿されると一般公衆からは見えない「保留」状態になります。「コメントを審査(Review comments}」パーミッションを持つユーザ、つまり審査員あるいは管理者がコメントを一般に見えるように承認することができます。カスタムコメントワークフローを有効にしたいなら、タイプコントロールパネルに行く必要があります。" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "モデレータへの通知が送られる送付先アドレス" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "選ばれると、コメントが注意を要するものであるかどうか、モデレータは通知を受けるようになります。モデレータのメールアドレスはメール設定コントロールパネルの中のサイト「差出人」アドレスです。" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "選ばれると、コメントの隣にユーザの画像が見えるようになります。" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "コメントテキストがなんらかの形で変換されるべきかどうかを選ぶのに、この設定を使います。「プレーンテキスト」と「インテリジェントテキスト」の間で選べるようになります。「インテリジェントテキスト」はプレーンテキストをHTMLに変換します。改行とインデントは温存され、Webアドレスやメールアドレスはクリッカブルリンクになります。" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "選ばれると、新しいコメントをメールによって通知してもらうように、ユーザが選べるようになります。" #. Default: "Anonymous" -#: ../comment.py:145 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "無名" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "無名コメントを有効にする" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "適用" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "キャプチャ" #. Default: "Comment" -#: ../interfaces.py:300 +#: ../interfaces.py:159 msgid "label_comment" msgstr "コメント" @@ -291,22 +321,22 @@ msgid "label_delete" msgstr "削除" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "サイト全体でコメントを有効にする" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "コメントのモデレーションを有効にする" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "モデレータのメールアドレス" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "モデレータへのメール通知を有効にする" @@ -321,7 +351,7 @@ msgid "label_says" msgstr "曰く:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "コメント者の画像を見せる" @@ -331,25 +361,31 @@ msgid "label_show_full_comment_text" msgstr "コメントテキストをそのまま見せる" #. Default: "Subject" -#: ../interfaces.py:296 +#: ../interfaces.py:155 msgid "label_subject" msgstr "題目" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "コメントテキスト変換" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "ユーザへのメール通知を有効にする" -#. Default: "A comment on '${title}' has been posted here: ${link}" -#: ../comment.py:53 +#. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" +#: ../comment.py:52 +#, fuzzy msgid "mail_notification_message" msgstr "'${title}' へのコメントが、ここに投稿されました: ${link}" +#. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" +#: ../comment.py:60 +msgid "mail_notification_message_moderator" +msgstr "" + #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 msgid "message_enable_comment_workflow" diff --git a/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po index 48da910..68dca59 100644 --- a/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po @@ -1,11 +1,10 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: \n" +"POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" "PO-Revision-Date: 2011-09-30 16:39+0100\n" "Last-Translator: NFG Net Facilities Group BV \n" "Language-Team: Nederlands \n" -"Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -14,137 +13,146 @@ msgstr "" "Language-Name: Dutch\n" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" +"Language: nl\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "Commentaar is geplaatst" -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "Een unieke ID voor dit commentaar" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Voeg opmerking toe" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Anoniem commentaar" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Auteur" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Annuleren" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "Wijzigingen opgeslagen" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Commentaar goedgekeurd" -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Commentaar verwijderd" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Profielfoto commentator" msgid "Commenting infrastructure for Plone" msgstr "Reactie infrastructuur voor Plone" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Conversatie" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Aanmaakdatum" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Datum van het laatste commentaar" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Uitgeschakeld" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Discussie instellingen" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "Bewerken geannulleerd." -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "E-mail" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Commentaar toestaan" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Id van commentaar waarop deze commentaar reageert" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME-type" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "E-mail notificatie voor de redactie" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Wijzigingsdatum" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Naam" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "Hou me middels e-mail op de hoogte van nieuwe commentaar." -#: plone.app.discussion/plone/app/discussion/configure.zcml +#: ./plone.app.discussion/plone/app/discussion/configure.zcml msgid "Plone Discussions" msgstr "Plone Discussies" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "type" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "Bewaren" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Lijst van commentatoren (gebruikernamen)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Totaal aantal commentaar op dit item" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "Gebruker E-mail Notificatie" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Je commentaar zal geplaatst worden na goedkeuring." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Commentaar toevoegen" @@ -159,22 +167,28 @@ msgid "bulkactions_publish" msgstr "Publiceren" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "U kunt commentaar toevoegen door onderstaand formulier in te vullen. Platte tekst formaat. Web en e-mail adressen worden omgezet in klikbare links." +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Commentaren zijn gemodereerd." #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "U kunt commentaar toevoegen door onderstaand formulier in te vullen. Platte tekst formaat." -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} over ${content}" @@ -209,77 +223,88 @@ msgid "heading_moderate_comments" msgstr "Commentaar modereren" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Indien geselecteerd, anonieme bezoekers kunnen commentaar achterlaten zonder in te loggen. Het is aanbevolen om de captcha-oplossing te gebruiken om spam te voorkomen als deze optie is ingeschakeld." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Indien geselecteerd, Captcha validatie wordt gebruikt voor het commentaar. Installeer plone.formwidget of plone.formwidget.recaptcha als er geen opties beschikbaar zijn." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "Sommige discussie instellingen staan niet op deze pagina. Om commentaar in te schakelen voor een specifiek content-type, ga naar het Typen instellingenscherm van het betreffende type en kies 'commentaar toestaan'. Om de moderatie-workflow in te schakelen, ga naar het Typen instellingenscherm en kies het type 'Comment' stel de 'Comment Review Workflow' in." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Indien geselecteerd, gebruikers kunnen commentaar plaatsen op de site. Het kan zijn dat commentaar voor een specifiek content-type ingeschakeld moet worden voordat commentaar mogelijk is." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "Indien geselecteerd, de moderator zal ingelicht worden als een commentaar aandacht nodig heeft." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "Emailadres van de moderator naar wie een notificatie zal worden gestuurd." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "Indien geselecteerd, de moderator zal ingelicht worden als een commentaar aandacht nodig heeft." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Indien geselecteerd, de profielfoto van een gebruiker wordt naast het commentaar getoond." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "Gebruik deze instelling om ervoor te kiezen of de commentaar tekst getransformeerd moet worden. U kunt kiezen uit 'Platte tekst' en 'Intelligente tekst'. 'Intelligente tekst' zet platte tekst om in HTML waarbij nieuwe regels en inspringen worden gehandhaaft, en waarbij web en e-mail adressen in klikbare links worden omgezet." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Indien geselecteerd kunnen gebruikers ervoor kiezen per e-mail bericht te ontvangen van nieuwe commentaar." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anoniem" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Anoniem commentariëren inschakelen" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Toepassen" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Commentaar" @@ -294,22 +319,22 @@ msgid "label_delete" msgstr "Verwijderen" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Commentaar globaal toestaan" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "Moderatie is ingeschakeld" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Moderator emailadres" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Notificatie voor moderator inschakelen" @@ -324,7 +349,7 @@ msgid "label_says" msgstr "zegt:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Toon portret commentator" @@ -334,27 +359,27 @@ msgid "label_show_full_comment_text" msgstr "Toon het volledige commentaar" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Onderwerp" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Reactie tekst transformatie" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Gebruikers-notificatie ingeschakeld" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" msgstr "Een commentaar op '${title}' is geplaatst: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "Commentaar op '${title}' is geplaatst: ${link}" diff --git a/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po index 8169a24..6b94ac8 100644 --- a/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po @@ -14,103 +14,99 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "" -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "En kommentar-id unik for denne kommentaren" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Legg til en kommentar" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Anonym kommentar" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Forfatternavn (synlig)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Avbryt" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Kommentaren er godkjent" -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Kommentaren er slettet" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Forfatterbilde" msgid "Commenting infrastructure for Plone" msgstr "" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Diskusjon" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Dato opprettet" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Dato for den nyeste kommentaren" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Slått av" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Innstillinger for kommentarer" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "E-post" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Slå på kommentarer" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Id til kommentar som denne kommentaren er en kommentar til" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME-type" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Varsling av moderator på epost" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Endringsdato" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Navn" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "" @@ -118,32 +114,44 @@ msgstr "" msgid "Plone Discussions" msgstr "" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Portaltype" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Listen over forfattere (brukernavn)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Antall kommentarer på denne artikkelen" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Kommentaren venter på godkjenning av moderator." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Kommentér" @@ -158,22 +166,27 @@ msgid "bulkactions_publish" msgstr "Godkjenn" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "" +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "" #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "" -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 msgid "comment_title" msgstr "" @@ -208,18 +221,23 @@ msgid "heading_moderate_comments" msgstr "Moderer kommentar" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Dersom innstillingen er valgt kan anonyme brukere kommentere uten å logge inn. Det er anbefalt å bruke en captcha-løsning for å forhindre nettsøppel dersom denne innstillingen er valgt" +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 #, fuzzy msgid "help_captcha" msgstr "Bruk denne innstillingen for å aktivere eller deaktivere captcha-validering av kommentarer. Installér plone.formwidget.captcha eller plone.formwidget.recaptcha dersom det mangler valg her." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 #, fuzzy msgid "help_discussion_settings_editform" msgstr "" @@ -227,64 +245,70 @@ msgstr "" "For å aktivere arbeidsflyten for moderering, må man gå til kontrollpanelet for innholdstyper og velge \"Kommentarer\" og stille inn arbeidsflyten til å vere \"Comment Review Workflow\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 #, fuzzy msgid "help_globally_enabled" msgstr "Dersom denne instillingen er valgt kan brukerene legge til kommentarer på nettstedet. Men du må likevel aktivere kommentarer for spesifikke innholdstyper, mapper eller innholdsobjekter før brukerene får lov til å legge til kommentarer." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Dersom innstillingen er valgt vil moderatoren bli varslet når en kommentar er lagt til." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Dersom denne er valgt vil bildet av brukeren vise ved siden av kommentaren." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Bruk" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "" @@ -299,22 +323,22 @@ msgid "label_delete" msgstr "Slett" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Aktiver kommentarer globalt" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Slå på e-postvarsling av moderator" @@ -329,7 +353,7 @@ msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "" @@ -339,27 +363,27 @@ msgid "label_show_full_comment_text" msgstr "Vis hele kommentaren" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/plone.app.discussion.pot b/plone/app/discussion/locales/plone.app.discussion.pot index 50014ec..1a7bd37 100644 --- a/plone/app/discussion/locales/plone.app.discussion.pot +++ b/plone/app/discussion/locales/plone.app.discussion.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Hanno Schlichting \n" "Language-Team: Hanno Schlichting \n" @@ -14,107 +14,103 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../browser/comments.py:90 +#: ../browser/comments.py:95 msgid "" msgstr "" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "" -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "" -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "" msgid "Commenting infrastructure for Plone" msgstr "" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "" @@ -122,32 +118,44 @@ msgstr "" msgid "Plone Discussions" msgstr "" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "" #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "" @@ -162,22 +170,27 @@ msgid "bulkactions_publish" msgstr "" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "" +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "" #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "" -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 msgid "comment_title" msgstr "" @@ -212,77 +225,88 @@ msgid "heading_moderate_comments" msgstr "" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "" +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "" #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" -#. Default: "If selected, users are able to post comments on the site. However, you must enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "" #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "" @@ -297,22 +321,22 @@ msgid "label_delete" msgstr "" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "" @@ -327,7 +351,7 @@ msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "" @@ -337,27 +361,27 @@ msgid "label_show_full_comment_text" msgstr "" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po index b304ee2..c853f89 100644 --- a/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po @@ -15,103 +15,99 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Poedit-Language: Português do Brasil\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "Comentário adicionado." -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "Um comentário com ID exclusivo para esta conversação" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Adicionar comentário" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Comentários Anônimos" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Nome do autor (para exibição)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Cancelar" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "Alterações salvas" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Comentário aprovado" -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Comentário excluído." -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Imagedo autor" msgid "Commenting infrastructure for Plone" msgstr "Infraestrutura de comentários para o Plone" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Conversação" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Data de criação" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Data do comentário mais recente" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Desativado" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Configurações da discussão" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "Edição cancelada" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "E-mail" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Permitir comentários" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "ID do comentário para qual este comentário é resposta" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME type" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Notificação de e-mail para o moderador" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Data de modificação" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Nome" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "Receber avisos por e-mail para novos comentários." @@ -119,32 +115,44 @@ msgstr "Receber avisos por e-mail para novos comentários." msgid "Plone Discussions" msgstr "Plone Discussions" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Tipo de objeto" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "Salvar" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Lista de usuários que fizeram comentários (nome de usuário)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Número total de comentários para este item" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "Notificação de e-mail para o usuário" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Seu comentário está pendente e aguarda a aprovação do moderador." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Comentar" @@ -159,22 +167,28 @@ msgid "bulkactions_publish" msgstr "Publicar" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Você pode adicionar um comentário preenchendo o formulário a seguir. Campo de texto simples. Endereços web e e-mail são transformados em links clicáveis." +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Os comentários são moderados" #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Você pode adicionar um comentário preenchendo o formulário a seguir. Campo de texto simples." -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} em ${content}" @@ -209,17 +223,22 @@ msgid "heading_moderate_comments" msgstr "Moderar comentários" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Se selecionado, usuários anonimos poderão adicionar comentários sem precisar de usuário e senha. É altamente recomendável a utilização de uma solução de captcha para evitar spam caso esta configuração esteja ativada." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Utilize esta opção para ativar ou desativar o Captcha para os comentários. Instale plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet ou collective.z3cform.norobots caso não tenha nenhuma opção disponível." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" "Algumas configurações relacionadas a comentários não estão localizadas no Painel de Controle de Comentários.\n" @@ -227,62 +246,68 @@ msgstr "" "Para ativar o workflow de moderação de comentários, vá até a configuração de Tipos no Painel de Controle, escolha \"Comentário\" e selecione o workflow para \"Workflow de Revisão de Comentários\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Caso selecionado, permite que os visitantes adicionem comentários ao site. Porém, você deve habilitar comentários para cada tipo de conteúdo antes que os usuários possam adicionar comentários." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "Caso selecionado, os comentários serão adicionados no estado \"Pendente\", que é invisível ao público. Usuários com permissão para 'Revisar Comentários' ('Revisor' ou 'Administrador') podem aprovar os comentários para torná-los visíveis ao público. Caso queira ativar um workflow de comentários personalizado, você deve ir até a Configuração dos Tipos no Painel de Controle." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "Endereço para o qual as notificações do moderador serão enviadas." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "Se selecionado, o moderador será avisado quando um comentário precisar de atenção. O endereço de e-mail do moderador pode ser encontrado nas configurações de e-mail no Painel de Controle (campo Endereço de 'Remetente' do site)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Se selecionado, uma imagem do usuário será exibida próxima ao comentário." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "Use esta configuração para escolher se o texto do comentário deve ser transformado. Você pode escolher entre 'texto puro' e 'texto inteligente'. 'Texto inteligente' converte texto simples em HTML, onde as quebras de linha e os recuos são preservados, e os endereços web e e-mail são transformados em links clicáveis." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Se selecionado, permite aos usuários solicitar o recebimento de avisos por e-mail sempre que hover um novo comentário." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anônimo" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Permitir comentários anônimos." +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Aplicar" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Comentário" @@ -297,22 +322,22 @@ msgid "label_delete" msgstr "Excluir" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Ativar comentários globalmente" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "Ativar moderação de comentários" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Endereço de e-mail do moderador" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Ativar notificação ao moderador" @@ -327,7 +352,7 @@ msgid "label_says" msgstr "disse:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Exibir imagem do autor" @@ -337,28 +362,28 @@ msgid "label_show_full_comment_text" msgstr "Exibir texto completo" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Assunto" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Transformações aplicadas ao texto do comentário" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Ativar notificação de e-mail para os usuários" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 #, fuzzy msgid "mail_notification_message" msgstr "Um comentário em '${title}' foi adicionado aqui: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po index 62a55c8..e5ee778 100644 --- a/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po @@ -15,103 +15,99 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "Un comentariu a fost postat." -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "Un id de comentariu unic pentru aceasta conversatie" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Adauga comentariu" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Comentarii de la anonimi" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Nume autor (pentru afisare)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Anuleaza" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "Schimbari salvate" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Comentariul a fost aprobat." -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Comentariul a fost sters." -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Imaginea comentatorului" msgid "Commenting infrastructure for Plone" msgstr "Infrastructura de comentarii pentru Plone" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Conversatie" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Data creerii" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Data celui mai recent comentariu" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Dezactivat" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Setarile Discutiilor" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "Editare anulata" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "Email" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Permite Comentarii" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Id-ul comentariului pentru care acest comentariu raspunde" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "Tip MIME" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Notificare Moderatorului prin Email" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Data modificarii" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Nume" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "Anuntama de noi comentarii prin email." @@ -119,32 +115,44 @@ msgstr "Anuntama de noi comentarii prin email." msgid "Plone Discussions" msgstr "Discutii Plone" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Tip obiect" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "Salveaza" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Setul comentatorilor unici (nume de utilizator)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Numarul total de comentarii al acestui obiect" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "Notificarea utilizatorului prin email" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Comentariul tau asteapta sa fie moderat." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Comentariu" @@ -159,22 +167,28 @@ msgid "bulkactions_publish" msgstr "Aproba" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Poti adauga un comentariu completand formularul de mai jos. Formatare de text simpla doar. Adresele de email si web sunt transformate in link-uri." +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Comentariile sunt moderate." #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Poti adauga un comentariu prin completarea formularului de mai jos. Format de text simplu doar." -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} al ${content}" @@ -209,77 +223,91 @@ msgid "heading_moderate_comments" msgstr "Modereaza comentarii" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Daca selectat, utilizatorii anonimi vor putea posta comentarii fara a fi autentificati. Este recomandat a se folosi o solutie captcha pentru a preveni spam-ul daca aceasta setare este activata." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Foloseste aceasta setare pentru a activa sau dezactiva validarea Captcha a comentariilor. Instaleaza plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet sau collective.z3cform.norobots daca nu este nici o optiune disponibila." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" -msgstr "Unele setari legate de discutii nu sunt localizate in Panoul de Discutii.\nPentru a activa comentarii pentru un tip specific de obiect, dute la Panoul de Control al Tipurilor pentru acest obiect si selecteaza \"Permite comentarii\".\nPentru a alege workflow-ul de moderare pentru comentarii, dute la Panoul de Control pentru Tipuri de obiect, alege \"Comentariu\" si seteaza workflow-ul la \"Workflow de moderare al Comentariilor\"." +msgstr "" +"Unele setari legate de discutii nu sunt localizate in Panoul de Discutii.\n" +"Pentru a activa comentarii pentru un tip specific de obiect, dute la Panoul de Control al Tipurilor pentru acest obiect si selecteaza \"Permite comentarii\".\n" +"Pentru a alege workflow-ul de moderare pentru comentarii, dute la Panoul de Control pentru Tipuri de obiect, alege \"Comentariu\" si seteaza workflow-ul la \"Workflow de moderare al Comentariilor\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Daca selectat, utilizatorii pot posta comentarii in acest site. Totusi, trebuie sa activezi comentariile pentru tipurile de obiecte in mod specific, fie directoare sau alte tipurile de obiect inainte ca utilizatorii sa poata posta comentarii." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "Daca selectat, comentariile vor intra intr-o stare de 'Asteptare' in care ele sunt invizibile publicului. Un utilizator cu permisia 'Modereaza Comentarii' ('Moderator' sau 'Manager') poate aprova comentariile pentru a le face vizibile publicului. Daca doresti sa activezi un workflow de comentariu specific, trebuie sa mergi la panoul de control al obiectelor" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "Adresa de email la care notificarile de moderare vor fi trimise." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "Daca selectat, moderatorul este notificat daca un comentariu are nevoie de atentie. Adresa de email al moderatorului poate fi gasita in panoul de control numit 'Setari mail' (Adresa 'De la' pentru Site)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Daca selectat, o imagine al utilizatorului este afisata langa comentariul sau." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "Foloseste aceasta setare pentru a alege daca textul comentariului ar trebui sa fie transformat intr-un fel. Poti alege intre 'Text simplu' si 'Text inteligent'. 'Text inteligent' transforma textul simplu in HTML unde indentarea si liniile sunt pastrate si adresele de email si web sunt transformate in link-uri." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Daca selectat, utilizatorii pot alege sa fie notificati de noi comentarii prin email." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anonimi" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Permite comentariile anonime" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Aplica" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Comentariu" @@ -294,22 +322,22 @@ msgid "label_delete" msgstr "Sterge" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Activeaza comentariile in mod global" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "Activeaza moderarea comentariilor" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Adresa de email al moderatorului de comentarii" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Activeaza notificarea moderatorului de comentarii prin email" @@ -324,7 +352,7 @@ msgid "label_says" msgstr "zice:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Arata imaginea comentatorului" @@ -334,29 +362,44 @@ msgid "label_show_full_comment_text" msgstr "Arata textul intreg al comentariului" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Subiect" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Transformarea textului comentariului" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Activeaza notificarea utilizatorului prin email" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" -msgstr "Un comentariu pe '${title}' a fost postat aici: ${link}\n\n---\n${text}\n---\n" +msgstr "" +"Un comentariu pe '${title}' a fost postat aici: ${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" -msgstr "Un comentariu pe '${title}' a fost postat aici: ${link}\n\n---\n${text}\n---\nAproba comentariul:\n${link_approve}\n\nSterge comentariul:\n${link_delete}\n" +msgstr "" +"Un comentariu pe '${title}' a fost postat aici: ${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" +"Aproba comentariul:\n" +"${link_approve}\n" +"\n" +"Sterge comentariul:\n" +"${link_delete}\n" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 diff --git a/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po index 69e1fd0..78d6353 100644 --- a/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po @@ -14,11 +14,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:290 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "" -#: ../interfaces.py:135 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "" @@ -30,11 +30,7 @@ msgstr "" msgid "Anonymous Comments" msgstr "" -#: ../interfaces.py:160 -msgid "Author name (for display)" -msgstr "" - -#: ../browser/comments.py:243 +#: ../browser/comments.py:251 #: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "" @@ -43,11 +39,11 @@ msgstr "" msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:138 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "" -#: ../browser/moderation.py:99 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "" @@ -58,16 +54,16 @@ msgstr "" msgid "Commenting infrastructure for Plone" msgstr "" -#: ../interfaces.py:130 +#: ../interfaces.py:136 msgid "Conversation" msgstr "" -#: ../interfaces.py:161 +#: ../interfaces.py:167 msgid "Creation date" msgstr "" #: ../interfaces.py:40 -msgid "Date of the most recent comment" +msgid "Date of the most recent public comment" msgstr "" #: ../vocabularies.py:44 @@ -82,7 +78,7 @@ msgstr "" msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:147 +#: ../interfaces.py:153 msgid "Email" msgstr "" @@ -90,11 +86,11 @@ msgstr "" msgid "Enable Comments" msgstr "" -#: ../interfaces.py:138 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "" -#: ../interfaces.py:152 +#: ../interfaces.py:158 msgid "MIME type" msgstr "" @@ -102,15 +98,15 @@ msgstr "" msgid "Moderator Email Notification" msgstr "" -#: ../interfaces.py:162 +#: ../interfaces.py:168 msgid "Modification date" msgstr "" -#: ../interfaces.py:132 +#: ../interfaces.py:138 msgid "Name" msgstr "" -#: ../interfaces.py:156 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "" @@ -118,7 +114,7 @@ msgstr "" msgid "Plone Discussions" msgstr "" -#: ../interfaces.py:125 +#: ../interfaces.py:131 msgid "Portal type" msgstr "" @@ -130,20 +126,32 @@ msgstr "" msgid "The set of unique commentators (usernames)" msgstr "" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" + #: ../interfaces.py:34 -msgid "Total number of comments on this item" +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." msgstr "" #: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "" -#: ../browser/comments.py:236 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "" #. Default: "Comment" -#: ../browser/comments.py:127 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "" @@ -177,8 +185,8 @@ msgstr "" msgid "comment_description_plain_text" msgstr "" -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 msgid "comment_title" msgstr "" @@ -213,12 +221,17 @@ msgid "heading_moderate_comments" msgstr "" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:230 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "" +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:273 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "" @@ -228,62 +241,68 @@ msgid "help_discussion_settings_editform" msgstr "" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:218 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "" #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:242 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:310 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:298 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:288 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:257 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../comment.py:158 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "" #. Default: "Enable anonymous comments" -#: ../interfaces.py:228 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "" #. Default: "Captcha" -#: ../interfaces.py:271 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "" #. Default: "Comment" -#: ../interfaces.py:153 +#: ../interfaces.py:159 msgid "label_comment" msgstr "" @@ -298,22 +317,22 @@ msgid "label_delete" msgstr "" #. Default: "Globally enable comments" -#: ../interfaces.py:216 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "" #. Default: "Enable comment moderation" -#: ../interfaces.py:240 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:308 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:296 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "" @@ -328,7 +347,7 @@ msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:286 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "" @@ -338,27 +357,27 @@ msgid "label_show_full_comment_text" msgstr "" #. Default: "Subject" -#: ../interfaces.py:149 +#: ../interfaces.py:155 msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: ../interfaces.py:255 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:317 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po index 379227e..8ecb817 100644 --- a/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po @@ -9,108 +9,106 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +"Language-Code: en\n" +"Language-Name: English\n" "Preferred-Encodings: utf-8 latin1\n" +"Domain: DOMAIN\n" "X-Is-Fallback-For: sv-fi sv-se\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "En kommentar har postats." # kommentarstråd? -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "En id unik för denna kommentar" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Lägg till en kommentar" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "Anonym kommentar" -# synlig??? -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Författarnamn (synlig)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Avbryt" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "Ändringar sparade" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Kommentaren har nu godkänts." -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Kommentaren har nu raderats." -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "Porträtt av kommentatorn" msgid "Commenting infrastructure for Plone" msgstr "Infrastruktur för kommentarer i Plone" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Diskussion" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Skapelsedatum" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Datum för den senaste kommentaren" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Inaktiverad" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Inställningar för kommentarer" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "Redigering avbruten" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "E-post" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "Aktivera kommentarer" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Id för den kommentar som denna kommentar besvarar" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME-type" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Varsling av moderator på epostAvisering till moderatorn med e-post" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Ändringsdatum" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "Namn" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "Avisera mig om nya kommentarer med e-post." @@ -118,32 +116,44 @@ msgstr "Avisera mig om nya kommentarer med e-post." msgid "Plone Discussions" msgstr "Plone Discussions" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Portaltyp" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "Spara" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Lista över kommentatorer (användarnamn)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Antal kommentarer till denna post" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "Avisering till användare med e-post" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Din kommentar inväntar moderatorns godkännande." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "Kommentera" @@ -158,22 +168,28 @@ msgid "bulkactions_publish" msgstr "Godkänn" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Du kan lägga till en kommentar genom att fylla i fälten nedan. Webbadresser och e-postadresser konverteras till klickbara länkar." +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Kommentaren visas när den godkänts av moderatorn." #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Du kan lägga till en kommentar genom att fylla i fälten nedan." -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} om ${content}" @@ -208,80 +224,91 @@ msgid "heading_moderate_comments" msgstr "Moderera kommentarer" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Tillåt anonyma användare att kommentera utan att logga in. För att undvika skräppost, rekommenderas starkt att Captcha-validering aktiveras." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Aktivera captcha-validering av kommentarer. Om listrutan saknar alternativ: installera plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet eller collective.z3cform.norobots." # NOTE: "\n # does not work. #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "Vissa inställningar för kommentarer finns inte på denna kontrollpanel. — För att aktivera kommentarer för en viss innehållstyp, välj denna på kontrollpanelen \"Innehållstyper\" och markera rutan \"Tillåt kommentarer \". — För att aktivera ett arbetsflöde för moderation av kommentarer, välj \"Kommentar\" på kontrollpanelen \"Innehållstyper\" och sätt nytt arbetsflöde \"Comment Review Workflow\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Ge användarna möjlighet att kommentera innehållsposter. Dessutom måste du aktivera kommentarer för berörda innehållstyper, mappar eller poster." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "Nya kommentarer får arbetsflödesstatus \"Pending\", och blir inte publikt tillgängliga förrän de godkänns av en moderator. Moderatorn behöver behörigheten \"Review comments\", rollerna \"Reviewer\" och \"Manager\" har det som standard. — För att ge kommentarer ett anpassat arbetsflöde, använd kontrollpanelen \"Innehållstyper\"." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "E-postadress för aviseringar till moderatorn." # " The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" is FALSE! #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "Avisera moderatorn med e-post när en ny kommentar behöver åtgärdas." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Visa ett porträtt av kommentatorn bredvid kommentaren." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "\"Plain text\": Endast radbrytningar bevaras. — \"Intelligent text\": Konvertering till HTML; radbrytningar och indrag bevaras, webbadresser och e-postadresser blir klickbara länkar." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Ge inloggade användare möjlighet att välja att bli aviserade med e-post om nya kommentarer." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "Anonym" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Tillåt anonyma kommentarer" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Verkställ" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Kommentar" @@ -296,22 +323,22 @@ msgid "label_delete" msgstr "Radera" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Aktivera kommentarer globalt" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "Aktivera moderation för kommentarer" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Moderatorns e-postadress" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Aktivera avisering med e-post till moderatorn" @@ -326,7 +353,7 @@ msgid "label_says" msgstr "säger:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Visa porträtt av kommentatorn" @@ -336,22 +363,22 @@ msgid "label_show_full_comment_text" msgstr "visa hela kommentaren" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Ämne" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Texttransformering för kommentarer" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Aktivera e-post-avisering till användare" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" msgstr "" "En kommentar till '${title}' har postats här: ${link}\n" @@ -361,7 +388,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" "En kommentar till '${title}' har postats här: ${link}\n" diff --git a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po index 2cf27b7..86fdad6 100644 --- a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po @@ -18,7 +18,7 @@ msgstr "" msgid "A comment has been posted." msgstr "Коментар додано." -#: ../interfaces.py:135 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "Унікальний ідентифікатор коментаря для цієї розмови" @@ -30,7 +30,7 @@ msgstr "Додати коментар" msgid "Anonymous Comments" msgstr "Анонімне коментування" -#: ../browser/comments.py:247 +#: ../browser/comments.py:251 #: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "Скасувати" @@ -39,11 +39,11 @@ msgstr "Скасувати" msgid "Changes saved" msgstr "Зміни збережено" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "Коментар опубліковано." -#: ../browser/moderation.py:99 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Коментар знищено." @@ -54,17 +54,17 @@ msgstr "Зображення коментатора" msgid "Commenting infrastructure for Plone" msgstr "Інфраструктура коментування в Plone" -#: ../interfaces.py:130 +#: ../interfaces.py:136 msgid "Conversation" msgstr "Розмова" -#: ../interfaces.py:161 +#: ../interfaces.py:167 msgid "Creation date" msgstr "Дата створення" #: ../interfaces.py:40 -msgid "Date of the most recent comment" -msgstr "Дата останнього коментаря" +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" @@ -78,7 +78,7 @@ msgstr "Налаштуванняя коментування" msgid "Edit cancelled" msgstr "Редагування скасовано" -#: ../interfaces.py:147 +#: ../interfaces.py:153 msgid "Email" msgstr "Електронна адреса" @@ -86,11 +86,11 @@ msgstr "Електронна адреса" msgid "Enable Comments" msgstr "Увімкнути можливість додавати коментарі" -#: ../interfaces.py:138 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "Id коментаря, відповіддю на який - є цей коментар" -#: ../interfaces.py:152 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME-тип" @@ -98,15 +98,15 @@ msgstr "MIME-тип" msgid "Moderator Email Notification" msgstr "Сповіщення модератора електронною поштою" -#: ../interfaces.py:162 +#: ../interfaces.py:168 msgid "Modification date" msgstr "Дата зміни" -#: ../interfaces.py:132 +#: ../interfaces.py:138 msgid "Name" msgstr "Ім'я" -#: ../interfaces.py:156 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "Повідомляти про нові коментарі поштою." @@ -114,7 +114,7 @@ msgstr "Повідомляти про нові коментарі поштою." msgid "Plone Discussions" msgstr "Коментування в Plone" -#: ../interfaces.py:125 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Портал тип" @@ -126,9 +126,13 @@ msgstr "Зберегти" msgid "The set of unique commentators (usernames)" msgstr "Перелік коментаторів (імена користувачів)" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" + #: ../interfaces.py:34 -msgid "Total number of comments on this item" -msgstr "Загальна кількість коментарів до цього об'єкта" +msgid "Total number of public comments on this item" +msgstr "" #: ../comment.py:158 msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." @@ -138,11 +142,11 @@ msgstr "Не доступне перетворення '%s' => '%s'. Не вда msgid "User Email Notification" msgstr "Сповіщення користувача електронною поштою" -#: ../interfaces.py:160 +#: ../interfaces.py:166 msgid "Username of the commenter" msgstr "Ім'я автора коментаря" -#: ../browser/comments.py:240 +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "Ваш коментар очікує затвердження модератором." @@ -217,17 +221,17 @@ msgid "heading_moderate_comments" msgstr "Модерування коментарів" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:230 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "Якщо вибрано - то анонімні користувачі зможуть додавати коментарі без входу в систему. Для таких випадків рекомендуєтсья використовувати капчу, щоб запобігти надсиланню спаму." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:328 +#: ../interfaces.py:334 msgid "help_anonymous_email_enabled" msgstr "Якщо вибрано, анонімний користувач повинен буде вказати свою електронну пошту." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:273 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "Використовуйте цей параметр, щоб увімкнути або вимкнути капчу для коментарів. Для цього спершу встановіть plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet або collective.z3cform.norobots." @@ -240,37 +244,37 @@ msgstr "" "To enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\".\"" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:218 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "Якщо вибрано, користувачі зможуть додавати коментарі на сайт. Але спочатку необхідно увімкнути можливість коментування для певних типів вмісту, тек, об'єктів." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:242 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "Якщо вибрано, коментарі увійде в стан 'В очікуванні', у якому вони невидимі для громадськості. Користувач з правом 'Огляд коментарів' ('Рецензент' або 'Менеджер') може схвалити коментар, щоб зробити їх видимими для громадськості. Якщо ви хочете налаштувати робочий процес коментарів, ви повинні піти в панель керування типів." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:310 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "Адреса, за якою модератору будуть надсилатися повідомлення." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:298 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "Якщо вибрано, модератор отримує повідомлення, якщо коментар вимагає уваги. Адресу електронної пошти модератора можна знайти в 'Пошта' панелі керування (Адреса 'Від')" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:288 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "Якщо вибрано, зображення коментатора буде відображатись поруч з коментарем." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:257 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "Виберіть як повинен бути перетворений текст коментаря. Ви можете вибрати між 'Звичайний текст' і 'Інтелектуальні тексту'. 'Інтелектуальний текст' перетворює текст в HTML, де рядки і відступи зберігаються, інтернет адреси та адреси електронної пошти перетворяться в активні посилання." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "Якщо вибрано, користувачі зможуть обрати можливість отримувати нотифікації про нові коментарі поштою." @@ -281,12 +285,12 @@ msgid "label_anonymous" msgstr "Анонім" #. Default: "Enable anonymous comments" -#: ../interfaces.py:228 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "Увімкнути можливість анонімного коментування" #. Default: "Enable anonymous email field" -#: ../interfaces.py:326 +#: ../interfaces.py:332 msgid "label_anonymous_email_enabled" msgstr "Увімкнути поле електронної адреси для аноніма" @@ -296,12 +300,12 @@ msgid "label_apply" msgstr "Застосувати" #. Default: "Captcha" -#: ../interfaces.py:271 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "Капча" #. Default: "Comment" -#: ../interfaces.py:153 +#: ../interfaces.py:159 msgid "label_comment" msgstr "Коментар" @@ -316,22 +320,22 @@ msgid "label_delete" msgstr "Знищити" #. Default: "Globally enable comments" -#: ../interfaces.py:216 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "Увімкнути коментування для цілого сайту" #. Default: "Enable comment moderation" -#: ../interfaces.py:240 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "Увімкнути модерування коментарів" #. Default: "Moderator Email Address" -#: ../interfaces.py:308 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Електронна адреса модератора" #. Default: "Enable moderator email notification" -#: ../interfaces.py:296 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Увімкнути сповіщення модератора" @@ -346,7 +350,7 @@ msgid "label_says" msgstr "каже:" #. Default: "Show commenter image" -#: ../interfaces.py:286 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "Показати зображення коментатора" @@ -356,17 +360,17 @@ msgid "label_show_full_comment_text" msgstr "показати повний текст коментаря" #. Default: "Subject" -#: ../interfaces.py:149 +#: ../interfaces.py:155 msgid "label_subject" msgstr "Тема" #. Default: "Comment text transform" -#: ../interfaces.py:255 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "Перетворення тексту коментаря" #. Default: "Enable user email notification" -#: ../interfaces.py:317 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "Увімкнути надcилання нотифікації користувачу через електронну адресу" diff --git a/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po index 010c434..f692907 100644 --- a/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" "PO-Revision-Date: 2011-08-19 12:23+0800\n" "Last-Translator: Jian Aijun \n" "Language-Team: plone \n" @@ -14,104 +14,101 @@ msgstr "" "Language-Code: zh_CN\n" "Language-Name: Chinese (Simplified)\n" "Preferred-Encodings: utf-8\n" +"Domain: DOMAIN\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "一个评论已发布。" -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "此对话的评论 ID" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "添加​​评论" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "匿名评论" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "作者的名称(显示)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "取消" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "更改已保存" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "评论已批准。" -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "评论已删除。" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "评论者头像" msgid "Commenting infrastructure for Plone" msgstr "Plone 的评论功能" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "对话" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "创建日期" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "最近的评论日期" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "禁用" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "评论设置" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "编辑已取消" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "Email" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "启用评论" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "针对回复评论ID" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME 类型" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "Email 通知审核者" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "修改日期" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "名称" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "有新的评论,通过 Email 通知我" @@ -119,32 +116,44 @@ msgstr "有新的评论,通过 Email 通知我" msgid "Plone Discussions" msgstr "Plone 评论" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "Portal 类型" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "保存" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "评论者(用户名)的集合" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "这个对话的评论总数" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "Email 通知用户" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "您的评论正等待审核者的批准。" #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "发表评论" @@ -159,22 +168,28 @@ msgid "bulkactions_publish" msgstr "批准" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "您可以通过填写以下表单发表评论,使用纯文本格式。网页和电子邮件地址将转换为可点击链接。" +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "评论将被审核。" #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "您可以通过填写以下表单发表评论,使用纯文本格式。" -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} 在 ${content}" @@ -209,17 +224,22 @@ msgid "heading_moderate_comments" msgstr "审核评论" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "如果选中,匿名用户可不登录的情况下发布评论。如果启用了此设置,强烈建议使用验证码,以防止垃圾评论。" +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "设置启用或禁用评论验证码功能。如果没有任何可选项,可安装plone.formwidget.captcha,plone.formwidget.recaptcha,collective.akismet,或collective.z3cform.norobots。" #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" "一些评论相关的设置并不位于 评论控制面板。\n" @@ -227,62 +247,68 @@ msgstr "" "要启用评论审核工作流,请到类型控制面板,选择 \"评论\" 并将工作流设置为 \"评论审核工作流\"。" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "如果选中,用户可在网站上发表评论。不过,为使用户将能够发表评论,您还需要启用特定的内容类型、 文件夹或内容对象的发表评论功能。" #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "如果选中,评论将进入'待审核'状态,它们对用户是看不见的。'具有审核权限的用户('审核者'或'管理者')可以批准评论,使它们对用户可见。如果你要启用定制的评论工作流,你必须到类型控制面板。" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "审核通知发送地址。" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "如果选中,如评论需要注意,审核者将被通知。审核者的Email地址,可以在'邮件设置'控制面板(网站'发件人'地址)中找到。" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "如果选中,用户的头像显示在评论旁边。" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "使用此设置选择评论文本的转换方式,你可以选择'纯文本'和'智能文本。'智能文本'转换纯文本成HTML格式,其中换行和缩进保留,Web和Email地址都转换为可点击链接。" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "如果选中,用户可以选择通过Email通知新的评论。" #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "匿名" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "启用匿名评论" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "应用" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "验证码" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "评论" @@ -297,22 +323,22 @@ msgid "label_delete" msgstr "删除" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "全局启用评论" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "启用评论审核" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "审核者Email地址" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "启用审核者Email通知" @@ -327,7 +353,7 @@ msgid "label_says" msgstr "说:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "显示评论者的头像" @@ -337,22 +363,22 @@ msgid "label_show_full_comment_text" msgstr "显示完整的评论文本" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "标题" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "评论文本转换" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "启用用户Email通知" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" msgstr "" "一条评论 '${title}' 已发布在: ${link}\n" @@ -362,7 +388,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" msgstr "" "一条评论 '${title}' 已发布在: ${link}\n" diff --git a/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po index 7cf87f6..4f566ac 100644 --- a/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" "PO-Revision-Date: 2012-10-09 20:55+0800\n" "Last-Translator: TsungWei Hu \n" "Language-Team: Plone I18N \n" @@ -14,103 +14,99 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:264 +#: ../comment.py:311 msgid "A comment has been posted." msgstr "留言已張貼。" -#: ../interfaces.py:257 +#: ../interfaces.py:141 msgid "A comment id unique to this conversation" msgstr "留言的識別碼" -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "新增留言" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:64 msgid "Anonymous Comments" msgstr "匿名留言" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "作者 (用來顯示在網頁上)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:251 +#: ../browser/controlpanel.py:82 msgid "Cancel" msgstr "取消" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:78 msgid "Changes saved" msgstr "變更已儲存" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:140 msgid "Comment approved." msgstr "留言已審核" -#: ../browser/moderation.py:94 +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "留言已刪除" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Commenter Image" msgstr "留言者圖檔" msgid "Commenting infrastructure for Plone" msgstr "Plone 的留言功能" -#: ../interfaces.py:252 +#: ../interfaces.py:136 msgid "Conversation" msgstr "討論" -#: ../interfaces.py:283 +#: ../interfaces.py:167 msgid "Creation date" msgstr "建立日期" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "最近留言的日期" +#: ../interfaces.py:40 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "已停用" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "討論區設定" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:84 msgid "Edit cancelled" msgstr "取消編輯" -#: ../interfaces.py:269 +#: ../interfaces.py:153 msgid "Email" msgstr "E-Mail" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:63 msgid "Enable Comments" msgstr "允許留言" -#: ../interfaces.py:260 +#: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" msgstr "留言的識別碼" -#: ../interfaces.py:274 +#: ../interfaces.py:158 msgid "MIME type" msgstr "MIME-Type" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Moderator Email Notification" msgstr "審核者的電子郵件通知" -#: ../interfaces.py:284 +#: ../interfaces.py:168 msgid "Modification date" msgstr "修改日期" -#: ../interfaces.py:254 +#: ../interfaces.py:138 msgid "Name" msgstr "名稱" -#: ../interfaces.py:278 +#: ../interfaces.py:162 msgid "Notify me of new comments via email." msgstr "寄送電郵通知新留言。" @@ -118,32 +114,44 @@ msgstr "寄送電郵通知新留言。" msgid "Plone Discussions" msgstr "Plone 討論區" -#: ../interfaces.py:247 +#: ../interfaces.py:131 msgid "Portal type" msgstr "網站型別" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "Save" msgstr "儲存" -#: ../interfaces.py:167 +#: ../interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "留言者 (使用者名稱) 的集合" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "本項目的留言數目" +#: ../interfaces.py:50 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:34 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:158 +msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +msgstr "" + +#: ../browser/controlpanel.py:69 msgid "User Email Notification" msgstr "新留言通知使用者" -#: ../browser/comments.py:241 +#: ../interfaces.py:166 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." msgstr "你的留言等待審核中。" #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:131 msgid "add_comment_button" msgstr "留言" @@ -158,22 +166,28 @@ msgid "bulkactions_publish" msgstr "審核" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "填寫下列表單後,就可以新增留言。網址會被轉換成可點選的連結。" +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "留言等待審核中" #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "填寫下列表單後,就可以新增留言。" -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:48 +#, fuzzy msgid "comment_title" msgstr "${creator} 在 ${content} 留言" @@ -208,17 +222,22 @@ msgid "heading_moderate_comments" msgstr "審核留言" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:236 msgid "help_anonymous_comments" msgstr "勾選的話,匿名使用者不必登入系統就能留言。建議使用 captcha 來避免垃圾留言。" +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:334 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:279 msgid "help_captcha" msgstr "設定留言是否啟用或停用 captcha 功能,如果還沒有這類模組選項的話,可安裝 plone.formwidget.captcha、plone.formwidget.recaptcha、collective.akismet 或 collective.z3cform.norobots。" #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" "某些討論區設定值並未在討論區控制面板找得到。\n" @@ -226,62 +245,68 @@ msgstr "" "想要指定留言的審核流程,請到型別控制面板,點選「留言」並指定工作流程為「留言審核流程」。" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:224 msgid "help_globally_enabled" msgstr "勾選的話,就啟用使用者的留言功能,不過,仍然要決定哪些內容型別、目錄、項目,能讓使用者留言。" #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:248 msgid "help_moderation_enabled" msgstr "勾選的話,留言會先變成待審狀態,直到通過審核後才會公開,想要客製化管理流程的話,必須到型別設定頁面。" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:316 msgid "help_moderator_email" msgstr "審核通知信的寄送地址。" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "勾選的話,有人留言時就會通知審核者。審核者的寄信地址記錄在郵件設定頁面裡。" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:294 msgid "help_show_commenter_image" msgstr "勾選的話,使用者的圖檔會顯示在留言旁邊。" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:263 msgid "help_text_transform" msgstr "選擇留言的標註格式,選擇「排版文字」的話,會主動保留內容的換行和縮排,也會把網址變成可以點選的連結。" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:325 msgid "help_user_notification_enabled" msgstr "勾選的話,使用者可以收到新留言的通知信。" #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:173 msgid "label_anonymous" msgstr "無名氏" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:234 msgid "label_anonymous_comments" msgstr "啟用匿名留言功能" +#. Default: "Enable anonymous email field" +#: ../interfaces.py:332 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "更新" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:277 msgid "label_captcha" msgstr "captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:159 msgid "label_comment" msgstr "留言" @@ -296,22 +321,22 @@ msgid "label_delete" msgstr "刪除" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:222 msgid "label_globally_enabled" msgstr "全域啟用留言功能" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:246 msgid "label_moderation_enabled" msgstr "啟用審核功能" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "審核者電郵地址" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "啟用通知審核者的功能" @@ -326,7 +351,7 @@ msgid "label_says" msgstr "留言:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:292 msgid "label_show_commenter_image" msgstr "顯示留言者圖檔" @@ -336,29 +361,45 @@ msgid "label_show_full_comment_text" msgstr "顯示完整的留言內容" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:155 msgid "label_subject" msgstr "標題" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:261 msgid "label_text_transform" msgstr "留言排版格式" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:323 msgid "label_user_notification_enabled" msgstr "啟用通知使用者的功能" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:52 msgid "mail_notification_message" -msgstr "${title} 有新留言:${link}\n\n---\n${text}\n---\n" +msgstr "" +"${title} 有新留言:${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:60 msgid "mail_notification_message_moderator" -msgstr "${title} 有新留言:${link}\n\n---\n${text}\n---\n\n審核通過:\n${link_approve}\n\n刪除留言:\n${link_delete}\n" +msgstr "" +"${title} 有新留言:${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" +"\n" +"審核通過:\n" +"${link_approve}\n" +"\n" +"刪除留言:\n" +"${link_delete}\n" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 From e6deebf9b5efbd49ead56fa35a1663da89cf05e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89rico=20Andrei?= Date: Sat, 6 Apr 2013 09:56:53 -0300 Subject: [PATCH 044/254] Sync translations --- plone/app/discussion/i18n/plone-ca.po | 20 +------------------- plone/app/discussion/i18n/plone-cs.po | 20 +------------------- plone/app/discussion/i18n/plone-da.po | 20 +------------------- plone/app/discussion/i18n/plone-de.po | 20 +------------------- plone/app/discussion/i18n/plone-el.po | 20 +------------------- plone/app/discussion/i18n/plone-es.po | 20 +------------------- plone/app/discussion/i18n/plone-eu.po | 20 +------------------- plone/app/discussion/i18n/plone-fr.po | 20 +------------------- plone/app/discussion/i18n/plone-it.po | 20 +------------------- plone/app/discussion/i18n/plone-ja.po | 20 +------------------- plone/app/discussion/i18n/plone-nl.po | 22 ++-------------------- plone/app/discussion/i18n/plone-no.po | 20 +------------------- plone/app/discussion/i18n/plone-pt_BR.po | 20 +------------------- plone/app/discussion/i18n/plone-sk.po | 2 +- plone/app/discussion/i18n/plone-uk.po | 2 +- plone/app/discussion/i18n/plone-zh_CN.po | 20 +------------------- plone/app/discussion/i18n/plone-zh_TW.po | 20 +------------------- plone/app/discussion/i18n/plone.pot | 20 +------------------- 18 files changed, 19 insertions(+), 307 deletions(-) diff --git a/plone/app/discussion/i18n/plone-ca.po b/plone/app/discussion/i18n/plone-ca.po index 9044daf..d242b4d 100644 --- a/plone/app/discussion/i18n/plone-ca.po +++ b/plone/app/discussion/i18n/plone-ca.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: Victor Fernandez de Alba \n" "Language-Team: LANGUAGE \n" @@ -34,12 +34,7 @@ msgstr "Comentari" msgid "Comment Review Workflow" msgstr "Worfklow de moderació de comentaris" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "Workflow d'estat únic per comentaris" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "Comentari sobre la última transició" @@ -55,10 +50,6 @@ msgstr "Comentaris afegits" msgid "Discussion" msgstr "Comentaris" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "Essencialment un workflow sense transicions i amb un sol estat 'Publicat' per permetre que portlets i altres aplicacions que esperen la existència d'aquest estat contiuin funcionant." - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Modera comentaris" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "Pendent" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "Transició anterior" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Accés a la història del workflow" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "Publicat" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "Enviat, pendent de moderació" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "L'identificador únic de l'usuari que va executar la transició anterior" @@ -107,16 +94,11 @@ msgstr "Número de comentaris d'aquest contingut." msgid "Users who have commented on the item" msgstr "Usuaris que han comentat el contingut." -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "Visible per a tots, editable per l'autor." - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visible per a tots, no editable." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Quan es va executar la transició anterior" diff --git a/plone/app/discussion/i18n/plone-cs.po b/plone/app/discussion/i18n/plone-cs.po index 1df1b9d..52a7369 100644 --- a/plone/app/discussion/i18n/plone-cs.po +++ b/plone/app/discussion/i18n/plone-cs.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2010-11-03 14:51+0100\n" "Last-Translator: Radim Novotny \n" "Language-Team: DMS4U \n" @@ -34,12 +34,7 @@ msgstr "Komentář" msgid "Comment Review Workflow" msgstr "Schvalovací workflow pro komentáře" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "Jednoduché workflow pro komentáře" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "Poznámka k poslední transakci" @@ -55,10 +50,6 @@ msgstr "Komentář byl přidán." msgid "Discussion" msgstr "Komentáře" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "Jednoduché workflow bez žádných přechodů mezi stavy, pouze se stavem Zveřejněno." - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderovat komentáře" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "Čekající" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "Předchozí přechod stavu" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Zpřístupní historii workflow" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "Zveřejněno" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "Předáno k posouzení." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "ID uživatele, který způsobil předchozí změnu stavu" @@ -107,16 +94,11 @@ msgstr "Celkový počet komentářů k této položce." msgid "Users who have commented on the item" msgstr "Uživatelé, kteří komentovali tuto položku" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "Viditelné pro všechny, editovatelné vlastníkem položky." - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Viditelné všem, nelze editovat." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Kdy byla provedena poslední změna stavu" diff --git a/plone/app/discussion/i18n/plone-da.po b/plone/app/discussion/i18n/plone-da.po index 6fbfd71..f2fb091 100644 --- a/plone/app/discussion/i18n/plone-da.po +++ b/plone/app/discussion/i18n/plone-da.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Anton Stonor \n" "Language-Team: Anton Stonor \n" @@ -34,12 +34,7 @@ msgstr "Kommentar" msgid "Comment Review Workflow" msgstr "Godkendelses-workflow for kommentarer" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "Et-trinsworkflow for kommentarer" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "Kommentar om seneste workflow" @@ -55,10 +50,6 @@ msgstr "Kommentarer tilføjet til indholdet" msgid "Discussion" msgstr "Kommentering" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "Et workflow med kun 1 tilstand, nemlig publiceret." - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderér kommentarer" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "Afventer" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "Foregående workflow-ændringer" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Giver adgang til workflow-historikken" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "Publiceret" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "Gemt, afventer godkendelse" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Brugernavnet på den, der gennemført det seneste workflow-trin" @@ -107,16 +94,11 @@ msgstr "Antal kommentarer på denne side." msgid "Users who have commented on the item" msgstr "Brugere, der har kommenteret på denne side" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "Synlig for alle, kan redigeres af ejeren." - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Synligt for alle, kan ikke redigeres." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Tidspunktet for det seneste workflow-trin" diff --git a/plone/app/discussion/i18n/plone-de.po b/plone/app/discussion/i18n/plone-de.po index 17dc1cd..ea1d442 100644 --- a/plone/app/discussion/i18n/plone-de.po +++ b/plone/app/discussion/i18n/plone-de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2010-03-17 16:11+0100\n" "Last-Translator: Timo Stollenwerk \n" "Language-Team: Deutsch \n" @@ -34,12 +34,7 @@ msgstr "Kommentar" msgid "Comment Review Workflow" msgstr "Arbeitsablauf für moderierte Kommentare" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "Kommentar zum letzten Zustandsübergang" @@ -55,10 +50,6 @@ msgstr "Ein Kommentar zu einem Artikel." msgid "Discussion" msgstr "Kommentare" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "" - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Kommentare moderieren" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "Zur Redaktion eingereicht" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "Letzter Übergang" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Erlaubt Zugang zur Historie des Arbeitsablaufs" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "Veröffentlicht" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "Zur Redaktion eingereicht" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Die ID des Benutzers welcher den vorherigen Zustandsübergang durchgeführt hat" @@ -107,16 +94,11 @@ msgstr "Anzahl der Kommentare zu diesem Artikel." msgid "Users who have commented on the item" msgstr "Benutzer, die den Artikel kommentiert haben" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Für alle Benutzer sichtbar, nicht editierbar" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Wann der vorherige Übergang durchgeführt wurde" diff --git a/plone/app/discussion/i18n/plone-el.po b/plone/app/discussion/i18n/plone-el.po index 4b348fc..07dc8a2 100644 --- a/plone/app/discussion/i18n/plone-el.po +++ b/plone/app/discussion/i18n/plone-el.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2010-02-23 10:26+0100\n" "Last-Translator: Yiorgis Gozadinos \n" "Language-Team: Greek \n" @@ -34,12 +34,7 @@ msgstr "Σχόλιο" msgid "Comment Review Workflow" msgstr "Ροή εργασίας σχολίων" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "Σχόλιο για την τελευταία μετάβαση" @@ -55,10 +50,6 @@ msgstr "Σχόλια που προστέθηκαν σε ένα αντικείμ msgid "Discussion" msgstr "Συζήτηση" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "" - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Επιθεώρηση σχολίων" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "Σε αναμονή" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "Προηγούμενη μετάβαση" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Δίνει πρόσβαση στο ιστορικό της ροής εργασίας" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "Δημοσιευμένο" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "Υποβλήθηκε, σε αναμονή επιθεώρησης" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Η ταυτότητα του χρήστη που εφάρμοσε την τελευταία μετάβαση" @@ -107,16 +94,11 @@ msgstr "Σύνολικός αριθμός σχολίων για το αντικ msgid "Users who have commented on the item" msgstr "Χρήστες που έχουν σχολιάσει το αντικείμενο" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Ορατό από όλους, μη επεξεργάσιμο" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Πότε εφαρμόστηκε η τελευταία μετάβαση" diff --git a/plone/app/discussion/i18n/plone-es.po b/plone/app/discussion/i18n/plone-es.po index 2a71855..e607191 100644 --- a/plone/app/discussion/i18n/plone-es.po +++ b/plone/app/discussion/i18n/plone-es.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: Mikel Larreategi \n" @@ -34,12 +34,7 @@ msgstr "Comentario" msgid "Comment Review Workflow" msgstr "Worfklow de moderación de comentarios" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "Workflow de estado único para comentarios" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "Comentario sobre la última transición" @@ -55,10 +50,6 @@ msgstr "Comentarios añadidos" msgid "Discussion" msgstr "Discusión" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "Esencialmente un workflow sin transiciones, pero tiene un estado Publicado, por lo que los portlets u otras aplicaciones que esperan ese estado seguirán funcionando" - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderar comentarios" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "Pendiente" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "Transición anterior" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Acceso a la historia del workflow" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "Publicado" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "Enviado, pendiente de moderación" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "El ID del usuario que ejecutó la transición anterior" @@ -107,16 +94,11 @@ msgstr "Número de comentarios de este elemento" msgid "Users who have commented on the item" msgstr "Usuarios que han comentado el elemento" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "Visible para todos, editable por el autor" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visible para todos, no-editable" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Cuándo se ejecutó la transición anterior" diff --git a/plone/app/discussion/i18n/plone-eu.po b/plone/app/discussion/i18n/plone-eu.po index 3faa056..64f9cf5 100644 --- a/plone/app/discussion/i18n/plone-eu.po +++ b/plone/app/discussion/i18n/plone-eu.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: Mikel Larreategi \n" @@ -34,12 +34,7 @@ msgstr "Erantzuna" msgid "Comment Review Workflow" msgstr "Erantzunen Moderazio Workflowa" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "Erantzunen Egoera Bakarreko Workflowa" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "Azken trantsizioari buruzko iruzkina" @@ -55,10 +50,6 @@ msgstr "Elementuari gehitutako erantzunak" msgid "Discussion" msgstr "Eztabaida" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "Trantsiziorik ez duen workflowa, hala ere Argitaratuta egoera bat du, beraz hori espero duten portlet edo gainontzeko aplikazioek funtzionatzen jarraituko dute" - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Erantzunak moderatu" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "Moderazio kolan" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "Aurreko trantsizioa" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Workflowaren historia ikus dezakezu" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "Argitaratuta" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "Bidalita, moderazio kolan zain." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Azken trantsizioa egin zuen erabiltzailearen IDa" @@ -107,16 +94,11 @@ msgstr "Elementu honen erantzun kopurua" msgid "Users who have commented on the item" msgstr "Elementuaren inguruan erantzuna eman duten erabiltzaileak" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "Guztiek ikusteko, jabeak aldatzeko." - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Guztiek ikusteko, ez da editagarria." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Aurreko trantsizioa noiz exekutatu zen." diff --git a/plone/app/discussion/i18n/plone-fr.po b/plone/app/discussion/i18n/plone-fr.po index ae83d01..37783c2 100644 --- a/plone/app/discussion/i18n/plone-fr.po +++ b/plone/app/discussion/i18n/plone-fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2010-08-06 19:23+0100\n" "Last-Translator: Vincent Fretin \n" "Language-Team: Vincent Fretin \n" @@ -34,12 +34,7 @@ msgstr "Commentaire" msgid "Comment Review Workflow" msgstr "Workflow de modération des commentaires" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "Workflow commentaire à un seul état" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "Commentaire à propos de la dernière transition" @@ -55,10 +50,6 @@ msgstr "Commentaires ajoutés à un élément." msgid "Discussion" msgstr "Discussion" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "" - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Modération des commentaires" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "En attente" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "Transition précédente" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Permet d'accéder à l'historique du workflow" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "Publié" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "Soumis, en attente de modération." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "L'identifiant utilisateur qui a effectué la transition précédente" @@ -107,16 +94,11 @@ msgstr "Nombre total de commentaires pour cet élément." msgid "Users who have commented on the item" msgstr "Utilisateurs qui ont commenté sur cet élément" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "Visible par tout le monde, modifiable par le propriétaire." - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visible par tout le monde, non modifiable." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Quand la précédente transition a été effectué" diff --git a/plone/app/discussion/i18n/plone-it.po b/plone/app/discussion/i18n/plone-it.po index 5f1b1bc..497244d 100644 --- a/plone/app/discussion/i18n/plone-it.po +++ b/plone/app/discussion/i18n/plone-it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -34,12 +34,7 @@ msgstr "Commento" msgid "Comment Review Workflow" msgstr "Workflow per revisione del commento" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "Workflow per commento a stato singolo" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "Commento" @@ -55,10 +50,6 @@ msgstr "Commenti aggiunti al contenuto" msgid "Discussion" msgstr "Commenti" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "" - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderazione commenti" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "In attesa" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "Transizione precedente" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Fornisce accesso alla storia del workflow" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "Pubblicato" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "Inviato, in attesa di revisione" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "L'ID dell'utente che ha eseguito l'ultima transizione" @@ -107,16 +94,11 @@ msgstr "Numero totale di commenti per questo elemento" msgid "Users who have commented on the item" msgstr "Utenti che hanno commentato l'elemento" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "Visibile a tutti, modificabile dal proprietario" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visibile a tutti, non modificabile" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Quando l'ultima transizione è stata eseguita" diff --git a/plone/app/discussion/i18n/plone-ja.po b/plone/app/discussion/i18n/plone-ja.po index 786a005..c4a916d 100644 --- a/plone/app/discussion/i18n/plone-ja.po +++ b/plone/app/discussion/i18n/plone-ja.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2011-04-18 13:13+0900\n" "Last-Translator: Takeshi Yamamoto \n" "Language-Team: Hanno Schlichting \n" @@ -34,12 +34,7 @@ msgstr "コメント" msgid "Comment Review Workflow" msgstr "コメント審査ワークフロー" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "コメント単一状態ワークフロー" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "最後の遷移についてのコメント" @@ -55,10 +50,6 @@ msgstr "コンテンツアイテムにコメントが追加されました" msgid "Discussion" msgstr "議論" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "本質的に遷移のないワークフローですが、公開状態を持つので、その状態を期待するポートレットやアプリケーションが機能し続けます。" - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "コメントをモデレートする" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "保留" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "前の遷移" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "ワークフロー履歴へのアクセスを提供する" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "公開中" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "提出され、審査待ち" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "前の遷移を実施したユーザのID" @@ -107,16 +94,11 @@ msgstr "このアイテムについてのコメントの合計数" msgid "Users who have commented on the item" msgstr "このアイテムにコメントしたユーザ" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "誰にでも見え、所有者によって編集可能" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "誰にでも見え、編集不可能" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "前の遷移が実施された時" diff --git a/plone/app/discussion/i18n/plone-nl.po b/plone/app/discussion/i18n/plone-nl.po index 59b0d8a..a6d7992 100644 --- a/plone/app/discussion/i18n/plone-nl.po +++ b/plone/app/discussion/i18n/plone-nl.po @@ -1,11 +1,10 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2011-09-30 16:02+0100\n" "Last-Translator: NFG Net Facilities Group BV \n" "Language-Team: Nederlands \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -14,6 +13,7 @@ msgstr "" "Language-Name: Dutch\n" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" +"Language: \n" #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" @@ -35,12 +35,7 @@ msgstr "Reactie" msgid "Comment Review Workflow" msgstr "Reactie Review Werkstroom" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "Reactie Enkelvoudige Status Werkstroom" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "Reactie op de laatste transitie" @@ -56,10 +51,6 @@ msgstr "Reacties op een content item" msgid "Discussion" msgstr "Discussie" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "In essentie een werkstroom zonder transities, maar met een Gepubliceerd status, zodat portlets en toepassingen die een status verwachten blijven werken." - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Reacties modereren" @@ -69,17 +60,14 @@ msgid "Pending" msgstr "In afwachting" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "Vorige transitie" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Biedt toegang tot de werkstroom geschiedenis" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "Gepubliceerd" @@ -92,7 +80,6 @@ msgid "Submitted, pending review." msgstr "Ingediend, in afwaching van herziening." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Het ID van de gebruiker die de vorige transitie heeft uitgevoerd" @@ -108,16 +95,11 @@ msgstr "Totaal aantal reacties op dit item." msgid "Users who have commented on the item" msgstr "Gebruikers die hebben gereageerd op dit item" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "Zichtbaar voor iedereen, bewerkbaar voor de eigenaar." - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Zichtbaar voor iedereen, niet bewerkbaar." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Wanneer de vorige transitie werd uitgevoerd" diff --git a/plone/app/discussion/i18n/plone-no.po b/plone/app/discussion/i18n/plone-no.po index 0da35a6..3a17d7d 100644 --- a/plone/app/discussion/i18n/plone-no.po +++ b/plone/app/discussion/i18n/plone-no.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -34,12 +34,7 @@ msgstr "" msgid "Comment Review Workflow" msgstr "" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "" @@ -55,10 +50,6 @@ msgstr "" msgid "Discussion" msgstr "" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "" - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "" @@ -107,16 +94,11 @@ msgstr "" msgid "Users who have commented on the item" msgstr "" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "" diff --git a/plone/app/discussion/i18n/plone-pt_BR.po b/plone/app/discussion/i18n/plone-pt_BR.po index 3fa51fb..5964c1e 100644 --- a/plone/app/discussion/i18n/plone-pt_BR.po +++ b/plone/app/discussion/i18n/plone-pt_BR.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2011-04-14 17:38-0300\n" "Last-Translator: Andre Nogueira \n" "Language-Team: Plone i18n \n" @@ -34,12 +34,7 @@ msgstr "Comentário" msgid "Comment Review Workflow" msgstr "Worfklow de Moderação de Comentários" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "Workflow de estado único para comentários" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "Comentário sobre a última transição" @@ -55,10 +50,6 @@ msgstr "Comentários adicionados a um conteúdo." msgid "Discussion" msgstr "Discussão" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "Essencialmente um fluxo de trabalho sem transições, mas possui um estado Publicado, para que portlets e aplicativos que esperam este estado funcionem." - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderar comentários" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "Pendente" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "Transição anterior" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Fornece acesso ao histórico do Workflow" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "Publicado" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "Enviado, pendente de moderação." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "O ID do usuário que realizou a transição anterior" @@ -107,16 +94,11 @@ msgstr "Número total de comentários deste item." msgid "Users who have commented on the item" msgstr "Usuários que comentáram este item" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "Visível para todos, editável pelo autor." - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visível para todos, não editável." #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Quando a transição anterior foi realizada" diff --git a/plone/app/discussion/i18n/plone-sk.po b/plone/app/discussion/i18n/plone-sk.po index acf27b5..6de07f9 100644 --- a/plone/app/discussion/i18n/plone-sk.po +++ b/plone/app/discussion/i18n/plone-sk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2012-07-02 15:38+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2012-07-02 17:54+0100\n" "Last-Translator: Radim Novotny \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/i18n/plone-uk.po b/plone/app/discussion/i18n/plone-uk.po index 169c885..fdb302b 100644 --- a/plone/app/discussion/i18n/plone-uk.po +++ b/plone/app/discussion/i18n/plone-uk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-02-04 10:32+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2011-08-18 14:54+0300\n" "Last-Translator: Olha \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/i18n/plone-zh_CN.po b/plone/app/discussion/i18n/plone-zh_CN.po index ea7c04a..3e6a87d 100644 --- a/plone/app/discussion/i18n/plone-zh_CN.po +++ b/plone/app/discussion/i18n/plone-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2011-08-19 12:23+0800\n" "Last-Translator: Jian Aijun \n" "Language-Team: plone \n" @@ -34,12 +34,7 @@ msgstr "评论" msgid "Comment Review Workflow" msgstr "评论审核工作流" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "评论单一状态工作流" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "最后状态转换的注释" @@ -55,10 +50,6 @@ msgstr "评论已添加到内容条目。" msgid "Discussion" msgstr "评论" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "没有状态转换的基本工作流,只有一个发布状态,所以依赖该状态的面板和应用可以继续正常工作。" - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "评论审核" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "待审核" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "上一步状态转换" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "提供访问工作流历史记录功能" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "已发布" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "已提交,等待审核。" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "执行上一步状态转换的用户 ID" @@ -107,16 +94,11 @@ msgstr "此条目的评论总数。" msgid "Users who have commented on the item" msgstr "此条目的评论者。" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "对任何人可见,所有者可编辑。" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "对任何人可见,不可编辑。" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "当上一步状态转换被执行" diff --git a/plone/app/discussion/i18n/plone-zh_TW.po b/plone/app/discussion/i18n/plone-zh_TW.po index 58cf224..88b303b 100644 --- a/plone/app/discussion/i18n/plone-zh_TW.po +++ b/plone/app/discussion/i18n/plone-zh_TW.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2010-08-07 23:11+0800\n" "Last-Translator: TsungWei Hu \n" "Language-Team: Taiwan Python User Group \n" @@ -34,12 +34,7 @@ msgstr "留言" msgid "Comment Review Workflow" msgstr "留言審核流程" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "單一狀態的工作流程" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "最後狀態轉移的備註" @@ -55,10 +50,6 @@ msgstr "新增到內容項目的留言" msgid "Discussion" msgstr "討論" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "" - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "審核留言" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "待審核" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "前一個移轉狀態" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "提供工作流程歷史記錄的功能" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "已發佈" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "已送出,待審核中。" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "執行前一個狀態移轉的使用者識別碼" @@ -107,16 +94,11 @@ msgstr "在此項目留言的總數。" msgid "Users who have commented on the item" msgstr "在此項目留言的使用者" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "所有人可檢視,擁有者可編輯。" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "每個人都看得到,但無法編輯。" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "當前一個移轉動作被執行時" diff --git a/plone/app/discussion/i18n/plone.pot b/plone/app/discussion/i18n/plone.pot index 4ad8692..973a956 100644 --- a/plone/app/discussion/i18n/plone.pot +++ b/plone/app/discussion/i18n/plone.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2011-04-22 17:12+0000\n" +"POT-Creation-Date: 2013-04-06 12:48+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Hanno Schlichting \n" "Language-Team: Hanno Schlichting \n" @@ -34,12 +34,7 @@ msgstr "" msgid "Comment Review Workflow" msgstr "" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Comment Single State Workflow" -msgstr "" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Comment about the last transition" msgstr "" @@ -55,10 +50,6 @@ msgstr "" msgid "Discussion" msgstr "" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Essentially a workflow with no transitions, but has a Published state, so portlets and applications that expect that state will continue to work." -msgstr "" - #: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "" @@ -68,17 +59,14 @@ msgid "Pending" msgstr "" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Previous transition" msgstr "" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Provides access to workflow history" msgstr "" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "Published" msgstr "" @@ -91,7 +79,6 @@ msgid "Submitted, pending review." msgstr "" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "" @@ -107,16 +94,11 @@ msgstr "" msgid "Users who have commented on the item" msgstr "" -#: ../profiles/default/workflows/one_state_workflow/definition.xml -msgid "Visible to everyone, editable by the owner." -msgstr "" - #: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "" #: ../profiles/default/workflows/comment_review_workflow/definition.xml -#: ../profiles/default/workflows/one_state_workflow/definition.xml msgid "When the previous transition was performed" msgstr "" From d77ecc31f3ec2bea432d871c1c0d9f9d12d91a35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89rico=20Andrei?= Date: Sat, 6 Apr 2013 09:57:13 -0300 Subject: [PATCH 045/254] Update pt_BR translation --- .../pt_BR/LC_MESSAGES/plone.app.discussion.po | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po index c853f89..17b5cba 100644 --- a/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" "POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" -"PO-Revision-Date: 2011-04-14 17:20-0300\n" +"PO-Revision-Date: 2013-04-06 14:49+0200\n" "Last-Translator: Andre Nogueira \n" "Language-Team: Plone i18n \n" "MIME-Version: 1.0\n" @@ -65,7 +65,7 @@ msgstr "Data de criação" #: ../interfaces.py:40 msgid "Date of the most recent public comment" -msgstr "" +msgstr "Data do comentário, público, mais recente" #: ../vocabularies.py:44 msgid "Disabled" @@ -129,15 +129,15 @@ msgstr "Lista de usuários que fizeram comentários (nome de usuário)" #: ../interfaces.py:50 msgid "The set of unique commentators (usernames) of published_comments" -msgstr "" +msgstr "O grupo de comentadoristas (nomes de usuários) com comentários publicados" #: ../interfaces.py:34 msgid "Total number of public comments on this item" -msgstr "" +msgstr "Número total de comentários públicos neste item" #: ../comment.py:158 msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." -msgstr "" +msgstr "A transformação '%s' => '%s' não está disponível. Ocorreu uma falha ao transformar o comentário '%s'." #: ../browser/controlpanel.py:69 msgid "User Email Notification" @@ -145,7 +145,7 @@ msgstr "Notificação de e-mail para o usuário" #: ../interfaces.py:166 msgid "Username of the commenter" -msgstr "" +msgstr "Nome de usuário do comentarista" #: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." @@ -174,7 +174,7 @@ msgstr "Você pode adicionar um comentário preenchendo o formulário a seguir. #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." #: ../browser/comments.py:51 msgid "comment_description_markdown" -msgstr "" +msgstr "Você pode adicionar um comentário preenchendo o formulário abaixo. Use apenas texto sem formatação. Você pode utilizar a sintaxe Markdown para links e imagens." #. Default: "Comments are moderated." #: ../browser/comments.py:63 @@ -230,7 +230,7 @@ msgstr "Se selecionado, usuários anonimos poderão adicionar comentários sem p #. Default: "If selected, anonymous user will have to give their email." #: ../interfaces.py:334 msgid "help_anonymous_email_enabled" -msgstr "" +msgstr "Caso selecionado, usuários anônimos devem informar um email." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." #: ../interfaces.py:279 @@ -294,7 +294,7 @@ msgstr "Permitir comentários anônimos." #. Default: "Enable anonymous email field" #: ../interfaces.py:332 msgid "label_anonymous_email_enabled" -msgstr "" +msgstr "Habilitar campo de email para usuários anônimos" #. Default: "Apply" #: ../browser/moderation.pt:71 @@ -385,7 +385,7 @@ msgstr "Um comentário em '${title}' foi adicionado aqui: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" #: ../comment.py:60 msgid "mail_notification_message_moderator" -msgstr "" +msgstr "Um comentário no conteúdo '${title}' foi adicionado em: ${link}\n\n---\n${text}\n---\n\Aprove o comentário:\n${link_approve}\n\nRemova o comentário:\n${link_delete}\n" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 From bfb0b9649db2adf4968a6578ca3dbc6f25448c74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89rico=20Andrei?= Date: Sat, 6 Apr 2013 09:58:02 -0300 Subject: [PATCH 046/254] Update Changelog --- CHANGES.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index dc04a9f..3a9fe0a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,8 @@ Changelog 2.2.5 (unreleased) ------------------ +- Update pt_BR translation [ericof] + - Do not raise an error when no workflow is assigned to the comment type. [timo] From 5961cfea9827c78340256ea15690f282e2e550bb Mon Sep 17 00:00:00 2001 From: Eric Steele Date: Sat, 6 Apr 2013 11:50:25 -0400 Subject: [PATCH 047/254] Preparing release 2.2.5 --- CHANGES.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 3a9fe0a..c847658 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,7 @@ Changelog ========= -2.2.5 (unreleased) +2.2.5 (2013-04-06) ------------------ - Update pt_BR translation [ericof] diff --git a/setup.py b/setup.py index 97a5d84..ab283c5 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.5.dev0' +version = '2.2.5' install_requires = [ 'setuptools', From b02f1f493bddab04b6d50c1e42b81c830e149ff0 Mon Sep 17 00:00:00 2001 From: Eric Steele Date: Sat, 6 Apr 2013 11:51:53 -0400 Subject: [PATCH 048/254] Back to development: 2.2.6 --- CHANGES.txt | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index c847658..06f78ab 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,12 @@ Changelog ========= +2.2.6 (unreleased) +------------------ + +- Nothing changed yet. + + 2.2.5 (2013-04-06) ------------------ diff --git a/setup.py b/setup.py index ab283c5..5f005fb 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.5' +version = '2.2.6.dev0' install_requires = [ 'setuptools', From 79a96a8c1e719253d2344deca46a506d5c62031b Mon Sep 17 00:00:00 2001 From: Felipe Duardo Date: Tue, 9 Apr 2013 12:21:14 -0300 Subject: [PATCH 049/254] Added a prefix to the id attr of the comment field The W3C validator does not accept the attributes id or class started with numbers. --- plone/app/discussion/browser/comments.pt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plone/app/discussion/browser/comments.pt b/plone/app/discussion/browser/comments.pt index c192e7a..ff79431 100644 --- a/plone/app/discussion/browser/comments.pt +++ b/plone/app/discussion/browser/comments.pt @@ -36,7 +36,7 @@ portrait_url python:view.get_commenter_portrait(reply.author_username); review_state python:wtool.getInfoFor(reply, 'review_state', 'none');" tal:attributes="class python:'comment replyTreeLevel'+str(depth)+' state-'+str(review_state); - id string:${reply/getId}" + id string:id-${reply/getId}" tal:condition="python:canReview or review_state == 'published'">
From 7f16b55493c0263fb6dcf503f46a1d51ddd41b8e Mon Sep 17 00:00:00 2001 From: Felipe Duardo Date: Tue, 9 Apr 2013 13:55:21 -0300 Subject: [PATCH 050/254] return to last commit... --- plone/app/discussion/browser/comments.pt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plone/app/discussion/browser/comments.pt b/plone/app/discussion/browser/comments.pt index ff79431..c192e7a 100644 --- a/plone/app/discussion/browser/comments.pt +++ b/plone/app/discussion/browser/comments.pt @@ -36,7 +36,7 @@ portrait_url python:view.get_commenter_portrait(reply.author_username); review_state python:wtool.getInfoFor(reply, 'review_state', 'none');" tal:attributes="class python:'comment replyTreeLevel'+str(depth)+' state-'+str(review_state); - id string:id-${reply/getId}" + id string:${reply/getId}" tal:condition="python:canReview or review_state == 'published'">
From 4165a741800e4edd7f8ec6983d177929c3c9802f Mon Sep 17 00:00:00 2001 From: Asko Soukka Date: Wed, 10 Apr 2013 10:28:46 +0300 Subject: [PATCH 051/254] Fix migration to not fail when member has been deleted --- plone/app/discussion/browser/migration.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plone/app/discussion/browser/migration.py b/plone/app/discussion/browser/migration.py index fa806d0..7859091 100644 --- a/plone/app/discussion/browser/migration.py +++ b/plone/app/discussion/browser/migration.py @@ -108,7 +108,10 @@ class View(BrowserView): if not comment.author_name: # In migrated site member.fullname ='' while member.getProperty('fullname') has the correct value - comment.author_name = member.getProperty('fullname') + if member: + comment.author_name = member.getProperty('fullname') + else: + comment.author_name = comment.author_username try: comment.author_email = reply.email From 803d6c7fbbea119446bd3163ea0ba4788daa5cc5 Mon Sep 17 00:00:00 2001 From: Roman Kozlovskyi Date: Fri, 12 Apr 2013 15:11:29 +0300 Subject: [PATCH 052/254] Updated ukrainian translations --- plone/app/discussion/i18n/plone-uk.po | 4 ++-- .../locales/uk/LC_MESSAGES/plone.app.discussion.po | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plone/app/discussion/i18n/plone-uk.po b/plone/app/discussion/i18n/plone-uk.po index fdb302b..a3754b7 100644 --- a/plone/app/discussion/i18n/plone-uk.po +++ b/plone/app/discussion/i18n/plone-uk.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" "POT-Creation-Date: 2013-04-06 12:48+0000\n" -"PO-Revision-Date: 2011-08-18 14:54+0300\n" -"Last-Translator: Olha \n" +"PO-Revision-Date: 2013-04-12 14:55+0300\n" +"Last-Translator: Roman Kozlovskyi \n" "Language-Team: Hanno Schlichting \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" diff --git a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po index 86fdad6..615f639 100644 --- a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" "PO-Revision-Date: \n" -"Last-Translator: Olha \n" +"Last-Translator: Roman Kozlovskyi \n" "Language-Team: Hanno Schlichting \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -64,7 +64,7 @@ msgstr "Дата створення" #: ../interfaces.py:40 msgid "Date of the most recent public comment" -msgstr "" +msgstr "Дата останного публічного коментаря" #: ../vocabularies.py:44 msgid "Disabled" @@ -128,11 +128,11 @@ msgstr "Перелік коментаторів (імена користувач #: ../interfaces.py:50 msgid "The set of unique commentators (usernames) of published_comments" -msgstr "" +msgstr "Перелік коментаторів (імена користувачів) опублікованих коментарів" #: ../interfaces.py:34 msgid "Total number of public comments on this item" -msgstr "" +msgstr "Загальна кількість публічних коментарів для даного елемента" #: ../comment.py:158 msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." From 59b56166f75b6b8fbfee9ef5840584abfed442fd Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Sat, 13 Apr 2013 10:24:19 +0200 Subject: [PATCH 053/254] Jenkins.cfg added. --- .gitignore | 1 + bootstrap.py | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++ jenkins.cfg | 12 ++++ 3 files changed, 178 insertions(+) create mode 100644 bootstrap.py create mode 100644 jenkins.cfg diff --git a/.gitignore b/.gitignore index 851e457..206bfb5 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ /build /dist /local.cfg +.coverage /*.egg-info /.installed.cfg *.pyc diff --git a/bootstrap.py b/bootstrap.py new file mode 100644 index 0000000..ec3757a --- /dev/null +++ b/bootstrap.py @@ -0,0 +1,165 @@ +############################################################################## +# +# Copyright (c) 2006 Zope Foundation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## +"""Bootstrap a buildout-based project + +Simply run this script in a directory containing a buildout.cfg. +The script accepts buildout command-line options, so you can +use the -c option to specify an alternate configuration file. +""" + +import os, shutil, sys, tempfile +from optparse import OptionParser + +tmpeggs = tempfile.mkdtemp() + +usage = '''\ +[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options] + +Bootstraps a buildout-based project. + +Simply run this script in a directory containing a buildout.cfg, using the +Python that you want bin/buildout to use. + +Note that by using --setup-source and --download-base to point to +local resources, you can keep this script from going over the network. +''' + +parser = OptionParser(usage=usage) +parser.add_option("-v", "--version", help="use a specific zc.buildout version") + +parser.add_option("-t", "--accept-buildout-test-releases", + dest='accept_buildout_test_releases', + action="store_true", default=False, + help=("Normally, if you do not specify a --version, the " + "bootstrap script and buildout gets the newest " + "*final* versions of zc.buildout and its recipes and " + "extensions for you. If you use this flag, " + "bootstrap and buildout will get the newest releases " + "even if they are alphas or betas.")) +parser.add_option("-c", "--config-file", + help=("Specify the path to the buildout configuration " + "file to be used.")) +parser.add_option("-f", "--find-links", + help=("Specify a URL to search for buildout releases")) + + +options, args = parser.parse_args() + +###################################################################### +# load/install distribute + +to_reload = False +try: + import pkg_resources, setuptools + if not hasattr(pkg_resources, '_distribute'): + to_reload = True + raise ImportError +except ImportError: + ez = {} + + try: + from urllib.request import urlopen + except ImportError: + from urllib2 import urlopen + + exec(urlopen('http://python-distribute.org/distribute_setup.py').read(), ez) + setup_args = dict(to_dir=tmpeggs, download_delay=0, no_fake=True) + ez['use_setuptools'](**setup_args) + + if to_reload: + reload(pkg_resources) + import pkg_resources + # This does not (always?) update the default working set. We will + # do it. + for path in sys.path: + if path not in pkg_resources.working_set.entries: + pkg_resources.working_set.add_entry(path) + +###################################################################### +# Install buildout + +ws = pkg_resources.working_set + +cmd = [sys.executable, '-c', + 'from setuptools.command.easy_install import main; main()', + '-mZqNxd', tmpeggs] + +find_links = os.environ.get( + 'bootstrap-testing-find-links', + options.find_links or + ('http://downloads.buildout.org/' + if options.accept_buildout_test_releases else None) + ) +if find_links: + cmd.extend(['-f', find_links]) + +distribute_path = ws.find( + pkg_resources.Requirement.parse('distribute')).location + +requirement = 'zc.buildout' +version = options.version +if version is None and not options.accept_buildout_test_releases: + # Figure out the most recent final version of zc.buildout. + import setuptools.package_index + _final_parts = '*final-', '*final' + def _final_version(parsed_version): + for part in parsed_version: + if (part[:1] == '*') and (part not in _final_parts): + return False + return True + index = setuptools.package_index.PackageIndex( + search_path=[distribute_path]) + if find_links: + index.add_find_links((find_links,)) + req = pkg_resources.Requirement.parse(requirement) + if index.obtain(req) is not None: + best = [] + bestv = None + for dist in index[req.project_name]: + distv = dist.parsed_version + if _final_version(distv): + if bestv is None or distv > bestv: + best = [dist] + bestv = distv + elif distv == bestv: + best.append(dist) + if best: + best.sort() + version = best[-1].version +if version: + requirement = '=='.join((requirement, version)) +cmd.append(requirement) + +import subprocess +if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=distribute_path)) != 0: + raise Exception( + "Failed to execute command:\n%s", + repr(cmd)[1:-1]) + +###################################################################### +# Import and run buildout + +ws.add_entry(tmpeggs) +ws.require(requirement) +import zc.buildout.buildout + +if not [a for a in args if '=' not in a]: + args.append('bootstrap') + +# if -c was provided, we push it back into args for buildout' main function +if options.config_file is not None: + args[0:0] = ['-c', options.config_file] + +zc.buildout.buildout.main(args) +shutil.rmtree(tmpeggs) diff --git a/jenkins.cfg b/jenkins.cfg new file mode 100644 index 0000000..819f5fb --- /dev/null +++ b/jenkins.cfg @@ -0,0 +1,12 @@ +[buildout] +extends = + https://raw.github.com/collective/buildout.plonetest/master/plone-4.3.x.cfg + https://raw.github.com/plone/buildout.jenkins/master/jenkins.cfg + https://raw.github.com/plone/buildout.jenkins/master/jenkins-code-analysis.cfg +jenkins-test-eggs = plone.app.discussion [test] +jenkins-test-directories = plone/app/discussion + +[versions] +plone.app.discussion = +zope.interface = 3.6.1 + From 1e95e33573fb03c91c7ed517ec088f6d80e9e47c Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Sat, 13 Apr 2013 22:47:30 +0200 Subject: [PATCH 054/254] Pep8 --- plone/app/discussion/interfaces.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index 15c674d..9e64b2e 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -34,23 +34,23 @@ class IConversation(IIterableMapping): title=_(u"Total number of public comments on this item"), min=0, readonly=True, - ) + ) last_comment_date = schema.Date( title=_(u"Date of the most recent public comment"), readonly=True, - ) + ) commentators = schema.Set( title=_(u"The set of unique commentators (usernames)"), readonly=True, - ) + ) public_commentators = schema.Set( title=_(u"The set of unique commentators (usernames) of" " published_comments"), readonly=True, - ) + ) def addComment(comment): """Adds a new comment to the list of comments, and returns the From 8d63226e939151483ac01e3c5510bf131d9b4770 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Sun, 14 Apr 2013 12:00:44 +0200 Subject: [PATCH 055/254] Add plone.recipe.codeanalysis dev parts. --- jenkins.cfg | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/jenkins.cfg b/jenkins.cfg index 819f5fb..8b90dec 100644 --- a/jenkins.cfg +++ b/jenkins.cfg @@ -5,8 +5,25 @@ extends = https://raw.github.com/plone/buildout.jenkins/master/jenkins-code-analysis.cfg jenkins-test-eggs = plone.app.discussion [test] jenkins-test-directories = plone/app/discussion +parts = + flake8 + code-analysis +extensions = mr.developer +auto-checkout = plone.recipe.codeanalysis + +[flake8] +recipe = zc.recipe.egg +eggs = flake8 +entry-points = flake8=flake8.main:main + +[code-analysis] +recipe = plone.recipe.codeanalysis + +[sources] +plone.recipe.codeanalysis = fs plone.recipe.codeanalysis [versions] plone.app.discussion = zope.interface = 3.6.1 - +zc.buildout = 2.1.0 +zc.recipe.egg = 2.0.0 From 822f39451f787328ced2d4c1c790c8e942f886e6 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 17 Apr 2013 11:17:07 +0200 Subject: [PATCH 056/254] Add repo url for plone.recipe.codeanaylsis. --- jenkins.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jenkins.cfg b/jenkins.cfg index 8b90dec..a4633ed 100644 --- a/jenkins.cfg +++ b/jenkins.cfg @@ -20,7 +20,7 @@ entry-points = flake8=flake8.main:main recipe = plone.recipe.codeanalysis [sources] -plone.recipe.codeanalysis = fs plone.recipe.codeanalysis +plone.recipe.codeanalysis = git git://github.com/tisto/plone.recipe.codeanalysis.git pushurl=git@github.com:tisto/plone.recipe.codeanalysis.git [versions] plone.app.discussion = From 244cc96aa51c08054407d6177845c0ef4bdf4fda Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 17 Apr 2013 11:25:16 +0200 Subject: [PATCH 057/254] Extend parts, do not override it. --- jenkins.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jenkins.cfg b/jenkins.cfg index a4633ed..ed50a3c 100644 --- a/jenkins.cfg +++ b/jenkins.cfg @@ -5,7 +5,7 @@ extends = https://raw.github.com/plone/buildout.jenkins/master/jenkins-code-analysis.cfg jenkins-test-eggs = plone.app.discussion [test] jenkins-test-directories = plone/app/discussion -parts = +parts += flake8 code-analysis extensions = mr.developer From c678589df5ff0a2f8bc995fe20fc78a54731d3ad Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 17 Apr 2013 14:10:11 +0200 Subject: [PATCH 058/254] Checkout latest c.xmltestreport. --- jenkins.cfg | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/jenkins.cfg b/jenkins.cfg index ed50a3c..209b2f4 100644 --- a/jenkins.cfg +++ b/jenkins.cfg @@ -9,7 +9,9 @@ parts += flake8 code-analysis extensions = mr.developer -auto-checkout = plone.recipe.codeanalysis +auto-checkout = + plone.recipe.codeanalysis + collective.xmltestreport [flake8] recipe = zc.recipe.egg @@ -21,6 +23,7 @@ recipe = plone.recipe.codeanalysis [sources] plone.recipe.codeanalysis = git git://github.com/tisto/plone.recipe.codeanalysis.git pushurl=git@github.com:tisto/plone.recipe.codeanalysis.git +collective.xmltestreport = git git://github.com/collective/collective.xmltestreport.git [versions] plone.app.discussion = From 628f72ea0bd5094de86c4d261d0fb5588e3bea6c Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 17 Apr 2013 14:24:39 +0200 Subject: [PATCH 059/254] Pep8. --- plone/app/discussion/tests/test_workflow.py | 67 +++++++++++++++------ 1 file changed, 48 insertions(+), 19 deletions(-) diff --git a/plone/app/discussion/tests/test_workflow.py b/plone/app/discussion/tests/test_workflow.py index 95c8878..8ea9e30 100644 --- a/plone/app/discussion/tests/test_workflow.py +++ b/plone/app/discussion/tests/test_workflow.py @@ -47,9 +47,12 @@ class WorkflowSetupTest(unittest.TestCase): def test_default_workflow(self): """Make sure one_state_workflow is the default workflow. """ - self.assertEqual(('one_state_workflow',), - self.portal.portal_workflow.getChainForPortalType( - 'Discussion Item')) + self.assertEqual( + ('one_state_workflow',), + self.portal.portal_workflow.getChainForPortalType( + 'Discussion Item' + ) + ) def test_review_comments_permission(self): #'Review comments' in self.portal.permissionsOfRole('Admin') @@ -58,8 +61,13 @@ class WorkflowSetupTest(unittest.TestCase): self.assertTrue(self.portal.portal_membership.checkPermission( 'Review comments', self.folder), self.folder) setRoles(self.portal, TEST_USER_ID, ['Member']) - self.assertFalse(self.portal.portal_membership.checkPermission( - 'Review comments', self.folder), self.folder) + self.assertFalse( + self.portal.portal_membership.checkPermission( + 'Review comments', + self.folder + ), + self.folder + ) def test_reply_to_item_permission(self): pass @@ -121,8 +129,9 @@ class CommentOneStateWorkflowTest(unittest.TestCase): comment.text = 'Comment text' cid = conversation.addComment(comment) - self.comment = self.folder.doc1.restrictedTraverse(\ - '++conversation++default/%s' % cid) + self.comment = self.folder.doc1.restrictedTraverse( + '++conversation++default/%s' % cid + ) self.portal.acl_users._doAddUser('member', 'secret', ['Member'], []) self.portal.acl_users._doAddUser( @@ -228,25 +237,45 @@ class CommentReviewWorkflowTest(unittest.TestCase): def test_publish(self): self.portal.REQUEST.form['comment_id'] = self.comment_id self.portal.REQUEST.form['workflow_action'] = 'publish' - self.assertEqual('pending', - self.portal.portal_workflow.getInfoFor( - self.comment, 'review_state')) + self.assertEqual( + 'pending', + self.portal.portal_workflow.getInfoFor( + self.comment, + 'review_state' + ) + ) view = self.comment.restrictedTraverse('@@moderate-publish-comment') view() - self.assertEqual('published', self.portal.portal_workflow.\ - getInfoFor(self.comment, 'review_state')) + self.assertEqual( + 'published', + self.portal.portal_workflow.getInfoFor( + self.comment, + 'review_state' + ) + ) def test_publish_as_anonymous(self): logout() self.portal.REQUEST.form['comment_id'] = self.comment_id self.portal.REQUEST.form['workflow_action'] = 'publish' - self.assertEqual('pending', self.portal.portal_workflow.\ - getInfoFor(self.comment, 'review_state')) - self.assertRaises(Unauthorized, - self.comment.restrictedTraverse, - '@@moderate-publish-comment') - self.assertEqual('pending', self.portal.portal_workflow.\ - getInfoFor(self.comment, 'review_state')) + self.assertEqual( + 'pending', self.portal.portal_workflow.getInfoFor( + self.comment, + 'review_state' + ) + ) + self.assertRaises( + Unauthorized, + self.comment.restrictedTraverse, + '@@moderate-publish-comment' + ) + self.assertEqual( + 'pending', + self.portal.portal_workflow.getInfoFor( + self.comment, + 'review_state' + ) + ) def test_suite(): From 048ca0a87a773d368d02b985a3c4e949e086d193 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 17 Apr 2013 14:52:44 +0200 Subject: [PATCH 060/254] Update CHANGES.txt. --- CHANGES.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 06f78ab..932e328 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,7 +4,8 @@ Changelog 2.2.6 (unreleased) ------------------ -- Nothing changed yet. +- Fix migration to not fail when member has been deleted. + [datakurre] 2.2.5 (2013-04-06) From 92375bd338b2bdc4a19610c6f8ab92944ca004fb Mon Sep 17 00:00:00 2001 From: Asko Soukka Date: Wed, 17 Apr 2013 15:54:24 +0300 Subject: [PATCH 061/254] Update changelog Add changelog entry for https://github.com/plone/plone.app.discussion/commit/aa61364342126bce8f881c8bde7789759cc469e1 --- CHANGES.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 06f78ab..317a99c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,8 +4,8 @@ Changelog 2.2.6 (unreleased) ------------------ -- Nothing changed yet. - +- Fix migration to not fail when member has been deleted. + [datakurre] 2.2.5 (2013-04-06) ------------------ From 65ade424d8afa0bf5ba442a59e8270e7328afdf1 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 17 Apr 2013 14:55:50 +0200 Subject: [PATCH 062/254] Pep8. --- plone/app/discussion/browser/migration.py | 52 ++++++++++++++--------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/plone/app/discussion/browser/migration.py b/plone/app/discussion/browser/migration.py index 7859091..cf615ce 100644 --- a/plone/app/discussion/browser/migration.py +++ b/plone/app/discussion/browser/migration.py @@ -107,12 +107,16 @@ class View(BrowserView): comment.author_name = member.fullname if not comment.author_name: - # In migrated site member.fullname ='' while member.getProperty('fullname') has the correct value + # In migrated site member.fullname = '' + # while member.getProperty('fullname') has the + # correct value if member: - comment.author_name = member.getProperty('fullname') + comment.author_name = member.getProperty( + 'fullname' + ) else: comment.author_name = comment.author_username - + try: comment.author_email = reply.email except AttributeError: @@ -140,8 +144,8 @@ class View(BrowserView): 'comment': 'Migrated workflow state', 'review_state': old_status and old_status.get( 'review_state', - new_workflow.initial_state) - or 'published', + new_workflow.initial_state + ) or 'published', 'time': DateTime() } workflow.setStatusOf('comment_review_workflow', @@ -186,13 +190,17 @@ class View(BrowserView): object_provides='Products.CMFCore.interfaces._content.IContentish') log("Found %s content objects." % len(brains)) - count_discussion_items = len(catalog.searchResults( - Type='Discussion Item')) - count_comments_pad = len(catalog.searchResults( - object_provides=IComment.__identifier__)) - count_comments_old = len(catalog.searchResults( - object_provides=IDiscussionResponse.\ - __identifier__)) + count_discussion_items = len( + catalog.searchResults(Type='Discussion Item') + ) + count_comments_pad = len( + catalog.searchResults(object_provides=IComment.__identifier__) + ) + count_comments_old = len( + catalog.searchResults( + object_provides=IDiscussionResponse.__identifier__ + ) + ) log("Found %s Discussion Item objects." % count_discussion_items) log("Found %s old discussion items." % count_comments_old) @@ -225,10 +233,14 @@ class View(BrowserView): obj.talkback = None if self.total_comments_deleted != self.total_comments_migrated: - log("Something went wrong during migration. The number of \ - migrated comments (%s) differs from the number of deleted \ - comments (%s)." # pragma: no cover - % (self.total_comments_migrated, self.total_comments_deleted)) + log( + "Something went wrong during migration. The number of " + + "migrated comments (%s) differs from the number of deleted " + + "comments (%s)." % ( + self.total_comments_migrated, + self.total_comments_deleted + ) + ) if not test: # pragma: no cover transaction.abort() # pragma: no cover log("Abort transaction") # pragma: no cover @@ -241,9 +253,11 @@ class View(BrowserView): % (self.total_comments_migrated, count_comments_old)) if self.total_comments_migrated != count_comments_old: - log("%s comments could not be migrated." % - (count_comments_old - \ - self.total_comments_migrated)) # pragma: no cover + log( + "%s comments could not be migrated." % ( + count_comments_old - self.total_comments_migrated + ) + ) # pragma: no cover log("Please make sure your " + "portal catalog is up-to-date.") # pragma: no cover From dcb2d3e7d4fa9ec2743ea133717feb07c259e7ab Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 17 Apr 2013 19:04:45 +0200 Subject: [PATCH 063/254] Pep8 --- plone/app/discussion/tests/test_migration.py | 109 ++++++++++-------- .../discussion/tests/test_moderation_view.py | 15 ++- .../discussion/tests/test_notifications.py | 15 ++- plone/app/discussion/tests/test_tool.py | 6 +- 4 files changed, 86 insertions(+), 59 deletions(-) diff --git a/plone/app/discussion/tests/test_migration.py b/plone/app/discussion/tests/test_migration.py index 98a12d5..eec1215 100644 --- a/plone/app/discussion/tests/test_migration.py +++ b/plone/app/discussion/tests/test_migration.py @@ -9,8 +9,9 @@ from Products.CMFCore.utils import getToolByName from plone.app.testing import TEST_USER_ID, setRoles -from plone.app.discussion.testing import \ - PLONE_APP_DISCUSSION_INTEGRATION_TESTING +from plone.app.discussion.testing import ( + PLONE_APP_DISCUSSION_INTEGRATION_TESTING +) from plone.app.discussion.browser.migration import View @@ -24,19 +25,25 @@ class MigrationTest(unittest.TestCase): def _publish(self, reply): # publish the reply status = self.portal.portal_workflow.getStatusOf( - 'comment_review_workflow', reply).copy() + 'comment_review_workflow', reply + ).copy() status['review_state'] = 'published' self.portal.portal_workflow.setStatusOf( - 'comment_review_workflow', reply, status) + 'comment_review_workflow', + reply, + status, + ) def setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory(id='doc', - title='Document 1', - type_name='Document') + self.portal.invokeFactory( + id='doc', + title='Document 1', + type_name='Document' + ) # Create a document self.discussion = getToolByName(self.portal, 'portal_discussion', None) self.discussion.overrideDiscussionFor(self.portal.doc, 1) @@ -47,8 +54,10 @@ class MigrationTest(unittest.TestCase): self.request.set("test", True) self.view = View(self.portal, self.request) - self.workflowTool.setChainForPortalTypes(('Discussion Item',), - 'comment_review_workflow') + self.workflowTool.setChainForPortalTypes( + ('Discussion Item',), + 'comment_review_workflow' + ) # Create a user Jimmy Jones so comments creator migration can work? acl_users = getToolByName(self.portal, 'acl_users') @@ -80,8 +89,9 @@ class MigrationTest(unittest.TestCase): self.view() # Make sure a conversation has been created - self.assertTrue('plone.app.discussion:conversation' in - IAnnotations(self.doc)) + self.assertTrue( + 'plone.app.discussion:conversation' in IAnnotations(self.doc) + ) conversation = IConversation(self.doc) # Check migration @@ -93,20 +103,20 @@ class MigrationTest(unittest.TestCase): self.assertEqual(comment1.text, '

My Text

\n') self.assertEqual(comment1.mime_type, 'text/html') self.assertEqual(comment1.Creator(), 'Jim') - self.assertEqual(comment1.creation_date, - datetime(2003, 3, 11, 9, 28, 6)) - self.assertEqual(comment1.modification_date, - datetime(2009, 7, 12, 19, 38, 7)) + self.assertEqual( + comment1.creation_date, + datetime(2003, 3, 11, 9, 28, 6) + ) + self.assertEqual( + comment1.modification_date, + datetime(2009, 7, 12, 19, 38, 7) + ) self.assertEqual([ {'comment': comment1, 'depth': 0, 'id': long(comment1.id)} - ], list(conversation.getThreads())) + ], list(conversation.getThreads())) self.assertFalse(self.doc.talkback) - def test_migrate_comment_with_creator(self): - - - # Create a comment talkback = self.discussion.getDiscussionFor(self.doc) self.doc.talkback.createReply('My Title', 'My Text', Creator='Jim') @@ -123,15 +133,16 @@ class MigrationTest(unittest.TestCase): self.assertTrue('Jim' in reply.listCreators()) self.assertEqual(talkback.replyCount(self.doc), 1) self.assertEqual(reply.inReplyTo(), self.doc) - self.assertEqual(reply.author_username,'Jim') - self.assertEqual(reply.email,'jimmy@jones.xyz') + self.assertEqual(reply.author_username, 'Jim') + self.assertEqual(reply.email, 'jimmy@jones.xyz') # Call migration script self.view() # Make sure a conversation has been created - self.assertTrue('plone.app.discussion:conversation' in - IAnnotations(self.doc)) + self.assertTrue( + 'plone.app.discussion:conversation' in IAnnotations(self.doc) + ) conversation = IConversation(self.doc) # Check migration @@ -143,21 +154,26 @@ class MigrationTest(unittest.TestCase): self.assertEqual(comment1.text, '

My Text

\n') self.assertEqual(comment1.mime_type, 'text/html') self.assertEqual(comment1.Creator(), 'Jim') - self.assertEqual(comment1.creation_date, - datetime(2003, 3, 11, 9, 28, 6)) - self.assertEqual(comment1.modification_date, - datetime(2009, 7, 12, 19, 38, 7)) + self.assertEqual( + comment1.creation_date, + datetime(2003, 3, 11, 9, 28, 6) + ) + self.assertEqual( + comment1.modification_date, + datetime(2009, 7, 12, 19, 38, 7) + ) self.assertEqual([ {'comment': comment1, 'depth': 0, 'id': long(comment1.id)} - ], list(conversation.getThreads())) + ], list(conversation.getThreads())) self.assertFalse(self.doc.talkback) - # Though this should be Jimmy, but looks like getProperty won't pick up 'author_username' - # (reply.author_username is not None), so it's propagating Creator()..? - self.assertEqual(comment1.author_username,'Jim') + # Though this should be Jimmy, but looks like getProperty won't pick + # up 'author_username' (reply.author_username is not None), so it's + # propagating Creator()..? + self.assertEqual(comment1.author_username, 'Jim') - self.assertEqual(comment1.author_name,'Jimmy Jones') - self.assertEqual(comment1.author_email,'jimmy@jones.xyz') + self.assertEqual(comment1.author_name, 'Jimmy Jones') + self.assertEqual(comment1.author_email, 'jimmy@jones.xyz') def test_migrate_nested_comments(self): # Create some nested comments and migrate them @@ -243,16 +259,16 @@ class MigrationTest(unittest.TestCase): comment1_4 = conversation.values()[6] comment2 = conversation.values()[7] - self.assertEqual( - [{'comment': comment1, 'depth': 0, 'id': long(comment1.id)}, - {'comment': comment1_1, 'depth': 1, 'id': long(comment1_1.id)}, - {'comment': comment1_1_1, 'depth': 2, 'id': long(comment1_1_1.id)}, - {'comment': comment1_1_1_1, 'depth': 3, - 'id': long(comment1_1_1_1.id)}, - {'comment': comment1_2, 'depth': 1, 'id': long(comment1_2.id)}, - {'comment': comment1_3, 'depth': 1, 'id': long(comment1_3.id)}, - {'comment': comment1_4, 'depth': 1, 'id': long(comment1_4.id)}, - {'comment': comment2, 'depth': 0, 'id': long(comment2.id)}, + self.assertEqual([ + {'comment': comment1, 'depth': 0, 'id': long(comment1.id)}, + {'comment': comment1_1, 'depth': 1, 'id': long(comment1_1.id)}, + {'comment': comment1_1_1, 'depth': 2, 'id': long(comment1_1_1.id)}, + {'comment': comment1_1_1_1, 'depth': 3, + 'id': long(comment1_1_1_1.id)}, + {'comment': comment1_2, 'depth': 1, 'id': long(comment1_2.id)}, + {'comment': comment1_3, 'depth': 1, 'id': long(comment1_3.id)}, + {'comment': comment1_4, 'depth': 1, 'id': long(comment1_4.id)}, + {'comment': comment2, 'depth': 0, 'id': long(comment2.id)}, ], list(conversation.getThreads())) talkback = self.discussion.getDiscussionFor(self.doc) @@ -303,8 +319,9 @@ class MigrationTest(unittest.TestCase): self.view() # Make sure no conversation has been created - self.assertTrue('plone.app.discussion:conversation' not in - IAnnotations(self.doc)) + self.assertTrue( + 'plone.app.discussion:conversation' not in IAnnotations(self.doc) + ) def test_suite(): diff --git a/plone/app/discussion/tests/test_moderation_view.py b/plone/app/discussion/tests/test_moderation_view.py index bf09ea0..ac0a7bd 100644 --- a/plone/app/discussion/tests/test_moderation_view.py +++ b/plone/app/discussion/tests/test_moderation_view.py @@ -107,22 +107,25 @@ class ModerationBulkActionsViewTest(unittest.TestCase): comment1.text = 'Comment text' comment1.Creator = 'Jim' new_id_1 = conversation.addComment(comment1) - self.comment1 = self.portal.doc1.restrictedTraverse(\ - '++conversation++default/%s' % new_id_1) + self.comment1 = self.portal.doc1.restrictedTraverse( + '++conversation++default/%s' % new_id_1 + ) comment2 = createObject('plone.Comment') comment2.title = 'Comment 2' comment2.text = 'Comment text' comment2.Creator = 'Joe' new_id_2 = conversation.addComment(comment2) - self.comment2 = self.portal.doc1.restrictedTraverse(\ - '++conversation++default/%s' % new_id_2) + self.comment2 = self.portal.doc1.restrictedTraverse( + '++conversation++default/%s' % new_id_2 + ) comment3 = createObject('plone.Comment') comment3.title = 'Comment 3' comment3.text = 'Comment text' comment3.Creator = 'Emma' new_id_3 = conversation.addComment(comment3) - self.comment3 = self.portal.doc1.restrictedTraverse(\ - '++conversation++default/%s' % new_id_3) + self.comment3 = self.portal.doc1.restrictedTraverse( + '++conversation++default/%s' % new_id_3 + ) self.conversation = conversation def test_default_bulkaction(self): diff --git a/plone/app/discussion/tests/test_notifications.py b/plone/app/discussion/tests/test_notifications.py index 10970f6..1c397c1 100644 --- a/plone/app/discussion/tests/test_notifications.py +++ b/plone/app/discussion/tests/test_notifications.py @@ -92,8 +92,10 @@ class TestUserNotificationUnit(unittest.TestCase): def test_do_not_notify_user_when_notification_is_disabled(self): registry = queryUtility(IRegistry) - registry['plone.app.discussion.interfaces.IDiscussionSettings.' + - 'user_notification_enabled'] = False + registry[ + 'plone.app.discussion.interfaces.IDiscussionSettings.' + + 'user_notification_enabled' + ] = False comment = createObject('plone.Comment') comment.text = 'Comment text' comment.user_notification = True @@ -177,11 +179,14 @@ class TestModeratorNotificationUnit(unittest.TestCase): self.portal.portal_types['Document'].allow_discussion = True self.portal.portal_workflow.setChainForPortalTypes( ('Discussion Item',), - ('comment_review_workflow',)) + ('comment_review_workflow',) + ) # Enable moderator notification setting registry = queryUtility(IRegistry) - registry['plone.app.discussion.interfaces.IDiscussionSettings.' + - 'moderator_notification_enabled'] = True + registry[ + 'plone.app.discussion.interfaces.IDiscussionSettings.' + + 'moderator_notification_enabled' + ] = True # Create test content self.portal.invokeFactory('Document', 'doc1') self.portal_discussion = self.portal.portal_discussion diff --git a/plone/app/discussion/tests/test_tool.py b/plone/app/discussion/tests/test_tool.py index 86a71b5..1386cff 100644 --- a/plone/app/discussion/tests/test_tool.py +++ b/plone/app/discussion/tests/test_tool.py @@ -37,9 +37,11 @@ class ToolTest(unittest.TestCase): # Check that the comment got indexed in the tool: tool = queryUtility(ICommentingTool) comment = list(tool.searchResults()) - self.assertTrue(len(comment) == 1, + self.assertTrue( + len(comment) == 1, "There is only one comment, but we got" - " %s results in the search" % len(comment)) + " %s results in the search" % len(comment) + ) self.assertEqual(comment[0].Title, 'Jim on Document 1') def test_unindexing(self): From 943065c15f4fc7c62d9bf9b75ba21041aab615d9 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 17 Apr 2013 19:07:40 +0200 Subject: [PATCH 064/254] Pep8. --- plone/app/discussion/tests/test_functional.py | 7 +- plone/app/discussion/tests/test_indexers.py | 82 ++++++++++++------- 2 files changed, 58 insertions(+), 31 deletions(-) diff --git a/plone/app/discussion/tests/test_functional.py b/plone/app/discussion/tests/test_functional.py index 0c7f31e..98bd51f 100644 --- a/plone/app/discussion/tests/test_functional.py +++ b/plone/app/discussion/tests/test_functional.py @@ -15,9 +15,10 @@ from plone.app.discussion.testing import \ optionflags = ( - doctest.ELLIPSIS | \ - doctest.NORMALIZE_WHITESPACE | \ - doctest.REPORT_ONLY_FIRST_FAILURE) + doctest.ELLIPSIS | + doctest.NORMALIZE_WHITESPACE | + doctest.REPORT_ONLY_FIRST_FAILURE +) normal_testfiles = [ 'functional_test_comments.txt', 'functional_test_comment_review_workflow.txt', diff --git a/plone/app/discussion/tests/test_indexers.py b/plone/app/discussion/tests/test_indexers.py index a12e97f..0701e27 100644 --- a/plone/app/discussion/tests/test_indexers.py +++ b/plone/app/discussion/tests/test_indexers.py @@ -40,9 +40,11 @@ class ConversationIndexersTest(unittest.TestCase): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory(id='doc1', - title='Document 1', - type_name='Document') + self.portal.invokeFactory( + id='doc1', + title='Document 1', + type_name='Document' + ) # Create a conversation. conversation = IConversation(self.portal.doc1) @@ -74,8 +76,10 @@ class ConversationIndexersTest(unittest.TestCase): self.conversation = conversation def test_conversation_total_comments(self): - self.assertTrue(isinstance(catalog.total_comments, - DelegatingIndexerFactory)) + self.assertTrue(isinstance( + catalog.total_comments, + DelegatingIndexerFactory + )) self.assertEqual(catalog.total_comments(self.portal.doc1)(), 3) del self.conversation[self.new_id1] self.assertEqual(catalog.total_comments(self.portal.doc1)(), 2) @@ -84,13 +88,19 @@ class ConversationIndexersTest(unittest.TestCase): self.assertEqual(catalog.total_comments(self.portal.doc1)(), 0) def test_conversation_last_comment_date(self): - self.assertTrue(isinstance(catalog.last_comment_date, - DelegatingIndexerFactory)) - self.assertEqual(catalog.last_comment_date(self.portal.doc1)(), - datetime(2009, 4, 12, 11, 12, 12)) + self.assertTrue(isinstance( + catalog.last_comment_date, + DelegatingIndexerFactory + )) + self.assertEqual( + catalog.last_comment_date(self.portal.doc1)(), + datetime(2009, 4, 12, 11, 12, 12) + ) del self.conversation[self.new_id3] - self.assertEqual(catalog.last_comment_date(self.portal.doc1)(), - datetime(2007, 12, 13, 4, 18, 12)) + self.assertEqual( + catalog.last_comment_date(self.portal.doc1)(), + datetime(2007, 12, 13, 4, 18, 12) + ) del self.conversation[self.new_id2] del self.conversation[self.new_id1] self.assertEqual(catalog.last_comment_date(self.portal.doc1)(), None) @@ -111,9 +121,11 @@ class CommentIndexersTest(unittest.TestCase): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory(id='doc1', - title='Document 1', - type_name='Document') + self.portal.invokeFactory( + id='doc1', + title='Document 1', + type_name='Document' + ) # Create a conversation. In this case we doesn't assign it to an # object, as we just want to check the Conversation object API. @@ -138,8 +150,10 @@ class CommentIndexersTest(unittest.TestCase): self.assertTrue(isinstance(catalog.title, DelegatingIndexerFactory)) def test_description(self): - self.assertEqual(catalog.description(self.comment)(), - 'Lorem ipsum dolor sit amet.') + self.assertEqual( + catalog.description(self.comment)(), + 'Lorem ipsum dolor sit amet.' + ) self.assertTrue( isinstance(catalog.description, DelegatingIndexerFactory)) @@ -151,24 +165,36 @@ class CommentIndexersTest(unittest.TestCase): comment_long.text = LONG_TEXT self.conversation.addComment(comment_long) - self.assertEqual(catalog.description(comment_long)(), - LONG_TEXT_CUT.replace("\n", " ")) + self.assertEqual( + catalog.description(comment_long)(), + LONG_TEXT_CUT.replace("\n", " ") + ) def test_dates(self): # Test if created, modified, effective etc. are set correctly - self.assertEqual(catalog.created(self.comment)(), - DateTime(2006, 9, 17, 14, 18, 12, 'GMT')) - self.assertEqual(catalog.effective(self.comment)(), - DateTime(2006, 9, 17, 14, 18, 12, 'GMT')) - self.assertEqual(catalog.modified(self.comment)(), - DateTime(2008, 3, 12, 7, 32, 52, 'GMT')) + self.assertEqual( + catalog.created(self.comment)(), + DateTime(2006, 9, 17, 14, 18, 12, 'GMT') + ) + self.assertEqual( + catalog.effective(self.comment)(), + DateTime(2006, 9, 17, 14, 18, 12, 'GMT') + ) + self.assertEqual( + catalog.modified(self.comment)(), + DateTime(2008, 3, 12, 7, 32, 52, 'GMT') + ) def test_searchable_text(self): # Test if searchable text is a concatenation of title and comment text - self.assertEqual(catalog.searchable_text(self.comment)(), - ('Lorem ipsum dolor sit amet.')) - self.assertTrue(isinstance(catalog.searchable_text, - DelegatingIndexerFactory)) + self.assertEqual( + catalog.searchable_text(self.comment)(), + ('Lorem ipsum dolor sit amet.') + ) + self.assertTrue(isinstance( + catalog.searchable_text, + DelegatingIndexerFactory + )) def test_creator(self): self.assertEqual(catalog.creator(self.comment)(), ('jim')) From b4c22e90bf3f7ce00d18a08f7ec2c24d5631c066 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 17 Apr 2013 19:27:30 +0200 Subject: [PATCH 065/254] Pep8. --- .../app/discussion/tests/test_controlpanel.py | 119 ++++++++---- .../app/discussion/tests/test_conversation.py | 182 +++++++++++------- 2 files changed, 199 insertions(+), 102 deletions(-) diff --git a/plone/app/discussion/tests/test_controlpanel.py b/plone/app/discussion/tests/test_controlpanel.py index 91f6f15..a184bb7 100644 --- a/plone/app/discussion/tests/test_controlpanel.py +++ b/plone/app/discussion/tests/test_controlpanel.py @@ -31,65 +31,100 @@ class RegistryTest(unittest.TestCase): self.assertTrue(registry.forInterface(IDiscussionSettings)) def test_discussion_controlpanel_view(self): - view = getMultiAdapter((self.portal, self.portal.REQUEST), - name="discussion-settings") + view = getMultiAdapter( + (self.portal, self.portal.REQUEST), + name="discussion-settings" + ) view = view.__of__(self.portal) self.assertTrue(view()) def test_discussion_in_controlpanel(self): # Check if discussion is in the control panel self.controlpanel = getToolByName(self.portal, "portal_controlpanel") - self.assertTrue('discussion' in [a.getAction(self)['id'] - for a in self.controlpanel.listActions()]) + self.assertTrue( + 'discussion' in [ + a.getAction(self)['id'] + for a in self.controlpanel.listActions() + ] + ) def test_globally_enabled(self): # Check globally_enabled record self.assertTrue('globally_enabled' in IDiscussionSettings) self.assertEqual( - self.registry['plone.app.discussion.interfaces.' + - 'IDiscussionSettings.globally_enabled'], - False) + self.registry[ + 'plone.app.discussion.interfaces.' + + 'IDiscussionSettings.globally_enabled' + ], + False + ) def test_anonymous_comments(self): # Check anonymous_comments record self.assertTrue('anonymous_comments' in IDiscussionSettings) - self.assertEqual(self.registry['plone.app.discussion.interfaces.' + - 'IDiscussionSettings.anonymous_comments'], False) + self.assertEqual( + self.registry[ + 'plone.app.discussion.interfaces.' + + 'IDiscussionSettings.anonymous_comments' + ], + False + ) def test_moderation_enabled(self): # Check globally_enabled record self.assertTrue('moderation_enabled' in IDiscussionSettings) self.assertEqual( - self.registry['plone.app.discussion.interfaces.' + - 'IDiscussionSettings.moderation_enabled'], - False) + self.registry[ + 'plone.app.discussion.interfaces.' + + 'IDiscussionSettings.moderation_enabled' + ], + False + ) def test_text_transform(self): self.assertTrue('text_transform' in IDiscussionSettings) self.assertEqual( - self.registry['plone.app.discussion.interfaces.' + - 'IDiscussionSettings.text_transform'], - 'text/plain') + self.registry[ + 'plone.app.discussion.interfaces.' + + 'IDiscussionSettings.text_transform' + ], + 'text/plain' + ) def test_captcha(self): # Check globally_enabled record self.assertTrue('captcha' in IDiscussionSettings) - self.assertEqual(self.registry['plone.app.discussion.interfaces.' + - 'IDiscussionSettings.captcha'], - 'disabled') + self.assertEqual( + self.registry[ + 'plone.app.discussion.interfaces.' + + 'IDiscussionSettings.captcha' + ], + 'disabled' + ) def test_show_commenter_image(self): # Check show_commenter_image record self.assertTrue('show_commenter_image' in IDiscussionSettings) - self.assertEqual(self.registry['plone.app.discussion.interfaces.' + - 'IDiscussionSettings.show_commenter_image'], True) + self.assertEqual( + self.registry[ + 'plone.app.discussion.interfaces.' + + 'IDiscussionSettings.show_commenter_image' + ], + True + ) def test_moderator_notification_enabled(self): # Check show_commenter_image record - self.assertTrue('moderator_notification_enabled' in - IDiscussionSettings) - self.assertEqual(self.registry['plone.app.discussion.interfaces.' + - 'IDiscussionSettings.moderator_notification_enabled'], False) + self.assertTrue( + 'moderator_notification_enabled' in IDiscussionSettings + ) + self.assertEqual( + self.registry[ + 'plone.app.discussion.interfaces.' + + 'IDiscussionSettings.moderator_notification_enabled' + ], + False + ) #def test_user_notification_enabled(self): # # Check show_commenter_image record @@ -117,23 +152,32 @@ class ConfigurationChangedSubscriberTest(unittest.TestCase): changes. """ # By default the one_state_workflow without moderation is enabled - self.assertEqual(('one_state_workflow',), - self.portal.portal_workflow.getChainForPortalType( - 'Discussion Item')) + self.assertEqual( + ('one_state_workflow',), + self.portal.portal_workflow.getChainForPortalType( + 'Discussion Item' + ) + ) # Enable moderation in the discussion control panel self.settings.moderation_enabled = True # Make sure the comment_review_workflow with moderation enabled is # enabled - self.assertEqual(('comment_review_workflow',), - self.portal.portal_workflow.getChainForPortalType( - 'Discussion Item')) + self.assertEqual( + ('comment_review_workflow',), + self.portal.portal_workflow.getChainForPortalType( + 'Discussion Item' + ) + ) # And back self.settings.moderation_enabled = False - self.assertEqual(('one_state_workflow',), - self.portal.portal_workflow.getChainForPortalType( - 'Discussion Item')) + self.assertEqual( + ('one_state_workflow',), + self.portal.portal_workflow.getChainForPortalType( + 'Discussion Item' + ) + ) def test_change_workflow_in_types_control_panel(self): """Make sure the setting in the discussion control panel is changed @@ -146,7 +190,8 @@ class ConfigurationChangedSubscriberTest(unittest.TestCase): # Enable the 'comment_review_workflow' with moderation enabled self.portal.portal_workflow.setChainForPortalTypes( ('Discussion Item',), - ('comment_review_workflow',)) + ('comment_review_workflow',) + ) # Make sure the moderation_enabled settings has changed self.settings.moderation_enabled = True @@ -154,13 +199,15 @@ class ConfigurationChangedSubscriberTest(unittest.TestCase): # Enable the 'comment_review_workflow' with moderation enabled self.portal.portal_workflow.setChainForPortalTypes( ('Discussion Item',), - ('one_state_workflow',)) + ('one_state_workflow',) + ) self.settings.moderation_enabled = True # Enable a 'custom' discussion workflow self.portal.portal_workflow.setChainForPortalTypes( ('Discussion Item',), - ('intranet_workflow',)) + ('intranet_workflow',) + ) # Setting has not changed. A Custom workflow disables the # enable_moderation checkbox in the discussion control panel. The diff --git a/plone/app/discussion/tests/test_conversation.py b/plone/app/discussion/tests/test_conversation.py index 36861ae..58e7094 100644 --- a/plone/app/discussion/tests/test_conversation.py +++ b/plone/app/discussion/tests/test_conversation.py @@ -15,8 +15,9 @@ from Products.CMFCore.utils import getToolByName from plone.app.testing import TEST_USER_ID, setRoles -from plone.app.discussion.testing import \ +from plone.app.discussion.testing import ( PLONE_APP_DISCUSSION_INTEGRATION_TESTING +) from plone.app.discussion import interfaces from plone.app.discussion.interfaces import IConversation @@ -25,7 +26,7 @@ from plone.app.discussion.interfaces import IReplies from plone.app.discussion.interfaces import IDiscussionSettings try: - import plone.dexterity + from plone.dexterity.interfaces import IDexterityContent DEXTERITY = True except: DEXTERITY = False @@ -44,9 +45,11 @@ class ConversationTest(unittest.TestCase): typetool = self.portal.portal_types typetool.constructContent('Document', self.portal, 'doc1') self.typetool = typetool - self.portal_discussion = getToolByName(self.portal, - 'portal_discussion', - None) + self.portal_discussion = getToolByName( + self.portal, + 'portal_discussion', + None, + ) # Allow discussion registry = queryUtility(IRegistry) settings = registry.forInterface(IDiscussionSettings) @@ -68,14 +71,18 @@ class ConversationTest(unittest.TestCase): # Check that the conversation methods return the correct data self.assertTrue(isinstance(comment.comment_id, long)) self.assertTrue(IComment.providedBy(conversation[new_id])) - self.assertEqual(aq_base(conversation[new_id].__parent__), - aq_base(conversation)) + self.assertEqual( + aq_base(conversation[new_id].__parent__), + aq_base(conversation) + ) self.assertEqual(new_id, comment.comment_id) self.assertEqual(len(list(conversation.getComments())), 1) self.assertEqual(len(tuple(conversation.getThreads())), 1) self.assertEqual(conversation.total_comments, 1) - self.assertTrue(conversation.last_comment_date - datetime.utcnow() < - timedelta(seconds=1)) + self.assertTrue( + conversation.last_comment_date - datetime.utcnow() < + timedelta(seconds=1) + ) def test_private_comment(self): conversation = IConversation(self.portal.doc1) @@ -169,10 +176,10 @@ class ConversationTest(unittest.TestCase): del conversation[new_id_1] - self.assertEqual( - [{'comment': comment2, 'depth': 0, 'id': new_id_2}, - {'comment': comment2_1, 'depth': 1, 'id': new_id_2_1}, - ], list(conversation.getThreads())) + self.assertEqual([ + {'comment': comment2, 'depth': 0, 'id': new_id_2}, + {'comment': comment2_1, 'depth': 1, 'id': new_id_2_1}, + ], list(conversation.getThreads())) def test_delete_comment_when_content_object_is_deleted(self): # Make sure all comments of a content object are deleted when the @@ -212,10 +219,14 @@ class ConversationTest(unittest.TestCase): # By default, allow_discussion on newly created content objects is # set to False portal_discussion = getToolByName(self.portal, 'portal_discussion') - self.assertEqual(portal_discussion.isDiscussionAllowedFor( - self.portal.doc1), False) - self.assertEqual(self.portal.doc1.getTypeInfo().allowDiscussion(), - False) + self.assertEqual( + portal_discussion.isDiscussionAllowedFor(self.portal.doc1), + False + ) + self.assertEqual( + self.portal.doc1.getTypeInfo().allowDiscussion(), + False + ) # The allow discussion flag is None by default self.assertFalse(getattr(self.portal.doc1, 'allow_discussion', None)) @@ -225,35 +236,51 @@ class ConversationTest(unittest.TestCase): # type and check if the Document object allows discussion now. document_fti = getattr(portal_types, 'Document') document_fti.manage_changeProperties(allow_discussion=True) - self.assertEqual(portal_discussion.isDiscussionAllowedFor( - self.portal.doc1), True) - self.assertEqual(self.portal.doc1.getTypeInfo().allowDiscussion(), - True) + self.assertEqual( + portal_discussion.isDiscussionAllowedFor(self.portal.doc1), + True + ) + self.assertEqual( + self.portal.doc1.getTypeInfo().allowDiscussion(), + True + ) # We can also override the allow_discussion locally self.portal_discussion.overrideDiscussionFor(self.portal.doc1, False) # Check if the Document discussion is disabled - self.assertEqual(portal_discussion.isDiscussionAllowedFor( - self.portal.doc1), False) + self.assertEqual( + portal_discussion.isDiscussionAllowedFor(self.portal.doc1), + False + ) # Check that the local allow_discussion flag is now explicitly set to # False - self.assertEqual(getattr(self.portal.doc1, 'allow_discussion', None), - False) + self.assertEqual( + getattr(self.portal.doc1, 'allow_discussion', None), + False + ) # Disallow discussion on the Document content type again document_fti.manage_changeProperties(allow_discussion=False) - self.assertEqual(portal_discussion.isDiscussionAllowedFor( - self.portal.doc1), False) - self.assertEqual(self.portal.doc1.getTypeInfo().allowDiscussion(), - False) + self.assertEqual( + portal_discussion.isDiscussionAllowedFor(self.portal.doc1), + False + ) + self.assertEqual( + self.portal.doc1.getTypeInfo().allowDiscussion(), + False + ) # Now we override allow_discussion again (True) for the Document # content object self.portal_discussion.overrideDiscussionFor(self.portal.doc1, True) - self.assertEqual(portal_discussion.isDiscussionAllowedFor( - self.portal.doc1), True) - self.assertEqual(getattr(self.portal.doc1, 'allow_discussion', None), - True) + self.assertEqual( + portal_discussion.isDiscussionAllowedFor(self.portal.doc1), + True + ) + self.assertEqual( + getattr(self.portal.doc1, 'allow_discussion', None), + True + ) def test_comments_enabled_on_doc_in_subfolder(self): typetool = self.portal.portal_types @@ -338,7 +365,8 @@ class ConversationTest(unittest.TestCase): # Create a conversation. conversation = self.portal.doc1.restrictedTraverse( - '@@conversation_view') + '@@conversation_view' + ) # The Document content type is disabled by default self.assertEqual(conversation.enabled(), False) @@ -416,7 +444,8 @@ class ConversationTest(unittest.TestCase): # Create a conversation. conversation = self.portal.doc1.restrictedTraverse( - '@@conversation_view') + '@@conversation_view' + ) # Discussion is disallowed by default self.assertEqual(conversation.enabled(), False) @@ -599,30 +628,42 @@ class ConversationTest(unittest.TestCase): new_comment3_id = conversation.addComment(comment3) # check if the latest comment is exactly one day old - self.assertTrue(conversation.last_comment_date < datetime.utcnow() - - timedelta(hours=23, minutes=59, seconds=59)) - self.assertTrue(conversation.last_comment_date > - datetime.utcnow() - timedelta(days=1, seconds=1)) + self.assertTrue( + conversation.last_comment_date < datetime.utcnow() - + timedelta(hours=23, minutes=59, seconds=59) + ) + self.assertTrue( + conversation.last_comment_date > + datetime.utcnow() - timedelta(days=1, seconds=1) + ) # remove the latest comment del conversation[new_comment3_id] # check if the latest comment has been updated # the latest comment should be exactly two days old - self.assertTrue(conversation.last_comment_date < datetime.utcnow() - - timedelta(days=1, hours=23, minutes=59, seconds=59)) - self.assertTrue(conversation.last_comment_date > datetime.utcnow() - - timedelta(days=2, seconds=1)) + self.assertTrue( + conversation.last_comment_date < datetime.utcnow() - + timedelta(days=1, hours=23, minutes=59, seconds=59) + ) + self.assertTrue( + conversation.last_comment_date > datetime.utcnow() - + timedelta(days=2, seconds=1) + ) # remove the latest comment again del conversation[new_comment2_id] # check if the latest comment has been updated # the latest comment should be exactly four days old - self.assertTrue(conversation.last_comment_date < datetime.utcnow() - - timedelta(days=3, hours=23, minutes=59, seconds=59)) - self.assertTrue(conversation.last_comment_date > datetime.utcnow() - - timedelta(days=4, seconds=2)) + self.assertTrue( + conversation.last_comment_date < datetime.utcnow() - + timedelta(days=3, hours=23, minutes=59, seconds=59) + ) + self.assertTrue( + conversation.last_comment_date > datetime.utcnow() - + timedelta(days=4, seconds=2) + ) def test_get_comments_full(self): pass @@ -685,14 +726,14 @@ class ConversationTest(unittest.TestCase): # Get threads - self.assertEqual( - [{'comment': comment1, 'depth': 0, 'id': new_id_1}, - {'comment': comment1_1, 'depth': 1, 'id': new_id_1_1}, - {'comment': comment1_1_1, 'depth': 2, 'id': new_id_1_1_1}, - {'comment': comment1_2, 'depth': 1, 'id': new_id_1_2}, - {'comment': comment2, 'depth': 0, 'id': new_id_2}, - {'comment': comment2_1, 'depth': 1, 'id': new_id_2_1}, - ], list(conversation.getThreads())) + self.assertEqual([ + {'comment': comment1, 'depth': 0, 'id': new_id_1}, + {'comment': comment1_1, 'depth': 1, 'id': new_id_1_1}, + {'comment': comment1_1_1, 'depth': 2, 'id': new_id_1_1_1}, + {'comment': comment1_2, 'depth': 1, 'id': new_id_1_2}, + {'comment': comment2, 'depth': 0, 'id': new_id_2}, + {'comment': comment2_1, 'depth': 1, 'id': new_id_2_1}, + ], list(conversation.getThreads())) def test_get_threads_batched(self): # TODO: test start, size, root and depth arguments to getThreads() @@ -703,20 +744,26 @@ class ConversationTest(unittest.TestCase): # make sure we can traverse to conversations and get a URL and path conversation = self.portal.doc1.restrictedTraverse( - '++conversation++default') + '++conversation++default' + ) self.assertTrue(IConversation.providedBy(conversation)) - self.assertEqual(('', 'plone', 'doc1', '++conversation++default'), - conversation.getPhysicalPath()) - self.assertEqual('http://nohost/plone/doc1/++conversation++default', - conversation.absolute_url()) + self.assertEqual( + ('', 'plone', 'doc1', '++conversation++default'), + conversation.getPhysicalPath() + ) + self.assertEqual( + 'http://nohost/plone/doc1/++conversation++default', + conversation.absolute_url() + ) def test_unconvertible_id(self): # make sure the conversation view doesn't break when given comment id # can't be converted to long conversation = self.portal.doc1.restrictedTraverse( - '++conversation++default/ThisCantBeRight') + '++conversation++default/ThisCantBeRight' + ) self.assertEqual(conversation, None) def test_parent(self): @@ -737,8 +784,10 @@ class ConversationTest(unittest.TestCase): def test_no_comment(self): IConversation(self.portal.doc1) # Make sure no conversation has been created - self.assertTrue('plone.app.discussion:conversation' not in - IAnnotations(self.portal.doc1)) + self.assertTrue( + 'plone.app.discussion:conversation' not in + IAnnotations(self.portal.doc1) + ) class ConversationEnabledForDexterityTypesTest(unittest.TestCase): @@ -750,15 +799,16 @@ class ConversationEnabledForDexterityTypesTest(unittest.TestCase): setRoles(self.portal, TEST_USER_ID, ['Manager']) interface.alsoProvides( self.portal.REQUEST, - interfaces.IDiscussionLayer) + interfaces.IDiscussionLayer + ) typetool = self.portal.portal_types typetool.constructContent('Document', self.portal, 'doc1') if DEXTERITY: - from plone.dexterity.interfaces import IDexterityContent interface.alsoProvides( self.portal.doc1, - IDexterityContent) + IDexterityContent + ) def _makeOne(self, *args, **kw): return self.portal.doc1.restrictedTraverse('@@conversation_view') From 29fe4bbec719e246bb8eda6d6fd6a2f789cb37a3 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 17 Apr 2013 19:34:17 +0200 Subject: [PATCH 066/254] Pep8. --- .../discussion/tests/test_comments_viewlet.py | 167 ++++++++++++------ 1 file changed, 110 insertions(+), 57 deletions(-) diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index 51b4565..1844b28 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -35,8 +35,9 @@ from plone.app.discussion.browser.comments import CommentsViewlet from plone.app.discussion.browser.comments import CommentForm from plone.app.discussion import interfaces from plone.app.discussion.interfaces import IConversation -from plone.app.discussion.testing import \ +from plone.app.discussion.testing import ( PLONE_APP_DISCUSSION_INTEGRATION_TESTING +) from plone.app.discussion.interfaces import IDiscussionSettings @@ -52,13 +53,17 @@ class TestCommentForm(unittest.TestCase): self.folder = self.portal['test-folder'] interface.alsoProvides( - self.portal.REQUEST, interfaces.IDiscussionLayer) + self.portal.REQUEST, + interfaces.IDiscussionLayer, + ) typetool = self.portal.portal_types typetool.constructContent('Document', self.portal, 'doc1') - self.discussionTool = getToolByName(self.portal, - 'portal_discussion', - None) + self.discussionTool = getToolByName( + self.portal, + 'portal_discussion', + None + ) self.discussionTool.overrideDiscussionFor(self.portal.doc1, False) self.membershipTool = getToolByName(self.folder, 'portal_membership') self.memberdata = self.portal.portal_memberdata @@ -84,16 +89,20 @@ class TestCommentForm(unittest.TestCase): alsoProvides(request, IAttributeAnnotatable) return request - provideAdapter(adapts=(Interface, IBrowserRequest), - provides=Interface, - factory=CommentForm, - name=u"comment-form") + provideAdapter( + adapts=(Interface, IBrowserRequest), + provides=Interface, + factory=CommentForm, + name=u"comment-form" + ) # The form should return an error if the comment text field is empty request = make_request(form={}) - commentForm = getMultiAdapter((self.context, request), - name=u"comment-form") + commentForm = getMultiAdapter( + (self.context, request), + name=u"comment-form" + ) commentForm.update() data, errors = commentForm.extractData() # pylint: disable-msg=W0612 @@ -104,8 +113,10 @@ class TestCommentForm(unittest.TestCase): # filled out request = make_request(form={'form.widgets.text': u'bar'}) - commentForm = getMultiAdapter((self.context, request), - name=u"comment-form") + commentForm = getMultiAdapter( + (self.context, request), + name=u"comment-form" + ) commentForm.update() data, errors = commentForm.extractData() # pylint: disable-msg=W0612 @@ -137,11 +148,15 @@ class TestCommentForm(unittest.TestCase): name=u"comment-form") # Post an anonymous comment and provide a name - request = make_request(form={'form.widgets.name': u'john doe', - 'form.widgets.text': u'bar'}) + request = make_request(form={ + 'form.widgets.name': u'john doe', + 'form.widgets.text': u'bar' + }) - commentForm = getMultiAdapter((self.context, request), - name=u"comment-form") + commentForm = getMultiAdapter( + (self.context, request), + name=u"comment-form" + ) commentForm.update() data, errors = commentForm.extractData() # pylint: disable-msg=W0612 @@ -168,8 +183,10 @@ class TestCommentForm(unittest.TestCase): request = make_request(form={'form.widgets.text': u'bar'}) - commentForm = getMultiAdapter((self.context, request), - name=u"comment-form") + commentForm = getMultiAdapter( + (self.context, request), + name=u"comment-form" + ) commentForm.update() data, errors = commentForm.extractData() # pylint: disable-msg=W0612 @@ -210,10 +227,12 @@ class TestCommentForm(unittest.TestCase): data, errors = commentForm.extractData() # pylint: disable-msg=W0612 self.assertEqual(len(errors), 0) - self.assertRaises(Unauthorized, - commentForm.handleComment, - commentForm, - "foo") + self.assertRaises( + Unauthorized, + commentForm.handleComment, + commentForm, + "foo" + ) class TestCommentsViewlet(unittest.TestCase): @@ -227,16 +246,20 @@ class TestCommentsViewlet(unittest.TestCase): self.portal.invokeFactory('Folder', 'test-folder') self.folder = self.portal['test-folder'] interface.alsoProvides( - self.request, interfaces.IDiscussionLayer) + self.request, + interfaces.IDiscussionLayer + ) self.workflowTool = getToolByName(self.portal, 'portal_workflow') self.workflowTool.setDefaultChain('one_state_workflow') typetool = self.portal.portal_types typetool.constructContent('Document', self.portal, 'doc1') - self.portal_discussion = getToolByName(self.portal, - 'portal_discussion', - None) + self.portal_discussion = getToolByName( + self.portal, + 'portal_discussion', + None + ) self.membershipTool = getToolByName(self.folder, 'portal_membership') self.memberdata = self.portal.portal_memberdata context = getattr(self.portal, 'doc1') @@ -310,7 +333,8 @@ class TestCommentsViewlet(unittest.TestCase): self.viewlet.comment_transform_message(), "You can add a comment by filling out the form below. " + "Plain text formatting. Web and email addresses are transformed " + - "into clickable links.") + "into clickable links." + ) # Enable moderation workflow self.workflowTool.setChainForPortalTypes( @@ -353,19 +377,26 @@ class TestCommentsViewlet(unittest.TestCase): conversation = IConversation(self.portal.doc1) c1 = conversation.addComment(comment) self.assertEqual( - len(tuple(self.viewlet.get_replies(workflow_actions=True))), 1) + len(tuple(self.viewlet.get_replies(workflow_actions=True))), + 1 + ) # Enable moderation workflow self.workflowTool.setChainForPortalTypes( ('Discussion Item',), - ('comment_review_workflow,')) + ('comment_review_workflow,') + ) # Check if workflow actions are available reply = self.viewlet.get_replies(workflow_actions=True).next() self.assertTrue('actions' in reply) - self.assertEqual(reply['actions'][0]['id'], - 'publish') - self.assertEqual(reply['actions'][0]['url'], + self.assertEqual( + reply['actions'][0]['id'], + 'publish' + ) + self.assertEqual( + reply['actions'][0]['url'], 'http://nohost/plone/doc1/++conversation++default/%s' % int(c1) + - '/content_status_modify?workflow_action=publish') + '/content_status_modify?workflow_action=publish' + ) def test_get_commenter_home_url(self): comment = createObject('plone.Comment') @@ -373,8 +404,10 @@ class TestCommentsViewlet(unittest.TestCase): IConversation(self.portal.doc1) portal_membership = getToolByName(self.portal, 'portal_membership') m = portal_membership.getAuthenticatedMember() - self.assertEqual(self.viewlet.get_commenter_home_url(m.getUserName()), - 'http://nohost/plone/author/test-user') + self.assertEqual( + self.viewlet.get_commenter_home_url(m.getUserName()), + 'http://nohost/plone/author/test-user' + ) def test_get_commenter_home_url_is_none(self): self.assertFalse(self.viewlet.get_commenter_home_url()) @@ -383,13 +416,19 @@ class TestCommentsViewlet(unittest.TestCase): # Add a user with a member image self.membershipTool.addMember('jim', 'Jim', ['Member'], []) - self.memberdata._setPortrait(Image(id='jim', - file=dummy.File(), - title=''), 'jim') - self.assertEqual(self.memberdata._getPortrait('jim').getId(), - 'jim') - self.assertEqual(self.memberdata._getPortrait('jim').meta_type, - 'Image') + self.memberdata._setPortrait(Image( + id='jim', + file=dummy.File(), + title='' + ), 'jim') + self.assertEqual( + self.memberdata._getPortrait('jim').getId(), + 'jim' + ) + self.assertEqual( + self.memberdata._getPortrait('jim').meta_type, + 'Image' + ) # Add a conversation with a comment conversation = IConversation(self.portal.doc1) @@ -404,12 +443,16 @@ class TestCommentsViewlet(unittest.TestCase): portrait_url = self.viewlet.get_commenter_portrait('jim') # Check if the correct member image URL is returned - self.assertEqual(portrait_url, - 'http://nohost/plone/portal_memberdata/portraits/jim') + self.assertEqual( + portrait_url, + 'http://nohost/plone/portal_memberdata/portraits/jim' + ) def test_get_commenter_portrait_is_none(self): - self.assertEqual(self.viewlet.get_commenter_portrait(), - 'defaultUser.gif') + self.assertEqual( + self.viewlet.get_commenter_portrait(), + 'defaultUser.gif' + ) def test_get_commenter_portrait_without_userimage(self): @@ -431,25 +474,32 @@ class TestCommentsViewlet(unittest.TestCase): # Check if the correct default member image URL is returned. # Note that Products.PlonePAS 4.0.5 and later have .png and # earlier versions have .gif. - self.assertTrue(portrait_url in - ('http://nohost/plone/defaultUser.png', - 'http://nohost/plone/defaultUser.gif')) + self.assertTrue( + portrait_url in ( + 'http://nohost/plone/defaultUser.png', + 'http://nohost/plone/defaultUser.gif' + ) + ) def test_anonymous_discussion_allowed(self): # Anonymous discussion is not allowed by default self.assertFalse(self.viewlet.anonymous_discussion_allowed()) # Allow anonymous discussion registry = queryUtility(IRegistry) - registry['plone.app.discussion.interfaces.IDiscussionSettings.' + - 'anonymous_comments'] = True + registry[ + 'plone.app.discussion.interfaces.IDiscussionSettings.' + + 'anonymous_comments' + ] = True # Test if anonymous discussion is allowed for the viewlet self.assertTrue(self.viewlet.anonymous_discussion_allowed()) def test_show_commenter_image(self): self.assertTrue(self.viewlet.show_commenter_image()) registry = queryUtility(IRegistry) - registry['plone.app.discussion.interfaces.IDiscussionSettings.' + - 'show_commenter_image'] = False + registry[ + 'plone.app.discussion.interfaces.IDiscussionSettings.' + + 'show_commenter_image' + ] = False self.assertFalse(self.viewlet.show_commenter_image()) def test_is_anonymous(self): @@ -459,8 +509,10 @@ class TestCommentsViewlet(unittest.TestCase): def test_login_action(self): self.viewlet.update() - self.assertEqual(self.viewlet.login_action(), - 'http://nohost/plone/login_form?came_from=http%3A//nohost') + self.assertEqual( + self.viewlet.login_action(), + 'http://nohost/plone/login_form?came_from=http%3A//nohost' + ) def test_format_time(self): python_time = datetime(2009, 02, 01, 23, 32, 03, 57) @@ -473,7 +525,8 @@ class TestCommentsViewlet(unittest.TestCase): # time of the local time given above. That way, the time for the # example below is correct within each time zone, independent of DST python_time = datetime( - *time.gmtime(time.mktime(python_time.timetuple()))[:7]) + *time.gmtime(time.mktime(python_time.timetuple()))[:7] + ) localized_time = self.viewlet.format_time(python_time) self.assertEqual(localized_time, 'Feb 01, 2009 11:32 PM') From 20935da608d8b6a88aee4662c338cf34b7e02f9c Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 17 Apr 2013 19:37:10 +0200 Subject: [PATCH 067/254] Pep8. --- plone/app/discussion/tests/test_catalog.py | 53 ++++++++++++++-------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/plone/app/discussion/tests/test_catalog.py b/plone/app/discussion/tests/test_catalog.py index 3405e58..b0e5e36 100644 --- a/plone/app/discussion/tests/test_catalog.py +++ b/plone/app/discussion/tests/test_catalog.py @@ -13,8 +13,9 @@ from Products.CMFCore.utils import getToolByName from plone.app.testing import TEST_USER_ID, setRoles -from plone.app.discussion.testing import \ - PLONE_APP_DISCUSSION_INTEGRATION_TESTING +from plone.app.discussion.testing import ( + PLONE_APP_DISCUSSION_INTEGRATION_TESTING +) from plone.app.discussion.interfaces import IConversation @@ -29,14 +30,22 @@ class CatalogSetupTest(unittest.TestCase): self.portal = self.layer['portal'] def test_catalog_installed(self): - self.assertTrue('total_comments' in - self.portal.portal_catalog.indexes()) - self.assertTrue('commentators' in - self.portal.portal_catalog.indexes()) - self.assertTrue('total_comments' in - self.portal.portal_catalog.schema()) - self.assertTrue('in_response_to' in - self.portal.portal_catalog.schema()) + self.assertTrue( + 'total_comments' in + self.portal.portal_catalog.indexes() + ) + self.assertTrue( + 'commentators' in + self.portal.portal_catalog.indexes() + ) + self.assertTrue( + 'total_comments' in + self.portal.portal_catalog.schema() + ) + self.assertTrue( + 'in_response_to' in + self.portal.portal_catalog.schema() + ) def test_collection_criteria_installed(self): try: @@ -54,9 +63,11 @@ class ConversationCatalogTest(unittest.TestCase): def setUp(self): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory(id='doc1', - Title='Document 1', - type_name='Document') + self.portal.invokeFactory( + id='doc1', + Title='Document 1', + type_name='Document' + ) self.catalog = getToolByName(self.portal, 'portal_catalog') conversation = IConversation(self.portal.doc1) @@ -72,10 +83,12 @@ class ConversationCatalogTest(unittest.TestCase): self.comment_id = new_comment1_id brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.portal.doc1.getPhysicalPath())}, - portal_type="Document" - )) + path={ + 'query': + '/'.join(self.portal.doc1.getPhysicalPath()) + }, + portal_type="Document" + )) self.conversation = conversation self.brains = brains self.doc1_brain = brains[0] @@ -523,8 +536,10 @@ class NoConversationCatalogTest(unittest.TestCase): self.assertEqual(self.doc1_brain.total_comments, 0) # Make sure no conversation has been created - self.assertTrue('plone.app.discussion:conversation' not in - IAnnotations(self.portal.doc1)) + self.assertTrue( + 'plone.app.discussion:conversation' not in + IAnnotations(self.portal.doc1) + ) def test_suite(): From 849299f2331fa243f32ff1a24fe014d3cfd99584 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 18 Apr 2013 15:21:00 +0200 Subject: [PATCH 068/254] Pep8. --- plone/app/discussion/tests/test_catalog.py | 236 +++++++++++++-------- 1 file changed, 143 insertions(+), 93 deletions(-) diff --git a/plone/app/discussion/tests/test_catalog.py b/plone/app/discussion/tests/test_catalog.py index b0e5e36..d85c8fc 100644 --- a/plone/app/discussion/tests/test_catalog.py +++ b/plone/app/discussion/tests/test_catalog.py @@ -67,8 +67,7 @@ class ConversationCatalogTest(unittest.TestCase): id='doc1', Title='Document 1', type_name='Document' - ) - + ) self.catalog = getToolByName(self.portal, 'portal_catalog') conversation = IConversation(self.portal.doc1) comment1 = createObject('plone.Comment') @@ -108,17 +107,21 @@ class ConversationCatalogTest(unittest.TestCase): '++conversation++default/%s' % new_comment2_id) comment2.reindexObject() brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.portal.doc1.getPhysicalPath())}, - portal_type="Document" - )) + path={ + 'query': + '/'.join(self.portal.doc1.getPhysicalPath()) + }, + portal_type="Document" + )) doc1_brain = brains[0] self.assertEqual(doc1_brain.total_comments, 2) def test_last_comment_date(self): self.assertTrue('last_comment_date' in self.doc1_brain) - self.assertEqual(self.doc1_brain.last_comment_date, - datetime(2006, 9, 17, 14, 18, 12)) + self.assertEqual( + self.doc1_brain.last_comment_date, + datetime(2006, 9, 17, 14, 18, 12) + ) # Add another comment and check if last comment date is updated. comment2 = createObject('plone.Comment') @@ -132,33 +135,43 @@ class ConversationCatalogTest(unittest.TestCase): '++conversation++default/%s' % new_comment2_id) comment2.reindexObject() brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.portal.doc1.getPhysicalPath())}, - portal_type="Document" - )) + path={ + 'query': + '/'.join(self.portal.doc1.getPhysicalPath()) + }, + portal_type="Document" + )) doc1_brain = brains[0] - self.assertEqual(doc1_brain.last_comment_date, - datetime(2009, 9, 17, 14, 18, 12)) + self.assertEqual( + doc1_brain.last_comment_date, + datetime(2009, 9, 17, 14, 18, 12) + ) # Remove the comment again del self.conversation[new_comment2_id] brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.portal.doc1.getPhysicalPath())}, - portal_type="Document" - )) + path={ + 'query': + '/'.join(self.portal.doc1.getPhysicalPath()) + }, + portal_type="Document" + )) doc1_brain = brains[0] - self.assertEqual(doc1_brain.last_comment_date, - datetime(2006, 9, 17, 14, 18, 12)) + self.assertEqual( + doc1_brain.last_comment_date, + datetime(2006, 9, 17, 14, 18, 12) + ) # remove all comments del self.conversation[self.new_comment1_id] brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.portal.doc1.getPhysicalPath())}, - portal_type="Document" - )) + path={ + 'query': + '/'.join(self.portal.doc1.getPhysicalPath()) + }, + portal_type="Document" + )) doc1_brain = brains[0] self.assertEqual(doc1_brain.last_comment_date, None) @@ -179,10 +192,12 @@ class ConversationCatalogTest(unittest.TestCase): comment2.reindexObject() brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.portal.doc1.getPhysicalPath())}, - portal_type="Document" - )) + path={ + 'query': + '/'.join(self.portal.doc1.getPhysicalPath()) + }, + portal_type="Document" + )) doc1_brain = brains[0] self.assertEqual(doc1_brain.commentators, ('Jim', 'Emma')) @@ -190,29 +205,35 @@ class ConversationCatalogTest(unittest.TestCase): # remove one comments del self.conversation[new_comment2_id] brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.portal.doc1.getPhysicalPath())}, - portal_type="Document" - )) + path={ + 'query': + '/'.join(self.portal.doc1.getPhysicalPath()) + }, + portal_type="Document" + )) doc1_brain = brains[0] self.assertEqual(doc1_brain.commentators, ('Jim',)) # remove all comments del self.conversation[self.new_comment1_id] brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.portal.doc1.getPhysicalPath())}, - portal_type="Document" - )) + path={ + 'query': + '/'.join(self.portal.doc1.getPhysicalPath()) + }, + portal_type="Document" + )) doc1_brain = brains[0] self.assertEqual(doc1_brain.commentators, ()) def test_conversation_indexes_not_in_comments(self): brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.portal.doc1.getPhysicalPath())}, - portal_type="Discussion Item" - )) + path={ + 'query': + '/'.join(self.portal.doc1.getPhysicalPath()) + }, + portal_type="Discussion Item" + )) comment1_brain = brains[0] self.assertEqual(comment1_brain.commentators, None) self.assertEqual(comment1_brain.last_comment_date, None) @@ -222,13 +243,16 @@ class ConversationCatalogTest(unittest.TestCase): self.comment1.manage_permission("View", roles=tuple()) self.portal.doc1.reindexObject() brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.portal.doc1.getPhysicalPath())}, - portal_type="Document" - )) + path={ + 'query': + '/'.join(self.portal.doc1.getPhysicalPath()) + }, + portal_type="Document" + )) doc1_brain = brains[0] self.assertEqual(doc1_brain.commentators, ()) + class CommentCatalogTest(unittest.TestCase): layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING @@ -255,8 +279,11 @@ class CommentCatalogTest(unittest.TestCase): self.comment = self.portal.doc1.restrictedTraverse( '++conversation++default/%s' % new_comment1_id) brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.comment.getPhysicalPath())})) + path={ + 'query': + '/'.join(self.comment.getPhysicalPath()) + } + )) self.comment_brain = brains[0] def test_title(self): @@ -271,8 +298,11 @@ class CommentCatalogTest(unittest.TestCase): comment = self.portal.doc1.restrictedTraverse( '++conversation++default/%s' % cid) brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(comment.getPhysicalPath())})) + path={ + 'query': + '/'.join(comment.getPhysicalPath()) + } + )) comment_brain = brains[0] self.assertEqual(comment_brain.Title, "Anonymous on Document 1") @@ -301,8 +331,11 @@ class CommentCatalogTest(unittest.TestCase): # deleted. del self.conversation[self.comment_id] brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.comment.getPhysicalPath())})) + path={ + 'query': + '/'.join(self.comment.getPhysicalPath()) + } + )) self.assertEqual(len(brains), 0) def test_remove_comments_when_content_object_is_removed(self): @@ -317,15 +350,21 @@ class CommentCatalogTest(unittest.TestCase): def test_move_comments_when_content_object_is_moved(self): # Create two folders and a content object with a comment - self.portal.invokeFactory(id='folder1', - title='Folder 1', - type_name='Folder') - self.portal.invokeFactory(id='folder2', - title='Folder 2', - type_name='Folder') - self.portal.folder1.invokeFactory(id='moveme', - title='Move Me', - type_name='Document') + self.portal.invokeFactory( + id='folder1', + title='Folder 1', + type_name='Folder' + ) + self.portal.invokeFactory( + id='folder2', + title='Folder 2', + type_name='Folder' + ) + self.portal.folder1.invokeFactory( + id='moveme', + title='Move Me', + type_name='Document' + ) conversation = IConversation(self.portal.folder1.moveme) comment = createObject('plone.Comment') comment_id = conversation.addComment(comment) @@ -338,22 +377,23 @@ class CommentCatalogTest(unittest.TestCase): # Make sure no old comment brains are brains = self.catalog.searchResults(dict( - portal_type="Discussion Item", - path={'query': '/'.join(self.portal.folder1.getPhysicalPath())} - )) + portal_type="Discussion Item", + path={'query': '/'.join(self.portal.folder1.getPhysicalPath())} + )) self.assertEqual(len(brains), 0) brains = self.catalog.searchResults(dict( - portal_type="Discussion Item", - path={ - 'query': '/'.join(self.portal.folder2.getPhysicalPath()) - } - )) + portal_type="Discussion Item", + path={ + 'query': '/'.join(self.portal.folder2.getPhysicalPath()) + } + )) self.assertEqual(len(brains), 1) - self.assertEqual(brains[0].getPath(), - '/plone/folder2/moveme/++conversation++default/' + - str(comment_id)) - + self.assertEqual( + brains[0].getPath(), + '/plone/folder2/moveme/++conversation++default/' + + str(comment_id) + ) def test_move_upper_level_folder(self): # create a folder with a nested structure @@ -371,7 +411,9 @@ class CommentCatalogTest(unittest.TestCase): type_name='Folder') # create comment on my-document - conversation = IConversation(self.portal.sourcefolder.moveme.mydocument) + conversation = IConversation( + self.portal.sourcefolder.moveme.mydocument + ) comment = createObject('plone.Comment') comment_id = conversation.addComment(comment) @@ -384,20 +426,22 @@ class CommentCatalogTest(unittest.TestCase): # Make sure no old comment brains are left brains = self.catalog.searchResults(dict( - portal_type="Discussion Item", - path={'query': '/plone/sourcefolder/moveme'} - )) + portal_type="Discussion Item", + path={'query': '/plone/sourcefolder/moveme'} + )) self.assertEqual(len(brains), 0) # make sure comments are correctly index on the target brains = self.catalog.searchResults(dict( - portal_type="Discussion Item", - path={'query': '/plone/targetfolder/moveme'} - )) + portal_type="Discussion Item", + path={'query': '/plone/targetfolder/moveme'} + )) self.assertEqual(len(brains), 1) - self.assertEqual(brains[0].getPath(), - '/plone/targetfolder/moveme/mydocument/++conversation++default/' + - str(comment_id)) + self.assertEqual( + brains[0].getPath(), + '/plone/targetfolder/moveme/mydocument/++conversation++default/' + + str(comment_id) + ) def test_update_comments_when_content_object_is_renamed(self): # We need to commit here so that _p_jar isn't None and move will work @@ -408,9 +452,11 @@ class CommentCatalogTest(unittest.TestCase): brains = self.catalog.searchResults( portal_type='Discussion Item') self.assertEqual(len(brains), 1) - self.assertEqual(brains[0].getPath(), - '/plone/doc2/++conversation++default/' + - str(self.comment_id)) + self.assertEqual( + brains[0].getPath(), + '/plone/doc2/++conversation++default/' + + str(self.comment_id) + ) def test_clear_and_rebuild_catalog(self): # Clear and rebuild catalog @@ -421,9 +467,11 @@ class CommentCatalogTest(unittest.TestCase): self.assertTrue(brains) comment_brain = brains[0] self.assertEqual(comment_brain.Title, u'Jim on Document 1') - self.assertEqual(comment_brain.getPath(), + self.assertEqual( + comment_brain.getPath(), '/plone/doc1/++conversation++default/' + - str(self.comment_id)) + str(self.comment_id) + ) def test_clear_and_rebuild_catalog_for_nested_comments(self): @@ -496,9 +544,9 @@ class CommentCatalogTest(unittest.TestCase): self.portal.invokeFactory('Collection', id='collection') collection = self.portal.collection collection.query = [{ - 'i': 'Type', - 'o': 'plone.app.querystring.operation.string.is', - 'v': 'Comment', + 'i': 'Type', + 'o': 'plone.app.querystring.operation.string.is', + 'v': 'Comment', }] self.assertEqual(len(collection.results()), 1) @@ -523,10 +571,12 @@ class NoConversationCatalogTest(unittest.TestCase): conversation = IConversation(self.portal.doc1) brains = self.catalog.searchResults(dict( - path={'query': - '/'.join(self.portal.doc1.getPhysicalPath())}, - portal_type="Document" - )) + path={ + 'query': + '/'.join(self.portal.doc1.getPhysicalPath()) + }, + portal_type="Document" + )) self.conversation = conversation self.brains = brains self.doc1_brain = brains[0] From 0b8112fda1c37f48ec6a9920ccf9a8608f299db6 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 18 Apr 2013 15:31:40 +0200 Subject: [PATCH 069/254] Pep8. --- plone/app/discussion/browser/conversation.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/plone/app/discussion/browser/conversation.py b/plone/app/discussion/browser/conversation.py index d618e05..3e05416 100644 --- a/plone/app/discussion/browser/conversation.py +++ b/plone/app/discussion/browser/conversation.py @@ -64,8 +64,9 @@ class ConversationView(object): return False # Always return False if object is a folder - if (IFolderish.providedBy(context) and - not INonStructuralFolder.providedBy(context)): + context_is_folderish = IFolderish.providedBy(context) + context_is_structural = not INonStructuralFolder.providedBy(context) + if (context_is_folderish and context_is_structural): return False def traverse_parents(context): @@ -73,8 +74,9 @@ class ConversationView(object): # enabled in a parent folder. for obj in aq_chain(context): if not IPloneSiteRoot.providedBy(obj): - if (IFolderish.providedBy(obj) and - not INonStructuralFolder.providedBy(obj)): + obj_is_folderish = IFolderish.providedBy(obj) + obj_is_stuctural = not INonStructuralFolder.providedBy(obj) + if (obj_is_folderish and obj_is_stuctural): flag = getattr(obj, 'allow_discussion', None) if flag is not None: return flag From 37faab444aeadaf89ad58f59e60ca23dd5f7d2be Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 18 Apr 2013 15:38:17 +0200 Subject: [PATCH 070/254] Pep8. --- plone/app/discussion/browser/controlpanel.py | 36 ++++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/plone/app/discussion/browser/controlpanel.py b/plone/app/discussion/browser/controlpanel.py index c330656..c44a1b1 100644 --- a/plone/app/discussion/browser/controlpanel.py +++ b/plone/app/discussion/browser/controlpanel.py @@ -32,16 +32,18 @@ class DiscussionSettingsEditForm(controlpanel.RegistryEditForm): schema = IDiscussionSettings id = "DiscussionSettingsEditForm" label = _(u"Discussion settings") - description = _(u"help_discussion_settings_editform", - default=u"Some discussion related settings are not " - "located in the Discussion Control Panel.\n" - "To enable comments for a specific content type, " - "go to the Types Control Panel of this type and " - "choose \"Allow comments\".\n" - "To enable the moderation workflow for comments, " - "go to the Types Control Panel, choose " - "\"Comment\" and set workflow to " - "\"Comment Review Workflow\".") + description = _( + u"help_discussion_settings_editform", + default=u"Some discussion related settings are not " + u"located in the Discussion Control Panel.\n" + u"To enable comments for a specific content type, " + u"go to the Types Control Panel of this type and " + u"choose \"Allow comments\".\n" + u"To enable the moderation workflow for comments, " + u"go to the Types Control Panel, choose " + u"\"Comment\" and set workflow to " + u"\"Comment Review Workflow\"." + ) def updateFields(self): super(DiscussionSettingsEditForm, self).updateFields() @@ -108,8 +110,10 @@ class DiscussionSettingsControlPanel(controlpanel.ControlPanelFormWrapper): output.append("globally_enabled") # Comment moderation - if 'one_state_workflow' not in workflow_chain and \ - 'comment_review_workflow' not in workflow_chain: + one_state_worklow_disabled = 'one_state_workflow' not in workflow_chain + comment_review_workflow_disabled = \ + 'comment_review_workflow' not in workflow_chain + if one_state_worklow_disabled and comment_review_workflow_disabled: output.append("moderation_custom") elif settings.moderation_enabled: output.append("moderation_enabled") @@ -151,8 +155,10 @@ class DiscussionSettingsControlPanel(controlpanel.ControlPanelFormWrapper): """ wftool = getToolByName(self.context, "portal_workflow", None) workflow_chain = wftool.getChainForPortalType('Discussion Item') - if 'one_state_workflow' in workflow_chain \ - or 'comment_review_workflow' in workflow_chain: + one_state_workflow_enabled = 'one_state_workflow' in workflow_chain + comment_review_workflow_enabled = \ + 'comment_review_workflow' in workflow_chain + if one_state_workflow_enabled or comment_review_workflow_enabled: return return True @@ -176,7 +182,7 @@ def notify_configuration_changed(event): # Discussion control panel setting changed if event.record.fieldName == 'moderation_enabled': # Moderation enabled has changed - if event.record.value == True: + if event.record.value is True: # Enable moderation workflow wftool.setChainForPortalTypes(('Discussion Item',), 'comment_review_workflow') From 0a8cd01922f6ae3151bc8013d393a9f750f330e4 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 18 Apr 2013 15:46:28 +0200 Subject: [PATCH 071/254] Pep8 --- plone/app/discussion/browser/comments.py | 65 ++++++++++++++---------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/plone/app/discussion/browser/comments.py b/plone/app/discussion/browser/comments.py index e1f4916..529df18 100644 --- a/plone/app/discussion/browser/comments.py +++ b/plone/app/discussion/browser/comments.py @@ -46,19 +46,19 @@ from plone.z3cform.interfaces import IWrappedForm COMMENT_DESCRIPTION_PLAIN_TEXT = _( u"comment_description_plain_text", default=u"You can add a comment by filling out the form below. " + - "Plain text formatting.") + u"Plain text formatting.") COMMENT_DESCRIPTION_MARKDOWN = _( u"comment_description_markdown", default=u"You can add a comment by filling out the form below. " + - "Plain text formatting. You can use the Markdown syntax for " + - "links and images.") + u"Plain text formatting. You can use the Markdown syntax for " + + u"links and images.") COMMENT_DESCRIPTION_INTELLIGENT_TEXT = _( u"comment_description_intelligent_text", default=u"You can add a comment by filling out the form below. " + - "Plain text formatting. Web and email addresses are " + - "transformed into clickable links.") + u"Plain text formatting. Web and email addresses are " + + u"transformed into clickable links.") COMMENT_DESCRIPTION_MODERATION_ENABLED = _( u"comment_description_moderation_enabled", @@ -117,10 +117,11 @@ class CommentForm(extensible.ExtensibleForm, form.Form): # Hide the user_notification checkbox if user notification is disabled # or the user is not logged in. Also check if the user has a valid # email address - if member_email == '' or \ - not settings.user_notification_enabled or \ - mtool.isAnonymousUser(): - self.widgets['user_notification'].mode = interfaces.HIDDEN_MODE + member_email_is_empty = member_email == '' + user_notification_disabled = not settings.user_notification_enabled + anon = mtool.isAnonymousUser() + if member_email_is_empty or user_notification_disabled or anon: + self.widgets['user_notification'].mode = interfaces.HIDDEN_MODE def updateActions(self): super(CommentForm, self).updateActions() @@ -135,7 +136,8 @@ class CommentForm(extensible.ExtensibleForm, form.Form): # Check if conversation is enabled on this content object if not self.__parent__.restrictedTraverse( - '@@conversation_view').enabled(): + '@@conversation_view' + ).enabled(): raise Unauthorized("Discussion is not enabled for this content " "object.") @@ -148,9 +150,10 @@ class CommentForm(extensible.ExtensibleForm, form.Form): registry = queryUtility(IRegistry) settings = registry.forInterface(IDiscussionSettings, check=False) portal_membership = getToolByName(self.context, 'portal_membership') - if settings.captcha != 'disabled' and \ - settings.anonymous_comments and \ - portal_membership.isAnonymousUser(): + captcha_enabled = settings.captcha != 'disabled' + anonymous_comments = settings.anonymous_comments + anon = portal_membership.isAnonymousUser() + if captcha_enabled and anonymous_comments and anon: if not 'captcha' in data: data['captcha'] = u"" captcha = CaptchaValidator(self.context, @@ -182,8 +185,7 @@ class CommentForm(extensible.ExtensibleForm, form.Form): can_reply = getSecurityManager().checkPermission('Reply to item', context) portal_membership = getToolByName(self.context, 'portal_membership') - if portal_membership.isAnonymousUser() and \ - settings.anonymous_comments: + if anon and anonymous_comments: # Anonymous Users comment.author_name = author_name comment.author_email = u"" @@ -210,9 +212,11 @@ class CommentForm(extensible.ExtensibleForm, form.Form): comment.creation_date = datetime.utcnow() comment.modification_date = datetime.utcnow() else: # pragma: no cover - raise Unauthorized("Anonymous user tries to post a comment, but " - "anonymous commenting is disabled. Or user does not have the " - "'reply to item' permission.") + raise Unauthorized( + u"Anonymous user tries to post a comment, but anonymous " + u"commenting is disabled. Or user does not have the " + u"'reply to item' permission." + ) # Add comment to conversation conversation = IConversation(self.__parent__) @@ -234,8 +238,8 @@ class CommentForm(extensible.ExtensibleForm, form.Form): context) workflowTool = getToolByName(context, 'portal_workflow') comment_review_state = workflowTool.getInfoFor( - comment, - 'review_state', + comment, + 'review_state', None ) if comment_review_state == 'pending' and not can_review: @@ -262,9 +266,13 @@ class CommentsViewlet(ViewletBase): def update(self): super(CommentsViewlet, self).update() - if self.is_discussion_allowed() and \ - (self.is_anonymous() and self.anonymous_discussion_allowed() \ - or self.can_reply()): + discussion_allowed = self.is_discussion_allowed() + anonymous_allowed_or_can_reply = ( + self.is_anonymous() + and self.anonymous_discussion_allowed() + or self.can_reply() + ) + if discussion_allowed and anonymous_allowed_or_can_reply: z2.switch_on(self, request_layer=IFormLayer) self.form = self.form(aq_inner(self.context), self.request) alsoProvides(self.form, IWrappedForm) @@ -362,8 +370,10 @@ class CommentsViewlet(ViewletBase): for r in conversation.getThreads(): comment_obj = r['comment'] # list all possible workflow actions - actions = [a for a in wf.listActionInfos(object=comment_obj) - if a['category'] == 'workflow' and a['allowed']] + actions = [ + a for a in wf.listActionInfos(object=comment_obj) + if a['category'] == 'workflow' and a['allowed'] + ] r = r.copy() r['actions'] = actions yield r @@ -400,8 +410,9 @@ class CommentsViewlet(ViewletBase): portal_membership = getToolByName(self.context, 'portal_membership', None) - return portal_membership.getPersonalPortrait(username)\ - .absolute_url() + return portal_membership\ + .getPersonalPortrait(username)\ + .absolute_url() def anonymous_discussion_allowed(self): # Check if anonymous comments are allowed in the registry From b151244138605836b292a03274cd629e598419f1 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 18 Apr 2013 15:51:57 +0200 Subject: [PATCH 072/254] Pep8. --- plone/app/discussion/browser/validator.py | 2 +- plone/app/discussion/testing.py | 2 +- plone/app/discussion/upgrades.py | 1 - plone/app/discussion/vocabularies.py | 8 ++++---- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/plone/app/discussion/browser/validator.py b/plone/app/discussion/browser/validator.py index 87d4914..9c5b5dd 100644 --- a/plone/app/discussion/browser/validator.py +++ b/plone/app/discussion/browser/validator.py @@ -32,7 +32,7 @@ except ImportError: pass try: - from plone.formwidget.recaptcha.validator import WrongCaptchaCode + from plone.formwidget.recaptcha.validator import WrongCaptchaCode # noqa except ImportError: pass diff --git a/plone/app/discussion/testing.py b/plone/app/discussion/testing.py index 39e5221..400ab9c 100644 --- a/plone/app/discussion/testing.py +++ b/plone/app/discussion/testing.py @@ -9,7 +9,7 @@ from plone.app.testing import FunctionalTesting from zope.configuration import xmlconfig try: - import plone.app.collection + import plone.app.collection # noqa COLLECTION_TYPE = "Collection" except: COLLECTION_TYPE = "Topic" diff --git a/plone/app/discussion/upgrades.py b/plone/app/discussion/upgrades.py index 9b255e3..bf9df71 100644 --- a/plone/app/discussion/upgrades.py +++ b/plone/app/discussion/upgrades.py @@ -6,4 +6,3 @@ from plone.app.discussion.interfaces import IDiscussionSettings def update_registry(context): registry = getUtility(IRegistry) registry.registerInterface(IDiscussionSettings) - diff --git a/plone/app/discussion/vocabularies.py b/plone/app/discussion/vocabularies.py index 78f50ff..b811dce 100644 --- a/plone/app/discussion/vocabularies.py +++ b/plone/app/discussion/vocabularies.py @@ -6,28 +6,28 @@ from plone.app.discussion.interfaces import _ HAS_CAPTCHA = False try: - import plone.formwidget.captcha + import plone.formwidget.captcha # noqa HAS_CAPTCHA = True # pragma: no cover except ImportError: pass HAS_RECAPTCHA = False try: - import plone.formwidget.recaptcha + import plone.formwidget.recaptcha # noqa HAS_RECAPTCHA = True # pragma: no cover except ImportError: pass HAS_AKISMET = False try: - import collective.akismet + import collective.akismet # noqa HAS_AKISMET = True # pragma: no cover except ImportError: pass HAS_NOROBOTS = False try: - import collective.z3cform.norobots + import collective.z3cform.norobots # noqa HAS_NOROBOTS = True # pragma: no cover except ImportError: pass From 607719fd42ec50f8f1fb35aab5c8c0e7c3700a51 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 18 Apr 2013 15:57:01 +0200 Subject: [PATCH 073/254] Pep8. --- plone/app/discussion/interfaces.py | 177 +++++++++++++++++------------ plone/app/discussion/patches.py | 2 +- 2 files changed, 104 insertions(+), 75 deletions(-) diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index 9e64b2e..46d430d 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -47,8 +47,10 @@ class IConversation(IIterableMapping): ) public_commentators = schema.Set( - title=_(u"The set of unique commentators (usernames) of" - " published_comments"), + title=_( + u"The set of unique commentators (usernames) of" + u" published_comments" + ), readonly=True, ) @@ -130,7 +132,7 @@ class IComment(Interface): portal_type = schema.ASCIILine( title=_(u"Portal type"), default="Discussion Item", - ) + ) __parent__ = schema.Object( title=_(u"Conversation"), schema=Interface) @@ -143,7 +145,7 @@ class IComment(Interface): in_reply_to = schema.Int( title=_(u"Id of comment this comment is in reply to"), required=False, - ) + ) # for logged in comments - set to None for anonymous author_username = schema.TextLine(title=_(u"Name"), required=False) @@ -156,12 +158,19 @@ class IComment(Interface): default=u"Subject")) mime_type = schema.ASCIILine(title=_(u"MIME type"), default="text/plain") - text = schema.Text(title=_(u"label_comment", - default=u"Comment")) + text = schema.Text( + title=_( + u"label_comment", + default=u"Comment" + ) + ) - user_notification = schema.Bool(title=_(u"Notify me of new comments via " - "email."), - required=False) + user_notification = schema.Bool( + title=_( + u"Notify me of new comments via email." + ), + required=False + ) creator = schema.TextLine(title=_(u"Username of the commenter")) creation_date = schema.Date(title=_(u"Creation date")) @@ -221,119 +230,139 @@ class IDiscussionSettings(Interface): globally_enabled = schema.Bool( title=_(u"label_globally_enabled", default=u"Globally enable comments"), - description=_(u"help_globally_enabled", - default=u"If selected, users are able to post comments on the " - "site. Though, you have to enable comments for " - "specific content types, folders or content objects " - "before users will be able to post comments."), + description=_( + u"help_globally_enabled", + default=u"If selected, users are able to post comments on the " + u"site. Though, you have to enable comments for " + u"specific content types, folders or content objects " + u"before users will be able to post comments." + ), required=False, default=False, - ) + ) anonymous_comments = schema.Bool( title=_(u"label_anonymous_comments", default="Enable anonymous comments"), - description=_(u"help_anonymous_comments", - default=u"If selected, anonymous users are able to post " - "comments without loggin in. It is highly " - "recommended to use a captcha solution to prevent " - "spam if this setting is enabled."), + description=_( + u"help_anonymous_comments", + default=u"If selected, anonymous users are able to post " + u"comments without loggin in. It is highly " + u"recommended to use a captcha solution to prevent " + u"spam if this setting is enabled." + ), required=False, default=False, - ) + ) moderation_enabled = schema.Bool( - title=_(u"label_moderation_enabled", - default="Enable comment moderation"), - description=_(u"help_moderation_enabled", - default=u"If selected, comments will enter a 'Pending' state " - "in which they are invisible to the public. A user " - "with the 'Review comments' permission ('Reviewer' " - "or 'Manager') can approve comments to make them " - "visible to the public. If you want to enable a " - "custom comment workflow, you have to go to the " - "types control panel."), + title=_( + u"label_moderation_enabled", + default="Enable comment moderation" + ), + description=_( + u"help_moderation_enabled", + default=u"If selected, comments will enter a 'Pending' state " + u"in which they are invisible to the public. A user " + u"with the 'Review comments' permission ('Reviewer' " + u"or 'Manager') can approve comments to make them " + u"visible to the public. If you want to enable a " + u"custom comment workflow, you have to go to the " + u"types control panel." + ), required=False, default=False, - ) + ) text_transform = schema.Choice( title=_(u"label_text_transform", default="Comment text transform"), - description=_(u"help_text_transform", - default=u"Use this setting to choose if the comment text " + - "should be transformed in any way. You can choose " - "between 'Plain text' and 'Intelligent text'. " + - "'Intelligent text' converts plain text into HTML " + - "where line breaks and indentation is preserved, " + - "and web and email addresses are made into " + - "clickable links."), + description=_( + u"help_text_transform", + default=u"Use this setting to choose if the comment text " + + u"should be transformed in any way. You can choose " + u"between 'Plain text' and 'Intelligent text'. " + + u"'Intelligent text' converts plain text into HTML " + + u"where line breaks and indentation is preserved, " + + u"and web and email addresses are made into " + + u"clickable links."), required=True, default='text/plain', vocabulary='plone.app.discussion.vocabularies.TextTransformVocabulary', - ) + ) captcha = schema.Choice( title=_(u"label_captcha", default="Captcha"), - description=_(u"help_captcha", - default=u"Use this setting to enable or disable Captcha " - "validation for comments. Install " - "plone.formwidget.captcha, " - "plone.formwidget.recaptcha, collective.akismet, or " - "collective.z3cform.norobots if there are no options " - "available."), + description=_( + u"help_captcha", + default=u"Use this setting to enable or disable Captcha " + u"validation for comments. Install " + u"plone.formwidget.captcha, " + u"plone.formwidget.recaptcha, collective.akismet, or " + u"collective.z3cform.norobots if there are no options " + u"available."), required=True, default='disabled', vocabulary='plone.app.discussion.vocabularies.CaptchaVocabulary', - ) + ) show_commenter_image = schema.Bool( title=_(u"label_show_commenter_image", default=u"Show commenter image"), - description=_(u"help_show_commenter_image", - default=u"If selected, an image of the user is shown next to " - "the comment."), + description=_( + u"help_show_commenter_image", + default=u"If selected, an image of the user is shown next to " + u"the comment."), required=False, default=True, - ) + ) moderator_notification_enabled = schema.Bool( title=_(u"label_moderator_notification_enabled", default=u"Enable moderator email notification"), - description=_(u"help_moderator_notification_enabled", - default=u"If selected, the moderator is notified if a comment " - "needs attention. The moderator email address can " + - "be found in the 'Mail settings' control panel " - "(Site 'From' address)"), + description=_( + u"help_moderator_notification_enabled", + default=u"If selected, the moderator is notified if a comment " + u"needs attention. The moderator email address can " + + u"be found in the 'Mail settings' control panel " + u"(Site 'From' address)"), required=False, default=False, - ) + ) moderator_email = schema.ASCIILine( - title=_(u'label_moderator_email', - default=u'Moderator Email Address'), - description=_(u'help_moderator_email', - default=u"Address to which moderator notifications " - u"will be sent."), + title=_( + u'label_moderator_email', + default=u'Moderator Email Address' + ), + description=_( + u'help_moderator_email', + default=u"Address to which moderator notifications " + u"will be sent."), required=False, - ) + ) user_notification_enabled = schema.Bool( - title=_(u"label_user_notification_enabled", - default=u"Enable user email notification"), - description=_(u"help_user_notification_enabled", - default=u"If selected, users can choose to be notified " - "of new comments by email."), + title=_( + u"label_user_notification_enabled", + default=u"Enable user email notification" + ), + description=_( + u"help_user_notification_enabled", + default=u"If selected, users can choose to be notified " + u"of new comments by email."), required=False, - default=False) + default=False + ) anonymous_email_enabled = schema.Bool( title=_(u"label_anonymous_email_enabled", default=u"Enable anonymous email field"), - description=_(u"help_anonymous_email_enabled", - default=u"If selected, anonymous user will have to " - "give their email."), + description=_( + u"help_anonymous_email_enabled", + default=u"If selected, anonymous user will have to " + u"give their email."), required=False, default=False) diff --git a/plone/app/discussion/patches.py b/plone/app/discussion/patches.py index 55088d5..47ec27b 100644 --- a/plone/app/discussion/patches.py +++ b/plone/app/discussion/patches.py @@ -20,7 +20,7 @@ def patchedClearFindAndRebuild(self): def indexObject(obj, path): if (base_hasattr(obj, 'indexObject') and - safe_callable(obj.indexObject)): + safe_callable(obj.indexObject)): try: obj.indexObject() From 73d84a22d796342999cffb308689e2bdf8d2e636 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 18 Apr 2013 16:12:00 +0200 Subject: [PATCH 074/254] Pep8. --- plone/app/discussion/comment.py | 114 ++++++++++++++++----------- plone/app/discussion/conversation.py | 14 ++-- 2 files changed, 78 insertions(+), 50 deletions(-) diff --git a/plone/app/discussion/comment.py b/plone/app/discussion/comment.py index 93bab67..9d9b1e1 100644 --- a/plone/app/discussion/comment.py +++ b/plone/app/discussion/comment.py @@ -52,20 +52,20 @@ COMMENT_TITLE = _( MAIL_NOTIFICATION_MESSAGE = _( u"mail_notification_message", default=u"A comment on '${title}' " - "has been posted here: ${link}\n\n" - "---\n" - "${text}\n" - "---\n") + u"has been posted here: ${link}\n\n" + u"---\n" + u"${text}\n" + u"---\n") MAIL_NOTIFICATION_MESSAGE_MODERATOR = _( u"mail_notification_message_moderator", default=u"A comment on '${title}' " - "has been posted here: ${link}\n\n" - "---\n" - "${text}\n" - "---\n\n" - "Approve comment:\n${link_approve}\n\n" - "Delete comment:\n${link_delete}\n") + u"has been posted here: ${link}\n\n" + u"---\n" + u"${text}\n" + u"---\n\n" + u"Approve comment:\n${link_approve}\n\n" + u"Delete comment:\n${link_delete}\n") logger = logging.getLogger("plone.app.discussion") @@ -154,12 +154,13 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable, return transform.getData() else: logger = logging.getLogger("plone.app.discussion") - logger.error( - _(u"Transform '%s' => '%s' not available. Failed to transform comment '%s'." % ( + logger.error(_( + u"Transform '%s' => '%s' not available." % ( sourceMimetype, - targetMimetype, - self.absolute_url(), - ))) + targetMimetype + ) + + u"Failed to transform comment '%s'." % self.absolute_url() + )) return text def Title(self): @@ -170,8 +171,12 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable, return self.title if not self.author_name: - author_name = translate(Message(_(u"label_anonymous", - default=u"Anonymous"))) + author_name = translate( + Message(_( + u"label_anonymous", + default=u"Anonymous" + )) + ) else: author_name = self.author_name @@ -190,6 +195,7 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable, return self.creator security.declareProtected(permissions.View, 'Type') + def Type(self): """The Discussion Item content type. """ @@ -240,23 +246,30 @@ def notify_content_object_moved(obj, event): """Update all comments of a content object that has been moved. """ if event.oldParent is None or event.newParent is None \ - or event.oldName is None or event.newName is None: + or event.oldName is None or event.newName is None: return - # This method is also called for sublocations of moved objects. We therefore can't - # assume that event.object == obj and event.{old,new}{Parent,Name} may refer to - # the actually moved object further up in the object hierarchy. - # The object is already moved at this point. so obj.getPhysicalPath retruns the new path. - # get the part of the path that was moved. - moved_path = obj.getPhysicalPath()[len(event.newParent.getPhysicalPath()) + 1:] + # This method is also called for sublocations of moved objects. We + # therefore can't assume that event.object == obj and event. + # {old,new}{Parent,Name} may refer to the actually moved object further up + # in the object hierarchy. The object is already moved at this point. so + # obj.getPhysicalPath retruns the new path get the part of the path that + # was moved. + moved_path = obj.getPhysicalPath()[ + len(event.newParent.getPhysicalPath()) + 1: + ] # Remove comments at the old location from catalog catalog = getToolByName(obj, 'portal_catalog') - old_path = '/'.join(event.oldParent.getPhysicalPath() + (event.oldName,) + moved_path) + old_path = '/'.join( + event.oldParent.getPhysicalPath() + + (event.oldName,) + + moved_path + ) brains = catalog.searchResults(dict( - path={'query': old_path}, - portal_type="Discussion Item" - )) + path={'query': old_path}, + portal_type="Discussion Item" + )) for brain in brains: catalog.uncatalog_object(brain.getPath()) # Reindex comment at the new location @@ -301,8 +314,9 @@ def notify_user(obj, event): # when he has commented multiple times. emails = set() for comment in conversation.getComments(): - if (obj != comment and - comment.user_notification and comment.author_email): + obj_is_not_the_comment = obj != comment + valid_user_email = comment.user_notification and comment.author_email + if obj_is_not_the_comment and valid_user_email: emails.add(comment.author_email) if not emails: @@ -310,13 +324,17 @@ def notify_user(obj, event): subject = translate(_(u"A comment has been posted."), context=obj.REQUEST) - message = translate(Message( + message = translate( + Message( MAIL_NOTIFICATION_MESSAGE, - mapping={'title': safe_unicode(content_object.title), - 'link': content_object.absolute_url() + - '/view#' + obj.id, - 'text': obj.text}), - context=obj.REQUEST) + mapping={ + 'title': safe_unicode(content_object.title), + 'link': content_object.absolute_url() + '/view#' + obj.id, + 'text': obj.text + } + ), + context=obj.REQUEST + ) for email in emails: # Send email try: @@ -371,15 +389,21 @@ def notify_moderator(obj, event): # Compose email subject = translate(_(u"A comment has been posted."), context=obj.REQUEST) - message = translate(Message(MAIL_NOTIFICATION_MESSAGE_MODERATOR, - mapping={ - 'title': safe_unicode(content_object.title), - 'link': content_object.absolute_url() + '/view#' + obj.id, - 'text': obj.text, - 'link_approve': obj.absolute_url() + '/@@moderate-publish-comment', - 'link_delete': obj.absolute_url() + '/@@moderate-delete-comment', - }), - context=obj.REQUEST) + link_approve = obj.absolute_url() + '/@@moderate-publish-comment' + link_delete = obj.absolute_url() + '/@@moderate-delete-comment' + message = translate( + Message( + MAIL_NOTIFICATION_MESSAGE_MODERATOR, + mapping={ + 'title': safe_unicode(content_object.title), + 'link': content_object.absolute_url() + '/view#' + obj.id, + 'text': obj.text, + 'link_approve': link_approve, + 'link_delete': link_delete, + } + ), + context=obj.REQUEST + ) # Send email try: diff --git a/plone/app/discussion/conversation.py b/plone/app/discussion/conversation.py index 6e529a8..4ec6c75 100644 --- a/plone/app/discussion/conversation.py +++ b/plone/app/discussion/conversation.py @@ -89,8 +89,10 @@ class Conversation(Traversable, Persistent, Explicit): @property def total_comments(self): - public_comments = [x for x in self._comments.values() if \ - user_nobody.has_permission('View', x)] + public_comments = [ + x for x in self._comments.values() + if user_nobody.has_permission('View', x) + ] return len(public_comments) @property @@ -428,9 +430,11 @@ class CommentReplies(ConversationReplies): def __init__(self, context): self.comment = context self.conversation = aq_parent(self.comment) - - if (self.conversation is None or - not hasattr(self.conversation, '_children')): + conversation_has_no_children = not hasattr( + self.conversation, + '_children' + ) + if self.conversation is None or conversation_has_no_children: raise TypeError("This adapter doesn't know what to do with the " "parent conversation") From e2a43aefb6e23407bd1d97cbac545acd7eeff636 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Mon, 22 Apr 2013 14:55:04 +0200 Subject: [PATCH 075/254] Remove testbrowser dump. --- plone/app/discussion/tests/functional_test_comments.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/plone/app/discussion/tests/functional_test_comments.txt b/plone/app/discussion/tests/functional_test_comments.txt index 14f3e7c..13527ea 100644 --- a/plone/app/discussion/tests/functional_test_comments.txt +++ b/plone/app/discussion/tests/functional_test_comments.txt @@ -353,7 +353,6 @@ View the collection listing. >>> browser.getLink('Anonymous on Doc1', index=1) - >>> open('/tmp/testbrowser.html', 'w').write(browser.contents) >>> browser.getLink(tarek_fullname + ' on Doc1') >>> browser.getLink(jim_fullname + ' on Doc1') From 66d355544fc37ff67a6e4722ee84ad2b6563f766 Mon Sep 17 00:00:00 2001 From: Kees Hink Date: Wed, 8 May 2013 16:16:04 +0200 Subject: [PATCH 076/254] Add a test for permission Acquisition on comments. We use a different workflow for comments: The View permission is acquired instead of given explicitly, as outlined in https://dev.plone.org/ticket/12531. --- plone/app/discussion/testing.py | 4 + plone/app/discussion/tests/configure.zcml | 16 +++ plone/app/discussion/tests/profile/types.xml | 4 + .../profile/types/sample_content_type.xml | 47 +++++++ .../discussion/tests/profile/workflows.xml | 9 ++ .../definition.xml | 75 +++++++++++ .../app/discussion/tests/test_acquisition.py | 116 ++++++++++++++++++ setup.py | 1 + 8 files changed, 272 insertions(+) create mode 100644 plone/app/discussion/tests/configure.zcml create mode 100644 plone/app/discussion/tests/profile/types.xml create mode 100644 plone/app/discussion/tests/profile/types/sample_content_type.xml create mode 100644 plone/app/discussion/tests/profile/workflows.xml create mode 100644 plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml create mode 100644 plone/app/discussion/tests/test_acquisition.py diff --git a/plone/app/discussion/testing.py b/plone/app/discussion/testing.py index 400ab9c..a88ca77 100644 --- a/plone/app/discussion/testing.py +++ b/plone/app/discussion/testing.py @@ -35,10 +35,14 @@ class PloneAppDiscussion(PloneSandboxLayer): xmlconfig.file('configure.zcml', plone.app.discussion, context=configurationContext) + xmlconfig.file('configure.zcml', + plone.app.discussion.tests, + context=configurationContext) def setUpPloneSite(self, portal): # Install into Plone site using portal_setup applyProfile(portal, 'plone.app.discussion:default') + applyProfile(portal, 'plone.app.discussion.tests:testing') # Creates some users acl_users = getToolByName(portal, 'acl_users') diff --git a/plone/app/discussion/tests/configure.zcml b/plone/app/discussion/tests/configure.zcml new file mode 100644 index 0000000..ee79b95 --- /dev/null +++ b/plone/app/discussion/tests/configure.zcml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/plone/app/discussion/tests/profile/types.xml b/plone/app/discussion/tests/profile/types.xml new file mode 100644 index 0000000..0aec569 --- /dev/null +++ b/plone/app/discussion/tests/profile/types.xml @@ -0,0 +1,4 @@ + + + + diff --git a/plone/app/discussion/tests/profile/types/sample_content_type.xml b/plone/app/discussion/tests/profile/types/sample_content_type.xml new file mode 100644 index 0000000..7869638 --- /dev/null +++ b/plone/app/discussion/tests/profile/types/sample_content_type.xml @@ -0,0 +1,47 @@ + + + + + sample_content_type + Sample Content + document_icon.png + True + True + + + True + + plone.dexterity.content.Item + + cmf.AddPortalContent + + + + + + view + False + + + + + + + + + + + + + + + + + + + diff --git a/plone/app/discussion/tests/profile/workflows.xml b/plone/app/discussion/tests/profile/workflows.xml new file mode 100644 index 0000000..3bc5bbf --- /dev/null +++ b/plone/app/discussion/tests/profile/workflows.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml b/plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml new file mode 100644 index 0000000..89a9fb2 --- /dev/null +++ b/plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml @@ -0,0 +1,75 @@ + + + Access contents information + Change portal events + Modify portal content + View + + Visible to everyone, editable by the owner. + + Anonymous + + + Editor + Manager + Owner + Site Administrator + + + Editor + Manager + Owner + Site Administrator + + + + + + Previous transition + + transition/getId|nothing + + + + + + The ID of the user who performed the previous transition + + user/getId + + + + + + Comment about the last transition + + python:state_change.kwargs.get('comment', '') + + + + + + Provides access to workflow history + + state_change/getHistory + + + Request review + Review portal content + + + + When the previous transition was performed + + state_change/getDateTime + + + + + diff --git a/plone/app/discussion/tests/test_acquisition.py b/plone/app/discussion/tests/test_acquisition.py new file mode 100644 index 0000000..9de61d4 --- /dev/null +++ b/plone/app/discussion/tests/test_acquisition.py @@ -0,0 +1,116 @@ +# -*- coding: utf-8 -*- +from plone.app.discussion.testing import \ + PLONE_APP_DISCUSSION_INTEGRATION_TESTING +from plone.app.discussion.interfaces import IConversation +from plone.app.testing import TEST_USER_ID, setRoles +from Products.CMFCore.utils import getToolByName +from zope.component import createObject + +import unittest2 as unittest + + +dexterity_type_name = 'sample_content_type' +dexterity_object_id = 'instance-of-dexterity-type' +archetypes_object_id = 'instance-of-archetypes-type' +one_state_workflow = 'one_state_workflow' +comment_workflow_acquired_view = 'comment_workflow_acquired_view' + + +def _anonymousCanView(obj): + """Use rolesOfPermission() to sees if Anonymous has View permission on an + object""" + roles_of_view_permission = obj.rolesOfPermission("View") + # rolesOfPermission returns a list of dictionaries that have the key + # 'name' for role. + anon_views = [r for r in roles_of_view_permission + if r['name'] == 'Anonymous'] + # only one entry per role should be present + anon_view = anon_views[0] + # if this role has the permission, 'selected' is set to 'SELECTED' + return anon_view['selected'] == 'SELECTED' + + +class DexterityAcquisitionTest(unittest.TestCase): + """See test_view_permission.""" + + layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING + + def setUp(self): + self.portal = self.layer['portal'] + self.request = self.layer['request'] + setRoles(self.portal, TEST_USER_ID, ['Manager']) + self.wftool = getToolByName(self.portal, 'portal_workflow') + + # Use one_state_workflow for Document and sample_content_type, + # so they're always published. + self.wftool.setChainForPortalTypes( + ['Document', dexterity_type_name], + (one_state_workflow,), + ) + + # Create a dexterity item and add a comment. + self.portal.invokeFactory( + id=dexterity_object_id, + title='Instance Of Dexterity Type', + type_name=dexterity_type_name, + ) + self.dexterity_object = self.portal.get(dexterity_object_id) + conversation = IConversation(self.dexterity_object) + comment1 = createObject('plone.Comment') + conversation.addComment(comment1) + self.dexterity_comment = comment1 + + # Create an Archetypes item and add a comment. + self.portal.invokeFactory( + id=archetypes_object_id, + title='Instance Of Archetypes Type', + type_name='Document', + ) + self.archetypes_object = self.portal.get(archetypes_object_id) + conversation = IConversation(self.archetypes_object) + comment2 = createObject('plone.Comment') + conversation.addComment(comment2) + self.archetypes_comment = comment2 + + def test_workflows_installed(self): + """Check that the new comment workflow has been installed properly. + (Just a test to check our test setup.) + """ + workflows = self.wftool.objectIds() + self.assertTrue('comment_workflow_acquired_view' in workflows) + + def test_workflows_applied(self): + """Check that all objects have the workflow that we expect. + (Just a test to check our test setup.)""" + self.assertEqual( + self.wftool.getChainFor(self.archetypes_object), + (one_state_workflow,) + ) + self.assertEqual( + self.wftool.getChainFor(self.dexterity_object), + (one_state_workflow,) + ) + self.assertEqual( + self.wftool.getChainFor(self.archetypes_comment), + (comment_workflow_acquired_view,) + ) + self.assertEqual( + self.wftool.getChainFor(self.dexterity_comment), + (comment_workflow_acquired_view,) + ) + + def test_view_permission(self): + """Test that if the View permission on Discussion Items is acquired, + Anonymous can view comments on published items.""" + + # Anonymous has View permission on commented objects. + self.assertTrue(_anonymousCanView(self.archetypes_object)) + self.assertTrue(_anonymousCanView(self.dexterity_object)) + + # Anonymous should therefore have View permission on the comments. + self.assertTrue(_anonymousCanView(self.archetypes_comment)) + self.assertTrue(_anonymousCanView(self.dexterity_comment)) + + +def test_suite(): + return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/setup.py b/setup.py index 5f005fb..041ccbc 100644 --- a/setup.py +++ b/setup.py @@ -52,6 +52,7 @@ setup(name='plone.app.discussion', 'test': [ 'plone.app.testing', 'interlude', + 'plone.app.dexterity', ] }, entry_points=""" From 6e9b32254e190201690172c66d9bf2860f9ae80d Mon Sep 17 00:00:00 2001 From: Kees Hink Date: Fri, 10 May 2013 13:26:30 +0200 Subject: [PATCH 077/254] Move application of custom workflow to test_acquisition.py... ...so it doesn't interfere with other test in the layer. --- plone/app/discussion/tests/profile/workflows.xml | 5 ----- plone/app/discussion/tests/test_acquisition.py | 6 ++++++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/plone/app/discussion/tests/profile/workflows.xml b/plone/app/discussion/tests/profile/workflows.xml index 3bc5bbf..500f444 100644 --- a/plone/app/discussion/tests/profile/workflows.xml +++ b/plone/app/discussion/tests/profile/workflows.xml @@ -1,9 +1,4 @@ - - - - - diff --git a/plone/app/discussion/tests/test_acquisition.py b/plone/app/discussion/tests/test_acquisition.py index 9de61d4..e101c57 100644 --- a/plone/app/discussion/tests/test_acquisition.py +++ b/plone/app/discussion/tests/test_acquisition.py @@ -41,6 +41,12 @@ class DexterityAcquisitionTest(unittest.TestCase): setRoles(self.portal, TEST_USER_ID, ['Manager']) self.wftool = getToolByName(self.portal, 'portal_workflow') + # Use customized workflow for comments. + self.wftool.setChainForPortalTypes( + ['Discussion Item'], + (comment_workflow_acquired_view,), + ) + # Use one_state_workflow for Document and sample_content_type, # so they're always published. self.wftool.setChainForPortalTypes( From 6d5c193d8c9f4d8c87cfc4a0dd502bc97aff08b9 Mon Sep 17 00:00:00 2001 From: Kees Hink Date: Fri, 10 May 2013 13:38:46 +0200 Subject: [PATCH 078/254] Revert "Move application of custom workflow to test_acquisition.py..." This reverts commit 6e9b32254e190201690172c66d9bf2860f9ae80d. --- plone/app/discussion/tests/profile/workflows.xml | 5 +++++ plone/app/discussion/tests/test_acquisition.py | 6 ------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/plone/app/discussion/tests/profile/workflows.xml b/plone/app/discussion/tests/profile/workflows.xml index 500f444..3bc5bbf 100644 --- a/plone/app/discussion/tests/profile/workflows.xml +++ b/plone/app/discussion/tests/profile/workflows.xml @@ -1,4 +1,9 @@ + + + + + diff --git a/plone/app/discussion/tests/test_acquisition.py b/plone/app/discussion/tests/test_acquisition.py index e101c57..9de61d4 100644 --- a/plone/app/discussion/tests/test_acquisition.py +++ b/plone/app/discussion/tests/test_acquisition.py @@ -41,12 +41,6 @@ class DexterityAcquisitionTest(unittest.TestCase): setRoles(self.portal, TEST_USER_ID, ['Manager']) self.wftool = getToolByName(self.portal, 'portal_workflow') - # Use customized workflow for comments. - self.wftool.setChainForPortalTypes( - ['Discussion Item'], - (comment_workflow_acquired_view,), - ) - # Use one_state_workflow for Document and sample_content_type, # so they're always published. self.wftool.setChainForPortalTypes( From fd9d0a0eba194c022e9b396b99e118b03ab4dcf8 Mon Sep 17 00:00:00 2001 From: Kees Hink Date: Fri, 10 May 2013 13:39:02 +0200 Subject: [PATCH 079/254] Revert "Add a test for permission Acquisition on comments." This reverts commit 66d355544fc37ff67a6e4722ee84ad2b6563f766. --- plone/app/discussion/testing.py | 4 - plone/app/discussion/tests/configure.zcml | 16 --- plone/app/discussion/tests/profile/types.xml | 4 - .../profile/types/sample_content_type.xml | 47 ------- .../discussion/tests/profile/workflows.xml | 9 -- .../definition.xml | 75 ----------- .../app/discussion/tests/test_acquisition.py | 116 ------------------ setup.py | 1 - 8 files changed, 272 deletions(-) delete mode 100644 plone/app/discussion/tests/configure.zcml delete mode 100644 plone/app/discussion/tests/profile/types.xml delete mode 100644 plone/app/discussion/tests/profile/types/sample_content_type.xml delete mode 100644 plone/app/discussion/tests/profile/workflows.xml delete mode 100644 plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml delete mode 100644 plone/app/discussion/tests/test_acquisition.py diff --git a/plone/app/discussion/testing.py b/plone/app/discussion/testing.py index a88ca77..400ab9c 100644 --- a/plone/app/discussion/testing.py +++ b/plone/app/discussion/testing.py @@ -35,14 +35,10 @@ class PloneAppDiscussion(PloneSandboxLayer): xmlconfig.file('configure.zcml', plone.app.discussion, context=configurationContext) - xmlconfig.file('configure.zcml', - plone.app.discussion.tests, - context=configurationContext) def setUpPloneSite(self, portal): # Install into Plone site using portal_setup applyProfile(portal, 'plone.app.discussion:default') - applyProfile(portal, 'plone.app.discussion.tests:testing') # Creates some users acl_users = getToolByName(portal, 'acl_users') diff --git a/plone/app/discussion/tests/configure.zcml b/plone/app/discussion/tests/configure.zcml deleted file mode 100644 index ee79b95..0000000 --- a/plone/app/discussion/tests/configure.zcml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - diff --git a/plone/app/discussion/tests/profile/types.xml b/plone/app/discussion/tests/profile/types.xml deleted file mode 100644 index 0aec569..0000000 --- a/plone/app/discussion/tests/profile/types.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/plone/app/discussion/tests/profile/types/sample_content_type.xml b/plone/app/discussion/tests/profile/types/sample_content_type.xml deleted file mode 100644 index 7869638..0000000 --- a/plone/app/discussion/tests/profile/types/sample_content_type.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - sample_content_type - Sample Content - document_icon.png - True - True - - - True - - plone.dexterity.content.Item - - cmf.AddPortalContent - - - - - - view - False - - - - - - - - - - - - - - - - - - - diff --git a/plone/app/discussion/tests/profile/workflows.xml b/plone/app/discussion/tests/profile/workflows.xml deleted file mode 100644 index 3bc5bbf..0000000 --- a/plone/app/discussion/tests/profile/workflows.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml b/plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml deleted file mode 100644 index 89a9fb2..0000000 --- a/plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - Access contents information - Change portal events - Modify portal content - View - - Visible to everyone, editable by the owner. - - Anonymous - - - Editor - Manager - Owner - Site Administrator - - - Editor - Manager - Owner - Site Administrator - - - - - - Previous transition - - transition/getId|nothing - - - - - - The ID of the user who performed the previous transition - - user/getId - - - - - - Comment about the last transition - - python:state_change.kwargs.get('comment', '') - - - - - - Provides access to workflow history - - state_change/getHistory - - - Request review - Review portal content - - - - When the previous transition was performed - - state_change/getDateTime - - - - - diff --git a/plone/app/discussion/tests/test_acquisition.py b/plone/app/discussion/tests/test_acquisition.py deleted file mode 100644 index 9de61d4..0000000 --- a/plone/app/discussion/tests/test_acquisition.py +++ /dev/null @@ -1,116 +0,0 @@ -# -*- coding: utf-8 -*- -from plone.app.discussion.testing import \ - PLONE_APP_DISCUSSION_INTEGRATION_TESTING -from plone.app.discussion.interfaces import IConversation -from plone.app.testing import TEST_USER_ID, setRoles -from Products.CMFCore.utils import getToolByName -from zope.component import createObject - -import unittest2 as unittest - - -dexterity_type_name = 'sample_content_type' -dexterity_object_id = 'instance-of-dexterity-type' -archetypes_object_id = 'instance-of-archetypes-type' -one_state_workflow = 'one_state_workflow' -comment_workflow_acquired_view = 'comment_workflow_acquired_view' - - -def _anonymousCanView(obj): - """Use rolesOfPermission() to sees if Anonymous has View permission on an - object""" - roles_of_view_permission = obj.rolesOfPermission("View") - # rolesOfPermission returns a list of dictionaries that have the key - # 'name' for role. - anon_views = [r for r in roles_of_view_permission - if r['name'] == 'Anonymous'] - # only one entry per role should be present - anon_view = anon_views[0] - # if this role has the permission, 'selected' is set to 'SELECTED' - return anon_view['selected'] == 'SELECTED' - - -class DexterityAcquisitionTest(unittest.TestCase): - """See test_view_permission.""" - - layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING - - def setUp(self): - self.portal = self.layer['portal'] - self.request = self.layer['request'] - setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.wftool = getToolByName(self.portal, 'portal_workflow') - - # Use one_state_workflow for Document and sample_content_type, - # so they're always published. - self.wftool.setChainForPortalTypes( - ['Document', dexterity_type_name], - (one_state_workflow,), - ) - - # Create a dexterity item and add a comment. - self.portal.invokeFactory( - id=dexterity_object_id, - title='Instance Of Dexterity Type', - type_name=dexterity_type_name, - ) - self.dexterity_object = self.portal.get(dexterity_object_id) - conversation = IConversation(self.dexterity_object) - comment1 = createObject('plone.Comment') - conversation.addComment(comment1) - self.dexterity_comment = comment1 - - # Create an Archetypes item and add a comment. - self.portal.invokeFactory( - id=archetypes_object_id, - title='Instance Of Archetypes Type', - type_name='Document', - ) - self.archetypes_object = self.portal.get(archetypes_object_id) - conversation = IConversation(self.archetypes_object) - comment2 = createObject('plone.Comment') - conversation.addComment(comment2) - self.archetypes_comment = comment2 - - def test_workflows_installed(self): - """Check that the new comment workflow has been installed properly. - (Just a test to check our test setup.) - """ - workflows = self.wftool.objectIds() - self.assertTrue('comment_workflow_acquired_view' in workflows) - - def test_workflows_applied(self): - """Check that all objects have the workflow that we expect. - (Just a test to check our test setup.)""" - self.assertEqual( - self.wftool.getChainFor(self.archetypes_object), - (one_state_workflow,) - ) - self.assertEqual( - self.wftool.getChainFor(self.dexterity_object), - (one_state_workflow,) - ) - self.assertEqual( - self.wftool.getChainFor(self.archetypes_comment), - (comment_workflow_acquired_view,) - ) - self.assertEqual( - self.wftool.getChainFor(self.dexterity_comment), - (comment_workflow_acquired_view,) - ) - - def test_view_permission(self): - """Test that if the View permission on Discussion Items is acquired, - Anonymous can view comments on published items.""" - - # Anonymous has View permission on commented objects. - self.assertTrue(_anonymousCanView(self.archetypes_object)) - self.assertTrue(_anonymousCanView(self.dexterity_object)) - - # Anonymous should therefore have View permission on the comments. - self.assertTrue(_anonymousCanView(self.archetypes_comment)) - self.assertTrue(_anonymousCanView(self.dexterity_comment)) - - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/setup.py b/setup.py index 041ccbc..5f005fb 100644 --- a/setup.py +++ b/setup.py @@ -52,7 +52,6 @@ setup(name='plone.app.discussion', 'test': [ 'plone.app.testing', 'interlude', - 'plone.app.dexterity', ] }, entry_points=""" From a03409a2cb6454b4df93ce86ded7f9ad4a4cfca6 Mon Sep 17 00:00:00 2001 From: Jan Ulrich Hasecke Date: Wed, 22 May 2013 19:03:00 +0200 Subject: [PATCH 080/254] Update plone.app.discussion.po Some translations --- .../locales/de/LC_MESSAGES/plone.app.discussion.po | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po index 3f99105..170e99f 100644 --- a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po @@ -76,7 +76,7 @@ msgstr "Kommentierungseinstellungen" #: ../browser/controlpanel.py:84 msgid "Edit cancelled" -msgstr "" +msgstr "Bearbeitung abgebrochen" #: ../interfaces.py:153 msgid "Email" @@ -132,7 +132,7 @@ msgstr "" #: ../interfaces.py:34 msgid "Total number of public comments on this item" -msgstr "" +msgstr "Summe der veröffentlichten Kommentare zu diesem Artikel" #: ../comment.py:158 msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." @@ -144,7 +144,7 @@ msgstr "E-Mail-Benachrichtigungen für Benutzer" #: ../interfaces.py:166 msgid "Username of the commenter" -msgstr "" +msgstr "Benutzername des Kommentierenden" #: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." @@ -173,7 +173,7 @@ msgstr "Sie können einen Kommentar abgeben, indem Sie das untenstehende Formula #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." #: ../browser/comments.py:51 msgid "comment_description_markdown" -msgstr "" +msgstr "Sie können einen Kommentar abgeben, indem Sie das untenstehende Formular ausfüllen. Sie können die Markdown-Syntax für Links und Bilder benutzen." #. Default: "Comments are moderated." #: ../browser/comments.py:63 @@ -188,7 +188,7 @@ msgstr "Sie können einen Kommentar abgeben, indem Sie das untenstehende Formula #. Default: "${author_name} on ${content}" #: ../comment.py:48 msgid "comment_title" -msgstr "" +msgstr "${author_name} zu ${content}" #. Default: "Action" #: ../browser/moderation.pt:85 @@ -228,7 +228,7 @@ msgstr "Wenn Sie diese Einstellung aktivieren, können anonyme Benutzer Kommenta #. Default: "If selected, anonymous user will have to give their email." #: ../interfaces.py:334 msgid "help_anonymous_email_enabled" -msgstr "" +msgstr "Wenn Sie diese Einstellung aktivieren, müssen anonyme Benutzer ihre E-Mail-Adresse angeben." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." #: ../interfaces.py:279 @@ -279,7 +279,7 @@ msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." #: ../interfaces.py:325 msgid "help_user_notification_enabled" -msgstr "" +msgstr "Wenn Sie diese Einstellung auswählen, können Benutzer angeben, dass sie über neue Kommentare per E-Mail informiert werden möchten." #. Default: "Anonymous" #: ../browser/comments.pt:71 From f90c1531bcd8d060845af952e9dbd73aef83837a Mon Sep 17 00:00:00 2001 From: Thomas Desvenain Date: Thu, 23 May 2013 09:35:41 +0200 Subject: [PATCH 081/254] Update french translation --- .../fr/LC_MESSAGES/plone.app.discussion.po | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po index 267a2e9..23f449b 100644 --- a/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po @@ -64,7 +64,7 @@ msgstr "Date de création" #: ../interfaces.py:40 msgid "Date of the most recent public comment" -msgstr "" +msgstr "Date du dernier commentaire public" #: ../vocabularies.py:44 msgid "Disabled" @@ -128,15 +128,15 @@ msgstr "L'ensemble des commentateurs uniques (identifiants)" #: ../interfaces.py:50 msgid "The set of unique commentators (usernames) of published_comments" -msgstr "" +msgstr "L'ensemble des commentateurs uniques des commentaires publiés (identifiants)" #: ../interfaces.py:34 msgid "Total number of public comments on this item" -msgstr "" +msgstr "Nombre total de commentaires publics sur cet élément" #: ../comment.py:158 msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." -msgstr "" +msgstr "Transformation '%s' => '%s' indisponible. La transformation du commentaire '%s' a échoué." #: ../browser/controlpanel.py:69 msgid "User Email Notification" @@ -144,7 +144,7 @@ msgstr "Notification des utilisateurs par courriel" #: ../interfaces.py:166 msgid "Username of the commenter" -msgstr "" +msgstr "Identifiant de l'auteur du commentaire" #: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." @@ -173,7 +173,7 @@ msgstr "Vous pouvez ajouter un commentaire en complétant le formulaire ci-desso #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." #: ../browser/comments.py:51 msgid "comment_description_markdown" -msgstr "" +msgstr "Vous pouvez ajouter un commentaire en complétant le formulaire ci-dessous. Format plein texte. Vous pouvez utiliser la syntaxe Markdown pour les liens et images." #. Default: "Comments are moderated." #: ../browser/comments.py:63 @@ -187,9 +187,8 @@ msgstr "Vous pouvez ajouter un commentaire en complétant le formulaire ci-desso #. Default: "${author_name} on ${content}" #: ../comment.py:48 -#, fuzzy msgid "comment_title" -msgstr "${creator} sur ${content}" +msgstr "${author_name} sur ${content}" #. Default: "Action" #: ../browser/moderation.pt:85 @@ -229,7 +228,7 @@ msgstr "Si activé, les utilisateurs anonymes peuvent poster des commentaires sa #. Default: "If selected, anonymous user will have to give their email." #: ../interfaces.py:334 msgid "help_anonymous_email_enabled" -msgstr "" +msgstr "Si cette case est cochée, les utilisateurs anonymes devront donner leur email." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." #: ../interfaces.py:279 @@ -292,7 +291,7 @@ msgstr "Activer les commentaires anonymes" #. Default: "Enable anonymous email field" #: ../interfaces.py:332 msgid "label_anonymous_email_enabled" -msgstr "" +msgstr "Activer le champ email pour les anonymes" #. Default: "Apply" #: ../browser/moderation.pt:71 @@ -376,14 +375,13 @@ msgstr "Activer la notification par courriel des utilisateurs" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" #: ../comment.py:52 -#, fuzzy msgid "mail_notification_message" -msgstr "Un commentaire a été ajouté sur '${title}' à cette addresse : ${link}" +msgstr "Un commentaire a été ajouté sur '${title}' à cette addresse : ${link}\n\n---\n${text}\n---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" #: ../comment.py:60 msgid "mail_notification_message_moderator" -msgstr "" +msgstr "Un commentaire a été ajouté sur '${title}' à cette addresse : ${link}\n\n---\n${text}\n---\n\nApprover le commentaire :\n${link_approve}\n\nSupprimer le commentaire :\n${link_delete}\n" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 From 56bba54fd994c8def1310329e645f9d1814629e5 Mon Sep 17 00:00:00 2001 From: Eric Steele Date: Thu, 23 May 2013 21:23:06 -0400 Subject: [PATCH 082/254] Preparing release 2.2.6 --- CHANGES.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 932e328..3d8f074 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,7 @@ Changelog ========= -2.2.6 (unreleased) +2.2.6 (2013-05-23) ------------------ - Fix migration to not fail when member has been deleted. diff --git a/setup.py b/setup.py index 5f005fb..e95fbe9 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.6.dev0' +version = '2.2.6' install_requires = [ 'setuptools', From 124aeb55d667acf34df5e809d6abfbd4488447a7 Mon Sep 17 00:00:00 2001 From: Eric Steele Date: Thu, 23 May 2013 21:25:49 -0400 Subject: [PATCH 083/254] Back to development: 2.2.7 --- CHANGES.txt | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 3d8f074..7729832 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,12 @@ Changelog ========= +2.2.7 (unreleased) +------------------ + +- Nothing changed yet. + + 2.2.6 (2013-05-23) ------------------ diff --git a/setup.py b/setup.py index e95fbe9..8494097 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.6' +version = '2.2.7.dev0' install_requires = [ 'setuptools', From 1946991928c7d5e3d9a488e35b0c47812a5c67b9 Mon Sep 17 00:00:00 2001 From: Paul J Stevens Date: Tue, 4 Jun 2013 09:18:40 -0400 Subject: [PATCH 084/254] fix regression introduced by 702f7e1f1d7c2d50621f2f326c185ddb2034d174 --- plone/app/discussion/comment.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plone/app/discussion/comment.py b/plone/app/discussion/comment.py index 9d9b1e1..df81bf7 100644 --- a/plone/app/discussion/comment.py +++ b/plone/app/discussion/comment.py @@ -93,7 +93,7 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable, title = u"" - mime_type = "text/plain" + mime_type = None text = u"" creator = None @@ -113,6 +113,7 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable, def __init__(self): self.creation_date = self.modification_date = datetime.utcnow() + self.mime_type = 'text/plain' @property def __name__(self): From 52c6372664f1aca583a4e9af4206ac09c1ba2647 Mon Sep 17 00:00:00 2001 From: Paul J Stevens Date: Tue, 16 Apr 2013 10:12:04 +0000 Subject: [PATCH 085/254] fix deprecation warning --- plone/app/discussion/tests/test_catalog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plone/app/discussion/tests/test_catalog.py b/plone/app/discussion/tests/test_catalog.py index d85c8fc..5cb26a7 100644 --- a/plone/app/discussion/tests/test_catalog.py +++ b/plone/app/discussion/tests/test_catalog.py @@ -549,7 +549,7 @@ class CommentCatalogTest(unittest.TestCase): 'v': 'Comment', }] - self.assertEqual(len(collection.results()), 1) + self.assertEqual(collection.results().length, 1) self.assertEqual(collection.results()[0].text, 'Comment text') self.assertEqual(collection.results()[0].creator, 'jim') self.assertEqual(collection.results()[0].author_name, 'Jim') From 7716fb0b8222890c3aa1b52332b89b78bfefd8e4 Mon Sep 17 00:00:00 2001 From: Paul J Stevens Date: Thu, 13 Jun 2013 06:34:31 -0400 Subject: [PATCH 086/254] update changelog --- CHANGES.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 7729832..f030412 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,7 +4,9 @@ Changelog 2.2.7 (unreleased) ------------------ -- Nothing changed yet. +- Revert change that silently added mime_type attribute values + to old discussion items that had none. + [pjstevns] 2.2.6 (2013-05-23) From fa7a1acd6457ddffd8686e6a61e32053f4ee1f1f Mon Sep 17 00:00:00 2001 From: Andreas Zeidler Date: Thu, 15 Aug 2013 00:00:42 +0200 Subject: [PATCH 087/254] add buildout configuration for standalone testing --- buildout.cfg | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 buildout.cfg diff --git a/buildout.cfg b/buildout.cfg new file mode 100644 index 0000000..60544df --- /dev/null +++ b/buildout.cfg @@ -0,0 +1,7 @@ +[buildout] +extends = https://raw.github.com/collective/buildout.plonetest/master/test-4.3.x.cfg +package-name = plone.app.discussion +package-extras = [test] + +[versions] +plone.app.discussion = From b02778939127f43446726204e62779befc8d7d07 Mon Sep 17 00:00:00 2001 From: Andreas Zeidler Date: Thu, 15 Aug 2013 00:01:22 +0200 Subject: [PATCH 088/254] prevent the viewlet from raising an error for objects that are not annotatable --- plone/app/discussion/browser/comments.py | 5 ++++- plone/app/discussion/tests/test_comments_viewlet.py | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/plone/app/discussion/browser/comments.py b/plone/app/discussion/browser/comments.py index 529df18..bcf5dbe 100644 --- a/plone/app/discussion/browser/comments.py +++ b/plone/app/discussion/browser/comments.py @@ -358,7 +358,10 @@ class CommentsViewlet(ViewletBase): returned with workflow actions. """ context = aq_inner(self.context) - conversation = IConversation(context) + conversation = IConversation(context, None) + + if conversation is None: + return iter([]) wf = getToolByName(context, 'portal_workflow') diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index 1844b28..8b742c8 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -370,6 +370,14 @@ class TestCommentsViewlet(unittest.TestCase): replies.next() self.assertRaises(StopIteration, replies.next) + def test_get_replies_on_non_annotatable_object(self): + context = self.portal.MailHost # the mail host is not annotatable + viewlet = CommentsViewlet(context, self.request, None, None) + replies = viewlet.get_replies() + self.assertEqual(len(tuple(replies)), 0) + replies = viewlet.get_replies() + self.assertRaises(StopIteration, replies.next) + def test_get_replies_with_workflow_actions(self): self.assertFalse(self.viewlet.get_replies(workflow_actions=True)) comment = createObject('plone.Comment') From 04d57ca5db8fa1349f32b3c81608ad524797481d Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Mon, 19 Aug 2013 14:23:55 +0200 Subject: [PATCH 089/254] Update README.rst Refined confusing info about Plone versions. --- README.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index e48123f..3b5b627 100644 --- a/README.rst +++ b/README.rst @@ -28,8 +28,8 @@ Requirements Plone 3.3 or later. -Plone 3.x Buildout Installation -=============================== +Plone 3.3.x Buildout Installation +================================= To install plone.app.discussion, add the following code to your buildout.cfg:: @@ -55,7 +55,7 @@ To install plone.app.discussion, add the following code to your buildout.cfg:: ... -Plone 4.x Buildout Installation +Plone 4.0 Buildout Installation =============================== To install plone.app.discussion, add the following code to your buildout.cfg:: From 4dc5177fdda8414089e7644b7c84b3134773dc6d Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Tue, 20 Aug 2013 10:27:19 +0200 Subject: [PATCH 090/254] Add CHANGES entry for latest pull request merge. --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index f030412..f24bfca 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,9 @@ Changelog 2.2.7 (unreleased) ------------------ +- Fix comments viewlet's get_replies for non-annotatable objects. + [witsch] + - Revert change that silently added mime_type attribute values to old discussion items that had none. [pjstevns] From 1903008c7672b387d9947074342d492dbbe8b203 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Tue, 20 Aug 2013 10:44:36 +0200 Subject: [PATCH 091/254] Prepare 2.2.7 release. --- CHANGES.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index f24bfca..776e92a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,7 @@ Changelog ========= -2.2.7 (unreleased) +2.2.7 (2013-08-20) ------------------ - Fix comments viewlet's get_replies for non-annotatable objects. diff --git a/setup.py b/setup.py index 8494097..eb7b6a7 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.7.dev0' +version = '2.2.7' install_requires = [ 'setuptools', From f094a29f91196eb3ca7fba7579b3801ec61bcd50 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Tue, 20 Aug 2013 14:19:23 +0200 Subject: [PATCH 092/254] Prepare 2.2.8 release. --- CHANGES.txt | 9 +++++++++ setup.py | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 776e92a..e1b48a0 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,15 @@ Changelog ========= +2.2.8 (2013-08-20) +------------------ + +- Re-release 2.2.7 with .mo files. Seems like 2.2.7 has been released twice on + two different dates. The first release seems to be made without a github + push. + [timo] + + 2.2.7 (2013-08-20) ------------------ diff --git a/setup.py b/setup.py index eb7b6a7..e7ba384 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.7' +version = '2.2.8' install_requires = [ 'setuptools', From 12d9152ae94775a816fb6dfe42f416b82d697b8e Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Tue, 20 Aug 2013 14:22:30 +0200 Subject: [PATCH 093/254] Use latest bootstrap. --- bootstrap.py | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/bootstrap.py b/bootstrap.py index ec3757a..1b28969 100644 --- a/bootstrap.py +++ b/bootstrap.py @@ -18,7 +18,11 @@ The script accepts buildout command-line options, so you can use the -c option to specify an alternate configuration file. """ -import os, shutil, sys, tempfile +import os +import shutil +import sys +import tempfile + from optparse import OptionParser tmpeggs = tempfile.mkdtemp() @@ -31,8 +35,8 @@ Bootstraps a buildout-based project. Simply run this script in a directory containing a buildout.cfg, using the Python that you want bin/buildout to use. -Note that by using --setup-source and --download-base to point to -local resources, you can keep this script from going over the network. +Note that by using --find-links to point to local resources, you can keep +this script from going over the network. ''' parser = OptionParser(usage=usage) @@ -48,23 +52,21 @@ parser.add_option("-t", "--accept-buildout-test-releases", "bootstrap and buildout will get the newest releases " "even if they are alphas or betas.")) parser.add_option("-c", "--config-file", - help=("Specify the path to the buildout configuration " - "file to be used.")) + help=("Specify the path to the buildout configuration " + "file to be used.")) parser.add_option("-f", "--find-links", - help=("Specify a URL to search for buildout releases")) + help=("Specify a URL to search for buildout releases")) options, args = parser.parse_args() ###################################################################### -# load/install distribute +# load/install setuptools to_reload = False try: - import pkg_resources, setuptools - if not hasattr(pkg_resources, '_distribute'): - to_reload = True - raise ImportError + import pkg_resources + import setuptools except ImportError: ez = {} @@ -73,8 +75,10 @@ except ImportError: except ImportError: from urllib2 import urlopen - exec(urlopen('http://python-distribute.org/distribute_setup.py').read(), ez) - setup_args = dict(to_dir=tmpeggs, download_delay=0, no_fake=True) + # XXX use a more permanent ez_setup.py URL when available. + exec(urlopen('https://bitbucket.org/pypa/setuptools/raw/0.7.2/ez_setup.py' + ).read(), ez) + setup_args = dict(to_dir=tmpeggs, download_delay=0) ez['use_setuptools'](**setup_args) if to_reload: @@ -89,7 +93,7 @@ except ImportError: ###################################################################### # Install buildout -ws = pkg_resources.working_set +ws = pkg_resources.working_set cmd = [sys.executable, '-c', 'from setuptools.command.easy_install import main; main()', @@ -104,8 +108,8 @@ find_links = os.environ.get( if find_links: cmd.extend(['-f', find_links]) -distribute_path = ws.find( - pkg_resources.Requirement.parse('distribute')).location +setuptools_path = ws.find( + pkg_resources.Requirement.parse('setuptools')).location requirement = 'zc.buildout' version = options.version @@ -113,13 +117,14 @@ if version is None and not options.accept_buildout_test_releases: # Figure out the most recent final version of zc.buildout. import setuptools.package_index _final_parts = '*final-', '*final' + def _final_version(parsed_version): for part in parsed_version: if (part[:1] == '*') and (part not in _final_parts): return False return True index = setuptools.package_index.PackageIndex( - search_path=[distribute_path]) + search_path=[setuptools_path]) if find_links: index.add_find_links((find_links,)) req = pkg_resources.Requirement.parse(requirement) @@ -142,7 +147,7 @@ if version: cmd.append(requirement) import subprocess -if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=distribute_path)) != 0: +if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=setuptools_path)) != 0: raise Exception( "Failed to execute command:\n%s", repr(cmd)[1:-1]) From 8820def72b3bcf95cfd6715256146d7e2683b8ac Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Tue, 20 Aug 2013 14:22:52 +0200 Subject: [PATCH 094/254] Add jarn.mkrelease and zest.pocompile to buildout. Pin zope.interface to 3.6.1 --- buildout.cfg | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/buildout.cfg b/buildout.cfg index 60544df..256c928 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -2,6 +2,19 @@ extends = https://raw.github.com/collective/buildout.plonetest/master/test-4.3.x.cfg package-name = plone.app.discussion package-extras = [test] +parts += + mkrelease + pocompile + +[mkrelease] +recipe = zc.recipe.egg +eggs = jarn.mkrelease + +[pocompile] +recipe = zc.recipe.egg +eggs = zest.pocompile [versions] plone.app.discussion = +zope.interface = 3.6.1 + From 1b0ed27b98c29af54418ec6102296958f2b972b6 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Tue, 20 Aug 2013 14:24:35 +0200 Subject: [PATCH 095/254] Include the CHANGE notes from garbas which haven't been pushed to github. --- CHANGES.txt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index e1b48a0..71cf5b7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -9,13 +9,16 @@ Changelog push. [timo] - -2.2.7 (2013-08-20) ------------------- - - Fix comments viewlet's get_replies for non-annotatable objects. [witsch] + +2.2.7 (2013-07-04) +------------------ + +- making sure .mo files are present at release + [garbas] + - Revert change that silently added mime_type attribute values to old discussion items that had none. [pjstevns] From ba7a6d26aa9cbcb7fba195bdc5f6cbc81d83f19a Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Tue, 20 Aug 2013 14:33:03 +0200 Subject: [PATCH 096/254] Back to development. --- CHANGES.txt | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 71cf5b7..5f3850b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,12 @@ Changelog ========= +2.2.9 (unreleased) +------------------ + +- Nothing changed yet. + + 2.2.8 (2013-08-20) ------------------ diff --git a/setup.py b/setup.py index e7ba384..224d547 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.8' +version = '2.2.9dev' install_requires = [ 'setuptools', From 0d18a6dd5722e6cd7e0278a85fdf8260dba053a6 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Tue, 20 Aug 2013 14:34:13 +0200 Subject: [PATCH 097/254] Rename CHANGES.txt to CHANGES.rst. --- CHANGES.txt => CHANGES.rst | 3 ++- setup.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) rename CHANGES.txt => CHANGES.rst (99%) diff --git a/CHANGES.txt b/CHANGES.rst similarity index 99% rename from CHANGES.txt rename to CHANGES.rst index 5f3850b..41f39d6 100644 --- a/CHANGES.txt +++ b/CHANGES.rst @@ -4,7 +4,8 @@ Changelog 2.2.9 (unreleased) ------------------ -- Nothing changed yet. +- Rename CHANGES.txt to CHANGES.rst. + [timo] 2.2.8 (2013-08-20) diff --git a/setup.py b/setup.py index 224d547..52b646f 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ setup(name='plone.app.discussion', version=version, description="Enhanced discussion support for Plone", long_description=open("README.rst").read() + "\n" + - open("CHANGES.txt").read(), + open("CHANGES.rst").read(), classifiers=[ "Framework :: Plone", "Framework :: Plone :: 3.3", From bde1a1a44ad9dd84e347b27f80f55a4f83280da5 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Tue, 20 Aug 2013 15:37:56 +0200 Subject: [PATCH 098/254] fix reindexObject for comment container object --- CHANGES.txt | 2 ++ plone/app/discussion/browser/moderation.py | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index f030412..f1cac7b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -8,6 +8,8 @@ Changelog to old discussion items that had none. [pjstevns] +- Fix reindexObject for content_object in moderation views. + Now reindex only "total_comments" index and not all the indexes [cekk] 2.2.6 (2013-05-23) ------------------ diff --git a/plone/app/discussion/browser/moderation.py b/plone/app/discussion/browser/moderation.py index aa7bb91..f4d8bc5 100644 --- a/plone/app/discussion/browser/moderation.py +++ b/plone/app/discussion/browser/moderation.py @@ -95,7 +95,7 @@ class DeleteComment(BrowserView): conversation = aq_parent(comment) content_object = aq_parent(conversation) del conversation[comment.id] - content_object.reindexObject() + content_object.reindexObject(idxs=['total_comments']) IStatusMessage(self.context.REQUEST).addStatusMessage( _("Comment deleted."), type="info") @@ -135,7 +135,7 @@ class PublishComment(BrowserView): if current_state != 'published': workflowTool.doActionFor(comment, 'publish') comment.reindexObject() - content_object.reindexObject() + content_object.reindexObject(idxs=['total_comments']) IStatusMessage(self.context.REQUEST).addStatusMessage( _("Comment approved."), type="info") @@ -208,7 +208,7 @@ class BulkActionsView(BrowserView): if current_state != 'published': workflowTool.doActionFor(comment, 'publish') comment.reindexObject() - content_object.reindexObject() + content_object.reindexObject(idxs=['total_comments']) def mark_as_spam(self): raise NotImplementedError @@ -227,4 +227,4 @@ class BulkActionsView(BrowserView): conversation = aq_parent(comment) content_object = aq_parent(conversation) del conversation[comment.id] - content_object.reindexObject() + content_object.reindexObject(idxs=['total_comments']) From 34bbd398299df488422f1d993a47593045f8c8d1 Mon Sep 17 00:00:00 2001 From: JeanMichel FRANCOIS Date: Wed, 21 Aug 2013 11:07:48 +0200 Subject: [PATCH 099/254] fix: add form serialized data to the delete comment ajax form submit Even if in fresh Plone there is no data, I'm in a case where I'm adding 'ajax' marker in the form to not render all the page (which is the case here) and the render is not used at all except if the action do not happens in ajax. --- CHANGES.rst | 2 ++ plone/app/discussion/browser/javascripts/comments.js | 1 + 2 files changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 41f39d6..5d9f16f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -7,6 +7,8 @@ Changelog - Rename CHANGES.txt to CHANGES.rst. [timo] +- Fix ajax form submit for delete comment action: add 'data' to the request. + [toutpt] 2.2.8 (2013-08-20) ------------------ diff --git a/plone/app/discussion/browser/javascripts/comments.js b/plone/app/discussion/browser/javascripts/comments.js index 9678c6d..25accda 100644 --- a/plone/app/discussion/browser/javascripts/comments.js +++ b/plone/app/discussion/browser/javascripts/comments.js @@ -177,6 +177,7 @@ $.ajax({ type: 'POST', url: form_url, + data: data, context: $(trigger).parents(".comment"), success: function (data) { var comment = $(this); From 645bbb0a95dfd2f89304b7d45aff119a5f5995ff Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Mon, 26 Aug 2013 14:49:26 +0200 Subject: [PATCH 100/254] typo: renamed 'annotions' to 'annotations' --- plone/app/discussion/conversation.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plone/app/discussion/conversation.py b/plone/app/discussion/conversation.py index 4ec6c75..ba27c0f 100644 --- a/plone/app/discussion/conversation.py +++ b/plone/app/discussion/conversation.py @@ -306,12 +306,12 @@ def conversationAdapterFactory(content): """ Adapter factory to fetch the default conversation from annotations. """ - annotions = IAnnotations(content) - if not ANNOTATION_KEY in annotions: + annotations = IAnnotations(content) + if not ANNOTATION_KEY in annotations: conversation = Conversation() conversation.__parent__ = aq_base(content) else: - conversation = annotions[ANNOTATION_KEY] + conversation = annotations[ANNOTATION_KEY] return conversation.__of__(content) From 9049368cbaa4cd2be0df81c5cb5cceef75228fd1 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 29 Aug 2013 22:20:47 +0200 Subject: [PATCH 101/254] Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of the PLONE_FIXTURE. This fixes all test p.a.discussion test failures. --- plone/app/discussion/testing.py | 4 +- .../tests/collection-integration-test.txt | 93 ++++++++++++ ...unctional_test_comment_review_workflow.txt | 18 ++- .../tests/functional_test_comments.txt | 142 ++++-------------- .../discussion/tests/test_comments_viewlet.py | 5 +- .../app/discussion/tests/test_conversation.py | 133 +--------------- setup.py | 1 + 7 files changed, 149 insertions(+), 247 deletions(-) create mode 100644 plone/app/discussion/tests/collection-integration-test.txt diff --git a/plone/app/discussion/testing.py b/plone/app/discussion/testing.py index 400ab9c..cf1066c 100644 --- a/plone/app/discussion/testing.py +++ b/plone/app/discussion/testing.py @@ -2,7 +2,7 @@ from Products.CMFCore.utils import getToolByName from plone.app.testing import PloneSandboxLayer from plone.app.testing import applyProfile -from plone.app.testing import PLONE_FIXTURE +from plone.app.contenttypes.testing import PLONE_APP_CONTENTTYPES_FIXTURE from plone.app.testing import IntegrationTesting from plone.app.testing import FunctionalTesting @@ -17,7 +17,7 @@ except: class PloneAppDiscussion(PloneSandboxLayer): - defaultBases = (PLONE_FIXTURE,) + defaultBases = (PLONE_APP_CONTENTTYPES_FIXTURE,) USER_NAME = 'johndoe' USER_PASSWORD = 'secret' diff --git a/plone/app/discussion/tests/collection-integration-test.txt b/plone/app/discussion/tests/collection-integration-test.txt new file mode 100644 index 0000000..ac1ea22 --- /dev/null +++ b/plone/app/discussion/tests/collection-integration-test.txt @@ -0,0 +1,93 @@ +XXX: This functional test part has been removed due to the removal of +ATContentTypes from PLONE_FIXTURE. We have to rewrite this test as a robot +test because the dexterity collections do not work without js. + + +List comments in a collection +----------------------------- + +Create a collection. + + >>> from plone.app.testing import setRoles + >>> from plone.app.testing import TEST_USER_NAME + >>> setRoles(portal, 'manager', ['Manager']) + >>> browser.open(portal.absolute_url()) + >>> from plone.app.discussion.testing import COLLECTION_TYPE + >>> browser.getLink(url='++add++' + COLLECTION_TYPE).click() + >>> open('/tmp/testbrowser.html', 'w').write(browser.contents) + >>> import pdb; pdb.set_trace() + >>> browser.getControl('form.widgets.IDublinCore.title').value = 'Foo Comment Collection' + >>> browser.getControl('Save').click() + >>> print browser.contents + <...Changes saved... + >>> topic_url = browser.url + +Set the collection criteria. + + >>> browser.open(topic_url + "/edit") + + >>> if COLLECTION_TYPE == "Collection": + ... browser.getControl(name="addindex").value = ['portal_type'] + ... browser.getControl(name="form.button.addcriteria").click() + ... browser.getControl(name="addoperator").value = ['plone.app.querystring.operation.selection.is'] + ... browser.getControl(name="form.button.addcriteria").click() + ... browser.getControl(name="query.v:records:list").value = ["Discussion Item"] + ... browser.getControl(name="form.button.save").click() + ... else: + ... browser.getLink('Criteria').click() + ... browser.getControl('Item Type', index=0).selected = True + ... browser.getControl('Select content types').selected = True + ... browser.getControl('Add criteria').click() + ... browser.getControl('Comment').selected = True + ... browser.getControl('Save', index=0).click() + >>> print browser.contents + <...Changes saved... + +View the collection listing. + + >>> browser.getLink('View').click() + >>> browser.getLink('admin on Doc1', index=0) + + >>> browser.getLink('admin on Doc1', index=1) + + >>> browser.getLink('Anonymous on Doc1', index=0) + + >>> browser.getLink('Anonymous on Doc1', index=1) + + >>> browser.getLink(tarek_fullname + ' on Doc1') + + >>> browser.getLink(jim_fullname + ' on Doc1') + + +Comments are unindexed when the content is deleted +-------------------------------------------------- + +Delete the commented content. + + >>> browser.open(urldoc1) + >>> browser.getLink('Delete').click() + >>> browser.getControl('Delete').click() + >>> print browser.contents + <...Doc1 has been deleted... + +The comments are no longer in the catalog. + + >>> browser.open(topic_url) + >>> browser.getLink('admin on Doc1', index=0) + Traceback (most recent call last): + LinkNotFoundError + >>> browser.getLink('admin on Doc1', index=1) + Traceback (most recent call last): + LinkNotFoundError + >>> browser.getLink('Anonymous on Doc1', index=0) + Traceback (most recent call last): + LinkNotFoundError + >>> browser.getLink('Anonymous on Doc1', index=1) + Traceback (most recent call last): + LinkNotFoundError + >>> browser.getLink(tarek_fullname + ' on Doc1') + Traceback (most recent call last): + LinkNotFoundError + >>> browser.getLink(jim_fullname + ' on Doc1') + Traceback (most recent call last): + LinkNotFoundError diff --git a/plone/app/discussion/tests/functional_test_comment_review_workflow.txt b/plone/app/discussion/tests/functional_test_comment_review_workflow.txt index 6e03a4f..069875e 100644 --- a/plone/app/discussion/tests/functional_test_comment_review_workflow.txt +++ b/plone/app/discussion/tests/functional_test_comment_review_workflow.txt @@ -33,6 +33,7 @@ We also keep another testbrowser handy for testing how tiles are rendered if you're not logged in:: >>> unprivileged_browser = Browser(app) + >>> unprivileged_browser.handleErrors = False Enable commenting. @@ -61,22 +62,28 @@ We need to commit the transaction, otherwise setting the workflow will not work. Enable anonymous comments >>> browser.open(portal_url+'/@@discussion-settings') - >>> browser.getControl(name='form.widgets.anonymous_comments:list').value = [True] + >>> browser.getControl(name='form.widgets.anonymous_comments:list').value = True >>> browser.getControl(name='form.buttons.save').click() Create a public page with comments allowed. >>> browser.open(portal_url) >>> browser.getLink(id='document').click() - >>> browser.getControl(name='title').value = "Doc" - >>> browser.getControl(name='allowDiscussion:boolean').value = True - >>> browser.getControl(name='form.button.save').click() + >>> browser.getControl(name='form.widgets.IDublinCore.title').value = "Doc" + >>> browser.getControl(name='form.widgets.IAllowDiscussion.allow_discussion:list').value = ['True'] + >>> browser.getControl('Save').click() >>> urldoc = browser.url Check that the form has been properly submitted >>> browser.url - 'http://nohost/plone/doc' + 'http://nohost/plone/doc/view' + +Make sure the document is published: + + >>> browser.getLink("Publish").click() + >>> 'Published' in browser.contents + True Post some comments as anonymous user: @@ -223,4 +230,3 @@ Make sure the catalog has been updated properly. >>> portal.portal_catalog.searchResults(id='doc', total_comments=0) [>> unprivileged_browser = Browser(app) + >>> browser_member = Browser(app) + >>> browser_user = Browser(app) Make sure we have a test user from the layer and it uses fancy characters: @@ -55,11 +57,17 @@ Create a public page with comments allowed. >>> browser.open(portal_url) >>> browser.getLink(id='document').click() - >>> browser.getControl(name='title').value = "Doc1" - >>> browser.getControl(name='allowDiscussion:boolean').value = True - >>> browser.getControl(name='form.button.save').click() + >>> browser.getControl(name='form.widgets.IDublinCore.title').value = "Doc1" + >>> browser.getControl(name='form.widgets.IAllowDiscussion.allow_discussion:list').value = ['True'] + >>> browser.getControl('Save').click() >>> urldoc1 = browser.url +Make sure the document is published: + + >>> browser.getLink("Publish").click() + >>> 'Published' in browser.contents + True + Check that the form has been properly submitted >>> browser.url @@ -115,20 +123,19 @@ Post a comment as user Login as user (without the 'Member' role). - >>> browser.open(portal_url + '/logout') - >>> browser.open(portal_url + '/login_form') - >>> browser.getControl(name='__ac_name').value = 'johndoe' - >>> browser.getControl(name='__ac_password').value = 'secret' - >>> browser.getControl(name='submit').click() + >>> browser_user.open(portal_url + '/login_form') + >>> browser_user.getControl(name='__ac_name').value = 'johndoe' + >>> browser_user.getControl(name='__ac_password').value = 'secret' + >>> browser_user.getControl(name='submit').click() Users without the 'Reply to item' permission will not see the comment form, because they don't have the 'Reply to item' permission. By default, this permission is only granted to the 'Member' role. - >>> 'form.widgets.text' in browser.contents + >>> 'form.widgets.text' in browser_user.contents False - >>> 'form.buttons.comment' in browser.contents + >>> 'form.buttons.comment' in browser_user.contents False @@ -137,25 +144,24 @@ Post a comment as member Login as user 'jim'. - >>> browser.open(portal_url + '/logout') - >>> browser.open(portal_url + '/login_form') - >>> browser.getControl(name='__ac_name').value = 'jim' - >>> browser.getControl(name='__ac_password').value = 'secret' - >>> browser.getControl(name='submit').click() + >>> browser_member.open(portal_url + '/login_form') + >>> browser_member.getControl(name='__ac_name').value = 'jim' + >>> browser_member.getControl(name='__ac_password').value = 'secret' + >>> browser_member.getControl(name='submit').click() Post a comment as user jim. - >>> browser.open(urldoc1) - >>> browser.getControl(name='form.widgets.text').value = "Comment from Jim" - >>> submit = browser.getControl(name='form.buttons.comment') + >>> browser_member.open(urldoc1) + >>> browser_member.getControl(name='form.widgets.text').value = "Comment from Jim" + >>> submit = browser_member.getControl(name='form.buttons.comment') >>> submit.click() Check if the comment has been added properly. - >>> browser.contents + >>> browser_member.contents '...Jim Fult\xc3\xb8rn...says:...' - >>> "Comment from Jim" in browser.contents + >>> "Comment from Jim" in browser_member.contents True @@ -285,7 +291,6 @@ This is a regression test for http://dev.plone.org/plone/ticket/11157 Login as admin. - >>> browser.open(portal_url + '/logout') >>> browser.open(portal_url + '/login_form') >>> browser.getControl(name='__ac_name').value = 'admin' >>> browser.getControl(name='__ac_password').value = 'secret' @@ -293,100 +298,11 @@ Login as admin. Edit the content object. - >>> browser.open(urldoc1 + "/edit") - >>> browser.getControl(name='text').value = "Lorem ipsum" - >>> browser.getControl(name='form.button.save').click() + >>> browser.open("http://nohost/plone/doc1/edit") + >>> browser.getControl(name='form.widgets.text').value = "Lorem ipsum" + >>> browser.getControl('Save').click() Make sure the edit was successful. >>> 'Lorem ipsum' in browser.contents True - - -List comments in a collection ------------------------------ - -Create a collection. - - >>> from plone.app.testing import setRoles - >>> from plone.app.testing import TEST_USER_NAME - >>> setRoles(portal, 'manager', ['Manager']) - >>> browser.open(portal.absolute_url()) - >>> from plone.app.discussion.testing import COLLECTION_TYPE - >>> browser.getLink(url='createObject?type_name=' + COLLECTION_TYPE).click() - >>> browser.getControl('Title', index=0 - ... ).value = 'Foo Comment Collection' - >>> browser.getControl('Save').click() - >>> print browser.contents - <...Changes saved... - >>> topic_url = browser.url - -Set the collection criteria. - - >>> browser.open(topic_url + "/edit") - - >>> if COLLECTION_TYPE == "Collection": - ... browser.getControl(name="addindex").value = ['portal_type'] - ... browser.getControl(name="form.button.addcriteria").click() - ... browser.getControl(name="addoperator").value = ['plone.app.querystring.operation.selection.is'] - ... browser.getControl(name="form.button.addcriteria").click() - ... browser.getControl(name="query.v:records:list").value = ["Discussion Item"] - ... browser.getControl(name="form.button.save").click() - ... else: - ... browser.getLink('Criteria').click() - ... browser.getControl('Item Type', index=0).selected = True - ... browser.getControl('Select content types').selected = True - ... browser.getControl('Add criteria').click() - ... browser.getControl('Comment').selected = True - ... browser.getControl('Save', index=0).click() - >>> print browser.contents - <...Changes saved... - -View the collection listing. - - >>> browser.getLink('View').click() - >>> browser.getLink('admin on Doc1', index=0) - - >>> browser.getLink('admin on Doc1', index=1) - - >>> browser.getLink('Anonymous on Doc1', index=0) - - >>> browser.getLink('Anonymous on Doc1', index=1) - - >>> browser.getLink(tarek_fullname + ' on Doc1') - - >>> browser.getLink(jim_fullname + ' on Doc1') - - -Comments are unindexed when the content is deleted --------------------------------------------------- - -Delete the commented content. - - >>> browser.open(urldoc1) - >>> browser.getLink('Delete').click() - >>> browser.getControl('Delete').click() - >>> print browser.contents - <...Doc1 has been deleted... - -The comments are no longer in the catalog. - - >>> browser.open(topic_url) - >>> browser.getLink('admin on Doc1', index=0) - Traceback (most recent call last): - LinkNotFoundError - >>> browser.getLink('admin on Doc1', index=1) - Traceback (most recent call last): - LinkNotFoundError - >>> browser.getLink('Anonymous on Doc1', index=0) - Traceback (most recent call last): - LinkNotFoundError - >>> browser.getLink('Anonymous on Doc1', index=1) - Traceback (most recent call last): - LinkNotFoundError - >>> browser.getLink(tarek_fullname + ' on Doc1') - Traceback (most recent call last): - LinkNotFoundError - >>> browser.getLink(jim_fullname + ' on Doc1') - Traceback (most recent call last): - LinkNotFoundError diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index 8b742c8..9c3fb22 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -59,6 +59,8 @@ class TestCommentForm(unittest.TestCase): typetool = self.portal.portal_types typetool.constructContent('Document', self.portal, 'doc1') + wftool = getToolByName(self.portal, "portal_workflow") + wftool.doActionFor(self.portal.doc1, action='publish') self.discussionTool = getToolByName( self.portal, 'portal_discussion', @@ -536,7 +538,8 @@ class TestCommentsViewlet(unittest.TestCase): *time.gmtime(time.mktime(python_time.timetuple()))[:7] ) localized_time = self.viewlet.format_time(python_time) - self.assertEqual(localized_time, 'Feb 01, 2009 11:32 PM') + self.assertTrue( + localized_time in ['Feb 01, 2009 11:32 PM', '2009-02-01 23:32']) def test_suite(): diff --git a/plone/app/discussion/tests/test_conversation.py b/plone/app/discussion/tests/test_conversation.py index 58e7094..59bca9d 100644 --- a/plone/app/discussion/tests/test_conversation.py +++ b/plone/app/discussion/tests/test_conversation.py @@ -197,102 +197,16 @@ class ConversationTest(unittest.TestCase): self.assertEqual(len(tuple(conversation.getThreads())), 0) self.assertEqual(conversation.total_comments, 0) - def test_allow_discussion(self): - # This is not a real test! It's only there to understand the - # allow discussion attribute. Maybe we should remove this at - # some point. - - # 1) allow_discussion attribute: Every content object in Plone - # has a allow_discussion attribute. By default it is set to None. - - # Create a conversation. - IConversation(self.portal.doc1) - - # By default, discussion is disabled for all content types - portal_types = getToolByName(self.portal, 'portal_types') - for type in list(portal_types): - type_fti = getattr(portal_types, type) - if type not in BAD_TYPES: - if type != 'Discussion Item': - self.assertFalse(type_fti.allowDiscussion()) - - # By default, allow_discussion on newly created content objects is - # set to False - portal_discussion = getToolByName(self.portal, 'portal_discussion') - self.assertEqual( - portal_discussion.isDiscussionAllowedFor(self.portal.doc1), - False - ) - self.assertEqual( - self.portal.doc1.getTypeInfo().allowDiscussion(), - False - ) - - # The allow discussion flag is None by default - self.assertFalse(getattr(self.portal.doc1, 'allow_discussion', None)) - - # But isDiscussionAllowedFor, also checks if discussion is allowed on - # the content type. So we allow discussion on the Document content - # type and check if the Document object allows discussion now. - document_fti = getattr(portal_types, 'Document') - document_fti.manage_changeProperties(allow_discussion=True) - self.assertEqual( - portal_discussion.isDiscussionAllowedFor(self.portal.doc1), - True - ) - self.assertEqual( - self.portal.doc1.getTypeInfo().allowDiscussion(), - True - ) - - # We can also override the allow_discussion locally - self.portal_discussion.overrideDiscussionFor(self.portal.doc1, False) - # Check if the Document discussion is disabled - self.assertEqual( - portal_discussion.isDiscussionAllowedFor(self.portal.doc1), - False - ) - # Check that the local allow_discussion flag is now explicitly set to - # False - self.assertEqual( - getattr(self.portal.doc1, 'allow_discussion', None), - False - ) - - # Disallow discussion on the Document content type again - document_fti.manage_changeProperties(allow_discussion=False) - self.assertEqual( - portal_discussion.isDiscussionAllowedFor(self.portal.doc1), - False - ) - self.assertEqual( - self.portal.doc1.getTypeInfo().allowDiscussion(), - False - ) - - # Now we override allow_discussion again (True) for the Document - # content object - self.portal_discussion.overrideDiscussionFor(self.portal.doc1, True) - self.assertEqual( - portal_discussion.isDiscussionAllowedFor(self.portal.doc1), - True - ) - self.assertEqual( - getattr(self.portal.doc1, 'allow_discussion', None), - True - ) - def test_comments_enabled_on_doc_in_subfolder(self): typetool = self.portal.portal_types typetool.constructContent('Folder', self.portal, 'folder1') typetool.constructContent('Document', self.portal.folder1, 'doc2') folder = self.portal.folder1 - folder.allowDiscussion(False) - self.assertFalse(hasattr(aq_base(folder), 'allow_discussion')) - folder.allowDiscussion(True) + + folder.allow_discussion = True self.assertTrue(aq_base(folder).allow_discussion) - folder.allowDiscussion(False) + folder.allow_discussion = False self.assertFalse(aq_base(folder).allow_discussion) doc = self.portal.folder1.doc2 @@ -388,10 +302,11 @@ class ConversationTest(unittest.TestCase): self.assertEqual(conversation.enabled(), False) def test_allow_discussion_on_folder(self): - # The enabled method should always return False for the folder - # itself. + # The ATContentTypes based allow_discussion method did not allow to + # allow discussion on a folder. The dexerity behavior shipped with + # plone.app.contenttypes does not have this restriction any longer. - # Create a folderp + # Create a folder self.typetool.constructContent('Folder', self.portal, 'f1') f1 = self.portal.f1 # Usually we don't create a conversation on a folder @@ -405,39 +320,7 @@ class ConversationTest(unittest.TestCase): document_fti = getattr(portal_types, 'Folder') document_fti.manage_changeProperties(allow_discussion=True) - # Always return False - self.assertFalse(conversation.enabled()) - - def test_is_discussion_allowed_for_folder(self): - # When a content item provides IFolderish from CMF and - # does not provide INonStructuralFolder from Plone, - # allow_discussion acts as an on/off flag for all items - # in that folder, overriding settings for any parent folders, - # and the for the FTI, but is overridden by child items and - # folders further down. - - # Create a folder - self.typetool.constructContent('Folder', self.portal, 'f1') - f1 = self.portal.f1 - - # Create a document inside the folder - self.typetool.constructContent('Document', f1, 'doc1') - doc1 = self.portal.f1.doc1 - doc1_conversation = doc1.restrictedTraverse('@@conversation_view') - - self.assertEqual(doc1_conversation.enabled(), False) - - # Allow commenting for the folder - self.portal_discussion.overrideDiscussionFor(f1, True) - - # Check if the content objects allows discussion - self.assertEqual(doc1_conversation.enabled(), True) - - # Turn commenting for the folder off - self.portal_discussion.overrideDiscussionFor(f1, False) - - # Check if content objects do not allow discussion anymore - self.assertEqual(doc1_conversation.enabled(), False) + self.assertTrue(conversation.enabled()) def test_is_discussion_allowed_on_content_object(self): # Allow discussion on a single content object diff --git a/setup.py b/setup.py index 52b646f..a3f5d8b 100644 --- a/setup.py +++ b/setup.py @@ -52,6 +52,7 @@ setup(name='plone.app.discussion', 'test': [ 'plone.app.testing', 'interlude', + 'plone.app.contenttypes', ] }, entry_points=""" From 0463b20f78b2407482d87d916ec2baaee9f929b9 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Fri, 30 Aug 2013 10:00:21 +0200 Subject: [PATCH 102/254] Remove interlude from test dependencies. --- setup.py | 1 - 1 file changed, 1 deletion(-) diff --git a/setup.py b/setup.py index a3f5d8b..5385ab8 100644 --- a/setup.py +++ b/setup.py @@ -51,7 +51,6 @@ setup(name='plone.app.discussion', extras_require={ 'test': [ 'plone.app.testing', - 'interlude', 'plone.app.contenttypes', ] }, From e6172a219e6b3921eef74796a9ee89a97aa1cf61 Mon Sep 17 00:00:00 2001 From: "Guido A.J. Stevens" Date: Tue, 17 Sep 2013 12:03:46 +0000 Subject: [PATCH 103/254] Make comments editable --- CHANGES.rst | 4 ++ plone/app/discussion/browser/comment.py | 69 ++++++++++++++++++ plone/app/discussion/browser/comments.pt | 25 +++++-- plone/app/discussion/browser/comments.py | 15 +++- plone/app/discussion/browser/configure.zcml | 9 +++ plone/app/discussion/browser/controlpanel.py | 14 +++- .../browser/javascripts/comments.js | 9 +++ .../browser/javascripts/controlpanel.js | 2 + .../browser/stylesheets/discussion.css | 6 ++ plone/app/discussion/comment.py | 11 ++- plone/app/discussion/configure.zcml | 11 +++ plone/app/discussion/interfaces.py | 11 +++ plone/app/discussion/permissions.zcml | 6 ++ .../discussion/profiles/default/metadata.xml | 2 +- .../discussion/profiles/default/registry.xml | 6 +- .../discussion/profiles/default/rolemap.xml | 6 ++ .../tests/functional_test_comments.txt | 71 +++++++++++++++++++ plone/app/discussion/tests/test_comment.py | 10 +++ .../discussion/tests/test_comments_viewlet.py | 69 +++++++++++++++++- .../app/discussion/tests/test_controlpanel.py | 16 +++++ 20 files changed, 359 insertions(+), 13 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 5d9f16f..fa12098 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,9 +1,13 @@ Changelog ========= + 2.2.9 (unreleased) ------------------ +- Make comments editable. + [pjstevns, gyst] + - Rename CHANGES.txt to CHANGES.rst. [timo] diff --git a/plone/app/discussion/browser/comment.py b/plone/app/discussion/browser/comment.py index 97eec23..03e0732 100644 --- a/plone/app/discussion/browser/comment.py +++ b/plone/app/discussion/browser/comment.py @@ -1,8 +1,16 @@ from Acquisition import aq_inner, aq_parent +from AccessControl import getSecurityManager +from zope.component import getMultiAdapter +from Products.statusmessages.interfaces import IStatusMessage from Products.Five.browser import BrowserView from Products.CMFCore.utils import getToolByName +from plone.app.discussion import PloneAppDiscussionMessageFactory as _ +from comments import CommentForm +from z3c.form import button +from plone.z3cform.layout import wrap_form + class View(BrowserView): """Comment View. @@ -37,3 +45,64 @@ class View(BrowserView): url = "%s/view" % url self.request.response.redirect('%s#%s' % (url, context.id)) + + +class EditCommentForm(CommentForm): + """Form to edit an existing comment.""" + ignoreContext = True + id = "edit-comment-form" + label = _(u'edit_comment_form_title', default=u'Edit comment') + + def updateWidgets(self): + super(EditCommentForm, self).updateWidgets() + self.widgets['text'].value = self.context.text + # We have to rename the id, otherwise TinyMCE can't initialize + # because there are two textareas with the same id. + self.widgets['text'].id = 'overlay-comment-text' + + def _redirect(self, target=''): + if not target: + portal_state = getMultiAdapter((self.context, self.request), + name=u'plone_portal_state') + target = portal_state.portal_url() + self.request.response.redirect(target) + + @button.buttonAndHandler(_(u"edit_comment_form_button", + default=u"Edit comment"), name='comment') + def handleComment(self, action): + + # Validate form + data, errors = self.extractData() + if errors: + return + + # Check permissions + can_edit = getSecurityManager().checkPermission( + 'Edit comments', + self.context) + mtool = getToolByName(self.context, 'portal_membership') + if mtool.isAnonymousUser() or not can_edit: + return + + # Update text + self.context.text = data['text'] + + # Redirect to comment + IStatusMessage(self.request).add(_(u'comment_edit_notification', + default="Comment was edited"), + type='info') + return self._redirect( + target=self.action.replace("@@edit-comment", "@@view")) + + @button.buttonAndHandler(_(u'cancel_form_button', + default=u'Cancel'), name='cancel') + def handle_cancel(self, action): + IStatusMessage(self.request).add( + _(u'comment_edit_cancel_notification', + default=u'Edit comment cancelled'), + type='info') + return self._redirect(target=self.context.absolute_url()) + +EditComment = wrap_form(EditCommentForm) + +#EOF diff --git a/plone/app/discussion/browser/comments.pt b/plone/app/discussion/browser/comments.pt index c192e7a..203e813 100644 --- a/plone/app/discussion/browser/comments.pt +++ b/plone/app/discussion/browser/comments.pt @@ -1,6 +1,7 @@ @@ -42,14 +44,14 @@
- - +
+ +
+ +
+ + + *' + }) /********************************************************************** * Delete a comment and its answers. diff --git a/plone/app/discussion/browser/javascripts/controlpanel.js b/plone/app/discussion/browser/javascripts/controlpanel.js index ba32492..cc810fa 100644 --- a/plone/app/discussion/browser/javascripts/controlpanel.js +++ b/plone/app/discussion/browser/javascripts/controlpanel.js @@ -40,6 +40,7 @@ $.enableSettings([ $('#formfield-form-widgets-anonymous_comments'), $('#formfield-form-widgets-moderation_enabled'), + $('#formfield-form-widgets-edit_comment_enabled'), $('#formfield-form-widgets-text_transform'), $('#formfield-form-widgets-captcha'), $('#formfield-form-widgets-show_commenter_image'), @@ -52,6 +53,7 @@ $.disableSettings([ $('#formfield-form-widgets-anonymous_comments'), $('#formfield-form-widgets-moderation_enabled'), + $('#formfield-form-widgets-edit_comment_enabled'), $('#formfield-form-widgets-text_transform'), $('#formfield-form-widgets-captcha'), $('#formfield-form-widgets-show_commenter_image'), diff --git a/plone/app/discussion/browser/stylesheets/discussion.css b/plone/app/discussion/browser/stylesheets/discussion.css index a8ca7a5..3857836 100644 --- a/plone/app/discussion/browser/stylesheets/discussion.css +++ b/plone/app/discussion/browser/stylesheets/discussion.css @@ -223,3 +223,9 @@ .row .discussion label { font-weight:bold; } + +/* editing comments */ + +.overlay-edit-comment textarea { + height: 10em; +} \ No newline at end of file diff --git a/plone/app/discussion/comment.py b/plone/app/discussion/comment.py index df81bf7..b4bbc35 100644 --- a/plone/app/discussion/comment.py +++ b/plone/app/discussion/comment.py @@ -42,6 +42,7 @@ from Products.CMFCore.CMFCatalogAware import WorkflowAware from OFS.role import RoleManager from AccessControl import ClassSecurityInfo +from AccessControl.SecurityManagement import getSecurityManager from Products.CMFCore import permissions @@ -115,6 +116,14 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable, self.creation_date = self.modification_date = datetime.utcnow() self.mime_type = 'text/plain' + user = getSecurityManager().getUser() + if user and user.getId(): + aclpath = [x for x in user.getPhysicalPath() if x] + self._owner = (aclpath, user.getId(),) + self.__ac_local_roles__ = { + user.getId(): ['Owner'] + } + @property def __name__(self): return self.comment_id and unicode(self.comment_id) or None @@ -193,7 +202,7 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable, def Creator(self): """The name of the person who wrote the comment. """ - return self.creator + return self.creator or self.author_name security.declareProtected(permissions.View, 'Type') diff --git a/plone/app/discussion/configure.zcml b/plone/app/discussion/configure.zcml index ed82463..ee486c3 100644 --- a/plone/app/discussion/configure.zcml +++ b/plone/app/discussion/configure.zcml @@ -43,6 +43,17 @@ for="Products.CMFPlone.interfaces.IPloneSiteRoot" /> + + + diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index 46d430d..cdf662b 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -274,6 +274,17 @@ class IDiscussionSettings(Interface): default=False, ) + edit_comment_enabled = schema.Bool( + title=_(u"label_edit_comment_enabled", + default="Enable editing of comments"), + description=_(u"help_edit_comment_enabled", + default=u"If selected, supports editing and deletion " + "of comments for users with the 'Edit comments' " + "permission."), + required=False, + default=False, + ) + text_transform = schema.Choice( title=_(u"label_text_transform", default="Comment text transform"), diff --git a/plone/app/discussion/permissions.zcml b/plone/app/discussion/permissions.zcml index c5b090c..dd71e63 100644 --- a/plone/app/discussion/permissions.zcml +++ b/plone/app/discussion/permissions.zcml @@ -9,4 +9,10 @@ title="Review comments" /> + + + diff --git a/plone/app/discussion/profiles/default/metadata.xml b/plone/app/discussion/profiles/default/metadata.xml index ffedb11..7a20473 100644 --- a/plone/app/discussion/profiles/default/metadata.xml +++ b/plone/app/discussion/profiles/default/metadata.xml @@ -1,5 +1,5 @@ - 100 + 101 profile-plone.app.registry:default diff --git a/plone/app/discussion/profiles/default/registry.xml b/plone/app/discussion/profiles/default/registry.xml index fd2a894..2518c9a 100644 --- a/plone/app/discussion/profiles/default/registry.xml +++ b/plone/app/discussion/profiles/default/registry.xml @@ -1,4 +1,6 @@ - - \ No newline at end of file + + False + + diff --git a/plone/app/discussion/profiles/default/rolemap.xml b/plone/app/discussion/profiles/default/rolemap.xml index 83318d8..8e8b019 100644 --- a/plone/app/discussion/profiles/default/rolemap.xml +++ b/plone/app/discussion/profiles/default/rolemap.xml @@ -6,6 +6,12 @@ + + + + + + diff --git a/plone/app/discussion/tests/functional_test_comments.txt b/plone/app/discussion/tests/functional_test_comments.txt index 736da64..0ab4a61 100644 --- a/plone/app/discussion/tests/functional_test_comments.txt +++ b/plone/app/discussion/tests/functional_test_comments.txt @@ -250,6 +250,77 @@ Check that the reply has been posted properly. True +Edit an existing comment +------------------------ + +Log in as admin + + >>> browser.getLink('Log out').click() + >>> browser.open(portal_url + '/login_form') + >>> browser.getControl('Login Name').value = 'admin' + >>> browser.getControl('Password').value = 'secret' + >>> browser.getControl('Log in').click() + +Use the Plone control panel to enable comment editing. + + >>> browser.open(portal_url + '/plone_control_panel') + >>> browser.getLink('Discussion').click() + >>> browser.getControl('Enable editing of comments').selected = True + >>> browser.getControl(name='form.buttons.save').click() + +Extract the edit comment url from the first "edit comment" button + + >>> browser.open(urldoc1) + >>> form = browser.getForm(name='edit', index=0) + >>> '@@edit-comment' in form.action + True + +Open the edit comment view + + >>> browser.open(form.action) + >>> ctrl = browser.getControl('Comment') + >>> ctrl.value + 'Comment from admin' + +Change and save the comment + + >>> ctrl.value = 'Comment from admin / was edited' + >>> browser.getControl('Edit comment').click() + +This used to trigger permissions problems in some portlet configurations. +Check it ain't so. + + >>> 'require_login' in browser.url + False + >>> browser.url.startswith('http://nohost/plone/doc1') + True + >>> 'Comment from admin / was edited' in browser.contents + True + +Opening the edit comment view, then cancel, does nothing. + + >>> form = browser.getForm(name='edit', index=0) + >>> '@@edit-comment' in form.action + True + >>> browser.open(form.action) + >>> browser.getControl('Cancel').click() + >>> browser.url.startswith('http://nohost/plone/doc1') + True + + +Anon cannot edit comments. + + >>> unprivileged_browser.open(urldoc1) + >>> '@@edit-comments' in browser.contents + False + +But Anon can see the edited comment. + + >>> 'Comment from admin / was edited' in unprivileged_browser.contents + True + + + Post a comment with comment review workflow enabled --------------------------------------------------- diff --git a/plone/app/discussion/tests/test_comment.py b/plone/app/discussion/tests/test_comment.py index 1f39098..09bdea2 100644 --- a/plone/app/discussion/tests/test_comment.py +++ b/plone/app/discussion/tests/test_comment.py @@ -130,6 +130,16 @@ class CommentTest(unittest.TestCase): comment1.creator = "jim" self.assertEqual("jim", comment1.Creator()) + def test_creator_author_name(self): + comment1 = createObject('plone.Comment') + comment1.author_name = "joey" + self.assertEqual("joey", comment1.Creator()) + + def test_owner(self): + comment1 = createObject('plone.Comment') + self.assertEqual((['plone', 'acl_users'], TEST_USER_ID), + comment1.getOwnerTuple()) + def test_type(self): comment1 = createObject('plone.Comment') self.assertEqual(comment1.Type(), 'Comment') diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index 9c3fb22..7ed9da4 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -33,12 +33,14 @@ from plone.app.testing import login from plone.app.discussion.browser.comments import CommentsViewlet from plone.app.discussion.browser.comments import CommentForm +from plone.app.discussion.browser.comment import EditCommentForm from plone.app.discussion import interfaces from plone.app.discussion.interfaces import IConversation from plone.app.discussion.testing import ( PLONE_APP_DISCUSSION_INTEGRATION_TESTING ) from plone.app.discussion.interfaces import IDiscussionSettings +from plone.app.discussion.interfaces import IConversation class TestCommentForm(unittest.TestCase): @@ -125,6 +127,65 @@ class TestCommentForm(unittest.TestCase): self.assertEqual(len(errors), 0) self.assertFalse(commentForm.handleComment(commentForm, "foo")) + def test_edit_comment(self): + """Edit a comment as logged-in user. + """ + + # Allow discussion + self.discussionTool.overrideDiscussionFor(self.portal.doc1, True) + self.viewlet = CommentsViewlet(self.context, self.request, None, None) + + def make_request(form={}): + request = TestRequest() + request.form.update(form) + alsoProvides(request, IFormLayer) + alsoProvides(request, IAttributeAnnotatable) + return request + + provideAdapter( + adapts=(Interface, IBrowserRequest), + provides=Interface, + factory=CommentForm, + name=u"comment-form" + ) + + provideAdapter( + adapts=(Interface, IBrowserRequest), + provides=Interface, + factory=EditCommentForm, + name=u"edit-comment-form" + ) + + # The form is submitted successfully, if the required text field is + # filled out + request = make_request(form={'form.widgets.text': u'bar'}) + + commentForm = getMultiAdapter( + (self.context, request), + name=u"comment-form" + ) + commentForm.update() + data, errors = commentForm.extractData() # pylint: disable-msg=W0612 + + self.assertEqual(len(errors), 0) + self.assertFalse(commentForm.handleComment(commentForm, "foo")) + + # Edit the last comment + conversation = IConversation(self.context) + comment = [x for x in conversation.getComments()][-1] + request = make_request(form={'form.widgets.text': u'foobar'}) + editForm = getMultiAdapter( + (comment, request), + name=u"edit-comment-form" + ) + editForm.update() + data, errors = editForm.extractData() # pylint: disable-msg=W0612 + + self.assertEqual(len(errors), 0) + self.assertFalse(editForm.handleComment(editForm, "foo")) + comment = [x for x in conversation.getComments()][-1] + self.assertEquals(comment.text, u"foobar") + def test_add_anonymous_comment(self): self.discussionTool.overrideDiscussionFor(self.portal.doc1, True) @@ -459,9 +520,11 @@ class TestCommentsViewlet(unittest.TestCase): ) def test_get_commenter_portrait_is_none(self): - self.assertEqual( - self.viewlet.get_commenter_portrait(), - 'defaultUser.gif' + self.assertTrue( + self.viewlet.get_commenter_portrait() in ( + 'defaultUser.png', + 'defaultUser.gif', + ) ) def test_get_commenter_portrait_without_userimage(self): diff --git a/plone/app/discussion/tests/test_controlpanel.py b/plone/app/discussion/tests/test_controlpanel.py index a184bb7..ca56c0b 100644 --- a/plone/app/discussion/tests/test_controlpanel.py +++ b/plone/app/discussion/tests/test_controlpanel.py @@ -81,6 +81,22 @@ class RegistryTest(unittest.TestCase): False ) + def test_edit_comment_enabled(self): + # Check edit_comment_enabled record + self.assertTrue('edit_comment_enabled' in IDiscussionSettings) + self.assertEqual( + self.registry['plone.app.discussion.interfaces.' + + 'IDiscussionSettings.edit_comment_enabled'], + False) + + def test_edit_comment_enabled(self): + # Check edit_comment_enabled record + self.assertTrue('edit_comment_enabled' in IDiscussionSettings) + self.assertEqual( + self.registry['plone.app.discussion.interfaces.' + + 'IDiscussionSettings.edit_comment_enabled'], + False) + def test_text_transform(self): self.assertTrue('text_transform' in IDiscussionSettings) self.assertEqual( From 82a473c138c538c2b93f6f008ea25adc96c902df Mon Sep 17 00:00:00 2001 From: "Guido A.J. Stevens" Date: Thu, 19 Sep 2013 08:39:52 +0000 Subject: [PATCH 104/254] provide "delete own comments" as a configurable option --- CHANGES.rst | 3 + plone/app/discussion/browser/comments.pt | 5 +- plone/app/discussion/browser/comments.py | 18 ++- plone/app/discussion/browser/configure.zcml | 6 +- plone/app/discussion/browser/controlpanel.py | 2 + plone/app/discussion/browser/moderation.py | 34 ++++- plone/app/discussion/configure.zcml | 10 ++ plone/app/discussion/interfaces.py | 11 ++ .../discussion/profiles/default/metadata.xml | 2 +- .../tests/functional_test_comments.txt | 140 ++++++++++++++++++ 10 files changed, 220 insertions(+), 11 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index fa12098..bda1c9b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog 2.2.9 (unreleased) ------------------ +- Provide 'delete own comments' as a configurable option + [gyst] + - Make comments editable. [pjstevns, gyst] diff --git a/plone/app/discussion/browser/comments.pt b/plone/app/discussion/browser/comments.pt index 203e813..0348f33 100644 --- a/plone/app/discussion/browser/comments.pt +++ b/plone/app/discussion/browser/comments.pt @@ -36,7 +36,8 @@ has_author_link python:author_home_url and not isAnon; portrait_url python:view.get_commenter_portrait(reply.author_username); review_state python:wtool.getInfoFor(reply, 'review_state', 'none'); - canEdit python:view.can_edit(reply)" + canEdit python:view.can_edit(reply); + canDelete python:view.can_delete(reply)" tal:attributes="class python:'comment replyTreeLevel'+str(depth)+' state-'+str(review_state); id string:${reply/getId}" tal:condition="python:canReview or review_state == 'published'"> @@ -89,7 +90,7 @@ action="" method="post" class="commentactionsform" - tal:condition="python:canReview" + tal:condition="python:canDelete" tal:attributes="action string:${reply/absolute_url}/@@moderate-delete-comment"> - + diff --git a/plone/app/discussion/browser/controlpanel.py b/plone/app/discussion/browser/controlpanel.py index 822ca2b..84ded37 100644 --- a/plone/app/discussion/browser/controlpanel.py +++ b/plone/app/discussion/browser/controlpanel.py @@ -54,6 +54,8 @@ class DiscussionSettingsEditForm(controlpanel.RegistryEditForm): SingleCheckBoxFieldWidget self.fields['edit_comment_enabled'].widgetFactory = \ SingleCheckBoxFieldWidget + self.fields['delete_own_comment_enabled'].widgetFactory = \ + SingleCheckBoxFieldWidget self.fields['anonymous_comments'].widgetFactory = \ SingleCheckBoxFieldWidget self.fields['show_commenter_image'].widgetFactory = \ diff --git a/plone/app/discussion/browser/moderation.py b/plone/app/discussion/browser/moderation.py index aa7bb91..0324a43 100644 --- a/plone/app/discussion/browser/moderation.py +++ b/plone/app/discussion/browser/moderation.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- from Acquisition import aq_inner, aq_parent +from AccessControl import getSecurityManager +from zope.component import queryUtility from Products.Five.browser import BrowserView from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile @@ -8,6 +10,8 @@ from Products.CMFCore.utils import getToolByName from Products.statusmessages.interfaces import IStatusMessage +from plone.registry.interfaces import IRegistry +from plone.app.discussion.interfaces import IDiscussionSettings from plone.app.discussion.interfaces import _ from plone.app.discussion.interfaces import IComment @@ -94,17 +98,37 @@ class DeleteComment(BrowserView): comment = aq_inner(self.context) conversation = aq_parent(comment) content_object = aq_parent(conversation) - del conversation[comment.id] - content_object.reindexObject() - IStatusMessage(self.context.REQUEST).addStatusMessage( - _("Comment deleted."), - type="info") + # conditional security + # base ZCML condition zope2.deleteObject allows 'delete own object' + # modify this for 'delete_own_comment_allowed' controlpanel setting + if self.can_delete(comment): + del conversation[comment.id] + content_object.reindexObject() + IStatusMessage(self.context.REQUEST).addStatusMessage( + _("Comment deleted."), + type="info") came_from = self.context.REQUEST.HTTP_REFERER # if the referrer already has a came_from in it, don't redirect back if len(came_from) == 0 or 'came_from=' in came_from: came_from = content_object.absolute_url() return self.context.REQUEST.RESPONSE.redirect(came_from) + def can_delete(self, reply): + """By default requires 'Review comments'. + If 'delete own comments' is enabled, requires 'Edit comments'. + """ + if self.is_delete_own_comment_allowed(): + permission = 'Edit comments' + else: + permission = 'Review comments' + return getSecurityManager().checkPermission(permission, + aq_inner(reply)) + + def is_delete_own_comment_allowed(self): + registry = queryUtility(IRegistry) + settings = registry.forInterface(IDiscussionSettings, check=False) + return settings.delete_own_comment_enabled + class PublishComment(BrowserView): """Publish a comment. diff --git a/plone/app/discussion/configure.zcml b/plone/app/discussion/configure.zcml index ee486c3..536994e 100644 --- a/plone/app/discussion/configure.zcml +++ b/plone/app/discussion/configure.zcml @@ -53,6 +53,16 @@ profile="plone.app.discussion:default" /> + + diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index cdf662b..8bf188a 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -285,6 +285,17 @@ class IDiscussionSettings(Interface): default=False, ) + delete_own_comment_enabled = schema.Bool( + title=_(u"label_delete_own_comment_enabled", + default="Allow users to delete their own comment threads"), + description=_(u"help_edit_comment_enabled", + default=u"If selected, users may delete their own " + "comments -> AND the whole reply thread below that " + "comment!"), + required=False, + default=False, + ) + text_transform = schema.Choice( title=_(u"label_text_transform", default="Comment text transform"), diff --git a/plone/app/discussion/profiles/default/metadata.xml b/plone/app/discussion/profiles/default/metadata.xml index 7a20473..ce1f445 100644 --- a/plone/app/discussion/profiles/default/metadata.xml +++ b/plone/app/discussion/profiles/default/metadata.xml @@ -1,5 +1,5 @@ - 101 + 102 profile-plone.app.registry:default diff --git a/plone/app/discussion/tests/functional_test_comments.txt b/plone/app/discussion/tests/functional_test_comments.txt index 0ab4a61..a31ed48 100644 --- a/plone/app/discussion/tests/functional_test_comments.txt +++ b/plone/app/discussion/tests/functional_test_comments.txt @@ -320,6 +320,146 @@ But Anon can see the edited comment. True +Deleting existing comments | 'delete own comments' disabled +----------------------------------------------------------- + +Anonymous cannot delete comments + + >>> unprivileged_browser.open(urldoc1) + >>> 'form.button.Delete' in unprivileged_browser.contents + False + +A member cannot delete his own comments, unless this is explicitly enabled (see later) + + >>> browser_member.open(urldoc1) + >>> 'form.button.Delete' in browser_member.contents + False + +Admin can delete comments + + >>> browser.open(urldoc1) + >>> 'form.button.Delete' in browser.contents + True + +Extract the delete comment url from the first "delete comment" button + + >>> browser.open(urldoc1) + >>> form = browser.getForm(name='delete', index=0) + >>> delete_url = form.action + >>> '@@moderate-delete-comment' in delete_url + True + >>> comment_id = delete_url.split('/')[-2] + +Anonymous cannot delete a comment by hitting the delete url directly. + + >>> unprivileged_browser.open(delete_url) + +The comment is still there + + >>> unprivileged_browser.open(urldoc1) + >>> comment_id in unprivileged_browser.contents + True + + +A Member cannot delete even his own comment by hitting the delete url directly. + +Extract the member comment id from the admin browser + + >>> form = browser.getForm(name='delete', index=2) + >>> delete_url = form.action + >>> '@@moderate-delete-comment' in delete_url + True + >>> comment_id = delete_url.split('/')[-2] + +Now try to hit that url as the member owning that comment. +Work around some possible testbrowser breakage and check the result later. + + >>> try: + ... browser_member.open(delete_url) + ... except: + ... pass + +The comment is still there + + >>> browser_member.open(urldoc1) + >>> comment_id in browser_member.contents + True + >>> 'Comment from Jim' in browser_member.contents + True + +Admin, who hase 'review comments' permission, can delete comments + + >>> browser.open(urldoc1) + >>> form = browser.getForm(name='delete', index=0) + >>> '@@moderate-delete-comment' in form.action + True + + >>> comment_id = form.action.split('/')[-2] + +Submitting the form runs into a testbrowser notFoundException. +We'll just catch that and check the result later. + + >>> try: + ... form.submit() + ... except: + ... pass + +Returning to the document we find the deleted comment is indeed gone + + >>> browser.open(urldoc1) + >>> comment_id in browser.contents + False + + +Deleting existing comments | 'delete own comments' ENABLED +---------------------------------------------------------- + +Enable deletion of own comments + + >>> from zope.component import queryUtility + >>> from plone.registry.interfaces import IRegistry + >>> from plone.app.discussion.interfaces import IDiscussionSettings + >>> registry = queryUtility(IRegistry) + >>> settings = registry.forInterface(IDiscussionSettings) + >>> settings.delete_own_comment_enabled = True + + >>> import transaction + >>> transaction.commit() + +Anonymous still cannot delete comments + + >>> unprivileged_browser.open(urldoc1) + >>> 'form.button.Delete' in unprivileged_browser.contents + False + +A member can now delete his own comments + + >>> browser_member.open(urldoc1) + >>> 'form.button.Delete' in browser_member.contents + True + + >>> form = browser_member.getForm(name='delete', index=0) + >>> '@@moderate-delete-comment' in form.action + True + + >>> comment_id = form.action.split('/')[-2] + +Submitting the form runs into a testbrowser notFoundException. +We'll just catch that and check the result later. + + >>> try: + ... form.submit() + ... except: + ... pass + +Returning to the document we find the deleted comment is indeed gone + + >>> browser_member.open(urldoc1) + >>> comment_id in browser_member.contents + False + >>> 'Comment from Jim' in browser_member.contents + False + Post a comment with comment review workflow enabled --------------------------------------------------- From fd85de9c3081decb1b665aa04e4314e2744448d1 Mon Sep 17 00:00:00 2001 From: Huub Bouma Date: Fri, 20 Sep 2013 16:28:05 +0200 Subject: [PATCH 105/254] Fix comments Title if utf-8 characters in author_name --- CHANGES.rst | 3 +++ plone/app/discussion/comment.py | 2 +- plone/app/discussion/tests/test_comment.py | 12 ++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 5d9f16f..5578e59 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,6 +10,9 @@ Changelog - Fix ajax form submit for delete comment action: add 'data' to the request. [toutpt] +- Fix comments Title if utf-8 characters in author_name + [huub_bouma] + 2.2.8 (2013-08-20) ------------------ diff --git a/plone/app/discussion/comment.py b/plone/app/discussion/comment.py index df81bf7..6bcfdcf 100644 --- a/plone/app/discussion/comment.py +++ b/plone/app/discussion/comment.py @@ -186,7 +186,7 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable, content = aq_base(self.__parent__.__parent__) title = translate( Message(COMMENT_TITLE, - mapping={'author_name': author_name, + mapping={'author_name': safe_unicode(author_name), 'content': safe_unicode(content.Title())})) return title diff --git a/plone/app/discussion/tests/test_comment.py b/plone/app/discussion/tests/test_comment.py index 1f39098..f0d5081 100644 --- a/plone/app/discussion/tests/test_comment.py +++ b/plone/app/discussion/tests/test_comment.py @@ -125,6 +125,18 @@ class CommentTest(unittest.TestCase): conversation.addComment(comment1) self.assertEqual(u"Tarek Ziadé on Document äüö", comment1.Title()) + def test_title_special_characters_utf8(self): + self.portal.invokeFactory( + id='doc_sp_chars_utf8', + title='Document ëïû', + type_name='Document' + ) + conversation = IConversation(self.portal.doc_sp_chars_utf8) + comment1 = createObject('plone.Comment') + comment1.author_name = "Hüüb Bôûmä" + conversation.addComment(comment1) + self.assertEqual(u"Hüüb Bôûmä on Document ëïû", comment1.Title()) + def test_creator(self): comment1 = createObject('plone.Comment') comment1.creator = "jim" From 08c3db59e12e8ad09521683a69815fa3eb48a589 Mon Sep 17 00:00:00 2001 From: tisto Date: Tue, 24 Sep 2013 14:21:45 +0200 Subject: [PATCH 106/254] Portuguese translation added. --- CHANGES.rst | 8 +- .../pt/LC_MESSAGES/plone.app.discussion.po | 383 ++++++++++++++++++ 2 files changed, 389 insertions(+), 2 deletions(-) create mode 100644 plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po diff --git a/CHANGES.rst b/CHANGES.rst index 5d9f16f..2b6a8ff 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,16 +4,20 @@ Changelog 2.2.9 (unreleased) ------------------ +- Portuguese translation added. + [Rui Silva] + - Rename CHANGES.txt to CHANGES.rst. [timo] - Fix ajax form submit for delete comment action: add 'data' to the request. [toutpt] + 2.2.8 (2013-08-20) ------------------ -- Re-release 2.2.7 with .mo files. Seems like 2.2.7 has been released twice on +- Re-release 2.2.7 with .mo files. Seems like 2.2.7 has been released twice on two different dates. The first release seems to be made without a github push. [timo] @@ -30,7 +34,7 @@ Changelog - Revert change that silently added mime_type attribute values to old discussion items that had none. - [pjstevns] + [pjstevns] 2.2.6 (2013-05-23) diff --git a/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po new file mode 100644 index 0000000..2e56bed --- /dev/null +++ b/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po @@ -0,0 +1,383 @@ +msgid "" +msgstr "" +"Project-Id-Version: plone.app.discussion\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" +"PO-Revision-Date: 2011-04-14 17:20-0300\n" +"Last-Translator: Rui Dinis Silva \n" +"Language-Team: Eurotux \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0\n" +"Language-Code: pt\n" +"Language-Name: Portuguese\n" +"Preferred-Encodings: utf-8 latin1\n" +"Domain: plone.app.discussion\n" +"X-Poedit-Language: Português\n" + +#: ../comment.py:264 +msgid "A comment has been posted." +msgstr "Foi adicionado um comentário." + +#: ../interfaces.py:257 +msgid "A comment id unique to this conversation" +msgstr "Um id do comentário único para esta conversação." + +#: ../browser/comments.py:67 +msgid "Add a comment" +msgstr "Adicionar comentário" + +#: ../browser/controlpanel.py:62 +msgid "Anonymous Comments" +msgstr "Comentários Anónimos" + +#: ../interfaces.py:282 +msgid "Author name (for display)" +msgstr "Nome do autor (para exibição)" + +#: ../browser/comments.py:248 +#: ../browser/controlpanel.py:80 +msgid "Cancel" +msgstr "Cancelar" + +#: ../browser/controlpanel.py:76 +msgid "Changes saved" +msgstr "Alterações guardadas" + +#: ../browser/moderation.py:133 +msgid "Comment approved." +msgstr "Comentário aprovado" + +#: ../browser/moderation.py:94 +msgid "Comment deleted." +msgstr "Comentário excluído." + +#: ../browser/controlpanel.py:63 +msgid "Commenter Image" +msgstr "Imagem do comentador" + +msgid "Commenting infrastructure for Plone" +msgstr "Infraestrutura de comentários para o Plone" + +#: ../interfaces.py:252 +msgid "Conversation" +msgstr "Conversação" + +#: ../interfaces.py:283 +msgid "Creation date" +msgstr "Data de criação" + +#: ../interfaces.py:162 +msgid "Date of the most recent comment" +msgstr "Data do comentário mais recente" + +#: ../vocabularies.py:44 +msgid "Disabled" +msgstr "Desativado" + +#: ../browser/controlpanel.py:32 +msgid "Discussion settings" +msgstr "Configurações da discussão" + +#: ../browser/controlpanel.py:82 +msgid "Edit cancelled" +msgstr "Edição cancelada" + +#: ../interfaces.py:269 +msgid "Email" +msgstr "Email" + +#: ../browser/controlpanel.py:61 +msgid "Enable Comments" +msgstr "Permitir comentários" + +#: ../interfaces.py:260 +msgid "Id of comment this comment is in reply to" +msgstr "ID do comentário para qual este comentário é resposta" + +#: ../interfaces.py:274 +msgid "MIME type" +msgstr "MIME type" + +#: ../browser/controlpanel.py:65 +msgid "Moderator Email Notification" +msgstr "Notificação de e-mail para o moderador" + +#: ../interfaces.py:284 +msgid "Modification date" +msgstr "Data de modificação" + +#: ../interfaces.py:254 +msgid "Name" +msgstr "Nome" + +#: ../interfaces.py:278 +msgid "Notify me of new comments via email." +msgstr "Notificar-me por email da existência de novos comentários." + +#: ./plone.app.discussion/plone/app/discussion/configure.zcml +msgid "Plone Discussions" +msgstr "Discussões Plone" + +#: ../interfaces.py:247 +msgid "Portal type" +msgstr "Tipo de conteúdo" + +#: ../browser/controlpanel.py:69 +msgid "Save" +msgstr "Guardar" + +#: ../interfaces.py:167 +msgid "The set of unique commentators (usernames)" +msgstr "Lista de utilizadores que fizeram comentários (nome de utilizador)" + +#: ../interfaces.py:156 +msgid "Total number of comments on this item" +msgstr "Número total de comentários para este item" + +#: ../browser/controlpanel.py:67 +msgid "User Email Notification" +msgstr "Notificar o utilizador por email" + +#: ../browser/comments.py:241 +msgid "Your comment awaits moderator approval." +msgstr "Seu comentário encontra-se pendente e aguarda a aprovação do moderador." + +#. Default: "Comment" +#: ../browser/comments.py:123 +msgid "add_comment_button" +msgstr "Comentar" + +#. Default: "Delete" +#: ../browser/moderation.pt:68 +msgid "bulkactions_delete" +msgstr "Excluir" + +#. Default: "Approve" +#: ../browser/moderation.pt:65 +msgid "bulkactions_publish" +msgstr "Publicar" + +#. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." +#: ../browser/comments.py:52 +msgid "comment_description_intelligent_text" +msgstr "Pode adicionar um comentário usando o formulário a seguir. Campo de texto simples. Endereços web e e-mail são transformados em links clicáveis." + +#. Default: "Comments are moderated." +#: ../browser/comments.py:58 +msgid "comment_description_moderation_enabled" +msgstr "Os comentários são moderados" + +#. Default: "You can add a comment by filling out the form below. Plain text formatting." +#: ../browser/comments.py:47 +msgid "comment_description_plain_text" +msgstr "Pode adicionar um comentário usando o formulário a seguir. Campo de texto simples." + +#. Default: "${creator} on ${content}" +#: ../comment.py:46 +msgid "comment_title" +msgstr "${creator} em ${content}" + +#. Default: "Action" +#: ../browser/moderation.pt:85 +msgid "heading_action" +msgstr "Acção" + +#. Default: "Comment" +#: ../browser/moderation.pt:84 +msgid "heading_comment" +msgstr "Comentário" + +#. Default: "Commenter" +#: ../browser/moderation.pt:81 +msgid "heading_commenter" +msgstr "Autor" + +#. Default: "Date" +#: ../browser/moderation.pt:82 +msgid "heading_date" +msgstr "Data" + +#. Default: "In Response To" +#: ../browser/moderation.pt:83 +msgid "heading_in_reponse_to" +msgstr "Em resposta a" + +#. Default: "Moderate comments" +#: ../browser/moderation.pt:24 +msgid "heading_moderate_comments" +msgstr "Moderar comentários" + +#. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." +#: ../interfaces.py:38 +msgid "help_anonymous_comments" +msgstr "Se selecionado, os utilizadores anonimos poderão adicionar comentários sem estar autenticados. É altamente recomendável a utilização de uma solução de captcha para evitar spam quando esta configuração está activa." + +#. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." +#: ../interfaces.py:82 +msgid "help_captcha" +msgstr "Utilize esta opção para ativar ou desativar o Captcha para os comentários. Instale plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet ou collective.z3cform.norobots caso não tenha nenhuma opção disponível." + +#. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." +#: ../browser/controlpanel.py:33 +msgid "help_discussion_settings_editform" +msgstr "" +"Algumas configurações relacionadas com os comentários não se encontram localizadas no Painel de Controle de Comentários.\n" +"Para activar os comentários para um tipo de item específico, aceda à configuração de Tipos no Painel de Controle, encontre o tipo desejado e selecione \"Permitir comentários \".\n" +"Para ativar o workflow de moderação de comentários, aceda à configuração de Tipos no Painel de Controle, escolha \"Comentário\" e selecione o workflow para \"Workflow de Revisão de Comentários\"." + +#. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." +#: ../interfaces.py:26 +msgid "help_globally_enabled" +msgstr "Se selecionado, permite que os visitantes adicionem comentários ao site. Porém, você deve habilitar comentários para cada tipo de conteúdo antes que os usuários possam adicionar comentários." + +#. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." +#: ../interfaces.py:50 +msgid "help_moderation_enabled" +msgstr "Se selecionado, os comentários serão adicionados no estado \"Pendente\", que é invisível ao público. Utilizadores com permissão para 'Moderar Comentários' ('Gestor' ou 'Administrador') podem aprovar os comentários para torná-los visíveis ao público. Caso queira ativar um workflow de comentários personalizado, aceda à Configuração dos Tipos no Painel de Controle." + +#. Default: "Address to which moderator notifications will be sent." +#: ../interfaces.py:118 +msgid "help_moderator_email" +msgstr "Endereço para o qual as notificações do moderador serão enviadas." + +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" +#: ../interfaces.py:107 +msgid "help_moderator_notification_enabled" +msgstr "Se selecionado, o moderador será avisado quando um comentário precisar de atenção. O endereço de e-mail do moderador pode ser encontrado nas configurações de e-mail no Painel de Controle (campo Endereço de 'Remetente' do site)" + +#. Default: "If selected, an image of the user is shown next to the comment." +#: ../interfaces.py:97 +msgid "help_show_commenter_image" +msgstr "Se selecionado, uma imagem do usuário será exibida próxima ao comentário." + +#. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." +#: ../interfaces.py:66 +msgid "help_text_transform" +msgstr "Use esta configuração para escolher se o texto do comentário deve ser transformado. Você pode escolher entre 'texto puro' e 'texto inteligente'. 'Texto inteligente' converte texto simples em HTML, onde as quebras de linha e os recuos são preservados, e os endereços web e e-mail são transformados em links clicáveis." + +#. Default: "If selected, users can choose to be notified of new comments by email." +#: ../interfaces.py:127 +msgid "help_user_notification_enabled" +msgstr "Se selecionado, permite aos usuários solicitar o notificações por e-mail sempre que hover um novo comentário." + +#. Default: "Anonymous" +#: ../comment.py:156 +msgid "label_anonymous" +msgstr "Anónimo" + +#. Default: "Enable anonymous comments" +#: ../interfaces.py:36 +msgid "label_anonymous_comments" +msgstr "Permitir comentários anónimos." + +#. Default: "Apply" +#: ../browser/moderation.pt:71 +msgid "label_apply" +msgstr "Aplicar" + +#. Default: "Captcha" +#: ../interfaces.py:80 +msgid "label_captcha" +msgstr "Captcha" + +#. Default: "Comment" +#: ../interfaces.py:275 +msgid "label_comment" +msgstr "Comentário" + +#. Default: "Commenting has been disabled." +#: ../browser/comments.pt:130 +msgid "label_commenting_disabled" +msgstr "Os comentários foram desativados." + +#. Default: "Delete" +#: ../browser/moderation.pt:130 +msgid "label_delete" +msgstr "Excluir" + +#. Default: "Globally enable comments" +#: ../interfaces.py:24 +msgid "label_globally_enabled" +msgstr "Ativar comentários globalmente" + +#. Default: "Enable comment moderation" +#: ../interfaces.py:48 +msgid "label_moderation_enabled" +msgstr "Ativar moderação de comentários" + +#. Default: "Moderator Email Address" +#: ../interfaces.py:117 +msgid "label_moderator_email" +msgstr "Endereço de e-mail do moderador" + +#. Default: "Enable moderator email notification" +#: ../interfaces.py:105 +msgid "label_moderator_notification_enabled" +msgstr "Ativar notificação ao moderador" + +#. Default: "Approve" +#: ../browser/moderation.pt:121 +msgid "label_publish" +msgstr "Aprovar" + +#. Default: "says:" +#: ../browser/comments.pt:74 +msgid "label_says" +msgstr "disse:" + +#. Default: "Show commenter image" +#: ../interfaces.py:95 +msgid "label_show_commenter_image" +msgstr "Exibir imagem do autor" + +#. Default: "show full comment text" +#: ../browser/moderation.pt:114 +msgid "label_show_full_comment_text" +msgstr "Exibir texto completo" + +#. Default: "Subject" +#: ../interfaces.py:271 +msgid "label_subject" +msgstr "Assunto" + +#. Default: "Comment text transform" +#: ../interfaces.py:64 +msgid "label_text_transform" +msgstr "Transformações aplicadas ao texto do comentário" + +#. Default: "Enable user email notification" +#: ../interfaces.py:125 +msgid "label_user_notification_enabled" +msgstr "Activar notificação de utilizadores por email" + +#. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" +#: ../comment.py:50 +#, fuzzy +msgid "mail_notification_message" +msgstr "Um comentário em '${title}' foi adicionado aqui: ${link}" + +#. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" +#: ../comment.py:58 +msgid "mail_notification_message_moderator" +msgstr "Um comentário sobre '${title}' foi adicionado aqui: ${link}\n\n---\n${text}\n---\n\nAprovar comentário:\n${link_approve}\n\nApagar comentário:\n${link_delete}\n" + +#. Default: "enable the 'Comment Review Workflow' for the Comment content type" +#: ../browser/moderation.pt:33 +msgid "message_enable_comment_workflow" +msgstr "Ativar 'Workflow de Moderação de Comentários\" para o tipo de item Comentário" + +#. Default: "Moderation workflow is disabled. You have to ${enable_comment_workflow} before you can moderate comments here." +#: ../browser/moderation.pt:33 +msgid "message_moderation_disabled" +msgstr "A moderação está desativada. Tem de ${enable_comment_workflow} antes de poder moderar os comentários aqui." + +#. Default: "No comments to moderate." +#: ../browser/moderation.pt:43 +msgid "message_nothing_to_moderate" +msgstr "Nenhum comentário para moderação." + +#. Default: "Bulk Actions" +#: ../browser/moderation.pt:64 +msgid "title_bulkactions" +msgstr "Ações em massa" From 3ab24b12bced611dc694f94b6a4e3de29607fd98 Mon Sep 17 00:00:00 2001 From: tisto Date: Tue, 24 Sep 2013 14:29:38 +0200 Subject: [PATCH 107/254] Pin zope.interface to 4.0.5. --- buildout.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildout.cfg b/buildout.cfg index 256c928..0b66ca6 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -16,5 +16,5 @@ eggs = zest.pocompile [versions] plone.app.discussion = -zope.interface = 3.6.1 +zope.interface = 4.0.5 From f929dc2bd963c873842f5ce4b71fec64dee61bc9 Mon Sep 17 00:00:00 2001 From: tisto Date: Tue, 24 Sep 2013 14:29:52 +0200 Subject: [PATCH 108/254] Prepare 2.2.9 release. --- CHANGES.rst | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 2b6a8ff..bc938a4 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,7 +1,7 @@ Changelog ========= -2.2.9 (unreleased) +2.2.9 (2013-09-24) ------------------ - Portuguese translation added. diff --git a/setup.py b/setup.py index 5385ab8..71c1290 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.9dev' +version = '2.2.9' install_requires = [ 'setuptools', From 3eae5378ff17465a2db22316faa405473e99dac1 Mon Sep 17 00:00:00 2001 From: tisto Date: Tue, 24 Sep 2013 15:00:46 +0200 Subject: [PATCH 109/254] Update version number to 2.3.0 since we need a new master branch for Plone 5 due to the changes in the test setup (PLONE_APP_CONTENTTPYES_FIXTURE). --- CHANGES.rst | 14 ++++++++++++++ setup.py | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index bc938a4..cafcaa5 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,20 @@ Changelog ========= +2.3.0 (unreleased) +------------------ + +- Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of the PLONE_FIXTURE. + [timo] + + +2.2.10 (2013-09-24) +------------------- + +- Revert "Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of the PLONE_FIXTURE." that has been accidentially introduced into the 2.2.9 release. + [timo] + + 2.2.9 (2013-09-24) ------------------ diff --git a/setup.py b/setup.py index 71c1290..af74549 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.2.9' +version = '2.3.0dev' install_requires = [ 'setuptools', From fbc78e29510bbec6aad4a45a1595c5a79b9d18b9 Mon Sep 17 00:00:00 2001 From: tisto Date: Thu, 10 Oct 2013 15:36:18 +0200 Subject: [PATCH 110/254] Remove portal_discussion tool. --- CHANGES.rst | 10 +- plone/app/discussion/interfaces.py | 32 -- plone/app/discussion/patches.py | 9 +- .../profiles/default/componentregistry.xml | 9 - .../discussion/profiles/default/toolset.xml | 5 - plone/app/discussion/subscribers.py | 14 + plone/app/discussion/subscribers.zcml | 4 +- plone/app/discussion/tests/test_catalog.py | 3 + .../discussion/tests/test_comments_viewlet.py | 25 +- .../app/discussion/tests/test_conversation.py | 6 +- plone/app/discussion/tests/test_migration.py | 328 ------------------ .../discussion/tests/test_moderation_view.py | 23 -- .../discussion/tests/test_notifications.py | 2 - plone/app/discussion/tests/test_tool.py | 56 --- plone/app/discussion/tests/test_workflow.py | 2 - 15 files changed, 44 insertions(+), 484 deletions(-) delete mode 100644 plone/app/discussion/profiles/default/componentregistry.xml delete mode 100644 plone/app/discussion/profiles/default/toolset.xml create mode 100644 plone/app/discussion/subscribers.py delete mode 100644 plone/app/discussion/tests/test_migration.py delete mode 100644 plone/app/discussion/tests/test_tool.py diff --git a/CHANGES.rst b/CHANGES.rst index cafcaa5..3c17efd 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,14 +4,20 @@ Changelog 2.3.0 (unreleased) ------------------ -- Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of the PLONE_FIXTURE. +- Remove portal_discussion tool. + [timo] + +- Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of + PLONE_FIXTURE. [timo] 2.2.10 (2013-09-24) ------------------- -- Revert "Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of the PLONE_FIXTURE." that has been accidentially introduced into the 2.2.9 release. +- Revert "Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of + the PLONE_FIXTURE." that has been accidentially introduced into the 2.2.9 + release. [timo] diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index 46d430d..733f4d0 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -184,38 +184,6 @@ class ICaptcha(Interface): required=False) -class ICommentingTool(Interface): - """A tool that indexes all comments for usage by the management interface. - - This means the management interface can still work even though we don't - index the comments in portal_catalog. - - The default implementation of this interface simply defers to - portal_catalog, but a custom version of the tool can be used to provide - an alternate indexing mechanism. - """ - - def indexObject(comment): - """Indexes a comment - """ - - def reindexObject(comment): - """Reindex a comment - """ - - def unindexObject(comment): - """Removes a comment from the indexes - """ - - def uniqueValuesFor(name): - """Get unique values for FieldIndex name - """ - - def searchResults(REQUEST=None, **kw): - """Perform a search over all indexed comments. - """ - - class IDiscussionSettings(Interface): """Global discussion settings. This describes records stored in the configuration registry and obtainable via plone.registry. diff --git a/plone/app/discussion/patches.py b/plone/app/discussion/patches.py index 47ec27b..f803f10 100644 --- a/plone/app/discussion/patches.py +++ b/plone/app/discussion/patches.py @@ -1,3 +1,5 @@ +from Products.CMFCore.utils import getToolByName + from zope.component import queryUtility from Acquisition import aq_inner, aq_parent @@ -8,7 +10,6 @@ from Products.CMFPlone.utils import base_hasattr from Products.CMFPlone.utils import safe_callable from plone.app.discussion.conversation import ANNOTATION_KEY -from plone.app.discussion.interfaces import ICommentingTool def patchedClearFindAndRebuild(self): @@ -26,14 +27,14 @@ def patchedClearFindAndRebuild(self): obj.indexObject() annotions = IAnnotations(obj) - ctool = queryUtility(ICommentingTool) + catalog = getToolByName(obj, "portal_catalog") if ANNOTATION_KEY in annotions: conversation = annotions[ANNOTATION_KEY] conversation = conversation.__of__(obj) for comment in conversation.getComments(): try: - if ctool: - ctool.indexObject(comment) + if catalog: + catalog.indexObject(comment) except StopIteration: # pragma: no cover pass diff --git a/plone/app/discussion/profiles/default/componentregistry.xml b/plone/app/discussion/profiles/default/componentregistry.xml deleted file mode 100644 index 635cae9..0000000 --- a/plone/app/discussion/profiles/default/componentregistry.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/plone/app/discussion/profiles/default/toolset.xml b/plone/app/discussion/profiles/default/toolset.xml deleted file mode 100644 index 0823a74..0000000 --- a/plone/app/discussion/profiles/default/toolset.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/plone/app/discussion/subscribers.py b/plone/app/discussion/subscribers.py new file mode 100644 index 0000000..20ac7ad --- /dev/null +++ b/plone/app/discussion/subscribers.py @@ -0,0 +1,14 @@ +from Products.CMFCore.utils import getToolByName + +def index_object(obj, event): + """Index the object when it is added to the conversation. + """ + catalog = getToolByName(obj, 'portal_catalog') + return catalog.reindexObject(obj) + +def unindex_object(obj, event): + """Unindex the object when it is removed from the conversation. + """ + catalog = getToolByName(obj, 'portal_catalog') + return catalog.unindexObject(obj) + diff --git a/plone/app/discussion/subscribers.zcml b/plone/app/discussion/subscribers.zcml index d0d848d..e563f80 100644 --- a/plone/app/discussion/subscribers.zcml +++ b/plone/app/discussion/subscribers.zcml @@ -24,13 +24,13 @@ My Text

\n') - self.assertEqual(comment1.mime_type, 'text/html') - self.assertEqual(comment1.Creator(), 'Jim') - self.assertEqual( - comment1.creation_date, - datetime(2003, 3, 11, 9, 28, 6) - ) - self.assertEqual( - comment1.modification_date, - datetime(2009, 7, 12, 19, 38, 7) - ) - self.assertEqual([ - {'comment': comment1, 'depth': 0, 'id': long(comment1.id)} - ], list(conversation.getThreads())) - self.assertFalse(self.doc.talkback) - - def test_migrate_comment_with_creator(self): - # Create a comment - talkback = self.discussion.getDiscussionFor(self.doc) - self.doc.talkback.createReply('My Title', 'My Text', Creator='Jim') - reply = talkback.getReplies()[0] - reply.setReplyTo(self.doc) - reply.creation_date = DateTime(2003, 3, 11, 9, 28, 6, 'GMT') - reply.modification_date = DateTime(2009, 7, 12, 19, 38, 7, 'GMT') - reply.author_username = 'Jim' - reply.email = 'jimmy@jones.xyz' - - self._publish(reply) - self.assertEqual(reply.Title(), 'My Title') - self.assertEqual(reply.EditableBody(), 'My Text') - self.assertTrue('Jim' in reply.listCreators()) - self.assertEqual(talkback.replyCount(self.doc), 1) - self.assertEqual(reply.inReplyTo(), self.doc) - self.assertEqual(reply.author_username, 'Jim') - self.assertEqual(reply.email, 'jimmy@jones.xyz') - - # Call migration script - self.view() - - # Make sure a conversation has been created - self.assertTrue( - 'plone.app.discussion:conversation' in IAnnotations(self.doc) - ) - conversation = IConversation(self.doc) - - # Check migration - self.assertEqual(conversation.total_comments, 1) - self.assertTrue(conversation.getComments().next()) - comment1 = conversation.values()[0] - self.assertTrue(IComment.providedBy(comment1)) - self.assertEqual(comment1.Title(), 'My Title') - self.assertEqual(comment1.text, '

My Text

\n') - self.assertEqual(comment1.mime_type, 'text/html') - self.assertEqual(comment1.Creator(), 'Jim') - self.assertEqual( - comment1.creation_date, - datetime(2003, 3, 11, 9, 28, 6) - ) - self.assertEqual( - comment1.modification_date, - datetime(2009, 7, 12, 19, 38, 7) - ) - self.assertEqual([ - {'comment': comment1, 'depth': 0, 'id': long(comment1.id)} - ], list(conversation.getThreads())) - self.assertFalse(self.doc.talkback) - - # Though this should be Jimmy, but looks like getProperty won't pick - # up 'author_username' (reply.author_username is not None), so it's - # propagating Creator()..? - self.assertEqual(comment1.author_username, 'Jim') - - self.assertEqual(comment1.author_name, 'Jimmy Jones') - self.assertEqual(comment1.author_email, 'jimmy@jones.xyz') - - def test_migrate_nested_comments(self): - # Create some nested comments and migrate them - # - # self.doc - # +- First comment - # +- Re: First comment - # + Re: Re: First comment - # + Re: Re: Re: First comment - # +- Re: First comment (2) - # +- Re: First comment (3) - # +- Re: First comment (4) - # +- Second comment - - talkback = self.discussion.getDiscussionFor(self.doc) - - # First comment - talkback.createReply(title='First comment', - text='This is my first comment.') - comment1 = talkback.getReplies()[0] - self._publish(comment1) - - talkback_comment1 = self.discussion.getDiscussionFor(comment1) - - # Re: First comment - talkback_comment1.createReply(title='Re: First comment', - text='This is my first reply.') - comment1_1 = talkback_comment1.getReplies()[0] - self._publish(comment1_1) - - talkback_comment1_1 = self.discussion.getDiscussionFor(comment1_1) - - self.assertEqual(len(talkback.getReplies()), 1) - self.assertEqual(len(talkback_comment1.getReplies()), 1) - self.assertEqual(len(talkback_comment1_1.getReplies()), 0) - - #Re: Re: First comment - talkback_comment1_1.createReply(title='Re: Re: First comment', - text='This is my first re-reply.') - comment1_1_1 = talkback_comment1_1.getReplies()[0] - self._publish(comment1_1_1) - - talkback_comment1_1_1 = self.discussion.getDiscussionFor(comment1_1_1) - - # Re: Re: Re: First comment - talkback_comment1_1_1.createReply(title='Re: Re: Re: First comment', - text='This is my first re-re-reply.') - self._publish(talkback_comment1_1_1.getReplies()[0]) - - # Re: First comment (2) - talkback_comment1.createReply(title='Re: First comment (2)', - text='This is my first reply (2).') - self._publish(talkback_comment1.getReplies()[1]) - - # Re: First comment (3) - talkback_comment1.createReply(title='Re: First comment (3)', - text='This is my first reply (3).') - self._publish(talkback_comment1.getReplies()[2]) - - # Re: First comment (4) - talkback_comment1.createReply(title='Re: First comment (4)', - text='This is my first reply (4).') - self._publish(talkback_comment1.getReplies()[3]) - - # Second comment - talkback.createReply(title='Second comment', - text='This is my second comment.') - self._publish(talkback.getReplies()[1]) - - # Call migration script - self.view() - - # Check migration - conversation = IConversation(self.doc) - self.assertEqual(conversation.total_comments, 8) - - comment1 = conversation.values()[0] - comment1_1 = conversation.values()[1] - comment1_1_1 = conversation.values()[2] - comment1_1_1_1 = conversation.values()[3] - comment1_2 = conversation.values()[4] - comment1_3 = conversation.values()[5] - comment1_4 = conversation.values()[6] - comment2 = conversation.values()[7] - - self.assertEqual([ - {'comment': comment1, 'depth': 0, 'id': long(comment1.id)}, - {'comment': comment1_1, 'depth': 1, 'id': long(comment1_1.id)}, - {'comment': comment1_1_1, 'depth': 2, 'id': long(comment1_1_1.id)}, - {'comment': comment1_1_1_1, 'depth': 3, - 'id': long(comment1_1_1_1.id)}, - {'comment': comment1_2, 'depth': 1, 'id': long(comment1_2.id)}, - {'comment': comment1_3, 'depth': 1, 'id': long(comment1_3.id)}, - {'comment': comment1_4, 'depth': 1, 'id': long(comment1_4.id)}, - {'comment': comment2, 'depth': 0, 'id': long(comment2.id)}, - ], list(conversation.getThreads())) - - talkback = self.discussion.getDiscussionFor(self.doc) - self.assertEqual(len(talkback.getReplies()), 0) - - def test_migrate_nested_comments_with_filter(self): - # Create some nested comments and migrate them. - # But use a filter that filters the top-level comment. - # All the comments should be removed, but not migrated. - # - # self.doc - # +- First comment - # +- Re: First comment - - talkback = self.discussion.getDiscussionFor(self.doc) - - # First comment - talkback.createReply(title='First comment', - text='This is my first comment.') - comment1 = talkback.getReplies()[0] - talkback_comment1 = self.discussion.getDiscussionFor(comment1) - - # Re: First comment - talkback_comment1.createReply(title='Re: First comment', - text='This is my first reply.') - comment1_1 = talkback_comment1.getReplies()[0] - talkback_comment1_1 = self.discussion.getDiscussionFor(comment1_1) - - self.assertEqual(len(talkback.getReplies()), 1) - self.assertEqual(len(talkback_comment1.getReplies()), 1) - self.assertEqual(len(talkback_comment1_1.getReplies()), 0) - - def deny_comments(reply): - return False - - # Call migration script - self.view(filter_callback=deny_comments) - - # Check migration - conversation = IConversation(self.doc) - self.assertEqual(conversation.total_comments, 0) - talkback = self.discussion.getDiscussionFor(self.doc) - self.assertEqual(len(talkback.getReplies()), 0) - - def test_migrate_no_comment(self): - - # Call migration script - self.view() - - # Make sure no conversation has been created - self.assertTrue( - 'plone.app.discussion:conversation' not in IAnnotations(self.doc) - ) - - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_moderation_view.py b/plone/app/discussion/tests/test_moderation_view.py index ac0a7bd..33064b6 100644 --- a/plone/app/discussion/tests/test_moderation_view.py +++ b/plone/app/discussion/tests/test_moderation_view.py @@ -58,29 +58,6 @@ class ModerationViewTest(unittest.TestCase): ('comment_review_workflow,')) self.assertEqual(self.view.moderation_enabled(), True) - def test_old_comments_not_shown_in_moderation_view(self): - # Create old comment - discussion = getToolByName(self.portal, 'portal_discussion', None) - discussion.overrideDiscussionFor(self.portal.doc1, 1) - talkback = discussion.getDiscussionFor(self.portal.doc1) - self.portal.doc1.talkback.createReply('My Title', - 'My Text', - Creator='Jim') - reply = talkback.getReplies()[0] - reply.setReplyTo(self.portal.doc1) - reply.creation_date = DateTime(2003, 3, 11, 9, 28, 6) - reply.modification_date = DateTime(2009, 7, 12, 19, 38, 7) - self.assertEqual(reply.Title(), 'My Title') - self.assertEqual(reply.EditableBody(), 'My Text') - self.assertTrue('Jim' in reply.listCreators()) - self.assertEqual(talkback.replyCount(self.portal.doc1), 1) - self.assertEqual(reply.inReplyTo(), self.portal.doc1) - - view = self.view() - - self.assertTrue('No comments to moderate' in view) - self.assertEqual(len(self.view.comments), 0) - class ModerationBulkActionsViewTest(unittest.TestCase): diff --git a/plone/app/discussion/tests/test_notifications.py b/plone/app/discussion/tests/test_notifications.py index 1c397c1..90b6707 100644 --- a/plone/app/discussion/tests/test_notifications.py +++ b/plone/app/discussion/tests/test_notifications.py @@ -42,7 +42,6 @@ class TestUserNotificationUnit(unittest.TestCase): '.user_notification_enabled'] = True # Create test content self.portal.invokeFactory('Document', 'doc1') - self.portal_discussion = self.portal.portal_discussion # Archetypes content types store data as utf-8 encoded strings # The missing u in front of a string is therefor not missing self.portal.doc1.title = 'Kölle Alaaf' # What is "Fasching"? @@ -189,7 +188,6 @@ class TestModeratorNotificationUnit(unittest.TestCase): ] = True # Create test content self.portal.invokeFactory('Document', 'doc1') - self.portal_discussion = self.portal.portal_discussion # Archetypes content types store data as utf-8 encoded strings # The missing u in front of a string is therefor not missing self.portal.doc1.title = 'Kölle Alaaf' # What is "Fasching"? diff --git a/plone/app/discussion/tests/test_tool.py b/plone/app/discussion/tests/test_tool.py deleted file mode 100644 index 1386cff..0000000 --- a/plone/app/discussion/tests/test_tool.py +++ /dev/null @@ -1,56 +0,0 @@ -import unittest2 as unittest - -from zope.component import queryUtility, createObject - -from plone.app.testing import TEST_USER_ID, setRoles - -from plone.app.discussion.testing import \ - PLONE_APP_DISCUSSION_INTEGRATION_TESTING - -from plone.app.discussion.interfaces import ICommentingTool, IConversation - - -class ToolTest(unittest.TestCase): - - layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING - - def setUp(self): - self.portal = self.layer['portal'] - setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory(id='doc1', - title='Document 1', - type_name='Document') - - def test_tool_indexing(self): - # Create a conversation. In this case we doesn't assign it to an - # object, as we just want to check the Conversation object API. - conversation = IConversation(self.portal.doc1) - - # Add a comment. - comment = createObject('plone.Comment') - comment.creator = 'jim' - comment.author_name = "Jim" - comment.text = 'Comment text' - - conversation.addComment(comment) - - # Check that the comment got indexed in the tool: - tool = queryUtility(ICommentingTool) - comment = list(tool.searchResults()) - self.assertTrue( - len(comment) == 1, - "There is only one comment, but we got" - " %s results in the search" % len(comment) - ) - self.assertEqual(comment[0].Title, 'Jim on Document 1') - - def test_unindexing(self): - pass - - def test_search(self): - # search returns only comments - pass - - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_workflow.py b/plone/app/discussion/tests/test_workflow.py index 8ea9e30..e54fecd 100644 --- a/plone/app/discussion/tests/test_workflow.py +++ b/plone/app/discussion/tests/test_workflow.py @@ -32,7 +32,6 @@ class WorkflowSetupTest(unittest.TestCase): self.portal.invokeFactory('Folder', 'test-folder') self.folder = self.portal['test-folder'] self.portal.portal_types['Document'].allow_discussion = True - self.portal_discussion = self.portal.portal_discussion self.folder.invokeFactory('Document', 'doc1') self.doc = self.folder.doc1 @@ -190,7 +189,6 @@ class CommentReviewWorkflowTest(unittest.TestCase): # Create a Document self.portal.invokeFactory('Document', 'doc1') - self.portal_discussion = self.portal.portal_discussion # Create a conversation for this Document conversation = IConversation(self.portal.doc1) From e7cae8430ab6eeeb745edc635a0203ff2a872d71 Mon Sep 17 00:00:00 2001 From: tisto Date: Thu, 10 Oct 2013 16:28:24 +0200 Subject: [PATCH 111/254] Replace deprecated test assert statements. --- CHANGES.rst | 3 +++ plone/app/discussion/tests/test_conversation.py | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 3c17efd..b90c691 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog 2.3.0 (unreleased) ------------------ +- Replace deprecated test assert statements. + [timo] + - Remove portal_discussion tool. [timo] diff --git a/plone/app/discussion/tests/test_conversation.py b/plone/app/discussion/tests/test_conversation.py index 0916c44..770e3af 100644 --- a/plone/app/discussion/tests/test_conversation.py +++ b/plone/app/discussion/tests/test_conversation.py @@ -91,10 +91,10 @@ class ConversationTest(unittest.TestCase): comment.author_username = "nobody" conversation.addComment(comment) comment.manage_permission("View", roles=tuple()) - self.assertEquals(0, conversation.total_comments) - self.assertEquals(None, conversation.last_comment_date) - self.assertEquals(["nobody"], list(conversation.commentators)) - self.assertEquals([], list(conversation.public_commentators)) + self.assertEqual(0, conversation.total_comments) + self.assertEqual(None, conversation.last_comment_date) + self.assertEqual(["nobody"], list(conversation.commentators)) + self.assertEqual([], list(conversation.public_commentators)) def test_delete_comment(self): # Create a conversation. In this case we doesn't assign it to an From d225cbfc9ac3b64f2be5856c3afb0f796e157f21 Mon Sep 17 00:00:00 2001 From: tisto Date: Wed, 16 Oct 2013 19:20:15 +0200 Subject: [PATCH 112/254] Remove bbb directory. --- CHANGES.rst | 3 +++ plone/app/discussion/bbb/__init__.py | 0 plone/app/discussion/bbb/discussiontool.py | 0 plone/app/discussion/bbb/migration.py | 0 plone/app/discussion/bbb/talkback.py | 0 5 files changed, 3 insertions(+) delete mode 100644 plone/app/discussion/bbb/__init__.py delete mode 100644 plone/app/discussion/bbb/discussiontool.py delete mode 100644 plone/app/discussion/bbb/migration.py delete mode 100644 plone/app/discussion/bbb/talkback.py diff --git a/CHANGES.rst b/CHANGES.rst index b90c691..f61ce24 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog 2.3.0 (unreleased) ------------------ +- Remove bbb directory. bbb was never really implemented. + [timo] + - Replace deprecated test assert statements. [timo] diff --git a/plone/app/discussion/bbb/__init__.py b/plone/app/discussion/bbb/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/plone/app/discussion/bbb/discussiontool.py b/plone/app/discussion/bbb/discussiontool.py deleted file mode 100644 index e69de29..0000000 diff --git a/plone/app/discussion/bbb/migration.py b/plone/app/discussion/bbb/migration.py deleted file mode 100644 index e69de29..0000000 diff --git a/plone/app/discussion/bbb/talkback.py b/plone/app/discussion/bbb/talkback.py deleted file mode 100644 index e69de29..0000000 From dcba2c2714a17f2829421a9c1068e923f98249bd Mon Sep 17 00:00:00 2001 From: David Glick Date: Fri, 18 Oct 2013 21:40:50 -0700 Subject: [PATCH 113/254] re-add ICommentingTool to support migration --- plone/app/discussion/interfaces.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index 733f4d0..d8a4da8 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -338,3 +338,11 @@ class IDiscussionSettings(Interface): class IDiscussionLayer(Interface): """Request marker installed via browserlayer.xml. """ + + +class ICommentingTool(Interface): + """For backwards-compatibility. + + This can be removed once we no longer support upgrading from versions + of Plone that had a portal_discussion tool. + """ From 00861f5f9cc29f17ec119eddd6d71804e0fcfcf5 Mon Sep 17 00:00:00 2001 From: aputtu Date: Tue, 22 Oct 2013 20:22:05 +0200 Subject: [PATCH 114/254] Corrections and additions to the Danish translation --- .../da/LC_MESSAGES/plone.app.discussion.po | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po index ec13feb..1fba6a5 100644 --- a/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po @@ -16,11 +16,11 @@ msgstr "" #: ../comment.py:311 msgid "A comment has been posted." -msgstr "En kommentar er gem." +msgstr "Der er oprettet en kommentar." #: ../interfaces.py:141 msgid "A comment id unique to this conversation" -msgstr "En kommentar-id som er unik for denne dialog" +msgstr "Et kommentar-id som er unikt for denne dialog" #: ../browser/comments.py:72 msgid "Add a comment" @@ -64,7 +64,7 @@ msgstr "Oprettelses-dato" #: ../interfaces.py:40 msgid "Date of the most recent public comment" -msgstr "" +msgstr "Dato for den seneste, offentlige kommentar" #: ../vocabularies.py:44 msgid "Disabled" @@ -80,7 +80,7 @@ msgstr "Redigering blev afbrudt" #: ../interfaces.py:153 msgid "Email" -msgstr "Email" +msgstr "E-mail" #: ../browser/controlpanel.py:63 msgid "Enable Comments" @@ -88,7 +88,7 @@ msgstr "Slå kommentarer til" #: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" -msgstr "Id'en på den kommentar, denne kommentar er et svar til" +msgstr "Id'et på den kommentar, denne kommentar er et svar til" #: ../interfaces.py:158 msgid "MIME type" @@ -108,7 +108,7 @@ msgstr "Navn" #: ../interfaces.py:162 msgid "Notify me of new comments via email." -msgstr "Send besked om nye kommentarer pr. email." +msgstr "Send besked om nye kommentarer per e-mail." #: ./plone.app.discussion/plone/app/discussion/configure.zcml msgid "Plone Discussions" @@ -116,7 +116,7 @@ msgstr "Plone diskussioner" #: ../interfaces.py:131 msgid "Portal type" -msgstr "Portal type" +msgstr "Portaltype" #: ../browser/controlpanel.py:71 msgid "Save" @@ -128,27 +128,27 @@ msgstr "Liste over kommentatorer (brugernavne)" #: ../interfaces.py:50 msgid "The set of unique commentators (usernames) of published_comments" -msgstr "" +msgstr "Gruppen af unikke kommentatorer (brugernavne) fra published_comments" #: ../interfaces.py:34 msgid "Total number of public comments on this item" -msgstr "" +msgstr "Det samlede antal offentlige kommentarer til dette element" #: ../comment.py:158 msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." -msgstr "" +msgstr "Transformation '%s' => '%s' er ikke muligt. Mislykkedes med at transformere kommentaren '%s'." #: ../browser/controlpanel.py:69 msgid "User Email Notification" -msgstr "Email-notificering af brugere" +msgstr "E-mail-notificering af brugere" #: ../interfaces.py:166 msgid "Username of the commenter" -msgstr "" +msgstr "Kommentatorens brugernavn" #: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." -msgstr "Din kommentar venter på godkendelse." +msgstr "Din kommentar venter på godkendelse." #. Default: "Comment" #: ../browser/comments.py:131 @@ -168,7 +168,7 @@ msgstr "Godkend" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" -msgstr "Du kan tilføje en kommentar ved at udfylde formularen nedenfor. Ren tekst-formattering. Web- og emailadresser bliver automatisk lavet om til klikbare links." +msgstr "Du kan tilføje en kommentar ved at udfylde formularen nedenfor. Ren tekst-formattering. Web- og e-mailadresser bliver automatisk lavet om til klikbare links." #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." #: ../browser/comments.py:51 From 410b8c998ae479e0de5607d0a5825a68e1f722b8 Mon Sep 17 00:00:00 2001 From: JeanMichel FRANCOIS Date: Mon, 4 Nov 2013 16:30:14 +0100 Subject: [PATCH 115/254] Fix ownership of comments. --- CHANGES.rst | 1 + plone/app/discussion/browser/comments.py | 3 +++ .../discussion/tests/test_comments_viewlet.py | 25 +++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index f61ce24..a5df199 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,6 +17,7 @@ Changelog PLONE_FIXTURE. [timo] +- Fix ownership of comments. [toutpt] 2.2.10 (2013-09-24) ------------------- diff --git a/plone/app/discussion/browser/comments.py b/plone/app/discussion/browser/comments.py index bcf5dbe..87608c3 100644 --- a/plone/app/discussion/browser/comments.py +++ b/plone/app/discussion/browser/comments.py @@ -196,6 +196,7 @@ class CommentForm(extensible.ExtensibleForm, form.Form): # Member member = portal_membership.getAuthenticatedMember() username = member.getUserName() + user = member.getUser() email = member.getProperty('email') fullname = member.getProperty('fullname') if not fullname or fullname == '': @@ -205,6 +206,8 @@ class CommentForm(extensible.ExtensibleForm, form.Form): fullname = unicode(fullname, 'utf-8') if email and isinstance(email, str): email = unicode(email, 'utf-8') + comment.changeOwnership(user, recursive=False) + comment.manage_setLocalRoles(username, ["Owner"]) comment.creator = username comment.author_username = username comment.author_name = fullname diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index c2375af..f4a3d1e 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -120,6 +120,21 @@ class TestCommentForm(unittest.TestCase): self.assertEqual(len(errors), 0) self.assertFalse(commentForm.handleComment(commentForm, "foo")) + comments = IConversation(commentForm.context).getComments() + comments = [comment for comment in comments] # consume itertor + self.assertEqual(len(comments), 1) + + for comment in comments: + self.assertEqual(comment.text, u"bar") + self.assertEqual(comment.creator, "test-user") + self.assertEqual(comment.getOwner().getUserName(), "test-user") + local_roles = comment.get_local_roles() + self.assertEqual(len(local_roles), 1) + userid, roles = local_roles[0] + self.assertEqual(userid, 'test-user') + self.assertEqual(len(roles), 1) + self.assertEqual(roles[0], 'Owner') + def test_add_anonymous_comment(self): self.portal.doc1.allow_discussion = True @@ -160,6 +175,16 @@ class TestCommentForm(unittest.TestCase): self.assertEqual(len(errors), 0) self.assertFalse(commentForm.handleComment(commentForm, "action")) + comments = IConversation(commentForm.context).getComments() + comments = [comment for comment in comments] # consume itertor + self.assertEqual(len(comments), 1) + + for comment in IConversation(commentForm.context).getComments(): + self.assertEqual(comment.text, u"bar") + self.assertIsNone(comment.creator) + roles = comment.get_local_roles() + self.assertEqual(len(roles), 0) + def test_can_not_add_comments_if_discussion_is_not_allowed(self): """Make sure that comments can't be posted if discussion is disabled. """ From c45650261e6fe60698c68e3cd21261c40ca66acc Mon Sep 17 00:00:00 2001 From: maartenkling Date: Tue, 12 Nov 2013 10:45:59 +0100 Subject: [PATCH 116/254] Rename @@discussion-settings to @@discussion-controlpanel --- CHANGES.rst | 3 +++ plone/app/discussion/browser/configure.zcml | 7 +++++++ plone/app/discussion/browser/controlpanel.py | 2 +- plone/app/discussion/browser/stylesheets/discussion.css | 1 + plone/app/discussion/profiles/default/controlpanel.xml | 4 ++-- .../tests/functional_test_comment_review_workflow.txt | 2 +- plone/app/discussion/tests/functional_test_comments.txt | 2 +- plone/app/discussion/tests/test_controlpanel.py | 2 +- 8 files changed, 17 insertions(+), 6 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index a5df199..61ff6fa 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog 2.3.0 (unreleased) ------------------ +- Rename @@discussion-settings to @@discussion-controlpanel + [maartenkling] + - Remove bbb directory. bbb was never really implemented. [timo] diff --git a/plone/app/discussion/browser/configure.zcml b/plone/app/discussion/browser/configure.zcml index a240167..5ad08f6 100644 --- a/plone/app/discussion/browser/configure.zcml +++ b/plone/app/discussion/browser/configure.zcml @@ -133,6 +133,13 @@ /> + + Manage portal -
\ No newline at end of file +
diff --git a/plone/app/discussion/tests/functional_test_comment_review_workflow.txt b/plone/app/discussion/tests/functional_test_comment_review_workflow.txt index 069875e..7cc743c 100644 --- a/plone/app/discussion/tests/functional_test_comment_review_workflow.txt +++ b/plone/app/discussion/tests/functional_test_comment_review_workflow.txt @@ -61,7 +61,7 @@ We need to commit the transaction, otherwise setting the workflow will not work. Enable anonymous comments - >>> browser.open(portal_url+'/@@discussion-settings') + >>> browser.open(portal_url+'/@@discussion-controlpanel') >>> browser.getControl(name='form.widgets.anonymous_comments:list').value = True >>> browser.getControl(name='form.buttons.save').click() diff --git a/plone/app/discussion/tests/functional_test_comments.txt b/plone/app/discussion/tests/functional_test_comments.txt index 736da64..835e5f6 100644 --- a/plone/app/discussion/tests/functional_test_comments.txt +++ b/plone/app/discussion/tests/functional_test_comments.txt @@ -182,7 +182,7 @@ Enable anonymous comment >>> browser.getControl(name='__ac_name').value = 'admin' >>> browser.getControl(name='__ac_password').value = 'secret' >>> browser.getControl(name='submit').click() - >>> browser.open(portal_url+'/@@discussion-settings') + >>> browser.open(portal_url+'/@@discussion-controlpanel') >>> browser.getControl(name='form.widgets.anonymous_comments:list').value = [True] >>> browser.getControl(name='form.buttons.save').click() >>> browser.open(portal_url + '/logout') diff --git a/plone/app/discussion/tests/test_controlpanel.py b/plone/app/discussion/tests/test_controlpanel.py index a184bb7..5d97b5b 100644 --- a/plone/app/discussion/tests/test_controlpanel.py +++ b/plone/app/discussion/tests/test_controlpanel.py @@ -33,7 +33,7 @@ class RegistryTest(unittest.TestCase): def test_discussion_controlpanel_view(self): view = getMultiAdapter( (self.portal, self.portal.REQUEST), - name="discussion-settings" + name="discussion-controlpanel" ) view = view.__of__(self.portal) self.assertTrue(view()) From c3ce01edd08c54baf414990ac2c72ecefac9361f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Suttor?= Date: Wed, 13 Nov 2013 15:53:12 +0100 Subject: [PATCH 117/254] Use defaultUser.png instead of defaultUser.gif Indeed, defaultUser.gif is in a deprecated skins folder (Products/CMFPlone/ skins/plone_deprecated/defaultUser.gif) and not defaultUser.png (Products/CMFPlone/skins/plone_images/defaultUser.png). Test is also updated. --- CHANGES.rst | 3 +++ plone/app/discussion/browser/comments.pt | 4 ++-- plone/app/discussion/browser/comments.py | 2 +- plone/app/discussion/tests/test_comments_viewlet.py | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index a5df199..42b7ac9 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog 2.3.0 (unreleased) ------------------ +- Put defaultUser.png instead of old defaultUser.gif + [bsuttor] + - Remove bbb directory. bbb was never really implemented. [timo] diff --git a/plone/app/discussion/browser/comments.pt b/plone/app/discussion/browser/comments.pt index c192e7a..4e32e99 100644 --- a/plone/app/discussion/browser/comments.pt +++ b/plone/app/discussion/browser/comments.pt @@ -42,14 +42,14 @@
- - Date: Thu, 14 Nov 2013 09:08:31 +0100 Subject: [PATCH 118/254] update basque translation --- .../eu/LC_MESSAGES/plone.app.discussion.po | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po index df9ac4a..702daf6 100644 --- a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" "POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" -"PO-Revision-Date: 2012-02-08 09:14+0100\n" +"PO-Revision-Date: 2013-11-14 09:07+0100\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: eu \n" "MIME-Version: 1.0\n" @@ -65,7 +65,7 @@ msgstr "Sorrera data" #: ../interfaces.py:40 msgid "Date of the most recent public comment" -msgstr "" +msgstr "Azken erantzunaren data" #: ../vocabularies.py:44 msgid "Disabled" @@ -129,15 +129,15 @@ msgstr "Erantzunak eman dituzten erabiltzaileak (erabiltzaile-izenak)" #: ../interfaces.py:50 msgid "The set of unique commentators (usernames) of published_comments" -msgstr "" +msgstr "Erantzun-emaleen erabiltzaile izenak" #: ../interfaces.py:34 msgid "Total number of public comments on this item" -msgstr "" +msgstr "Elementu honen erantzun publiko kopurua" #: ../comment.py:158 msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." -msgstr "" +msgstr "'%s' => '%s' eraldaketa ez dago. Huts egin du '%s' erantzuna eraldatzeak." #: ../browser/controlpanel.py:69 msgid "User Email Notification" @@ -145,7 +145,7 @@ msgstr "E-posta abisuak" #: ../interfaces.py:166 msgid "Username of the commenter" -msgstr "" +msgstr "Erantzuna utzi duenaren erabiltzaile-izena" #: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." @@ -188,9 +188,8 @@ msgstr "Erantzuna formulario hau betez utzi dezakezu. Formatua testu arruntarena #. Default: "${author_name} on ${content}" #: ../comment.py:48 -#, fuzzy msgid "comment_title" -msgstr "${creator} ${content} buruz" +msgstr "${content} - ${creator}" #. Default: "Action" #: ../browser/moderation.pt:85 @@ -230,7 +229,7 @@ msgstr "Aukeratuta badago, erabiltzaile anonimoek erantzunak gehitu ditzakete lo #. Default: "If selected, anonymous user will have to give their email." #: ../interfaces.py:334 msgid "help_anonymous_email_enabled" -msgstr "" +msgstr "Aukeratuta badago, erabiltzaile anonimoek eposta helbidea idatzi beharko dute" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." #: ../interfaces.py:279 @@ -294,7 +293,7 @@ msgstr "Aktibatu erabiltzaile anonimoen erantzunak" #. Default: "Enable anonymous email field" #: ../interfaces.py:332 msgid "label_anonymous_email_enabled" -msgstr "" +msgstr "Aktibatu anonimoentzat eposta eremua" #. Default: "Apply" #: ../browser/moderation.pt:71 From ceae98cd195d23463247654a86eab14a78bc91f7 Mon Sep 17 00:00:00 2001 From: Mikel Larreategi Date: Thu, 14 Nov 2013 09:10:35 +0100 Subject: [PATCH 119/254] update basque translation --- .../eu/LC_MESSAGES/plone.app.discussion.po | 100 +++++++++--------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po index 702daf6..2f9797e 100644 --- a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" "POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" -"PO-Revision-Date: 2013-11-14 09:07+0100\n" +"PO-Revision-Date: 2013-11-14 09:09+0100\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: eu \n" "MIME-Version: 1.0\n" @@ -15,11 +15,11 @@ msgstr "" "Domain: DOMAIN\n" "X-Poedit-Language: Basque\n" -#: ../comment.py:311 +#: ../comment.py:326 msgid "A comment has been posted." msgstr "Erantzun bat argitaratu da." -#: ../interfaces.py:141 +#: ../interfaces.py:143 msgid "A comment id unique to this conversation" msgstr "Eztabaida honetarako bakarra den erantzunaren id-a." @@ -27,16 +27,16 @@ msgstr "Eztabaida honetarako bakarra den erantzunaren id-a." msgid "Add a comment" msgstr "Erantzuna gehitu" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Erantzun anonimoak" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:258 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Utzi" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Aldaketak gordeta" @@ -48,18 +48,18 @@ msgstr "Erantzuna onartuta." msgid "Comment deleted." msgstr "Erantzuna ezabatuta." -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Erantzuna eman duenaren irudia." msgid "Commenting infrastructure for Plone" msgstr "Ploneren Erantzunen Azpiegitura" -#: ../interfaces.py:136 +#: ../interfaces.py:138 msgid "Conversation" msgstr "Eztabaida" -#: ../interfaces.py:167 +#: ../interfaces.py:176 msgid "Creation date" msgstr "Sorrera data" @@ -75,39 +75,39 @@ msgstr "Desaktibatuta" msgid "Discussion settings" msgstr "Eztabaidaren ezarpenak" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Edizioa utzita" -#: ../interfaces.py:153 +#: ../interfaces.py:155 msgid "Email" msgstr "E-posta" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Erantzunak aktibatu" -#: ../interfaces.py:144 +#: ../interfaces.py:146 msgid "Id of comment this comment is in reply to" msgstr "Erantzun honek erreferentzia egiten dion erantzunaren id-a" -#: ../interfaces.py:158 +#: ../interfaces.py:160 msgid "MIME type" msgstr "MIME mota" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Moderatzailea e-postaz abisatu" -#: ../interfaces.py:168 +#: ../interfaces.py:177 msgid "Modification date" msgstr "Aldaketa data" -#: ../interfaces.py:138 +#: ../interfaces.py:140 msgid "Name" msgstr "Izena" -#: ../interfaces.py:162 +#: ../interfaces.py:169 msgid "Notify me of new comments via email." msgstr "Erantzun berriak e-postaz bidali" @@ -115,11 +115,11 @@ msgstr "Erantzun berriak e-postaz bidali" msgid "Plone Discussions" msgstr "Plone Eztabaidak" -#: ../interfaces.py:131 +#: ../interfaces.py:133 msgid "Portal type" msgstr "Elementu mota" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Gorde" @@ -136,23 +136,23 @@ msgid "Total number of public comments on this item" msgstr "Elementu honen erantzun publiko kopurua" #: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." -msgstr "'%s' => '%s' eraldaketa ez dago. Huts egin du '%s' erantzuna eraldatzeak." +msgid "Transform '%s' => '%s' not available." +msgstr "'%s' => '%s' eraldaketa ez dago erabilgarri." -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "E-posta abisuak" -#: ../interfaces.py:166 +#: ../interfaces.py:175 msgid "Username of the commenter" msgstr "Erantzuna utzi duenaren erabiltzaile-izena" -#: ../browser/comments.py:244 +#: ../browser/comments.py:251 msgid "Your comment awaits moderator approval." msgstr "Zure erantzuna moderazio kolan dago." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:132 msgid "add_comment_button" msgstr "Eman erantzuna" @@ -222,17 +222,17 @@ msgid "heading_moderate_comments" msgstr "Erantzunak moderatu" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:247 msgid "help_anonymous_comments" msgstr "Aukeratuta badago, erabiltzaile anonimoek erantzunak gehitu ditzakete login egin gabe. Berariaz gomendatzen dizugu Captcha kontrolen bat aktibatzea anonimoen erantzunak baimentzen badituzu." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:362 msgid "help_anonymous_email_enabled" msgstr "Aukeratuta badago, erabiltzaile anonimoek eposta helbidea idatzi beharko dute" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:297 msgid "help_captcha" msgstr "Erabili aukera hau Captcha aktibatu edo desaktibatzeko. Instalatu plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet edo collective.z3cform.norobots aukerarik ez baldin badago." @@ -245,53 +245,53 @@ msgstr "" "Erantzunen Moderazio Workflowa aktibatzeko, joan elementu-moten kontrol panelera, aukeratu 'Erantzuna' eta ezarri 'Erantzunen Moderazio Workflowa'." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:233 msgid "help_globally_enabled" msgstr "Aukeratuta badago, atarian erantzunak gehitu daitezke. Edonola ere, elementu-mota bakoitzarentzat erantzunak baimendu beharko dituzu erabiltzaileak erantzunak ematen hasi aurretik." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:263 msgid "help_moderation_enabled" msgstr "Aukeratuta badago, erantzuna 'Zain' izeneko egoeran geldituko da eta ez da argitaratuko. 'Erantzunak errebisatu' baimena duten erabiltzaileek ('Zuzentzailea' edo 'Kudeatzailea') argitaratu ditzakete albisteak. Erantzunen worfklowa pertsonalizatu nahi baduzu, elementu-moten kontrol panelera joan zaitez." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:339 msgid "help_moderator_email" msgstr "Moderatzailearen notifikazioak bidali behar diren helbidea." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#: ../interfaces.py:324 msgid "help_moderator_notification_enabled" msgstr "Aukeratuta badago, moderatzaileari e-posta abisua helduko zaio erantzun bat gehitzean. Moderatzailearen e-posta atariaren E-postaren konfigurazioan dago (Atariaren 'Nork' helbidea)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:313 msgid "help_show_commenter_image" msgstr "Aukeratuta badago, erantzuna eman duenaren irudi bat agertuko da testuaren ondoan." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:280 msgid "help_text_transform" msgstr "Erabili aukera hau erantzunaren testua nolabait eraldatu behar bada. 'Testu arrunta' edo 'Testu argia'ren artean aukeratu dezakezu. 'Testu argia'-k testu arrunta HTML bihurtzen du lerro saltoak eta espazioak mantenduz, eta web helbideak eta e-postak klikagarri eginez." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:351 msgid "help_user_notification_enabled" msgstr "Aukeratuta badago, erabiltzaileek euren erantzunen erantzunak e-postaz jasotzea aktibatu dezakete." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:176 msgid "label_anonymous" msgstr "Anonimoak" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:245 msgid "label_anonymous_comments" msgstr "Aktibatu erabiltzaile anonimoen erantzunak" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:360 msgid "label_anonymous_email_enabled" msgstr "Aktibatu anonimoentzat eposta eremua" @@ -301,12 +301,12 @@ msgid "label_apply" msgstr "Aplikatu" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:295 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:162 msgid "label_comment" msgstr "Erantzuna" @@ -321,22 +321,22 @@ msgid "label_delete" msgstr "Ezabatu" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:231 msgid "label_globally_enabled" msgstr "Erantzunak globalki aktibatu" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:259 msgid "label_moderation_enabled" msgstr "Erantzunen moderazioa aktibatu." #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:335 msgid "label_moderator_email" msgstr "Moderatzailearen e-posta helbidea" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:322 msgid "label_moderator_notification_enabled" msgstr "Aktibatu moderatzaileari e-postaz abisatzea" @@ -351,7 +351,7 @@ msgid "label_says" msgstr "dio:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:311 msgid "label_show_commenter_image" msgstr "Erantzuna eman duenaren irudia erakutsi" @@ -361,17 +361,17 @@ msgid "label_show_full_comment_text" msgstr "Erakutsi testu osoa" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:157 msgid "label_subject" msgstr "Gaia" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:278 msgid "label_text_transform" msgstr "Erantzunari aplikatu beharreko transformazioa" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:347 msgid "label_user_notification_enabled" msgstr "Aktibatu erabiltzaileek e-postaz jakinaraztea" From 4fdd1f746728eef8f58ff8dc94c8cfc6d60fa522 Mon Sep 17 00:00:00 2001 From: Mikel Larreategi Date: Thu, 14 Nov 2013 09:13:20 +0100 Subject: [PATCH 120/254] update basque translation --- .../eu/LC_MESSAGES/plone.app.discussion.po | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po index 2f9797e..a699fbc 100644 --- a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po @@ -222,17 +222,17 @@ msgid "heading_moderate_comments" msgstr "Erantzunak moderatu" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:247 +#: ../interfaces.py:215 msgid "help_anonymous_comments" msgstr "Aukeratuta badago, erabiltzaile anonimoek erantzunak gehitu ditzakete login egin gabe. Berariaz gomendatzen dizugu Captcha kontrolen bat aktibatzea anonimoen erantzunak baimentzen badituzu." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:362 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "Aukeratuta badago, erabiltzaile anonimoek eposta helbidea idatzi beharko dute" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:297 +#: ../interfaces.py:265 msgid "help_captcha" msgstr "Erabili aukera hau Captcha aktibatu edo desaktibatzeko. Instalatu plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet edo collective.z3cform.norobots aukerarik ez baldin badago." @@ -245,37 +245,37 @@ msgstr "" "Erantzunen Moderazio Workflowa aktibatzeko, joan elementu-moten kontrol panelera, aukeratu 'Erantzuna' eta ezarri 'Erantzunen Moderazio Workflowa'." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:233 +#: ../interfaces.py:201 msgid "help_globally_enabled" msgstr "Aukeratuta badago, atarian erantzunak gehitu daitezke. Edonola ere, elementu-mota bakoitzarentzat erantzunak baimendu beharko dituzu erabiltzaileak erantzunak ematen hasi aurretik." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:263 +#: ../interfaces.py:231 msgid "help_moderation_enabled" msgstr "Aukeratuta badago, erantzuna 'Zain' izeneko egoeran geldituko da eta ez da argitaratuko. 'Erantzunak errebisatu' baimena duten erabiltzaileek ('Zuzentzailea' edo 'Kudeatzailea') argitaratu ditzakete albisteak. Erantzunen worfklowa pertsonalizatu nahi baduzu, elementu-moten kontrol panelera joan zaitez." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:339 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "Moderatzailearen notifikazioak bidali behar diren helbidea." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:324 +#: ../interfaces.py:292 msgid "help_moderator_notification_enabled" msgstr "Aukeratuta badago, moderatzaileari e-posta abisua helduko zaio erantzun bat gehitzean. Moderatzailearen e-posta atariaren E-postaren konfigurazioan dago (Atariaren 'Nork' helbidea)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:313 +#: ../interfaces.py:281 msgid "help_show_commenter_image" msgstr "Aukeratuta badago, erantzuna eman duenaren irudi bat agertuko da testuaren ondoan." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:280 +#: ../interfaces.py:248 msgid "help_text_transform" msgstr "Erabili aukera hau erantzunaren testua nolabait eraldatu behar bada. 'Testu arrunta' edo 'Testu argia'ren artean aukeratu dezakezu. 'Testu argia'-k testu arrunta HTML bihurtzen du lerro saltoak eta espazioak mantenduz, eta web helbideak eta e-postak klikagarri eginez." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:351 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Aukeratuta badago, erabiltzaileek euren erantzunen erantzunak e-postaz jasotzea aktibatu dezakete." @@ -286,12 +286,12 @@ msgid "label_anonymous" msgstr "Anonimoak" #. Default: "Enable anonymous comments" -#: ../interfaces.py:245 +#: ../interfaces.py:213 msgid "label_anonymous_comments" msgstr "Aktibatu erabiltzaile anonimoen erantzunak" #. Default: "Enable anonymous email field" -#: ../interfaces.py:360 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "Aktibatu anonimoentzat eposta eremua" @@ -301,7 +301,7 @@ msgid "label_apply" msgstr "Aplikatu" #. Default: "Captcha" -#: ../interfaces.py:295 +#: ../interfaces.py:263 msgid "label_captcha" msgstr "Captcha" @@ -321,22 +321,22 @@ msgid "label_delete" msgstr "Ezabatu" #. Default: "Globally enable comments" -#: ../interfaces.py:231 +#: ../interfaces.py:199 msgid "label_globally_enabled" msgstr "Erantzunak globalki aktibatu" #. Default: "Enable comment moderation" -#: ../interfaces.py:259 +#: ../interfaces.py:227 msgid "label_moderation_enabled" msgstr "Erantzunen moderazioa aktibatu." #. Default: "Moderator Email Address" -#: ../interfaces.py:335 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Moderatzailearen e-posta helbidea" #. Default: "Enable moderator email notification" -#: ../interfaces.py:322 +#: ../interfaces.py:290 msgid "label_moderator_notification_enabled" msgstr "Aktibatu moderatzaileari e-postaz abisatzea" @@ -351,7 +351,7 @@ msgid "label_says" msgstr "dio:" #. Default: "Show commenter image" -#: ../interfaces.py:311 +#: ../interfaces.py:279 msgid "label_show_commenter_image" msgstr "Erantzuna eman duenaren irudia erakutsi" @@ -366,12 +366,12 @@ msgid "label_subject" msgstr "Gaia" #. Default: "Comment text transform" -#: ../interfaces.py:278 +#: ../interfaces.py:246 msgid "label_text_transform" msgstr "Erantzunari aplikatu beharreko transformazioa" #. Default: "Enable user email notification" -#: ../interfaces.py:347 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Aktibatu erabiltzaileek e-postaz jakinaraztea" From 654869a30dfbdc3031eec3af5fd81a7a7e2bcde3 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 14 Nov 2013 11:01:14 +0100 Subject: [PATCH 121/254] Remove old topic test. New collections are tested in p.a.contenttypes anyways. --- plone/app/discussion/tests/test_catalog.py | 25 ---------------------- 1 file changed, 25 deletions(-) diff --git a/plone/app/discussion/tests/test_catalog.py b/plone/app/discussion/tests/test_catalog.py index 1560ad2..42ff8e0 100644 --- a/plone/app/discussion/tests/test_catalog.py +++ b/plone/app/discussion/tests/test_catalog.py @@ -532,31 +532,6 @@ class CommentCatalogTest(unittest.TestCase): self.assertTrue(brains) self.assertEqual(len(brains), 6) - def test_collection(self): - if COLLECTION_TYPE == "Topic": - self.portal.invokeFactory('Topic', id='topic') - topic = self.portal.topic - crit = topic.addCriterion('Type', 'ATSimpleStringCriterion') - crit.setValue('Comment') - query = topic.buildQuery() - - self.assertEqual(len(query), 1) - self.assertEqual(query['Type'], 'Comment') - self.assertEqual(len(topic.queryCatalog()), 1) - else: - self.portal.invokeFactory('Collection', id='collection') - collection = self.portal.collection - collection.query = [{ - 'i': 'Type', - 'o': 'plone.app.querystring.operation.string.is', - 'v': 'Comment', - }] - - self.assertEqual(collection.results().length, 1) - self.assertEqual(collection.results()[0].text, 'Comment text') - self.assertEqual(collection.results()[0].creator, 'jim') - self.assertEqual(collection.results()[0].author_name, 'Jim') - class NoConversationCatalogTest(unittest.TestCase): From 7cfbd20d728078a3316d25e58b3f147b6e9983f9 Mon Sep 17 00:00:00 2001 From: David Glick Date: Fri, 15 Nov 2013 00:11:13 -0800 Subject: [PATCH 122/254] don't fail test if portal_atct is missing --- plone/app/discussion/tests/test_catalog.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plone/app/discussion/tests/test_catalog.py b/plone/app/discussion/tests/test_catalog.py index 42ff8e0..8c5291a 100644 --- a/plone/app/discussion/tests/test_catalog.py +++ b/plone/app/discussion/tests/test_catalog.py @@ -48,6 +48,8 @@ class CatalogSetupTest(unittest.TestCase): ) def test_collection_criteria_installed(self): + if 'portal_atct' not in self.portal: + return try: self.portal.portal_atct.getIndex('commentators') self.portal.portal_atct.getIndex('total_comments') From f1747c7a87d9c8aacc0e79cf17291b8539b51d99 Mon Sep 17 00:00:00 2001 From: Roman Kozlovskyi Date: Sun, 17 Nov 2013 21:10:02 +0200 Subject: [PATCH 123/254] Updated ukrainian translations --- .../uk/LC_MESSAGES/plone.app.discussion.po | 98 +++++++++---------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po index 615f639..c9a1694 100644 --- a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po @@ -14,11 +14,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../comment.py:311 +#: ../comment.py:326 msgid "A comment has been posted." msgstr "Коментар додано." -#: ../interfaces.py:141 +#: ../interfaces.py:143 msgid "A comment id unique to this conversation" msgstr "Унікальний ідентифікатор коментаря для цієї розмови" @@ -26,16 +26,16 @@ msgstr "Унікальний ідентифікатор коментаря дл msgid "Add a comment" msgstr "Додати коментар" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Анонімне коментування" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:258 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Скасувати" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Зміни збережено" @@ -47,18 +47,18 @@ msgstr "Коментар опубліковано." msgid "Comment deleted." msgstr "Коментар знищено." -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Зображення коментатора" msgid "Commenting infrastructure for Plone" msgstr "Інфраструктура коментування в Plone" -#: ../interfaces.py:136 +#: ../interfaces.py:138 msgid "Conversation" msgstr "Розмова" -#: ../interfaces.py:167 +#: ../interfaces.py:176 msgid "Creation date" msgstr "Дата створення" @@ -74,39 +74,39 @@ msgstr "Вимкнено" msgid "Discussion settings" msgstr "Налаштуванняя коментування" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Редагування скасовано" -#: ../interfaces.py:153 +#: ../interfaces.py:155 msgid "Email" msgstr "Електронна адреса" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Увімкнути можливість додавати коментарі" -#: ../interfaces.py:144 +#: ../interfaces.py:146 msgid "Id of comment this comment is in reply to" msgstr "Id коментаря, відповіддю на який - є цей коментар" -#: ../interfaces.py:158 +#: ../interfaces.py:160 msgid "MIME type" msgstr "MIME-тип" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Сповіщення модератора електронною поштою" -#: ../interfaces.py:168 +#: ../interfaces.py:177 msgid "Modification date" msgstr "Дата зміни" -#: ../interfaces.py:138 +#: ../interfaces.py:140 msgid "Name" msgstr "Ім'я" -#: ../interfaces.py:162 +#: ../interfaces.py:169 msgid "Notify me of new comments via email." msgstr "Повідомляти про нові коментарі поштою." @@ -114,11 +114,11 @@ msgstr "Повідомляти про нові коментарі поштою." msgid "Plone Discussions" msgstr "Коментування в Plone" -#: ../interfaces.py:131 +#: ../interfaces.py:133 msgid "Portal type" msgstr "Портал тип" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Зберегти" @@ -135,23 +135,23 @@ msgid "Total number of public comments on this item" msgstr "Загальна кількість публічних коментарів для даного елемента" #: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." -msgstr "Не доступне перетворення '%s' => '%s'. Не вдалося перетворити коментар '%s'." +msgid "Transform '%s' => '%s' not available." +msgstr "Не доступне перетворення '%s' => '%s'." -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Сповіщення користувача електронною поштою" -#: ../interfaces.py:166 +#: ../interfaces.py:175 msgid "Username of the commenter" msgstr "Ім'я автора коментаря" -#: ../browser/comments.py:244 +#: ../browser/comments.py:251 msgid "Your comment awaits moderator approval." msgstr "Ваш коментар очікує затвердження модератором." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:132 msgid "add_comment_button" msgstr "Коментар" @@ -221,17 +221,17 @@ msgid "heading_moderate_comments" msgstr "Модерування коментарів" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:215 msgid "help_anonymous_comments" msgstr "Якщо вибрано - то анонімні користувачі зможуть додавати коментарі без входу в систему. Для таких випадків рекомендуєтсья використовувати капчу, щоб запобігти надсиланню спаму." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "Якщо вибрано, анонімний користувач повинен буде вказати свою електронну пошту." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:265 msgid "help_captcha" msgstr "Використовуйте цей параметр, щоб увімкнути або вимкнути капчу для коментарів. Для цього спершу встановіть plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet або collective.z3cform.norobots." @@ -244,53 +244,53 @@ msgstr "" "To enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\".\"" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:201 msgid "help_globally_enabled" msgstr "Якщо вибрано, користувачі зможуть додавати коментарі на сайт. Але спочатку необхідно увімкнути можливість коментування для певних типів вмісту, тек, об'єктів." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:231 msgid "help_moderation_enabled" msgstr "Якщо вибрано, коментарі увійде в стан 'В очікуванні', у якому вони невидимі для громадськості. Користувач з правом 'Огляд коментарів' ('Рецензент' або 'Менеджер') може схвалити коментар, щоб зробити їх видимими для громадськості. Якщо ви хочете налаштувати робочий процес коментарів, ви повинні піти в панель керування типів." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "Адреса, за якою модератору будуть надсилатися повідомлення." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#: ../interfaces.py:292 msgid "help_moderator_notification_enabled" msgstr "Якщо вибрано, модератор отримує повідомлення, якщо коментар вимагає уваги. Адресу електронної пошти модератора можна знайти в 'Пошта' панелі керування (Адреса 'Від')" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:281 msgid "help_show_commenter_image" msgstr "Якщо вибрано, зображення коментатора буде відображатись поруч з коментарем." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:248 msgid "help_text_transform" msgstr "Виберіть як повинен бути перетворений текст коментаря. Ви можете вибрати між 'Звичайний текст' і 'Інтелектуальні тексту'. 'Інтелектуальний текст' перетворює текст в HTML, де рядки і відступи зберігаються, інтернет адреси та адреси електронної пошти перетворяться в активні посилання." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Якщо вибрано, користувачі зможуть обрати можливість отримувати нотифікації про нові коментарі поштою." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:176 msgid "label_anonymous" msgstr "Анонім" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:213 msgid "label_anonymous_comments" msgstr "Увімкнути можливість анонімного коментування" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "Увімкнути поле електронної адреси для аноніма" @@ -300,12 +300,12 @@ msgid "label_apply" msgstr "Застосувати" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:263 msgid "label_captcha" msgstr "Капча" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:162 msgid "label_comment" msgstr "Коментар" @@ -320,22 +320,22 @@ msgid "label_delete" msgstr "Знищити" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:199 msgid "label_globally_enabled" msgstr "Увімкнути коментування для цілого сайту" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:227 msgid "label_moderation_enabled" msgstr "Увімкнути модерування коментарів" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Електронна адреса модератора" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:290 msgid "label_moderator_notification_enabled" msgstr "Увімкнути сповіщення модератора" @@ -350,7 +350,7 @@ msgid "label_says" msgstr "каже:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:279 msgid "label_show_commenter_image" msgstr "Показати зображення коментатора" @@ -360,17 +360,17 @@ msgid "label_show_full_comment_text" msgstr "показати повний текст коментаря" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:157 msgid "label_subject" msgstr "Тема" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:246 msgid "label_text_transform" msgstr "Перетворення тексту коментаря" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Увімкнути надcилання нотифікації користувачу через електронну адресу" From 5fb6968fcad4e40c25f6ae65a331f015bbd30ce0 Mon Sep 17 00:00:00 2001 From: Kees Hink Date: Fri, 10 May 2013 14:59:32 +0200 Subject: [PATCH 124/254] Add a test for Acquisition in comments. --- plone/app/discussion/testing.py | 4 + plone/app/discussion/tests/configure.zcml | 16 ++ plone/app/discussion/tests/profile/types.xml | 4 + .../profile/types/sample_content_type.xml | 47 ++++++ .../discussion/tests/profile/workflows.xml | 4 + .../definition.xml | 75 +++++++++ .../app/discussion/tests/test_acquisition.py | 145 ++++++++++++++++++ 7 files changed, 295 insertions(+) create mode 100644 plone/app/discussion/tests/configure.zcml create mode 100644 plone/app/discussion/tests/profile/types.xml create mode 100644 plone/app/discussion/tests/profile/types/sample_content_type.xml create mode 100644 plone/app/discussion/tests/profile/workflows.xml create mode 100644 plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml create mode 100644 plone/app/discussion/tests/test_acquisition.py diff --git a/plone/app/discussion/testing.py b/plone/app/discussion/testing.py index cf1066c..02b8fa3 100644 --- a/plone/app/discussion/testing.py +++ b/plone/app/discussion/testing.py @@ -35,10 +35,14 @@ class PloneAppDiscussion(PloneSandboxLayer): xmlconfig.file('configure.zcml', plone.app.discussion, context=configurationContext) + xmlconfig.file('configure.zcml', + plone.app.discussion.tests, + context=configurationContext) def setUpPloneSite(self, portal): # Install into Plone site using portal_setup applyProfile(portal, 'plone.app.discussion:default') + applyProfile(portal, 'plone.app.discussion.tests:testing') # Creates some users acl_users = getToolByName(portal, 'acl_users') diff --git a/plone/app/discussion/tests/configure.zcml b/plone/app/discussion/tests/configure.zcml new file mode 100644 index 0000000..ee79b95 --- /dev/null +++ b/plone/app/discussion/tests/configure.zcml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/plone/app/discussion/tests/profile/types.xml b/plone/app/discussion/tests/profile/types.xml new file mode 100644 index 0000000..0aec569 --- /dev/null +++ b/plone/app/discussion/tests/profile/types.xml @@ -0,0 +1,4 @@ + + + + diff --git a/plone/app/discussion/tests/profile/types/sample_content_type.xml b/plone/app/discussion/tests/profile/types/sample_content_type.xml new file mode 100644 index 0000000..7869638 --- /dev/null +++ b/plone/app/discussion/tests/profile/types/sample_content_type.xml @@ -0,0 +1,47 @@ + + + + + sample_content_type + Sample Content + document_icon.png + True + True + + + True + + plone.dexterity.content.Item + + cmf.AddPortalContent + + + + + + view + False + + + + + + + + + + + + + + + + + + + diff --git a/plone/app/discussion/tests/profile/workflows.xml b/plone/app/discussion/tests/profile/workflows.xml new file mode 100644 index 0000000..500f444 --- /dev/null +++ b/plone/app/discussion/tests/profile/workflows.xml @@ -0,0 +1,4 @@ + + + + diff --git a/plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml b/plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml new file mode 100644 index 0000000..89a9fb2 --- /dev/null +++ b/plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml @@ -0,0 +1,75 @@ + + + Access contents information + Change portal events + Modify portal content + View + + Visible to everyone, editable by the owner. + + Anonymous + + + Editor + Manager + Owner + Site Administrator + + + Editor + Manager + Owner + Site Administrator + + + + + + Previous transition + + transition/getId|nothing + + + + + + The ID of the user who performed the previous transition + + user/getId + + + + + + Comment about the last transition + + python:state_change.kwargs.get('comment', '') + + + + + + Provides access to workflow history + + state_change/getHistory + + + Request review + Review portal content + + + + When the previous transition was performed + + state_change/getDateTime + + + + + diff --git a/plone/app/discussion/tests/test_acquisition.py b/plone/app/discussion/tests/test_acquisition.py new file mode 100644 index 0000000..31d5f81 --- /dev/null +++ b/plone/app/discussion/tests/test_acquisition.py @@ -0,0 +1,145 @@ +# -*- coding: utf-8 -*- +from Acquisition import aq_chain +from plone.app.discussion.testing import \ + PLONE_APP_DISCUSSION_INTEGRATION_TESTING +from plone.app.discussion.interfaces import IConversation +from plone.app.testing import TEST_USER_ID, setRoles +from Products.CMFCore.utils import getToolByName +from zope.component import createObject + +import unittest2 as unittest + + +dexterity_type_name = 'sample_content_type' +dexterity_object_id = 'instance-of-dexterity-type' +archetypes_object_id = 'instance-of-archetypes-type' +one_state_workflow = 'one_state_workflow' +comment_workflow_acquired_view = 'comment_workflow_acquired_view' + + +def _anonymousCanView(obj): + """Use rolesOfPermission() to sees if Anonymous has View permission on an + object""" + roles_of_view_permission = obj.rolesOfPermission("View") + # rolesOfPermission returns a list of dictionaries that have the key + # 'name' for role. + anon_views = [r for r in roles_of_view_permission + if r['name'] == 'Anonymous'] + # only one entry per role should be present + anon_view = anon_views[0] + # if this role has the permission, 'selected' is set to 'SELECTED' + return anon_view['selected'] == 'SELECTED' + + +class DexterityAcquisitionTest(unittest.TestCase): + """See test_view_permission.""" + + layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING + + def setUp(self): + self.portal = self.layer['portal'] + self.request = self.layer['request'] + setRoles(self.portal, TEST_USER_ID, ['Manager']) + self.wftool = getToolByName(self.portal, 'portal_workflow') + + # Use customized workflow for comments. + self.wftool.setChainForPortalTypes( + ['Discussion Item'], + (comment_workflow_acquired_view,), + ) + + # Use one_state_workflow for Document and sample_content_type, + # so they're always published. + self.wftool.setChainForPortalTypes( + ['Document', dexterity_type_name], + (one_state_workflow,), + ) + + # Create a dexterity item and add a comment. + self.portal.invokeFactory( + id=dexterity_object_id, + title='Instance Of Dexterity Type', + type_name=dexterity_type_name, + ) + self.dexterity_object = self.portal.get(dexterity_object_id) + dx_conversation = IConversation(self.dexterity_object) + self.dexterity_conversation = dx_conversation + comment1 = createObject('plone.Comment') + dx_conversation.addComment(comment1) + self.dexterity_comment = comment1 + + # Create an Archetypes item and add a comment. + self.portal.invokeFactory( + id=archetypes_object_id, + title='Instance Of Archetypes Type', + type_name='Document', + ) + self.archetypes_object = self.portal.get(archetypes_object_id) + at_conversation = IConversation(self.archetypes_object) + self.archetypes_conversation = at_conversation + comment2 = createObject('plone.Comment') + at_conversation.addComment(comment2) + self.archetypes_comment = comment2 + + def test_workflows_installed(self): + """Check that the new comment workflow has been installed properly. + (Just a test to check our test setup.) + """ + workflows = self.wftool.objectIds() + self.assertTrue('comment_workflow_acquired_view' in workflows) + + def test_workflows_applied(self): + """Check that all objects have the workflow that we expect. + (Just a test to check our test setup.)""" + self.assertEqual( + self.wftool.getChainFor(self.archetypes_object), + (one_state_workflow,) + ) + self.assertEqual( + self.wftool.getChainFor(self.dexterity_object), + (one_state_workflow,) + ) + self.assertEqual( + self.wftool.getChainFor(self.archetypes_comment), + (comment_workflow_acquired_view,) + ) + self.assertEqual( + self.wftool.getChainFor(self.dexterity_comment), + (comment_workflow_acquired_view,) + ) + + def test_view_permission(self): + """Test that if the View permission on Discussion Items is acquired, + Anonymous can view comments on published items.""" + + # Anonymous has View permission on commented objects. + self.assertTrue(_anonymousCanView(self.archetypes_object)) + self.assertTrue(_anonymousCanView(self.dexterity_object)) + + # Fails: Anonymous should therefore have View permission on the + # comments. + self.assertTrue(_anonymousCanView(self.archetypes_comment)) + self.assertTrue(_anonymousCanView(self.dexterity_comment)) + + def test_acquisition_chain(self): + """The acquisition chain for the comment should contain the same items + as that of the conversation. + + Note that the list returned by aq_inner has the innermost object + first.""" + + # Fails: list index out of range + at_comment_chain = aq_chain(self.archetypes_comment) + at_conversation_chain = aq_chain(self.archetypes_conversation) + for (index, item) in enumerate(at_conversation_chain): + self.assertEqual(item, at_comment_chain[index + 1]) + + # Fails: list index out of range + dx_comment_chain = aq_chain(self.dexterity_comment) + dx_conversation_chain = aq_chain(self.dexterity_conversation) + for (index, item) in enumerate(dx_conversation_chain): + self.assertEqual(item, dx_comment_chain[index + 1]) + + +def test_suite(): + return unittest.defaultTestLoader.loadTestsFromName(__name__) From 8e56b99638f48170725a29425312ae6f3966aec8 Mon Sep 17 00:00:00 2001 From: vmaksymiv Date: Tue, 24 Sep 2013 08:14:05 +0000 Subject: [PATCH 125/254] added test acquisition chain for unwrapped object Conflicts: plone/app/discussion/tests/test_acquisition.py --- .../app/discussion/tests/test_acquisition.py | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/plone/app/discussion/tests/test_acquisition.py b/plone/app/discussion/tests/test_acquisition.py index 31d5f81..4f4d01b 100644 --- a/plone/app/discussion/tests/test_acquisition.py +++ b/plone/app/discussion/tests/test_acquisition.py @@ -1,5 +1,8 @@ # -*- coding: utf-8 -*- -from Acquisition import aq_chain +from AccessControl.User import User # before SpecialUsers +from AccessControl.SpecialUsers import nobody as user_nobody +from AccessControl.PermissionRole import rolesForPermissionOn +from Acquisition import aq_chain, aq_base from plone.app.discussion.testing import \ PLONE_APP_DISCUSSION_INTEGRATION_TESTING from plone.app.discussion.interfaces import IConversation @@ -140,6 +143,25 @@ class DexterityAcquisitionTest(unittest.TestCase): for (index, item) in enumerate(dx_conversation_chain): self.assertEqual(item, dx_comment_chain[index + 1]) + def test_acquisition_base_object_chain(self): + """ The acquisition chain for the object without wrappers should return + list which contains only the object. + """ + + at_object_base_chain = aq_chain(aq_base(self.archetypes_object)) + dx_object_base_chain = aq_chain(aq_base(self.dexterity_object)) + + # Fails: acquisition chain has more than one object + self.assertTrue(len(at_object_base_chain) == 1) + self.assertTrue(len(dx_object_base_chain) == 1) + + at_comment_base_chain = aq_chain(aq_base(self.archetypes_comment)) + dx_comment_base_chain = aq_chain(aq_base(self.dexterity_comment)) + + # Fails: acquisition chain has more than one object + self.assertTrue(len(at_comment_base_chain) == 1) + self.assertTrue(len(dx_comment_base_chain) == 1) + def test_suite(): return unittest.defaultTestLoader.loadTestsFromName(__name__) From 4be4c03c49f478e7339d59b008fc21ba52576e9e Mon Sep 17 00:00:00 2001 From: Alan Hoey Date: Thu, 21 Nov 2013 18:13:31 +0000 Subject: [PATCH 126/254] Fix total comments index --- plone/app/discussion/conversation.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/plone/app/discussion/conversation.py b/plone/app/discussion/conversation.py index ba27c0f..16a3cec 100644 --- a/plone/app/discussion/conversation.py +++ b/plone/app/discussion/conversation.py @@ -50,8 +50,14 @@ from plone.app.discussion.comment import Comment from AccessControl.SpecialUsers import nobody as user_nobody +from ComputedAttribute import ComputedAttribute + ANNOTATION_KEY = 'plone.app.discussion:conversation' +def computed_attribute_decorator(level=0): + def computed_attribute_wrapper(func): + return ComputedAttribute(func, level) + return computed_attribute_wrapper class Conversation(Traversable, Persistent, Explicit): """A conversation is a container for all comments on a content object. @@ -87,10 +93,10 @@ class Conversation(Traversable, Persistent, Explicit): parent = aq_inner(self.__parent__) return parent.restrictedTraverse('@@conversation_view').enabled() - @property + @computed_attribute_decorator(level=1) def total_comments(self): public_comments = [ - x for x in self._comments.values() + x for x in self.values() if user_nobody.has_permission('View', x) ] return len(public_comments) From 7269dfca6568e9d5c8554aaac5228c957efc1c9a Mon Sep 17 00:00:00 2001 From: Jess Henderson Date: Fri, 22 Nov 2013 11:51:47 +0000 Subject: [PATCH 127/254] Add dev.delib-da.1 to version pin --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index af74549..7a91fc2 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.3.0dev' +version = '2.3.0dev.delib-da.1' install_requires = [ 'setuptools', From 4804868ab25a5c5c38f73fed25065ab6c849e6c3 Mon Sep 17 00:00:00 2001 From: Alan Hoey Date: Mon, 25 Nov 2013 12:06:05 +0000 Subject: [PATCH 128/254] Refactor acquisition tests to define the expected behaviour when dealing with wrapped and unwrapped comments. --- .../app/discussion/tests/test_acquisition.py | 153 ++++++++++-------- 1 file changed, 82 insertions(+), 71 deletions(-) diff --git a/plone/app/discussion/tests/test_acquisition.py b/plone/app/discussion/tests/test_acquisition.py index 4f4d01b..72d68fe 100644 --- a/plone/app/discussion/tests/test_acquisition.py +++ b/plone/app/discussion/tests/test_acquisition.py @@ -2,7 +2,7 @@ from AccessControl.User import User # before SpecialUsers from AccessControl.SpecialUsers import nobody as user_nobody from AccessControl.PermissionRole import rolesForPermissionOn -from Acquisition import aq_chain, aq_base +from Acquisition import aq_chain from plone.app.discussion.testing import \ PLONE_APP_DISCUSSION_INTEGRATION_TESTING from plone.app.discussion.interfaces import IConversation @@ -19,23 +19,8 @@ archetypes_object_id = 'instance-of-archetypes-type' one_state_workflow = 'one_state_workflow' comment_workflow_acquired_view = 'comment_workflow_acquired_view' - -def _anonymousCanView(obj): - """Use rolesOfPermission() to sees if Anonymous has View permission on an - object""" - roles_of_view_permission = obj.rolesOfPermission("View") - # rolesOfPermission returns a list of dictionaries that have the key - # 'name' for role. - anon_views = [r for r in roles_of_view_permission - if r['name'] == 'Anonymous'] - # only one entry per role should be present - anon_view = anon_views[0] - # if this role has the permission, 'selected' is set to 'SELECTED' - return anon_view['selected'] == 'SELECTED' - - -class DexterityAcquisitionTest(unittest.TestCase): - """See test_view_permission.""" +class AcquisitionTest(unittest.TestCase): + """ Define the expected behaviour of wrapped and unwrapped comments. """ layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING @@ -64,12 +49,14 @@ class DexterityAcquisitionTest(unittest.TestCase): title='Instance Of Dexterity Type', type_name=dexterity_type_name, ) + self.dexterity_object = self.portal.get(dexterity_object_id) dx_conversation = IConversation(self.dexterity_object) self.dexterity_conversation = dx_conversation - comment1 = createObject('plone.Comment') - dx_conversation.addComment(comment1) - self.dexterity_comment = comment1 + dx_comment = createObject('plone.Comment') + dx_conversation.addComment(dx_comment) + self.unwrapped_dexterity_comment = dx_comment + self.wrapped_dexterity_comment = dx_conversation[dx_comment.id] # Create an Archetypes item and add a comment. self.portal.invokeFactory( @@ -77,12 +64,15 @@ class DexterityAcquisitionTest(unittest.TestCase): title='Instance Of Archetypes Type', type_name='Document', ) + self.archetypes_object = self.portal.get(archetypes_object_id) at_conversation = IConversation(self.archetypes_object) self.archetypes_conversation = at_conversation - comment2 = createObject('plone.Comment') - at_conversation.addComment(comment2) - self.archetypes_comment = comment2 + at_comment = createObject('plone.Comment') + at_conversation.addComment(at_comment) + self.unwrapped_archetypes_comment = at_comment + self.wrapped_archetypes_comment = at_conversation[at_comment.id] + def test_workflows_installed(self): """Check that the new comment workflow has been installed properly. @@ -103,64 +93,85 @@ class DexterityAcquisitionTest(unittest.TestCase): (one_state_workflow,) ) self.assertEqual( - self.wftool.getChainFor(self.archetypes_comment), + self.wftool.getChainFor(self.unwrapped_archetypes_comment), (comment_workflow_acquired_view,) ) self.assertEqual( - self.wftool.getChainFor(self.dexterity_comment), + self.wftool.getChainFor(self.unwrapped_dexterity_comment), (comment_workflow_acquired_view,) ) - def test_view_permission(self): - """Test that if the View permission on Discussion Items is acquired, - Anonymous can view comments on published items.""" + def test_comment_acquisition_chain(self): + """ Test that the acquisition chains for wrapped and unwrapped + comments are as expected. """ + + # Unwrapped comments rely on __parent__ attributes to determine + # parentage. Frustratingly there is no guarantee that __parent__ + # is always set, so the computed acquisition chain may be short. + # In this case the unwrapped AT and DX objects stored as the + # conversation parents don't have a __parent__, preventing the portal + # from being included in the chain. + self.assertNotIn(self.portal, + aq_chain(self.unwrapped_archetypes_comment)) + self.assertNotIn(self.portal, + aq_chain(self.unwrapped_dexterity_comment)) - # Anonymous has View permission on commented objects. - self.assertTrue(_anonymousCanView(self.archetypes_object)) - self.assertTrue(_anonymousCanView(self.dexterity_object)) + # Wrapped comments however have a complete chain and thus can find the + # portal object reliably. + self.assertIn(self.portal,aq_chain(self.wrapped_archetypes_comment)) + self.assertIn(self.portal,aq_chain(self.wrapped_dexterity_comment)) - # Fails: Anonymous should therefore have View permission on the - # comments. - self.assertTrue(_anonymousCanView(self.archetypes_comment)) - self.assertTrue(_anonymousCanView(self.dexterity_comment)) + + def test_acquiring_comment_permissions(self): + """ Unwrapped comments should not be able to acquire permissions + controlled by unreachable objects """ + + # We use the "Allow sendto" permission as by default it is + # controlled by the portal, which is unreachable via __parent__ + # attributes on the comments. + permission = "Allow sendto" - def test_acquisition_chain(self): - """The acquisition chain for the comment should contain the same items - as that of the conversation. + # Unwrapped comments can't find the portal so just return manager + self.assertNotIn("Anonymous", + rolesForPermissionOn(permission, + self.unwrapped_archetypes_comment)) + self.assertNotIn("Anonymous", + rolesForPermissionOn(permission, + self.unwrapped_dexterity_comment)) + + # Wrapped objects can find the portal and correctly return the + # anonymous role. + self.assertIn("Anonymous", + rolesForPermissionOn(permission, + self.wrapped_archetypes_comment)) + self.assertIn("Anonymous", + rolesForPermissionOn(permission, + self.wrapped_dexterity_comment)) + + def test_acquiring_comment_permissions_via_user_nobody(self): + """ The current implementation uses user_nobody.has_permission to + check whether anonymous can view comments. This confirms it also + works. """ + + # Again we want to use a permission that's not managed by any of our + # content objects so it must be acquired from the portal. + permission = "Allow sendto" + + self.assertFalse( + user_nobody.has_permission(permission, + self.unwrapped_archetypes_comment)) + + self.assertFalse( + user_nobody.has_permission(permission, + self.unwrapped_dexterity_comment)) - Note that the list returned by aq_inner has the innermost object - first.""" + self.assertTrue( + user_nobody.has_permission(permission, + self.wrapped_archetypes_comment)) - # Fails: list index out of range - at_comment_chain = aq_chain(self.archetypes_comment) - at_conversation_chain = aq_chain(self.archetypes_conversation) - for (index, item) in enumerate(at_conversation_chain): - self.assertEqual(item, at_comment_chain[index + 1]) - - # Fails: list index out of range - dx_comment_chain = aq_chain(self.dexterity_comment) - dx_conversation_chain = aq_chain(self.dexterity_conversation) - for (index, item) in enumerate(dx_conversation_chain): - self.assertEqual(item, dx_comment_chain[index + 1]) - - def test_acquisition_base_object_chain(self): - """ The acquisition chain for the object without wrappers should return - list which contains only the object. - """ - - at_object_base_chain = aq_chain(aq_base(self.archetypes_object)) - dx_object_base_chain = aq_chain(aq_base(self.dexterity_object)) - - # Fails: acquisition chain has more than one object - self.assertTrue(len(at_object_base_chain) == 1) - self.assertTrue(len(dx_object_base_chain) == 1) - - at_comment_base_chain = aq_chain(aq_base(self.archetypes_comment)) - dx_comment_base_chain = aq_chain(aq_base(self.dexterity_comment)) - - # Fails: acquisition chain has more than one object - self.assertTrue(len(at_comment_base_chain) == 1) - self.assertTrue(len(dx_comment_base_chain) == 1) + self.assertTrue( + user_nobody.has_permission(permission, + self.wrapped_dexterity_comment)) def test_suite(): From e6ec6ebe164b68f465fe87ea3dda8e7136411053 Mon Sep 17 00:00:00 2001 From: Alan Hoey Date: Mon, 25 Nov 2013 12:52:31 +0000 Subject: [PATCH 129/254] Add tests to confirm that some methods of a conversation incorrectly use an unwrapped comment to determine whether anonymous users can view. --- .../app/discussion/tests/test_acquisition.py | 67 ++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/plone/app/discussion/tests/test_acquisition.py b/plone/app/discussion/tests/test_acquisition.py index 72d68fe..c6a96db 100644 --- a/plone/app/discussion/tests/test_acquisition.py +++ b/plone/app/discussion/tests/test_acquisition.py @@ -2,7 +2,7 @@ from AccessControl.User import User # before SpecialUsers from AccessControl.SpecialUsers import nobody as user_nobody from AccessControl.PermissionRole import rolesForPermissionOn -from Acquisition import aq_chain +from Acquisition import aq_chain, aq_base from plone.app.discussion.testing import \ PLONE_APP_DISCUSSION_INTEGRATION_TESTING from plone.app.discussion.interfaces import IConversation @@ -173,6 +173,71 @@ class AcquisitionTest(unittest.TestCase): user_nobody.has_permission(permission, self.wrapped_dexterity_comment)) +class AcquiredPermissionTest(unittest.TestCase): + """ Test methods of a conversation which rely on acquired permissions """ + + layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING + + def setUp(self): + self.portal = self.layer['portal'] + self.request = self.layer['request'] + setRoles(self.portal, TEST_USER_ID, ['Manager']) + self.wftool = getToolByName(self.portal, 'portal_workflow') + + # Disable workflow for comments and content. + self.wftool.setChainForPortalTypes(["Discussion Item"],[]) + self.wftool.setChainForPortalTypes([dexterity_type_name],[]) + + # Create a dexterity item. + self.portal.invokeFactory( + id=dexterity_object_id, + title='Instance Of Dexterity Type', + type_name=dexterity_type_name, + ) + + self.content = self.portal.get(dexterity_object_id) + + # Absolutely make sure that we're replicating the case of an + # incomplete chain correctly. + aq_base(self.content).__parent__ = None + + self.conversation = IConversation(self.content) + + # Add a comment + comment = createObject('plone.Comment') + self.conversation.addComment(comment) + self.comment = comment + + def test_view_permission_is_only_available_on_portal(self): + """ Check that the test setup is correct """ + + content_roles = rolesForPermissionOn("View",aq_base(self.content)) + self.assertNotIn("Anonymous",content_roles) + + comment_roles = rolesForPermissionOn("View",aq_base(self.comment)) + self.assertNotIn("Anonymous",comment_roles) + + # This actually acquires view from the app root, but we don't really + # care, we just need to confirm that something above our content + # object will give us View. + portal_roles = rolesForPermissionOn("View",self.portal) + self.assertIn("Anonymous",portal_roles) + + # The following tests fail when the conversation uses unwrapped comment + # objects to determine whether an anonymous user has the view permission. + + def test_total_comments(self): + self.assertEqual(self.conversation.total_comments,1) + + def test_last_comment_date(self): + self.assertEqual(self.conversation.last_comment_date, + self.comment.creation_date) + + def test_public_commentators(self): + self.assertEqual(self.conversation.public_commentators, + (self.comment.author_username,)) + + def test_suite(): return unittest.defaultTestLoader.loadTestsFromName(__name__) From 8161dc14dae8cd8b7c9d796066d302b8a4a153c9 Mon Sep 17 00:00:00 2001 From: Alan Hoey Date: Mon, 25 Nov 2013 12:54:49 +0000 Subject: [PATCH 130/254] Fixing test failures. --- plone/app/discussion/conversation.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plone/app/discussion/conversation.py b/plone/app/discussion/conversation.py index 16a3cec..ca22c05 100644 --- a/plone/app/discussion/conversation.py +++ b/plone/app/discussion/conversation.py @@ -101,13 +101,13 @@ class Conversation(Traversable, Persistent, Explicit): ] return len(public_comments) - @property + @computed_attribute_decorator(level=1) def last_comment_date(self): # self._comments is an Instance of a btree. The keys # are always ordered comment_keys = self._comments.keys() for comment_key in reversed(comment_keys): - comment = self._comments[comment_key] + comment = self[comment_key] if user_nobody.has_permission('View', comment): return comment.creation_date return None @@ -116,10 +116,10 @@ class Conversation(Traversable, Persistent, Explicit): def commentators(self): return self._commentators - @property + @computed_attribute_decorator(level=1) def public_commentators(self): retval = set() - for comment in self._comments.values(): + for comment in self.values(): if not user_nobody.has_permission('View', comment): continue retval.add(comment.author_username) From 1bf4dacc1d116e8c33691d01dbc1083fd004514a Mon Sep 17 00:00:00 2001 From: Alan Hoey Date: Mon, 25 Nov 2013 13:04:24 +0000 Subject: [PATCH 131/254] Back out internal version number --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 7a91fc2..af74549 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.3.0dev.delib-da.1' +version = '2.3.0dev' install_requires = [ 'setuptools', From a337413d3d57c4ae18c4a919c2fa601a1adf58b9 Mon Sep 17 00:00:00 2001 From: tisto Date: Tue, 26 Nov 2013 19:29:28 +0100 Subject: [PATCH 132/254] Update CHANGES. --- CHANGES.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 42b7ac9..f845ba6 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,10 @@ Changelog 2.3.0 (unreleased) ------------------ -- Put defaultUser.png instead of old defaultUser.gif +- Corrections and additions to the Danish translation + [aputtu] + +- Put defaultUser.png instead of old defaultUser.gif [bsuttor] - Remove bbb directory. bbb was never really implemented. From 66e556322874103078d9be4c74f8879fd657ad3e Mon Sep 17 00:00:00 2001 From: tisto Date: Tue, 26 Nov 2013 20:08:30 +0100 Subject: [PATCH 133/254] Fix buildout. --- CHANGES.rst | 1 + buildout.cfg | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index f845ba6..88650ce 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -25,6 +25,7 @@ Changelog - Fix ownership of comments. [toutpt] + 2.2.10 (2013-09-24) ------------------- diff --git a/buildout.cfg b/buildout.cfg index 0b66ca6..560c0f6 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -17,4 +17,5 @@ eggs = zest.pocompile [versions] plone.app.discussion = zope.interface = 4.0.5 +plone.app.portlets = 2.5a1 From b5f4df5f17ff17c095e6892bc86fe84ca66bccb6 Mon Sep 17 00:00:00 2001 From: tisto Date: Sun, 15 Dec 2013 12:00:25 +0100 Subject: [PATCH 134/254] Add code analysis section. --- buildout.cfg | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/buildout.cfg b/buildout.cfg index 560c0f6..6bbf249 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -5,6 +5,7 @@ package-extras = [test] parts += mkrelease pocompile + code-analysis [mkrelease] recipe = zc.recipe.egg @@ -14,6 +15,10 @@ eggs = jarn.mkrelease recipe = zc.recipe.egg eggs = zest.pocompile +[code-analysis] +recipe = plone.recipe.codeanalysis +directory = ${buildout:directory}/plone/app/discussion + [versions] plone.app.discussion = zope.interface = 4.0.5 From f0a9d9ad6bec8804ff546f79709bf1547e6d47ad Mon Sep 17 00:00:00 2001 From: tisto Date: Sun, 15 Dec 2013 12:02:32 +0100 Subject: [PATCH 135/254] Pep8 --- plone/app/discussion/patches.py | 2 -- plone/app/discussion/subscribers.py | 3 ++- plone/app/discussion/tests/test_catalog.py | 2 -- plone/app/discussion/tests/test_conversation.py | 2 +- plone/app/discussion/tests/test_moderation_view.py | 2 -- 5 files changed, 3 insertions(+), 8 deletions(-) diff --git a/plone/app/discussion/patches.py b/plone/app/discussion/patches.py index f803f10..9491702 100644 --- a/plone/app/discussion/patches.py +++ b/plone/app/discussion/patches.py @@ -1,7 +1,5 @@ from Products.CMFCore.utils import getToolByName -from zope.component import queryUtility - from Acquisition import aq_inner, aq_parent from zope.annotation.interfaces import IAnnotations diff --git a/plone/app/discussion/subscribers.py b/plone/app/discussion/subscribers.py index 20ac7ad..07e0bb5 100644 --- a/plone/app/discussion/subscribers.py +++ b/plone/app/discussion/subscribers.py @@ -1,14 +1,15 @@ from Products.CMFCore.utils import getToolByName + def index_object(obj, event): """Index the object when it is added to the conversation. """ catalog = getToolByName(obj, 'portal_catalog') return catalog.reindexObject(obj) + def unindex_object(obj, event): """Unindex the object when it is removed from the conversation. """ catalog = getToolByName(obj, 'portal_catalog') return catalog.unindexObject(obj) - diff --git a/plone/app/discussion/tests/test_catalog.py b/plone/app/discussion/tests/test_catalog.py index 8c5291a..cbe8df6 100644 --- a/plone/app/discussion/tests/test_catalog.py +++ b/plone/app/discussion/tests/test_catalog.py @@ -19,8 +19,6 @@ from plone.app.discussion.testing import ( from plone.app.discussion.interfaces import IConversation -from plone.app.discussion.testing import COLLECTION_TYPE - class CatalogSetupTest(unittest.TestCase): diff --git a/plone/app/discussion/tests/test_conversation.py b/plone/app/discussion/tests/test_conversation.py index 770e3af..278adb5 100644 --- a/plone/app/discussion/tests/test_conversation.py +++ b/plone/app/discussion/tests/test_conversation.py @@ -308,7 +308,7 @@ class ConversationTest(unittest.TestCase): # Create a folder self.typetool.constructContent('Folder', self.portal, 'f1') - f1 = self.portal.f1 + # Usually we don't create a conversation on a folder conversation = self.portal.f1.restrictedTraverse('@@conversation_view') diff --git a/plone/app/discussion/tests/test_moderation_view.py b/plone/app/discussion/tests/test_moderation_view.py index 33064b6..c821200 100644 --- a/plone/app/discussion/tests/test_moderation_view.py +++ b/plone/app/discussion/tests/test_moderation_view.py @@ -1,8 +1,6 @@ # -*- coding: utf-8 -*- import unittest -from DateTime import DateTime - from zope.component import createObject from Products.CMFCore.utils import getToolByName From 38cfae5647ce2df31451b4af39c2413b00a5530f Mon Sep 17 00:00:00 2001 From: tisto Date: Sun, 15 Dec 2013 12:04:05 +0100 Subject: [PATCH 136/254] Set flake8 max complexity to 50. --- buildout.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/buildout.cfg b/buildout.cfg index 6bbf249..d8d5f93 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -18,6 +18,7 @@ eggs = zest.pocompile [code-analysis] recipe = plone.recipe.codeanalysis directory = ${buildout:directory}/plone/app/discussion +flake8-max-complexity = 50 [versions] plone.app.discussion = From a2ae2a888fd176632bad781b4607dbf3d720a359 Mon Sep 17 00:00:00 2001 From: tisto Date: Sun, 15 Dec 2013 12:56:51 +0100 Subject: [PATCH 137/254] Remov qunit and jstestdriver test setup. --- .../discussion/tests/javascripts/README.txt | 41 - .../discussion/tests/javascripts/jquery.js | 154 --- .../tests/javascripts/test_comments.html | 42 - .../tests/javascripts/test_comments.js | 146 --- .../javascripts/test_moderation.html.txt | 40 - .../tests/javascripts/test_moderation.js.txt | 72 -- plone/app/discussion/tests/jsTestDriver.conf | 18 - plone/app/discussion/tests/jsTestDriver.txt | 5 - .../discussion/tests/qunit/QUnitAdapter.js | 85 -- plone/app/discussion/tests/qunit/equiv.js | 185 ---- plone/app/discussion/tests/qunit/qunit.css | 17 - plone/app/discussion/tests/qunit/qunit.js | 997 ------------------ 12 files changed, 1802 deletions(-) delete mode 100644 plone/app/discussion/tests/javascripts/README.txt delete mode 100644 plone/app/discussion/tests/javascripts/jquery.js delete mode 100644 plone/app/discussion/tests/javascripts/test_comments.html delete mode 100644 plone/app/discussion/tests/javascripts/test_comments.js delete mode 100644 plone/app/discussion/tests/javascripts/test_moderation.html.txt delete mode 100644 plone/app/discussion/tests/javascripts/test_moderation.js.txt delete mode 100644 plone/app/discussion/tests/jsTestDriver.conf delete mode 100644 plone/app/discussion/tests/jsTestDriver.txt delete mode 100644 plone/app/discussion/tests/qunit/QUnitAdapter.js delete mode 100644 plone/app/discussion/tests/qunit/equiv.js delete mode 100644 plone/app/discussion/tests/qunit/qunit.css delete mode 100644 plone/app/discussion/tests/qunit/qunit.js diff --git a/plone/app/discussion/tests/javascripts/README.txt b/plone/app/discussion/tests/javascripts/README.txt deleted file mode 100644 index b01287f..0000000 --- a/plone/app/discussion/tests/javascripts/README.txt +++ /dev/null @@ -1,41 +0,0 @@ -plone.app.discussion javascript testsuite -========================================= - -Note: This document was shamelessly stolen from the plone.app.deco package. - -We're using QUnit_ for unit testing, the jQuery test runner. - -Simply load index.html directly in the browser with a file:/// url; not via -Plone. This way our tests are truely standalone and isolated. - -Coverage testing ----------------- - -To test code coverage, I can heartily recommend using JSCoverage_. You can -download, compile and install it by: - - $ wget http://siliconforks.com/jscoverage/download/jscoverage-0.5.tar.bz2 - $ tar xfvj jscoverage-0.5.tar.bz2 - $ cd jscoverage-0.5 - $ ./configure - $ make - $ sudo make install - -After that, issue the following command to run it from your Plone buildout: - - $ jscoverage-server -v --ip-address=0.0.0.0 --port=8080 --encoding=UTF-8 \ - --document-root=plone/app/discussion/ --no-instrument=/tests - -Then point your browser to the now running `coverage server -`__, and -the test suite will run instrumented in an iframe. Select the Summary tab to see -the results. - -The command-line options ensure that only our tests and the modules being -tested are instrumented for coverage, not the testing framework nor jQuery. - -Note that JSCoverage adds instrumentation statements to the code, so don't try -to debug your tests when running via the jscoverage server. - -.. _QUnit: http://docs.jquery.com/QUnit -.. _JSCoverage: http://siliconforks.com/jscoverage/ diff --git a/plone/app/discussion/tests/javascripts/jquery.js b/plone/app/discussion/tests/javascripts/jquery.js deleted file mode 100644 index 7c24308..0000000 --- a/plone/app/discussion/tests/javascripts/jquery.js +++ /dev/null @@ -1,154 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Sat Feb 13 22:33:48 2010 -0500 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/plone/app/discussion/tests/javascripts/test_comments.html b/plone/app/discussion/tests/javascripts/test_comments.html deleted file mode 100644 index be846e0..0000000 --- a/plone/app/discussion/tests/javascripts/test_comments.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - plone.app.discussion comments Test Suite - - - - - - - - - - - - - - - - - -

plone.app.discussion comments Test - Suite

- -

- -
-
- -

- -
    -
- - - - diff --git a/plone/app/discussion/tests/javascripts/test_comments.js b/plone/app/discussion/tests/javascripts/test_comments.js deleted file mode 100644 index 8bca11f..0000000 --- a/plone/app/discussion/tests/javascripts/test_comments.js +++ /dev/null @@ -1,146 +0,0 @@ - -$(document).ready(function () { - - /* TEST SETUP */ - - module("comments", { - setup: function () { - - // Create a comments section with one comment inside - // - //
- //
- //
- //

Lorem ipsum.

- //
- //
- // - //
- //
- //
- - var comments = $(document.createElement("div")) - .addClass("discussion") - .append($(document.createElement("div")) - .addClass("comment") - .attr("id", "1282720906349675") - .append($(document.createElement("div")) - .addClass("commentBody") - .append($(document.createElement("p")) - .text("Lorem ipsum.") - ) - ) - .append($(document.createElement("div")) - .addClass("commentActions") - .append($(document.createElement("button")) - .addClass("reply-to-comment-button") - )) - ); - $(document.body).append(comments); - - // Create a basic commenting form - // - // - //
- // - //
- //
- // - //
- //
- // - //
- //
- // - // - //
- // - - var commentform = $(document.createElement("div")) - .append($(document.createElement("form")) - .addClass("form") - .append($(document.createElement("div")) - .addClass("formfield-form-widgets-in_reply_to") - .append($(document.createElement("input")) - .attr("name", "form.widgets.in_reply_to") - .val("") - ) - ) - .append($(document.createElement("div")) - .addClass("formfield-form-widgets-author_name") - .append($(document.createElement("input")) - .attr("name", "form.widgets.author") - .attr("type", "text") - ) - ) - .append($(document.createElement("div")) - .addClass("formfield-form-widgets-text") - .append($(document.createElement("textarea")) - .attr("name", "form.widgets.text") - ) - ) - .append($(document.createElement("div")) - .addClass("formControls") - .append($(document.createElement("input")) - .attr("name", "form.buttons.comment")) - .append($(document.createElement("input")) - .attr("name", "form.buttons.cancel")) - ) - ) - .addClass("reply") - .attr("id", "commenting"); - $(document.body).append(commentform); - }, - teardown: function () { - $("#commenting").remove(); - $(".discussion").remove(); - } - }); - - - /* TESTS */ - - test("Hide the reply and the cancel button for the comment form", function(){ - expect(1); - $(".reply").find("input[name='form.buttons.cancel']").css("display", "none"); - equals($("input[name='form.buttons.cancel']").css("display"), "none", "The cancel button should be hidden"); - }); - - test("Show the reply button only when Javascript is enabled", function(){ - expect(1); - $(".reply-to-comment-button").css("display", "inline"); - equals($("button[class='reply-to-comment-button']").attr("style"), "display: inline;", "The reply button should show up when Javascript is enabled"); - }); - - test("Create a comment reply form.", function() { - expect(2); - var comment_div = $("#1282720906349675"); - var reply_button = comment_div.children(".reply-to-comment-button"); - $.createReplyForm(comment_div); - var reply_form = comment_div.children(".reply"); - ok(reply_form.find("input[name='form.widgets.in_reply_to']"), "Reply form has been copied"); - same(reply_form.find("input[name='form.widgets.in_reply_to']").val(), "1282720906349675", "The reply for should have the id of the comment in the in_reply_to field"); - }); - - test("Clear all form values from a form.", function() { - // Create a reply form with some values - var comment_div = $("#1282720906349675"); - $.createReplyForm(comment_div); - var reply_form = comment_div.find(".reply"); - var author = reply_form.find("input[name='form.widgets.author']"); - var text = comment_div.find("input[name='form.widgets.text']"); - author.val("my author"); - text.val("my text"); - // Call the clearForm function to clear the form - $.clearForm(comment_div); - // Check if all form fields have been cleared - var author = comment_div.find("input[name='form.widgets.author']"); - var text = comment_div.find("input[name='form.widgets.text']"); - equals(author.val(), "", "The author form value should be empty"); - equals(text.text(), "", "The text form value should be empty"); - - }); - -}); - - diff --git a/plone/app/discussion/tests/javascripts/test_moderation.html.txt b/plone/app/discussion/tests/javascripts/test_moderation.html.txt deleted file mode 100644 index 36afc81..0000000 --- a/plone/app/discussion/tests/javascripts/test_moderation.html.txt +++ /dev/null @@ -1,40 +0,0 @@ - - - - - plone.app.discussion moderation Test Suite - - - - - - - - - - - - - - - - - - -

plone.app.discussion moderation Test Suite

- -

- -
- -

- -
    - - - - diff --git a/plone/app/discussion/tests/javascripts/test_moderation.js.txt b/plone/app/discussion/tests/javascripts/test_moderation.js.txt deleted file mode 100644 index 49755d0..0000000 --- a/plone/app/discussion/tests/javascripts/test_moderation.js.txt +++ /dev/null @@ -1,72 +0,0 @@ -/* TEST SETUP */ - -module("comments", { - setup: function () { - //
    - // - // - // - // - // - // - // - //
    - // My comment - // - // - // - //
    - //
    - var review_table = $(document.createElement("form")) - .append($(document.createElement("table")) - .attr("id", "review-comments") - .append($(document.createElement("tbody")) - .append($(document.createElement("tr")) - .append($(document.createElement("td")) - .append($(document.createElement("a")) - .text("My comment.") - .attr("href", "http://localhost:8080/Plone/front-page/++conversation++default/1285339036601284") - ) - ) - .append($(document.createElement("td")) - .append($(document.createElement("input")) - .attr("id", "1285339036601284") - .attr("value", "Publish") - .attr("name", "form.button.Publish") - ) - .append($(document.createElement("input")) - .attr("id", "1285339036601284") - .attr("value", "Delete") - .attr("name", "form.button.Delete") - ) - .addClass("actions") - ) - ) - ) - ); - $(document.body).append(review_table); - }, - teardown: function () { - $("form").remove(); - } -}); - - -/* TESTS */ - -test("Delete a single comment", function(){ - expect(1); - stop(); - var delete_button = $(".actions").children("input[name='form.button.Delete']"); - delete_button.trigger('click'); - start(); - equals($("#1285339036601284").attr("name", "form.button.Delete").length, 0, "The comment row should have been deleted."); -}); - - -test("Publish a single comment", function(){ - expect(1); - var publish_button = $(".actions").children("input[name='form.button.Publish']"); - publish_button.trigger('click'); - equals($("#1285339036601284").attr("name", "form.button.Publish").length, 0, "The comment row should have been removed since the comment has been published."); -}); diff --git a/plone/app/discussion/tests/jsTestDriver.conf b/plone/app/discussion/tests/jsTestDriver.conf deleted file mode 100644 index c5335fb..0000000 --- a/plone/app/discussion/tests/jsTestDriver.conf +++ /dev/null @@ -1,18 +0,0 @@ -server: http://localhost:9876 - -load: - # Add these lines to load the equiv function and adapter in order, before the - # tests (assuming they are saved to tests/qunit/) - - qunit/equiv.js - - qunit/QUnitAdapter.js - - # This is where we load the qunit tests - - javascripts/*.js - - # And this loads the source files we are testing - - ../browser/javascripts/*.js - -plugin: - - name: "coverage" - jar: "../../../../parts/jstestdriver/coverage.jar" - module: "com.google.jstestdriver.coverage.CoverageModule" diff --git a/plone/app/discussion/tests/jsTestDriver.txt b/plone/app/discussion/tests/jsTestDriver.txt deleted file mode 100644 index 7751bb8..0000000 --- a/plone/app/discussion/tests/jsTestDriver.txt +++ /dev/null @@ -1,5 +0,0 @@ -============== -JS TEST DRIVER -============== - -java -jar JsTestDriver.jar --port 9876 --config jsTestDriver.conf --browser /usr/bin/firefox --tests all \ No newline at end of file diff --git a/plone/app/discussion/tests/qunit/QUnitAdapter.js b/plone/app/discussion/tests/qunit/QUnitAdapter.js deleted file mode 100644 index a3fc18c..0000000 --- a/plone/app/discussion/tests/qunit/QUnitAdapter.js +++ /dev/null @@ -1,85 +0,0 @@ -/* -QUnitAdapter -Version: 1.1.0 - -Run qunit tests using JS Test Driver - -This provides almost the same api as qunit. - -Tests must run sychronously, which means no use of stop and start methods. -You can use jsUnit Clock object to deal with timeouts and intervals: -http://googletesting.blogspot.com/2007/03/javascript-simulating-time-in-jsunit.html - -The qunit #main DOM element is not included. If you need to do any DOM manipulation -you need to set it up and tear it down in each test. - -*/ -(function() { - - if(!(window.equiv)) { - throw new Error("QUnitAdapter.js - Unable to find equiv function. Ensure you have added equiv.js to the load section of your jsTestDriver.conf"); - } - - var QUnitTestCase; - - window.module = function(name, lifecycle) { - QUnitTestCase = TestCase(name); - QUnitTestCase.prototype.lifecycle = lifecycle || {}; - }; - - window.test = function(name, expected, test) { - QUnitTestCase.prototype['test ' + name] = function() { - if(this.lifecycle.setup) { - this.lifecycle.setup(); - } - if(expected.constructor === Number) { - expectAsserts(expected); - } else { - test = expected; - } - test.call(this.lifecycle); - - if(this.lifecycle.teardown) { - this.lifecycle.teardown(); - } - }; - }; - - window.expect = function(count) { - expectAsserts(count); - }; - - window.ok = function(actual, msg) { - assertTrue(msg ? msg : '', !!actual); - }; - - window.equals = function(a, b, msg) { - assertEqual(msg ? msg : '', b, a); - }; - - window.start = window.stop = function() { - fail('start and stop methods are not available when using JS Test Driver.\n' + - 'Use jsUnit Clock object to deal with timeouts and intervals:\n' + - 'http://googletesting.blogspot.com/2007/03/javascript-simulating-time-in-jsunit.html.'); - }; - - window.same = function(a, b, msg) { - assertTrue(msg ? msg : '', window.equiv(b, a)); - }; - - window.reset = function() { - fail('reset method is not available when using JS Test Driver'); - }; - - window.isLocal = function() { - return false; - }; - - window.QUnit = { - equiv: window.equiv, - ok: window.ok - }; - - module('Default Module'); - -})(); diff --git a/plone/app/discussion/tests/qunit/equiv.js b/plone/app/discussion/tests/qunit/equiv.js deleted file mode 100644 index 2f5b9f3..0000000 --- a/plone/app/discussion/tests/qunit/equiv.js +++ /dev/null @@ -1,185 +0,0 @@ - -// Tests for equality any JavaScript type and structure without unexpected results. -// Discussions and reference: http://philrathe.com/articles/equiv -// Test suites: http://philrathe.com/tests/equiv -// Author: Philippe Rath -window.equiv = function () { - - var innerEquiv; // the real equiv function - var callers = []; // stack to decide between skip/abort functions - - // Determine what is o. - function hoozit(o) { - if (typeof o === "string") { - return "string"; - - } else if (typeof o === "boolean") { - return "boolean"; - - } else if (typeof o === "number") { - - if (isNaN(o)) { - return "nan"; - } else { - return "number"; - } - - } else if (typeof o === "undefined") { - return "undefined"; - - // consider: typeof null === object - } else if (o === null) { - return "null"; - - // consider: typeof [] === object - } else if (o instanceof Array) { - return "array"; - - // consider: typeof new Date() === object - } else if (o instanceof Date) { - return "date"; - - // consider: /./ instanceof Object; - // /./ instanceof RegExp; - // typeof /./ === "function"; // => false in IE and Opera, - // true in FF and Safari - } else if (o instanceof RegExp) { - return "regexp"; - - } else if (typeof o === "object") { - return "object"; - - } else if (o instanceof Function) { - return "function"; - } - } - - // Call the o related callback with the given arguments. - function bindCallbacks(o, callbacks, args) { - var prop = hoozit(o); - if (prop) { - if (hoozit(callbacks[prop]) === "function") { - return callbacks[prop].apply(callbacks, args); - } else { - return callbacks[prop]; // or undefined - } - } - } - - var callbacks = function () { - - // for string, boolean, number and null - function useStrictEquality(b, a) { - return a === b; - } - - return { - "string": useStrictEquality, - "boolean": useStrictEquality, - "number": useStrictEquality, - "null": useStrictEquality, - "undefined": useStrictEquality, - - "nan": function (b) { - return isNaN(b); - }, - - "date": function (b, a) { - return hoozit(b) === "date" && a.valueOf() === b.valueOf(); - }, - - "regexp": function (b, a) { - return hoozit(b) === "regexp" && - a.source === b.source && // the regex itself - a.global === b.global && // and its modifers (gmi) ... - a.ignoreCase === b.ignoreCase && - a.multiline === b.multiline; - }, - - // - skip when the property is a method of an instance (OOP) - // - abort otherwise, - // initial === would have catch identical references anyway - "function": function () { - var caller = callers[callers.length - 1]; - return caller !== Object && - typeof caller !== "undefined"; - }, - - "array": function (b, a) { - var i; - var len; - - // b could be an object literal here - if ( ! (hoozit(b) === "array")) { - return false; - } - - len = a.length; - if (len !== b.length) { // safe and faster - return false; - } - for (i = 0; i < len; i++) { - if( ! innerEquiv(a[i], b[i])) { - return false; - } - } - return true; - }, - - "object": function (b, a) { - var i; - var eq = true; // unless we can proove it - var aProperties = [], bProperties = []; // collection of strings - - // comparing constructors is more strict than using instanceof - if ( a.constructor !== b.constructor) { - return false; - } - - // stack constructor before traversing properties - callers.push(a.constructor); - - for (i in a) { // be strict: don't ensures hasOwnProperty and go deep - - aProperties.push(i); // collect a's properties - - if ( ! innerEquiv(a[i], b[i])) { - eq = false; - } - } - - callers.pop(); // unstack, we are done - - for (i in b) { - bProperties.push(i); // collect b's properties - } - - // Ensures identical properties name - return eq && innerEquiv(aProperties.sort(), bProperties.sort()); - } - }; - }(); - - innerEquiv = function () { // can take multiple arguments - var args = Array.prototype.slice.apply(arguments); - if (args.length < 2) { - return true; // end transition - } - - return (function (a, b) { - if (a === b) { - return true; // catch the most you can - - } else if (typeof a !== typeof b || a === null || b === null || typeof a === "undefined" || typeof b === "undefined") { - return false; // don't lose time with error prone cases - - } else { - return bindCallbacks(a, callbacks, [b, a]); - } - - // apply transition with (1..n) arguments - })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1)); - }; - - return innerEquiv; -}(); // equiv diff --git a/plone/app/discussion/tests/qunit/qunit.css b/plone/app/discussion/tests/qunit/qunit.css deleted file mode 100644 index 4542933..0000000 --- a/plone/app/discussion/tests/qunit/qunit.css +++ /dev/null @@ -1,17 +0,0 @@ -h1#qunit-header { padding: 15px; font-size: large; background-color: #06b; color: white; font-family: 'trebuchet ms', verdana, arial; margin: 0; } -h1#qunit-header a { color: white; } - -h2#qunit-banner { height: 2em; border-bottom: 1px solid white; background-color: #eee; margin: 0; font-family: 'trebuchet ms', verdana, arial; } -h2#qunit-banner.pass { background-color: green; } -h2#qunit-banner.fail { background-color: red; } - -h2#qunit-userAgent { padding: 10px; background-color: #eee; color: black; margin: 0; font-size: small; font-weight: normal; font-family: 'trebuchet ms', verdana, arial; font-size: 10pt; } - -div#qunit-testrunner-toolbar { background: #eee; border-top: 1px solid black; padding: 10px; font-family: 'trebuchet ms', verdana, arial; margin: 0; font-size: 10pt; } - -ol#qunit-tests { font-family: 'trebuchet ms', verdana, arial; font-size: 10pt; } -ol#qunit-tests li strong { cursor:pointer; } -ol#qunit-tests .pass { color: green; } -ol#qunit-tests .fail { color: red; } - -p#qunit-testresult { margin-left: 1em; font-size: 10pt; font-family: 'trebuchet ms', verdana, arial; } diff --git a/plone/app/discussion/tests/qunit/qunit.js b/plone/app/discussion/tests/qunit/qunit.js deleted file mode 100644 index 51ec655..0000000 --- a/plone/app/discussion/tests/qunit/qunit.js +++ /dev/null @@ -1,997 +0,0 @@ -/* - * QUnit - A JavaScript Unit Testing Framework - * - * http://docs.jquery.com/QUnit - * - * Copyright (c) 2009 John Resig, Jörn Zaefferer - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - */ - -(function(window) { - -var QUnit = { - - // Initialize the configuration options - init: function init() { - config = { - stats: { all: 0, bad: 0 }, - moduleStats: { all: 0, bad: 0 }, - started: +new Date, - blocking: false, - autorun: false, - assertions: [], - filters: [], - queue: [] - }; - - var tests = id("qunit-tests"), - banner = id("qunit-banner"), - result = id("qunit-testresult"); - - if ( tests ) { - tests.innerHTML = ""; - } - - if ( banner ) { - banner.className = ""; - } - - if ( result ) { - result.parentNode.removeChild( result ); - } - }, - - // call on start of module test to prepend name to all tests - module: function module(name, testEnvironment) { - - synchronize(function() { - if ( config.currentModule ) { - QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all ); - } - - config.currentModule = name; - config.moduleTestEnvironment = testEnvironment; - config.moduleStats = { all: 0, bad: 0 }; - - QUnit.moduleStart( name, testEnvironment ); - }); - }, - - asyncTest: function asyncTest(testName, expected, callback) { - if ( arguments.length === 2 ) { - callback = expected; - expected = 0; - } - - QUnit.test(testName, expected, callback, true); - }, - - test: function test(testName, expected, callback, async) { - var name = testName, testEnvironment = {}; - - if ( arguments.length === 2 ) { - callback = expected; - expected = null; - } - - if ( config.currentModule ) { - name = config.currentModule + " module: " + name; - } - - if ( !validTest(name) ) { - return; - } - - synchronize(function() { - QUnit.testStart( testName ); - - testEnvironment = extend({ - setup: function() {}, - teardown: function() {} - }, config.moduleTestEnvironment); - - config.assertions = []; - config.expected = null; - - if ( arguments.length >= 3 ) { - config.expected = callback; - callback = arguments[2]; - } - - try { - if ( !config.pollution ) { - saveGlobal(); - } - - testEnvironment.setup.call(testEnvironment); - } catch(e) { - QUnit.ok( false, "Setup failed on " + name + ": " + e.message ); - } - - if ( async ) { - QUnit.stop(); - } - - try { - callback.call(testEnvironment); - } catch(e) { - fail("Test " + name + " died, exception and test follows", e, callback); - QUnit.ok( false, "Died on test #" + (config.assertions.length + 1) + ": " + e.message ); - // else next test will carry the responsibility - saveGlobal(); - - // Restart the tests if they're blocking - if ( config.blocking ) { - start(); - } - } - }); - - synchronize(function() { - try { - checkPollution(); - testEnvironment.teardown.call(testEnvironment); - } catch(e) { - QUnit.ok( false, "Teardown failed on " + name + ": " + e.message ); - } - - try { - QUnit.reset(); - } catch(e) { - fail("reset() failed, following Test " + name + ", exception and reset fn follows", e, reset); - } - - if ( config.expected && config.expected != config.assertions.length ) { - QUnit.ok( false, "Expected " + config.expected + " assertions, but " + config.assertions.length + " were run" ); - } - - var good = 0, bad = 0, - tests = id("qunit-tests"); - - config.stats.all += config.assertions.length; - config.moduleStats.all += config.assertions.length; - - if ( tests ) { - var ol = document.createElement("ol"); - ol.style.display = "none"; - - for ( var i = 0; i < config.assertions.length; i++ ) { - var assertion = config.assertions[i]; - - var li = document.createElement("li"); - li.className = assertion.result ? "pass" : "fail"; - li.innerHTML = assertion.message || "(no message)"; - ol.appendChild( li ); - - if ( assertion.result ) { - good++; - } else { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - - var b = document.createElement("strong"); - b.innerHTML = name + " (" + bad + ", " + good + ", " + config.assertions.length + ")"; - - addEvent(b, "click", function() { - var next = b.nextSibling, display = next.style.display; - next.style.display = display === "none" ? "block" : "none"; - }); - - addEvent(b, "dblclick", function(e) { - var target = (e || window.event).target; - if ( target.nodeName.toLowerCase() === "strong" ) { - var text = "", node = target.firstChild; - - while ( node.nodeType === 3 ) { - text += node.nodeValue; - node = node.nextSibling; - } - - text = text.replace(/(^\s*|\s*$)/g, ""); - - if ( window.location ) { - window.location.href = window.location.href.match(/^(.+?)(\?.*)?$/)[1] + "?" + encodeURIComponent(text); - } - } - }); - - var li = document.createElement("li"); - li.className = bad ? "fail" : "pass"; - li.appendChild( b ); - li.appendChild( ol ); - tests.appendChild( li ); - - if ( bad ) { - var toolbar = id("qunit-testrunner-toolbar"); - if ( toolbar ) { - toolbar.style.display = "block"; - id("qunit-filter-pass").disabled = null; - id("qunit-filter-missing").disabled = null; - } - } - - } else { - for ( var i = 0; i < config.assertions.length; i++ ) { - if ( !config.assertions[i].result ) { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - } - - QUnit.testDone( testName, bad, config.assertions.length ); - - if ( !window.setTimeout && !config.queue.length ) { - done(); - } - }); - - if ( window.setTimeout && !config.doneTimer ) { - config.doneTimer = window.setTimeout(function(){ - if ( !config.queue.length ) { - done(); - } else { - synchronize( done ); - } - }, 13); - } - }, - - /** - * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. - */ - expect: function expect(asserts) { - config.expected = asserts; - }, - - /** - * Asserts true. - * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); - */ - ok: function ok(a, msg) { - QUnit.log(a, msg); - - config.assertions.push({ - result: !!a, - message: msg - }); - }, - - /** - * Checks that the first two arguments are equal, with an optional message. - * Prints out both actual and expected values. - * - * Prefered to ok( actual == expected, message ) - * - * @example equals( format("Received {0} bytes.", 2), "Received 2 bytes." ); - * - * @param Object actual - * @param Object expected - * @param String message (optional) - */ - equals: function equals(actual, expected, message) { - push(expected == actual, actual, expected, message); - }, - - same: function(a, b, message) { - push(QUnit.equiv(a, b), a, b, message); - }, - - start: function start() { - // A slight delay, to avoid any current callbacks - if ( window.setTimeout ) { - window.setTimeout(function() { - if ( config.timeout ) { - clearTimeout(config.timeout); - } - - config.blocking = false; - process(); - }, 13); - } else { - config.blocking = false; - process(); - } - }, - - stop: function stop(timeout) { - config.blocking = true; - - if ( timeout && window.setTimeout ) { - config.timeout = window.setTimeout(function() { - QUnit.ok( false, "Test timed out" ); - QUnit.start(); - }, timeout); - } - }, - - /** - * Resets the test setup. Useful for tests that modify the DOM. - */ - reset: function reset() { - if ( window.jQuery ) { - jQuery("#main").html( config.fixture ); - jQuery.event.global = {}; - jQuery.ajaxSettings = extend({}, config.ajaxSettings); - } - }, - - /** - * Trigger an event on an element. - * - * @example triggerEvent( document.body, "click" ); - * - * @param DOMElement elem - * @param String type - */ - triggerEvent: function triggerEvent( elem, type, event ) { - if ( document.createEvent ) { - event = document.createEvent("MouseEvents"); - event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, - 0, 0, 0, 0, 0, false, false, false, false, 0, null); - elem.dispatchEvent( event ); - - } else if ( elem.fireEvent ) { - elem.fireEvent("on"+type); - } - }, - - // Logging callbacks - done: function done(failures, total) {}, - log: function log(result, message) {}, - testStart: function testStart(name) {}, - testDone: function testDone(name, failures, total) {}, - moduleStart: function moduleStart(name, testEnvironment) {}, - moduleDone: function moduleDone(name, failures, total) {} -}; - -// Maintain internal state -var config = { - // The queue of tests to run - queue: [], - - // block until document ready - blocking: true -}; - -// Load paramaters -(function() { - var location = window.location || { search: "", protocol: "file:" }, - GETParams = location.search.slice(1).split('&'); - - for ( var i = 0; i < GETParams.length; i++ ) { - GETParams[i] = decodeURIComponent( GETParams[i] ); - if ( GETParams[i] === "noglobals" ) { - GETParams.splice( i, 1 ); - i--; - config.noglobals = true; - } - } - - // restrict modules/tests by get parameters - config.filters = GETParams; - - // Figure out if we're running the tests from a server or not - QUnit.isLocal = !!(location.protocol === 'file:'); -})(); - -// Expose the API as global variables, unless an 'exports' -// object exists, in that case we assume we're in CommonJS -if ( typeof exports === "undefined" || typeof require === "undefined" ) { - extend(window, QUnit); - window.QUnit = QUnit; -} else { - extend(exports, QUnit); - exports.QUnit = QUnit; -} - -if ( typeof document === "undefined" || document.readyState === "complete" ) { - config.autorun = true; -} - -addEvent(window, "load", function() { - // Initialize the config, saving the execution queue - var oldconfig = extend({}, config); - QUnit.init(); - extend(config, oldconfig); - - config.blocking = false; - - var userAgent = id("qunit-userAgent"); - if ( userAgent ) { - userAgent.innerHTML = navigator.userAgent; - } - - var toolbar = id("qunit-testrunner-toolbar"); - if ( toolbar ) { - toolbar.style.display = "none"; - - var filter = document.createElement("input"); - filter.type = "checkbox"; - filter.id = "qunit-filter-pass"; - filter.disabled = true; - addEvent( filter, "click", function() { - var li = document.getElementsByTagName("li"); - for ( var i = 0; i < li.length; i++ ) { - if ( li[i].className.indexOf("pass") > -1 ) { - li[i].style.display = filter.checked ? "none" : "block"; - } - } - }); - toolbar.appendChild( filter ); - - var label = document.createElement("label"); - label.setAttribute("for", "filter-pass"); - label.innerHTML = "Hide passed tests"; - toolbar.appendChild( label ); - - var missing = document.createElement("input"); - missing.type = "checkbox"; - missing.id = "qunit-filter-missing"; - missing.disabled = true; - addEvent( missing, "click", function() { - var li = document.getElementsByTagName("li"); - for ( var i = 0; i < li.length; i++ ) { - if ( li[i].className.indexOf("fail") > -1 && li[i].innerHTML.indexOf('missing test - untested code is broken code') > - 1 ) { - li[i].parentNode.parentNode.style.display = missing.checked ? "none" : "block"; - } - } - }); - toolbar.appendChild( missing ); - - label = document.createElement("label"); - label.setAttribute("for", "filter-missing"); - label.innerHTML = "Hide missing tests (untested code is broken code)"; - toolbar.appendChild( label ); - } - - var main = id('main'); - if ( main ) { - config.fixture = main.innerHTML; - } - - if ( window.jQuery ) { - config.ajaxSettings = window.jQuery.ajaxSettings; - } - - QUnit.start(); -}); - -function done() { - if ( config.doneTimer && window.clearTimeout ) { - window.clearTimeout( config.doneTimer ); - config.doneTimer = null; - } - - if ( config.queue.length ) { - config.doneTimer = window.setTimeout(function(){ - if ( !config.queue.length ) { - done(); - } else { - synchronize( done ); - } - }, 13); - - return; - } - - config.autorun = true; - - // Log the last module results - if ( config.currentModule ) { - QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all ); - } - - var banner = id("qunit-banner"), - tests = id("qunit-tests"), - html = ['Tests completed in ', - +new Date - config.started, ' milliseconds.
    ', - '', config.stats.all - config.stats.bad, ' tests of ', config.stats.all, ' passed, ', config.stats.bad,' failed.'].join(''); - - if ( banner ) { - banner.className += " " + (config.stats.bad ? "fail" : "pass"); - } - - if ( tests ) { - var result = id("qunit-testresult"); - - if ( !result ) { - result = document.createElement("p"); - result.id = "qunit-testresult"; - result.className = "result"; - tests.parentNode.insertBefore( result, tests.nextSibling ); - } - - result.innerHTML = html; - } - - QUnit.done( config.stats.bad, config.stats.all ); -} - -function validTest( name ) { - var i = config.filters.length, - run = false; - - if ( !i ) { - return true; - } - - while ( i-- ) { - var filter = config.filters[i], - not = filter.charAt(0) == '!'; - - if ( not ) { - filter = filter.slice(1); - } - - if ( name.indexOf(filter) !== -1 ) { - return !not; - } - - if ( not ) { - run = true; - } - } - - return run; -} - -function push(result, actual, expected, message) { - message = message || (result ? "okay" : "failed"); - QUnit.ok( result, result ? message + ": " + expected : message + ", expected: " + QUnit.jsDump.parse(expected) + " result: " + QUnit.jsDump.parse(actual) ); -} - -function synchronize( callback ) { - config.queue.push( callback ); - - if ( config.autorun && !config.blocking ) { - process(); - } -} - -function process() { - while ( config.queue.length && !config.blocking ) { - config.queue.shift()(); - } -} - -function saveGlobal() { - config.pollution = []; - - if ( config.noglobals ) { - for ( var key in window ) { - config.pollution.push( key ); - } - } -} - -function checkPollution( name ) { - var old = config.pollution; - saveGlobal(); - - var newGlobals = diff( old, config.pollution ); - if ( newGlobals.length > 0 ) { - ok( false, "Introduced global variable(s): " + newGlobals.join(", ") ); - config.expected++; - } - - var deletedGlobals = diff( config.pollution, old ); - if ( deletedGlobals.length > 0 ) { - ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") ); - config.expected++; - } -} - -// returns a new Array with the elements that are in a but not in b -function diff( a, b ) { - var result = a.slice(); - for ( var i = 0; i < result.length; i++ ) { - for ( var j = 0; j < b.length; j++ ) { - if ( result[i] === b[j] ) { - result.splice(i, 1); - i--; - break; - } - } - } - return result; -} - -function fail(message, exception, callback) { - if ( typeof console !== "undefined" && console.error && console.warn ) { - console.error(message); - console.error(exception); - console.warn(callback.toString()); - - } else if ( window.opera && opera.postError ) { - opera.postError(message, exception, callback.toString); - } -} - -function extend(a, b) { - for ( var prop in b ) { - a[prop] = b[prop]; - } - - return a; -} - -function addEvent(elem, type, fn) { - if ( elem.addEventListener ) { - elem.addEventListener( type, fn, false ); - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, fn ); - } else { - fn(); - } -} - -function id(name) { - return !!(typeof document !== "undefined" && document && document.getElementById) && - document.getElementById( name ); -} - -// Test for equality any JavaScript type. -// Discussions and reference: http://philrathe.com/articles/equiv -// Test suites: http://philrathe.com/tests/equiv -// Author: Philippe Rathé -QUnit.equiv = function () { - - var innerEquiv; // the real equiv function - var callers = []; // stack to decide between skip/abort functions - - - // Determine what is o. - function hoozit(o) { - if (o.constructor === String) { - return "string"; - - } else if (o.constructor === Boolean) { - return "boolean"; - - } else if (o.constructor === Number) { - - if (isNaN(o)) { - return "nan"; - } else { - return "number"; - } - - } else if (typeof o === "undefined") { - return "undefined"; - - // consider: typeof null === object - } else if (o === null) { - return "null"; - - // consider: typeof [] === object - } else if (o instanceof Array) { - return "array"; - - // consider: typeof new Date() === object - } else if (o instanceof Date) { - return "date"; - - // consider: /./ instanceof Object; - // /./ instanceof RegExp; - // typeof /./ === "function"; // => false in IE and Opera, - // true in FF and Safari - } else if (o instanceof RegExp) { - return "regexp"; - - } else if (typeof o === "object") { - return "object"; - - } else if (o instanceof Function) { - return "function"; - } else { - return undefined; - } - } - - // Call the o related callback with the given arguments. - function bindCallbacks(o, callbacks, args) { - var prop = hoozit(o); - if (prop) { - if (hoozit(callbacks[prop]) === "function") { - return callbacks[prop].apply(callbacks, args); - } else { - return callbacks[prop]; // or undefined - } - } - } - - var callbacks = function () { - - // for string, boolean, number and null - function useStrictEquality(b, a) { - if (b instanceof a.constructor || a instanceof b.constructor) { - // to catch short annotaion VS 'new' annotation of a declaration - // e.g. var i = 1; - // var j = new Number(1); - return a == b; - } else { - return a === b; - } - } - - return { - "string": useStrictEquality, - "boolean": useStrictEquality, - "number": useStrictEquality, - "null": useStrictEquality, - "undefined": useStrictEquality, - - "nan": function (b) { - return isNaN(b); - }, - - "date": function (b, a) { - return hoozit(b) === "date" && a.valueOf() === b.valueOf(); - }, - - "regexp": function (b, a) { - return hoozit(b) === "regexp" && - a.source === b.source && // the regex itself - a.global === b.global && // and its modifers (gmi) ... - a.ignoreCase === b.ignoreCase && - a.multiline === b.multiline; - }, - - // - skip when the property is a method of an instance (OOP) - // - abort otherwise, - // initial === would have catch identical references anyway - "function": function () { - var caller = callers[callers.length - 1]; - return caller !== Object && - typeof caller !== "undefined"; - }, - - "array": function (b, a) { - var i; - var len; - - // b could be an object literal here - if ( ! (hoozit(b) === "array")) { - return false; - } - - len = a.length; - if (len !== b.length) { // safe and faster - return false; - } - for (i = 0; i < len; i++) { - if ( ! innerEquiv(a[i], b[i])) { - return false; - } - } - return true; - }, - - "object": function (b, a) { - var i; - var eq = true; // unless we can proove it - var aProperties = [], bProperties = []; // collection of strings - - // comparing constructors is more strict than using instanceof - if ( a.constructor !== b.constructor) { - return false; - } - - // stack constructor before traversing properties - callers.push(a.constructor); - - for (i in a) { // be strict: don't ensures hasOwnProperty and go deep - - aProperties.push(i); // collect a's properties - - if ( ! innerEquiv(a[i], b[i])) { - eq = false; - } - } - - callers.pop(); // unstack, we are done - - for (i in b) { - bProperties.push(i); // collect b's properties - } - - // Ensures identical properties name - return eq && innerEquiv(aProperties.sort(), bProperties.sort()); - } - }; - }(); - - innerEquiv = function () { // can take multiple arguments - var args = Array.prototype.slice.apply(arguments); - if (args.length < 2) { - return true; // end transition - } - - return (function (a, b) { - if (a === b) { - return true; // catch the most you can - } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || hoozit(a) !== hoozit(b)) { - return false; // don't lose time with error prone cases - } else { - return bindCallbacks(a, callbacks, [b, a]); - } - - // apply transition with (1..n) arguments - })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1)); - }; - - return innerEquiv; - -}(); - -/** - * jsDump - * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php) - * Date: 5/15/2008 - * @projectDescription Advanced and extensible data dumping for Javascript. - * @version 1.0.0 - * @author Ariel Flesler - * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} - */ -QUnit.jsDump = (function() { - function quote( str ) { - return '"' + str.toString().replace(/"/g, '\\"') + '"'; - }; - function literal( o ) { - return o + ''; - }; - function join( pre, arr, post ) { - var s = jsDump.separator(), - base = jsDump.indent(), - inner = jsDump.indent(1); - if ( arr.join ) - arr = arr.join( ',' + s + inner ); - if ( !arr ) - return pre + post; - return [ pre, inner + arr, base + post ].join(s); - }; - function array( arr ) { - var i = arr.length, ret = Array(i); - this.up(); - while ( i-- ) - ret[i] = this.parse( arr[i] ); - this.down(); - return join( '[', ret, ']' ); - }; - - var reName = /^function (\w+)/; - - var jsDump = { - parse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance - var parser = this.parsers[ type || this.typeOf(obj) ]; - type = typeof parser; - - return type == 'function' ? parser.call( this, obj ) : - type == 'string' ? parser : - this.parsers.error; - }, - typeOf:function( obj ) { - var type = typeof obj, - f = 'function';//we'll use it 3 times, save it - return type != 'object' && type != f ? type : - !obj ? 'null' : - obj.exec ? 'regexp' :// some browsers (FF) consider regexps functions - obj.getHours ? 'date' : - obj.scrollBy ? 'window' : - obj.nodeName == '#document' ? 'document' : - obj.nodeName ? 'node' : - obj.item ? 'nodelist' : // Safari reports nodelists as functions - obj.callee ? 'arguments' : - obj.call || obj.constructor != Array && //an array would also fall on this hack - (obj+'').indexOf(f) != -1 ? f : //IE reports functions like alert, as objects - 'length' in obj ? 'array' : - type; - }, - separator:function() { - return this.multiline ? this.HTML ? '
    ' : '\n' : this.HTML ? ' ' : ' '; - }, - indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing - if ( !this.multiline ) - return ''; - var chr = this.indentChar; - if ( this.HTML ) - chr = chr.replace(/\t/g,' ').replace(/ /g,' '); - return Array( this._depth_ + (extra||0) ).join(chr); - }, - up:function( a ) { - this._depth_ += a || 1; - }, - down:function( a ) { - this._depth_ -= a || 1; - }, - setParser:function( name, parser ) { - this.parsers[name] = parser; - }, - // The next 3 are exposed so you can use them - quote:quote, - literal:literal, - join:join, - // - _depth_: 1, - // This is the list of parsers, to modify them, use jsDump.setParser - parsers:{ - window: '[Window]', - document: '[Document]', - error:'[ERROR]', //when no parser is found, shouldn't happen - unknown: '[Unknown]', - 'null':'null', - undefined:'undefined', - 'function':function( fn ) { - var ret = 'function', - name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE - if ( name ) - ret += ' ' + name; - ret += '('; - - ret = [ ret, this.parse( fn, 'functionArgs' ), '){'].join(''); - return join( ret, this.parse(fn,'functionCode'), '}' ); - }, - array: array, - nodelist: array, - arguments: array, - object:function( map ) { - var ret = [ ]; - this.up(); - for ( var key in map ) - ret.push( this.parse(key,'key') + ': ' + this.parse(map[key]) ); - this.down(); - return join( '{', ret, '}' ); - }, - node:function( node ) { - var open = this.HTML ? '<' : '<', - close = this.HTML ? '>' : '>'; - - var tag = node.nodeName.toLowerCase(), - ret = open + tag; - - for ( var a in this.DOMAttrs ) { - var val = node[this.DOMAttrs[a]]; - if ( val ) - ret += ' ' + a + '=' + this.parse( val, 'attribute' ); - } - return ret + close + open + '/' + tag + close; - }, - functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function - var l = fn.length; - if ( !l ) return ''; - - var args = Array(l); - while ( l-- ) - args[l] = String.fromCharCode(97+l);//97 is 'a' - return ' ' + args.join(', ') + ' '; - }, - key:quote, //object calls it internally, the key part of an item in a map - functionCode:'[code]', //function calls it internally, it's the content of the function - attribute:quote, //node calls it internally, it's an html attribute value - string:quote, - date:quote, - regexp:literal, //regex - number:literal, - 'boolean':literal - }, - DOMAttrs:{//attributes to dump from nodes, name=>realName - id:'id', - name:'name', - 'class':'className' - }, - HTML:true,//if true, entities are escaped ( <, >, \t, space and \n ) - indentChar:' ',//indentation unit - multiline:true //if true, items in a collection, are separated by a \n, else just a space. - }; - - return jsDump; -})(); - -})(this); From a8dc5dd3f0913fa34c522b2b8550fd53891fd73d Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 19 Dec 2013 09:54:03 +0100 Subject: [PATCH 138/254] Remove test_suite functions since they are only needed for zope.testing < 3.8.0. --- plone/app/discussion/tests/test_catalog.py | 3 --- plone/app/discussion/tests/test_comment.py | 3 --- plone/app/discussion/tests/test_comments_viewlet.py | 3 --- plone/app/discussion/tests/test_controlpanel.py | 3 --- plone/app/discussion/tests/test_conversation.py | 3 --- plone/app/discussion/tests/test_indexers.py | 3 --- plone/app/discussion/tests/test_moderation_view.py | 3 --- plone/app/discussion/tests/test_notifications.py | 3 --- plone/app/discussion/tests/test_workflow.py | 3 --- 9 files changed, 27 deletions(-) diff --git a/plone/app/discussion/tests/test_catalog.py b/plone/app/discussion/tests/test_catalog.py index cbe8df6..cbff0cd 100644 --- a/plone/app/discussion/tests/test_catalog.py +++ b/plone/app/discussion/tests/test_catalog.py @@ -569,6 +569,3 @@ class NoConversationCatalogTest(unittest.TestCase): IAnnotations(self.portal.doc1) ) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_comment.py b/plone/app/discussion/tests/test_comment.py index 1f39098..d5df9c2 100644 --- a/plone/app/discussion/tests/test_comment.py +++ b/plone/app/discussion/tests/test_comment.py @@ -499,6 +499,3 @@ class RepliesTest(unittest.TestCase): re_re_re_comment.absolute_url() ) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index aebeecd..5e7d89f 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -559,6 +559,3 @@ class TestCommentsViewlet(unittest.TestCase): self.assertTrue( localized_time in ['Feb 01, 2009 11:32 PM', '2009-02-01 23:32']) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_controlpanel.py b/plone/app/discussion/tests/test_controlpanel.py index a184bb7..1596524 100644 --- a/plone/app/discussion/tests/test_controlpanel.py +++ b/plone/app/discussion/tests/test_controlpanel.py @@ -214,6 +214,3 @@ class ConfigurationChangedSubscriberTest(unittest.TestCase): # setting itself remains unchanged. self.settings.moderation_enabled = True - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_conversation.py b/plone/app/discussion/tests/test_conversation.py index 278adb5..29976e8 100644 --- a/plone/app/discussion/tests/test_conversation.py +++ b/plone/app/discussion/tests/test_conversation.py @@ -874,6 +874,3 @@ class RepliesTest(unittest.TestCase): self.assertEqual(len(replies_to_comment1_1), 1) self.assertEqual(len(replies_to_comment2), 1) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_indexers.py b/plone/app/discussion/tests/test_indexers.py index 0701e27..2d4e6da 100644 --- a/plone/app/discussion/tests/test_indexers.py +++ b/plone/app/discussion/tests/test_indexers.py @@ -204,6 +204,3 @@ class CommentIndexersTest(unittest.TestCase): # object the comment was added to self.assertEqual(catalog.in_response_to(self.comment)(), 'Document 1') - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_moderation_view.py b/plone/app/discussion/tests/test_moderation_view.py index c821200..1c9cf18 100644 --- a/plone/app/discussion/tests/test_moderation_view.py +++ b/plone/app/discussion/tests/test_moderation_view.py @@ -164,6 +164,3 @@ class ModerationBulkActionsViewTest(unittest.TestCase): self.assertTrue(comment) self.assertEqual(comment, self.comment2) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_notifications.py b/plone/app/discussion/tests/test_notifications.py index 90b6707..548681c 100644 --- a/plone/app/discussion/tests/test_notifications.py +++ b/plone/app/discussion/tests/test_notifications.py @@ -276,6 +276,3 @@ class TestModeratorNotificationUnit(unittest.TestCase): self.assertEqual(len(self.mailhost.messages), 0) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_workflow.py b/plone/app/discussion/tests/test_workflow.py index e54fecd..65361aa 100644 --- a/plone/app/discussion/tests/test_workflow.py +++ b/plone/app/discussion/tests/test_workflow.py @@ -275,6 +275,3 @@ class CommentReviewWorkflowTest(unittest.TestCase): ) ) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) From 8ccd6489286b01821328db43f36dd9c37fcdc8d5 Mon Sep 17 00:00:00 2001 From: maartenkling Date: Sun, 2 Feb 2014 14:55:37 +0100 Subject: [PATCH 139/254] user member.getId as author_username, so membrane users and plone users have portraits and author urls --- CHANGES.rst | 4 ++++ plone/app/discussion/browser/comments.py | 8 ++++---- plone/app/discussion/tests/test_comments_viewlet.py | 5 ++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 88650ce..ab43b0d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,10 @@ Changelog 2.3.0 (unreleased) ------------------ +- user member.id as author_username, so membrane users having different id + then username still have there picture shown and author path is correct. + [maartenkling] + - Corrections and additions to the Danish translation [aputtu] diff --git a/plone/app/discussion/browser/comments.py b/plone/app/discussion/browser/comments.py index caf2859..30bc74c 100644 --- a/plone/app/discussion/browser/comments.py +++ b/plone/app/discussion/browser/comments.py @@ -195,7 +195,7 @@ class CommentForm(extensible.ExtensibleForm, form.Form): elif not portal_membership.isAnonymousUser() and can_reply: # Member member = portal_membership.getAuthenticatedMember() - username = member.getUserName() + memberid = member.getId() user = member.getUser() email = member.getProperty('email') fullname = member.getProperty('fullname') @@ -207,9 +207,9 @@ class CommentForm(extensible.ExtensibleForm, form.Form): if email and isinstance(email, str): email = unicode(email, 'utf-8') comment.changeOwnership(user, recursive=False) - comment.manage_setLocalRoles(username, ["Owner"]) - comment.creator = username - comment.author_username = username + comment.manage_setLocalRoles(memberid, ["Owner"]) + comment.creator = memberid + comment.author_username = memberid comment.author_name = fullname comment.author_email = email comment.creation_date = datetime.utcnow() diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index 5e7d89f..c0d45b2 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -126,12 +126,12 @@ class TestCommentForm(unittest.TestCase): for comment in comments: self.assertEqual(comment.text, u"bar") - self.assertEqual(comment.creator, "test-user") + self.assertEqual(comment.creator, "test_user_1_") self.assertEqual(comment.getOwner().getUserName(), "test-user") local_roles = comment.get_local_roles() self.assertEqual(len(local_roles), 1) userid, roles = local_roles[0] - self.assertEqual(userid, 'test-user') + self.assertEqual(userid, 'test_user_1_') self.assertEqual(len(roles), 1) self.assertEqual(roles[0], 'Owner') @@ -558,4 +558,3 @@ class TestCommentsViewlet(unittest.TestCase): localized_time = self.viewlet.format_time(python_time) self.assertTrue( localized_time in ['Feb 01, 2009 11:32 PM', '2009-02-01 23:32']) - From f37e96bb90a1bcbaa3a6aa98396d8f4ae02b263c Mon Sep 17 00:00:00 2001 From: maartenkling Date: Sun, 2 Feb 2014 15:02:21 +0100 Subject: [PATCH 140/254] fix typo in changelog --- CHANGES.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index ab43b0d..07928e3 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,7 @@ Changelog 2.3.0 (unreleased) ------------------ -- user member.id as author_username, so membrane users having different id +- use member.getId as author_username, so membrane users having different id then username still have there picture shown and author path is correct. [maartenkling] From a9d0cb574bb0939e61e2a1a4e2cafb92591997c1 Mon Sep 17 00:00:00 2001 From: Ovidiu Miron Date: Tue, 4 Feb 2014 11:00:06 +0200 Subject: [PATCH 141/254] Execute the property workflow --- plone/app/discussion/browser/javascripts/comments.js | 2 +- plone/app/discussion/browser/moderation.py | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/plone/app/discussion/browser/javascripts/comments.js b/plone/app/discussion/browser/javascripts/comments.js index 25accda..85f2e96 100644 --- a/plone/app/discussion/browser/javascripts/comments.js +++ b/plone/app/discussion/browser/javascripts/comments.js @@ -151,7 +151,7 @@ $.ajax({ type: "GET", url: form_url, - data: "workflow_action=publish", + data: data, context: trigger, success: function (msg) { // remove button (trigger object can't be directly removed) diff --git a/plone/app/discussion/browser/moderation.py b/plone/app/discussion/browser/moderation.py index aa7bb91..068cb60 100644 --- a/plone/app/discussion/browser/moderation.py +++ b/plone/app/discussion/browser/moderation.py @@ -131,12 +131,11 @@ class PublishComment(BrowserView): comment = aq_inner(self.context) content_object = aq_parent(aq_parent(comment)) workflowTool = getToolByName(comment, 'portal_workflow', None) - current_state = workflowTool.getInfoFor(comment, 'review_state') - if current_state != 'published': - workflowTool.doActionFor(comment, 'publish') + workflow_action = self.request.form.get('workflow_action', 'publish') + workflowTool.doActionFor(comment, workflow_action) comment.reindexObject() content_object.reindexObject() - IStatusMessage(self.context.REQUEST).addStatusMessage( + StatusMessage(self.context.REQUEST).addStatusMessage( _("Comment approved."), type="info") came_from = self.context.REQUEST.HTTP_REFERER From 6bc5db4276f9eff91e3728eaf322a635dd5cb17a Mon Sep 17 00:00:00 2001 From: Ovidiu Miron Date: Tue, 4 Feb 2014 11:46:29 +0200 Subject: [PATCH 142/254] Fixed typo error --- plone/app/discussion/browser/moderation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plone/app/discussion/browser/moderation.py b/plone/app/discussion/browser/moderation.py index 068cb60..da710b1 100644 --- a/plone/app/discussion/browser/moderation.py +++ b/plone/app/discussion/browser/moderation.py @@ -135,7 +135,7 @@ class PublishComment(BrowserView): workflowTool.doActionFor(comment, workflow_action) comment.reindexObject() content_object.reindexObject() - StatusMessage(self.context.REQUEST).addStatusMessage( + IStatusMessage(self.context.REQUEST).addStatusMessage( _("Comment approved."), type="info") came_from = self.context.REQUEST.HTTP_REFERER From f660a6d9809624660ae2f165fdfdfb8d927b130f Mon Sep 17 00:00:00 2001 From: Ovidiu Miron Date: Tue, 4 Feb 2014 11:53:51 +0200 Subject: [PATCH 143/254] added to CHANGES.rst --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 88650ce..d9fd126 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog 2.3.0 (unreleased) ------------------ +- Execute the property workflow + [omiron] + - Corrections and additions to the Danish translation [aputtu] From aa8730228034a8eeaf38e7703de3c6fa90328280 Mon Sep 17 00:00:00 2001 From: ichim-david Date: Mon, 10 Feb 2014 11:51:35 +0200 Subject: [PATCH 144/254] Amend commit history of changes made by omiron from pull request 42 for a clearer message of intended fix --- CHANGES.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index d9fd126..8d8c764 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,8 @@ Changelog 2.3.0 (unreleased) ------------------ -- Execute the property workflow +- Execute the proper workflow change when using the moderation buttons instead + of hardcoding the workflow action to always publish [omiron] - Corrections and additions to the Danish translation From cc02ed01ad4c1896d6f427d73ce838c0d8cb4e86 Mon Sep 17 00:00:00 2001 From: Kees Hink Date: Tue, 11 Feb 2014 09:38:54 +0100 Subject: [PATCH 145/254] Remove DL's from portal message in templates. --- CHANGES.rst | 4 +++ plone/app/discussion/browser/controlpanel.pt | 36 ++++++++++---------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 8d8c764..0a9938b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,10 @@ Changelog 2.3.0 (unreleased) ------------------ +- Remove DL's from portal message in templates. + https://github.com/plone/Products.CMFPlone/issues/153 + [khink] + - Execute the proper workflow change when using the moderation buttons instead of hardcoding the workflow action to always publish [omiron] diff --git a/plone/app/discussion/browser/controlpanel.pt b/plone/app/discussion/browser/controlpanel.pt index 0849efc..0018049 100644 --- a/plone/app/discussion/browser/controlpanel.pt +++ b/plone/app/discussion/browser/controlpanel.pt @@ -22,12 +22,12 @@ tal:attributes="src string:${context/portal_url}/++resource++plone.app.discussion.javascripts/controlpanel.js"> -
    -
    + Warning -
    -
    + + You have not configured a mail host or a site 'From' address, various features including contact forms, email notification and password reset will not work. Go to the @@ -38,15 +38,15 @@ >Mail control panel to fix this. -
    -
    + + -
    -
    + Warning -
    -
    + + You have configured a custom workflow for the 'Discussion Item' content type. You can enable/disable the comment moderation in this control panel only if you use one of the default @@ -58,15 +58,15 @@ >Types control panel to choose a workflow for the 'Discussion Item' type. -
    -
    + + -
    -
    + Warning -
    -
    + + You have comments that have not been migrated to the new commenting system that has been introduced in Plone 4.1. Please @@ -77,8 +77,8 @@ >migrate your comments to fix this. -
    -
    + +
    Portal status message From 6ae623c39ddb32cedc22952787fe7d64d97dd535 Mon Sep 17 00:00:00 2001 From: Kees Hink Date: Tue, 11 Feb 2014 09:42:42 +0100 Subject: [PATCH 146/254] Remove DL's from portal message in templates. --- plone/app/discussion/browser/moderation.pt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plone/app/discussion/browser/moderation.pt b/plone/app/discussion/browser/moderation.pt index dd0a7b1..d5c2065 100644 --- a/plone/app/discussion/browser/moderation.pt +++ b/plone/app/discussion/browser/moderation.pt @@ -25,18 +25,18 @@ Moderate comments -
    -
    Warning
    -
    + Warning + Moderation workflow is disabled. You have to enable the 'Comment Review Workflow' for the Comment content type before you can moderate comments here. -
    -
    + +
    From d788d07a879604bf6e01932d4b538316eeb7c4d2 Mon Sep 17 00:00:00 2001 From: Philip Bauer Date: Fri, 14 Feb 2014 09:40:55 +0100 Subject: [PATCH 147/254] fix test. the richtext-field in plone.app.contenttypes uses a behavior --- plone/app/discussion/tests/functional_test_comments.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plone/app/discussion/tests/functional_test_comments.txt b/plone/app/discussion/tests/functional_test_comments.txt index 736da64..55a489d 100644 --- a/plone/app/discussion/tests/functional_test_comments.txt +++ b/plone/app/discussion/tests/functional_test_comments.txt @@ -299,7 +299,7 @@ Login as admin. Edit the content object. >>> browser.open("http://nohost/plone/doc1/edit") - >>> browser.getControl(name='form.widgets.text').value = "Lorem ipsum" + >>> browser.getControl(name='form.widgets.IRichText.text').value = "Lorem ipsum" >>> browser.getControl('Save').click() Make sure the edit was successful. From ce5c00ca7ddf602b6d22932b8e95cd8e5e66e199 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Sat, 22 Feb 2014 07:25:07 +0100 Subject: [PATCH 148/254] Prepare 2.3.0 release. --- CHANGES.rst | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 8d8c764..319e236 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,7 +1,7 @@ Changelog ========= -2.3.0 (unreleased) +2.3.0 (2014-02-22) ------------------ - Execute the proper workflow change when using the moderation buttons instead diff --git a/setup.py b/setup.py index af74549..73597bc 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.3.0dev' +version = '2.3.0' install_requires = [ 'setuptools', From cd65923df53925a941b5d3d47f7f5258bf29d7f4 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Sat, 22 Feb 2014 07:58:35 +0100 Subject: [PATCH 149/254] Make sure a release includes *.rst files. --- MANIFEST.in | 1 + 1 file changed, 1 insertion(+) diff --git a/MANIFEST.in b/MANIFEST.in index e0cdcf4..f3e0bd5 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,5 @@ include *.txt +include *.rst recursive-include docs * recursive-include plone * From 7a8f60dd5f18bceb12fd887a130f24aba0428212 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Sat, 22 Feb 2014 10:11:05 +0100 Subject: [PATCH 150/254] Back to development: 2.3.1 --- CHANGES.rst | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 319e236..25150f9 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,12 @@ Changelog ========= +2.3.1 (unreleased) +------------------ + +- Nothing changed yet. + + 2.3.0 (2014-02-22) ------------------ diff --git a/setup.py b/setup.py index 73597bc..fe1ab01 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.3.0' +version = '2.3.1.dev0' install_requires = [ 'setuptools', From a26a4b363c63b715c03bd344d0deb4c5790ae861 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Sat, 22 Feb 2014 10:12:15 +0100 Subject: [PATCH 151/254] 2.3.0 was a brown bag release. --- CHANGES.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 25150f9..dec4a56 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,8 @@ Changelog 2.3.1 (unreleased) ------------------ -- Nothing changed yet. +- 2.3.0 was a brown bag release. + [timo] 2.3.0 (2014-02-22) From e0ae1c0eaacea9ca4cada32b5118c83fe51aa46c Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Sat, 22 Feb 2014 10:12:32 +0100 Subject: [PATCH 152/254] Preparing release 2.3.1 --- CHANGES.rst | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index dec4a56..b01b0d9 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,7 +1,7 @@ Changelog ========= -2.3.1 (unreleased) +2.3.1 (2014-02-22) ------------------ - 2.3.0 was a brown bag release. diff --git a/setup.py b/setup.py index fe1ab01..8385504 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '2.3.1.dev0' +version = '2.3.1' install_requires = [ 'setuptools', From f3a247dcd7271a5ee8a079267e5390b960979fdc Mon Sep 17 00:00:00 2001 From: tisto Date: Sun, 23 Mar 2014 17:46:53 +0100 Subject: [PATCH 153/254] Fix buildout that broke due to version conflicts caused by the latest p.a.contenttypes release. --- buildout.cfg | 5 +++++ setup.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/buildout.cfg b/buildout.cfg index d8d5f93..636663e 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -24,4 +24,9 @@ flake8-max-complexity = 50 plone.app.discussion = zope.interface = 4.0.5 plone.app.portlets = 2.5a1 +plone.dexterity = 2.2.1 +plone.app.querystring = 1.1.0 +plone.app.jquery = 1.8.3 +plone.app.testing = 4.2.4 +plone.app.vocabularies = 2.1.14 diff --git a/setup.py b/setup.py index a5af604..89b26b6 100644 --- a/setup.py +++ b/setup.py @@ -51,7 +51,7 @@ setup(name='plone.app.discussion', extras_require={ 'test': [ 'plone.app.testing', - 'plone.app.contenttypes', + 'plone.app.contenttypes[test]', ] }, entry_points=""" From 9e7b574690f87d692ade8a9c223b92730027a298 Mon Sep 17 00:00:00 2001 From: tisto Date: Mon, 24 Mar 2014 20:51:26 +0100 Subject: [PATCH 154/254] Move 'Fix reindexObject ...' CHANGES entry to the current release. --- CHANGES.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 36e21c8..8c83035 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,10 @@ Changelog 2.3.2 (unreleased) ------------------ +- Fix reindexObject for content_object in moderation views. + Now reindex only "total_comments" index and not all the indexes + [cekk] + - Fix comments Title if utf-8 characters in author_name [huub_bouma] @@ -93,8 +97,6 @@ Changelog to old discussion items that had none. [pjstevns] -- Fix reindexObject for content_object in moderation views. - Now reindex only "total_comments" index and not all the indexes [cekk] 2.2.6 (2013-05-23) ------------------ From e2811ebd52b21f6cd35e940a57b16a1c2be0f830 Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 16:49:48 +0100 Subject: [PATCH 155/254] ignore local directory from virtualenv --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 206bfb5..ad5988c 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ /.Python /include /lib +/local /.project /.pydevproject /.mr.developer.cfg From 96bf7ca002a73381441bc8b88c6fcdee3cde5124 Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 16:59:20 +0100 Subject: [PATCH 156/254] added update translations script (flavor by saily) --- .gitignore | 1 + buildout.cfg | 47 +++++++++++++++++++++++++++++++++++++++++++++++ setup.py | 15 ++++++++++++++- 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ad5988c..ba3299b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ /local.cfg .coverage /*.egg-info +/*.egg /.installed.cfg *.pyc /.Python diff --git a/buildout.cfg b/buildout.cfg index 636663e..5ea07fd 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -6,6 +6,7 @@ parts += mkrelease pocompile code-analysis + update_translations [mkrelease] recipe = zc.recipe.egg @@ -30,3 +31,49 @@ plone.app.jquery = 1.8.3 plone.app.testing = 4.2.4 plone.app.vocabularies = 2.1.14 +[babelpy] +recipe = zc.recipe.egg +eggs = + setuptools + Babel + lingua +interpreter = babelpy + +[update_translations] +recipe = collective.recipe.template +output = ${buildout:directory}/bin/update_translations +input = inline: + #!/bin/bash + DOMAIN="plone" + BASE_PATH=${buildout:directory}/plone/app/discussion + # --- No modifications below --- + [[ -s $BASE_PATH/locales/$DOMAIN.pot ]] && \ + cp $BASE_PATH/locales/$DOMAIN.pot $BASE_PATH/locales/$DOMAIN.1.pot + ${buildout:directory}/bin/${babelpy:interpreter} \ + ${buildout:directory}/setup.py extract_messages \ + -o $BASE_PATH/locales/$DOMAIN.pot + + if [ ! -s $BASE_PATH/locales/$DOMAIN.pot ]; then + [[ -s $BASE_PATH/locales/$DOMAIN.1.pot ]] && \ + mv $BASE_PATH/locales/$DOMAIN.1.pot $BASE_PATH/locales/$DOMAIN.pot + echo -e "\033[0;31mERROR\033[0m: Restored old .pot file due template errors." + exit 1 + fi + [[ -s $BASE_PATH/locales/$DOMAIN.1.pot ]] && \ + rm $BASE_PATH/locales/$DOMAIN.1.pot + # sync all locales, create if they do not exist + for LANG in `find $BASE_PATH/locales -maxdepth 1 -mindepth 1 -type d \ + | grep -v .svn \ + | sed -e "s/.*locales\/\(.*\)$/\1/"`; do + if [ ! -f $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.po ]; then + echo -e "\033[0;32mINFO\033[0m: Create $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.po." + touch $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.po + fi + ${buildout:directory}/bin/${babelpy:interpreter} \ + ${buildout:directory}/setup.py update_catalog \ + -l $LANG -i $BASE_PATH/locales/$DOMAIN.pot \ + -o $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.po + + echo -e "\033[0;32mINFO ($LANG)\033[0m: $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.po synced." + done +mode = 755 \ No newline at end of file diff --git a/setup.py b/setup.py index 89b26b6..dfdb31d 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,8 @@ -from setuptools import setup, find_packages +from setuptools import dist +from setuptools import find_packages +from setuptools import setup + +dist.Distribution(dict(setup_requires='Babel')) version = '2.3.2.dev0' @@ -54,6 +58,15 @@ setup(name='plone.app.discussion', 'plone.app.contenttypes[test]', ] }, + message_extractors={ + 'src': [ + ('**.py', 'lingua_python', None), + ('**.pt', 'lingua_xml', None), + ('**.cpt', 'lingua_xml', None), + ('**.zcml', 'lingua_xml', None), + ('**.xml', 'lingua_xml', None), + ], + }, entry_points=""" [z3c.autoinclude.plugin] target = plone From 79ad7816c491b7a6b0e3e258ce1d763f1fb21cc5 Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 18:33:48 +0100 Subject: [PATCH 157/254] added i8ndude and script to buildout in order to make translations updates simpler. --- buildout.cfg | 53 ++++++++++++++++++---------------------------------- 1 file changed, 18 insertions(+), 35 deletions(-) diff --git a/buildout.cfg b/buildout.cfg index 5ea07fd..2d918f7 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -6,6 +6,7 @@ parts += mkrelease pocompile code-analysis + i18ndude update_translations [mkrelease] @@ -31,49 +32,31 @@ plone.app.jquery = 1.8.3 plone.app.testing = 4.2.4 plone.app.vocabularies = 2.1.14 -[babelpy] + +[i18ndude] recipe = zc.recipe.egg eggs = - setuptools - Babel - lingua -interpreter = babelpy + i18ndude [update_translations] recipe = collective.recipe.template -output = ${buildout:directory}/bin/update_translations +output = ${buildout:bin-directory}/update_translations input = inline: - #!/bin/bash - DOMAIN="plone" + #!/usr/bin/env bash + + DOMAIN="plone.app.discussion" BASE_PATH=${buildout:directory}/plone/app/discussion - # --- No modifications below --- - [[ -s $BASE_PATH/locales/$DOMAIN.pot ]] && \ - cp $BASE_PATH/locales/$DOMAIN.pot $BASE_PATH/locales/$DOMAIN.1.pot - ${buildout:directory}/bin/${babelpy:interpreter} \ - ${buildout:directory}/setup.py extract_messages \ - -o $BASE_PATH/locales/$DOMAIN.pot + I18NDUDE=${buildout:bin-directory}/i18ndude + + $I18NDUDE rebuild-pot --pot $BASE_PATH/locales/$DOMAIN.pot --create "$DOMAIN" $BASE_PATH* + $I18NDUDE rebuild-pot --pot $BASE_PATH/i18n/plone.pot --create "plone" $BASE_PATH/profiles/ - if [ ! -s $BASE_PATH/locales/$DOMAIN.pot ]; then - [[ -s $BASE_PATH/locales/$DOMAIN.1.pot ]] && \ - mv $BASE_PATH/locales/$DOMAIN.1.pot $BASE_PATH/locales/$DOMAIN.pot - echo -e "\033[0;31mERROR\033[0m: Restored old .pot file due template errors." - exit 1 - fi - [[ -s $BASE_PATH/locales/$DOMAIN.1.pot ]] && \ - rm $BASE_PATH/locales/$DOMAIN.1.pot - # sync all locales, create if they do not exist for LANG in `find $BASE_PATH/locales -maxdepth 1 -mindepth 1 -type d \ - | grep -v .svn \ - | sed -e "s/.*locales\/\(.*\)$/\1/"`; do - if [ ! -f $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.po ]; then - echo -e "\033[0;32mINFO\033[0m: Create $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.po." - touch $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.po - fi - ${buildout:directory}/bin/${babelpy:interpreter} \ - ${buildout:directory}/setup.py update_catalog \ - -l $LANG -i $BASE_PATH/locales/$DOMAIN.pot \ - -o $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.po - - echo -e "\033[0;32mINFO ($LANG)\033[0m: $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.po synced." + | sed -e "s/.*locales\/\(.*\)$/\1/"`; do + $I18NDUDE sync --pot $BASE_PATH/locales/$DOMAIN.pot $BASE_PATH/locales/de/LC_MESSAGES/$DOMAIN.po + msgfmt --no-hash -o $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.mo $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.po + + $I18NDUDE sync --pot $BASE_PATH/i18n/plone.pot $BASE_PATH/i18n/plone-$LANG.po + msgfmt --no-hash -o $BASE_PATH/i18n/plone-$LANG.mo $BASE_PATH/i18n/plone-$LANG.po done mode = 755 \ No newline at end of file From dd0831c7d7f2acf3b2602ac5cc91879574bf1dbd Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 18:35:33 +0100 Subject: [PATCH 158/254] state last change --- CHANGES.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 8c83035..d632c12 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,10 @@ Changelog 2.3.2 (unreleased) ------------------ +- added i18ndude and a script ``update_translations`` to buildout in order + to make translation updates simpler. + [jensens] + - Fix reindexObject for content_object in moderation views. Now reindex only "total_comments" index and not all the indexes [cekk] From 67213b70eb43eea7dca1bffc8c0eeb68b3a71f08 Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 18:36:14 +0100 Subject: [PATCH 159/254] make flake8 happy --- plone/app/discussion/tests/test_catalog.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plone/app/discussion/tests/test_catalog.py b/plone/app/discussion/tests/test_catalog.py index cbff0cd..9003648 100644 --- a/plone/app/discussion/tests/test_catalog.py +++ b/plone/app/discussion/tests/test_catalog.py @@ -568,4 +568,3 @@ class NoConversationCatalogTest(unittest.TestCase): 'plone.app.discussion:conversation' not in IAnnotations(self.portal.doc1) ) - From a145413ac22fdbc1f5d032e76e575142741d1d3a Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 18:37:06 +0100 Subject: [PATCH 160/254] make flake8 happy --- plone/app/discussion/tests/test_comment.py | 1 - plone/app/discussion/tests/test_controlpanel.py | 1 - 2 files changed, 2 deletions(-) diff --git a/plone/app/discussion/tests/test_comment.py b/plone/app/discussion/tests/test_comment.py index 4a281dd..d3c25e0 100644 --- a/plone/app/discussion/tests/test_comment.py +++ b/plone/app/discussion/tests/test_comment.py @@ -510,4 +510,3 @@ class RepliesTest(unittest.TestCase): str(new_re_re_re_id), re_re_re_comment.absolute_url() ) - diff --git a/plone/app/discussion/tests/test_controlpanel.py b/plone/app/discussion/tests/test_controlpanel.py index 1596524..40d4540 100644 --- a/plone/app/discussion/tests/test_controlpanel.py +++ b/plone/app/discussion/tests/test_controlpanel.py @@ -213,4 +213,3 @@ class ConfigurationChangedSubscriberTest(unittest.TestCase): # enable_moderation checkbox in the discussion control panel. The # setting itself remains unchanged. self.settings.moderation_enabled = True - From 6609ab6af5561e2de3ba0b2e1b001520814a2c2f Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 18:38:12 +0100 Subject: [PATCH 161/254] make flake8 happy --- plone/app/discussion/tests/test_conversation.py | 1 - plone/app/discussion/tests/test_indexers.py | 1 - plone/app/discussion/tests/test_moderation_view.py | 1 - plone/app/discussion/tests/test_notifications.py | 1 - plone/app/discussion/tests/test_workflow.py | 1 - 5 files changed, 5 deletions(-) diff --git a/plone/app/discussion/tests/test_conversation.py b/plone/app/discussion/tests/test_conversation.py index 29976e8..8400b05 100644 --- a/plone/app/discussion/tests/test_conversation.py +++ b/plone/app/discussion/tests/test_conversation.py @@ -873,4 +873,3 @@ class RepliesTest(unittest.TestCase): self.assertEqual(len(replies_to_comment1), 2) self.assertEqual(len(replies_to_comment1_1), 1) self.assertEqual(len(replies_to_comment2), 1) - diff --git a/plone/app/discussion/tests/test_indexers.py b/plone/app/discussion/tests/test_indexers.py index 2d4e6da..23721f0 100644 --- a/plone/app/discussion/tests/test_indexers.py +++ b/plone/app/discussion/tests/test_indexers.py @@ -203,4 +203,3 @@ class CommentIndexersTest(unittest.TestCase): # make sure in_response_to returns the title or id of the content # object the comment was added to self.assertEqual(catalog.in_response_to(self.comment)(), 'Document 1') - diff --git a/plone/app/discussion/tests/test_moderation_view.py b/plone/app/discussion/tests/test_moderation_view.py index 1c9cf18..c533190 100644 --- a/plone/app/discussion/tests/test_moderation_view.py +++ b/plone/app/discussion/tests/test_moderation_view.py @@ -163,4 +163,3 @@ class ModerationBulkActionsViewTest(unittest.TestCase): comment = self.conversation.getComments().next() self.assertTrue(comment) self.assertEqual(comment, self.comment2) - diff --git a/plone/app/discussion/tests/test_notifications.py b/plone/app/discussion/tests/test_notifications.py index 548681c..ab5c764 100644 --- a/plone/app/discussion/tests/test_notifications.py +++ b/plone/app/discussion/tests/test_notifications.py @@ -275,4 +275,3 @@ class TestModeratorNotificationUnit(unittest.TestCase): self.conversation.addComment(comment) self.assertEqual(len(self.mailhost.messages), 0) - diff --git a/plone/app/discussion/tests/test_workflow.py b/plone/app/discussion/tests/test_workflow.py index 65361aa..c8cf216 100644 --- a/plone/app/discussion/tests/test_workflow.py +++ b/plone/app/discussion/tests/test_workflow.py @@ -274,4 +274,3 @@ class CommentReviewWorkflowTest(unittest.TestCase): 'review_state' ) ) - From 334b01f9ff36abb8e770940b1384481fe17fb015 Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 18:39:08 +0100 Subject: [PATCH 162/254] run of update translations. nothing really changed. anyway, no we're sure. next: missing translations (de) --- plone/app/discussion/i18n/plone-ca.po | 46 ++-- plone/app/discussion/i18n/plone-cs.po | 46 ++-- plone/app/discussion/i18n/plone-da.po | 46 ++-- plone/app/discussion/i18n/plone-de.po | 46 ++-- plone/app/discussion/i18n/plone-es.po | 46 ++-- plone/app/discussion/i18n/plone-eu.po | 46 ++-- plone/app/discussion/i18n/plone-fr.po | 46 ++-- plone/app/discussion/i18n/plone-it.po | 46 ++-- plone/app/discussion/i18n/plone-ja.po | 46 ++-- plone/app/discussion/i18n/plone-nl.po | 46 ++-- plone/app/discussion/i18n/plone-no.po | 46 ++-- plone/app/discussion/i18n/plone-pt_BR.po | 46 ++-- plone/app/discussion/i18n/plone-sk.po | 46 ++-- plone/app/discussion/i18n/plone-uk.po | 46 ++-- plone/app/discussion/i18n/plone-zh_CN.po | 46 ++-- plone/app/discussion/i18n/plone-zh_TW.po | 46 ++-- plone/app/discussion/i18n/plone.pot | 61 +++--- .../de/LC_MESSAGES/plone.app.discussion.po | 177 ++++++++-------- .../locales/plone.app.discussion.pot | 196 +++++++++--------- 19 files changed, 581 insertions(+), 589 deletions(-) diff --git a/plone/app/discussion/i18n/plone-ca.po b/plone/app/discussion/i18n/plone-ca.po index d242b4d..759b5aa 100644 --- a/plone/app/discussion/i18n/plone-ca.po +++ b/plone/app/discussion/i18n/plone-ca.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: Victor Fernandez de Alba \n" "Language-Team: LANGUAGE \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Workflow simple de moderació de comentaris" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Aprova" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Aprovar el comentari significa que es publicarà per a tots els usuaris" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Comentari" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Worfklow de moderació de comentaris" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Comentari sobre la última transició" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "Autors" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Comentaris afegits" -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "Comentaris" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "Modera comentaris" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Pendent" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Transició anterior" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Accés a la història del workflow" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Publicat" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "El revisor aprova el comentari" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Enviat, pendent de moderació" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "L'identificador únic de l'usuari que va executar la transició anterior" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Número total de comentaris" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Número de comentaris d'aquest contingut." -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Usuaris que han comentat el contingut." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visible per a tots, no editable." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Quan es va executar la transició anterior" diff --git a/plone/app/discussion/i18n/plone-cs.po b/plone/app/discussion/i18n/plone-cs.po index 52a7369..2d93acd 100644 --- a/plone/app/discussion/i18n/plone-cs.po +++ b/plone/app/discussion/i18n/plone-cs.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: 2010-11-03 14:51+0100\n" "Last-Translator: Radim Novotny \n" "Language-Team: DMS4U \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Jednoduché workflow pro komentáře" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Schválit" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Schválením komentáře se tento stane viditelným pro ostatní uživatele." -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Komentář" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Schvalovací workflow pro komentáře" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Poznámka k poslední transakci" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "Komentující" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Komentář byl přidán." -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "Komentáře" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderovat komentáře" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Čekající" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Předchozí přechod stavu" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Zpřístupní historii workflow" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Zveřejněno" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Schalovatel schvaluje komentář" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Předáno k posouzení." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "ID uživatele, který způsobil předchozí změnu stavu" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Celkový počet komentářů" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Celkový počet komentářů k této položce." -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Uživatelé, kteří komentovali tuto položku" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Viditelné všem, nelze editovat." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Kdy byla provedena poslední změna stavu" diff --git a/plone/app/discussion/i18n/plone-da.po b/plone/app/discussion/i18n/plone-da.po index f2fb091..b716129 100644 --- a/plone/app/discussion/i18n/plone-da.po +++ b/plone/app/discussion/i18n/plone-da.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Anton Stonor \n" "Language-Team: Anton Stonor \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Simpelt godkendelses-workflow for kommentarer" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Godkend" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Når en kommentarer bliver godkendt, kan andre se den." -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Kommentar" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Godkendelses-workflow for kommentarer" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Kommentar om seneste workflow" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "Kommentatorer" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Kommentarer tilføjet til indholdet" -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "Kommentering" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderér kommentarer" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Afventer" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Foregående workflow-ændringer" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Giver adgang til workflow-historikken" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Publiceret" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "En godkender kontrollerer indholdet" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Gemt, afventer godkendelse" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Brugernavnet på den, der gennemført det seneste workflow-trin" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Kommentarer i alt" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Antal kommentarer på denne side." -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Brugere, der har kommenteret på denne side" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Synligt for alle, kan ikke redigeres." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Tidspunktet for det seneste workflow-trin" diff --git a/plone/app/discussion/i18n/plone-de.po b/plone/app/discussion/i18n/plone-de.po index ea1d442..ea7bd0c 100644 --- a/plone/app/discussion/i18n/plone-de.po +++ b/plone/app/discussion/i18n/plone-de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: 2010-03-17 16:11+0100\n" "Last-Translator: Timo Stollenwerk \n" "Language-Team: Deutsch \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Kommentar" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Arbeitsablauf für moderierte Kommentare" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Kommentar zum letzten Zustandsübergang" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "Kommentatoren" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Ein Kommentar zu einem Artikel." -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "Kommentare" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "Kommentare moderieren" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Zur Redaktion eingereicht" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Letzter Übergang" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Erlaubt Zugang zur Historie des Arbeitsablaufs" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Veröffentlicht" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Zur Redaktion eingereicht" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Die ID des Benutzers welcher den vorherigen Zustandsübergang durchgeführt hat" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Anzahl der Kommentare" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Anzahl der Kommentare zu diesem Artikel." -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Benutzer, die den Artikel kommentiert haben" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Für alle Benutzer sichtbar, nicht editierbar" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Wann der vorherige Übergang durchgeführt wurde" diff --git a/plone/app/discussion/i18n/plone-es.po b/plone/app/discussion/i18n/plone-es.po index e607191..57ecfbe 100644 --- a/plone/app/discussion/i18n/plone-es.po +++ b/plone/app/discussion/i18n/plone-es.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: Mikel Larreategi \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Workflow simple de moderación de comentarios" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Aprobar" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Aprobar el comentario significa que se publicará para todos los usuarios" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Comentario" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Worfklow de moderación de comentarios" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Comentario sobre la última transición" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "Autores" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Comentarios añadidos" -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "Discusión" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderar comentarios" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Pendiente" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Transición anterior" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Acceso a la historia del workflow" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Publicado" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "El revisor aprueba el comentario" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Enviado, pendiente de moderación" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "El ID del usuario que ejecutó la transición anterior" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Número total de comentarios" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Número de comentarios de este elemento" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Usuarios que han comentado el elemento" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visible para todos, no-editable" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Cuándo se ejecutó la transición anterior" diff --git a/plone/app/discussion/i18n/plone-eu.po b/plone/app/discussion/i18n/plone-eu.po index 64f9cf5..1605054 100644 --- a/plone/app/discussion/i18n/plone-eu.po +++ b/plone/app/discussion/i18n/plone-eu.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: Mikel Larreategi \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Erantzunentzako moderazio workflowa" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Onartu" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Erantzuna onartzean erabiltzaile guztientzat argitaratu egingo da" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Erantzuna" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Erantzunen Moderazio Workflowa" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Azken trantsizioari buruzko iruzkina" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "Egileak" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Elementuari gehitutako erantzunak" -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "Eztabaida" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "Erantzunak moderatu" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Moderazio kolan" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Aurreko trantsizioa" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Workflowaren historia ikus dezakezu" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Argitaratuta" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Moderatzaileak erantzuna onartu" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Bidalita, moderazio kolan zain." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Azken trantsizioa egin zuen erabiltzailearen IDa" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Erantzun kopurua" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Elementu honen erantzun kopurua" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Elementuaren inguruan erantzuna eman duten erabiltzaileak" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Guztiek ikusteko, ez da editagarria." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Aurreko trantsizioa noiz exekutatu zen." diff --git a/plone/app/discussion/i18n/plone-fr.po b/plone/app/discussion/i18n/plone-fr.po index 37783c2..0102d4d 100644 --- a/plone/app/discussion/i18n/plone-fr.po +++ b/plone/app/discussion/i18n/plone-fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: 2010-08-06 19:23+0100\n" "Last-Translator: Vincent Fretin \n" "Language-Team: Vincent Fretin \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Approuver" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Approuver le commentaire le rend visible aux autres utilisateurs." -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Commentaire" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Workflow de modération des commentaires" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Commentaire à propos de la dernière transition" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "Commentateurs" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Commentaires ajoutés à un élément." -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "Discussion" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "Modération des commentaires" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "En attente" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Transition précédente" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Permet d'accéder à l'historique du workflow" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Publié" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Modérateur approuve le contenu" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Soumis, en attente de modération." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "L'identifiant utilisateur qui a effectué la transition précédente" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Nombre total de commentaires" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Nombre total de commentaires pour cet élément." -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Utilisateurs qui ont commenté sur cet élément" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visible par tout le monde, non modifiable." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Quand la précédente transition a été effectué" diff --git a/plone/app/discussion/i18n/plone-it.po b/plone/app/discussion/i18n/plone-it.po index 497244d..176e122 100644 --- a/plone/app/discussion/i18n/plone-it.po +++ b/plone/app/discussion/i18n/plone-it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Approva" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Approvare il commento lo rende visibile agli utenti." -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Commento" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Workflow per revisione del commento" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Commento" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "Commentatori" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Commenti aggiunti al contenuto" -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "Commenti" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderazione commenti" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "In attesa" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Transizione precedente" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Fornisce accesso alla storia del workflow" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Pubblicato" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Il revisore approva il commento" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Inviato, in attesa di revisione" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "L'ID dell'utente che ha eseguito l'ultima transizione" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Numero totale di commenti" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Numero totale di commenti per questo elemento" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Utenti che hanno commentato l'elemento" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visibile a tutti, non modificabile" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Quando l'ultima transizione è stata eseguita" diff --git a/plone/app/discussion/i18n/plone-ja.po b/plone/app/discussion/i18n/plone-ja.po index c4a916d..4343202 100644 --- a/plone/app/discussion/i18n/plone-ja.po +++ b/plone/app/discussion/i18n/plone-ja.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: 2011-04-18 13:13+0900\n" "Last-Translator: Takeshi Yamamoto \n" "Language-Team: Hanno Schlichting \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "コメント用簡易審査ワークフロー" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "承認する" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "コメントを承認すると、他のユーザに見えるようになります。" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "コメント" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "コメント審査ワークフロー" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "最後の遷移についてのコメント" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "コメント者" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "コンテンツアイテムにコメントが追加されました" -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "議論" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "コメントをモデレートする" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "保留" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "前の遷移" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "ワークフロー履歴へのアクセスを提供する" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "公開中" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "審査員がコンテンツを承認する" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "提出され、審査待ち" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "前の遷移を実施したユーザのID" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "コメントの合計数" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "このアイテムについてのコメントの合計数" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "このアイテムにコメントしたユーザ" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "誰にでも見え、編集不可能" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "前の遷移が実施された時" diff --git a/plone/app/discussion/i18n/plone-nl.po b/plone/app/discussion/i18n/plone-nl.po index a6d7992..f832143 100644 --- a/plone/app/discussion/i18n/plone-nl.po +++ b/plone/app/discussion/i18n/plone-nl.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: 2011-09-30 16:02+0100\n" "Last-Translator: NFG Net Facilities Group BV \n" "Language-Team: Nederlands \n" @@ -15,91 +15,91 @@ msgstr "" "Domain: plone\n" "Language: \n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Een eenvoudige herzienings werkstroom voor reacties" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Goedkeuren" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "De reactie goedkeuren maakt deze zichtbaar voor andere gebruikers." -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Reactie" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Reactie Review Werkstroom" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Reactie op de laatste transitie" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "Commentatoren" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Reacties op een content item" -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "Discussie" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "Reacties modereren" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "In afwachting" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Vorige transitie" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Biedt toegang tot de werkstroom geschiedenis" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Gepubliceerd" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Recensent keurt inhoud goed" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Ingediend, in afwaching van herziening." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Het ID van de gebruiker die de vorige transitie heeft uitgevoerd" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Totaal aantal reacties" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Totaal aantal reacties op dit item." -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Gebruikers die hebben gereageerd op dit item" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Zichtbaar voor iedereen, niet bewerkbaar." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Wanneer de vorige transitie werd uitgevoerd" diff --git a/plone/app/discussion/i18n/plone-no.po b/plone/app/discussion/i18n/plone-no.po index 3a17d7d..ff2fced 100644 --- a/plone/app/discussion/i18n/plone-no.po +++ b/plone/app/discussion/i18n/plone-no.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "" -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "" diff --git a/plone/app/discussion/i18n/plone-pt_BR.po b/plone/app/discussion/i18n/plone-pt_BR.po index 5964c1e..d013902 100644 --- a/plone/app/discussion/i18n/plone-pt_BR.po +++ b/plone/app/discussion/i18n/plone-pt_BR.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: 2011-04-14 17:38-0300\n" "Last-Translator: Andre Nogueira \n" "Language-Team: Plone i18n \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Workflow de moderação simples para comentários" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Aprovar" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Aprovar um comentário torna-o visível para todos os usuários" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Comentário" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Worfklow de Moderação de Comentários" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Comentário sobre a última transição" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "Autores" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Comentários adicionados a um conteúdo." -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "Discussão" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderar comentários" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Pendente" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Transição anterior" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Fornece acesso ao histórico do Workflow" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Publicado" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Revisor aprova o conteúdo" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Enviado, pendente de moderação." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "O ID do usuário que realizou a transição anterior" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Número total de comentários" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Número total de comentários deste item." -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Usuários que comentáram este item" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visível para todos, não editável." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Quando a transição anterior foi realizada" diff --git a/plone/app/discussion/i18n/plone-sk.po b/plone/app/discussion/i18n/plone-sk.po index 6de07f9..52fa1a0 100644 --- a/plone/app/discussion/i18n/plone-sk.po +++ b/plone/app/discussion/i18n/plone-sk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: 2012-07-02 17:54+0100\n" "Last-Translator: Radim Novotny \n" "Language-Team: Hanno Schlichting \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "" -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "" diff --git a/plone/app/discussion/i18n/plone-uk.po b/plone/app/discussion/i18n/plone-uk.po index a3754b7..c094259 100644 --- a/plone/app/discussion/i18n/plone-uk.po +++ b/plone/app/discussion/i18n/plone-uk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: 2013-04-12 14:55+0300\n" "Last-Translator: Roman Kozlovskyi \n" "Language-Team: Hanno Schlichting \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Простий робочий проце для розгляду коментарів" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Опублікувати" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Публікація коментаря зробить його видимим для інших" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Коментар" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Робочий процес розгляду коментарів" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Коментар про останню зміну стану" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "Коментатори" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Коментарі, додані до об'єкта." -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "Коментування" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "Модерування коментарів" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Непідтверджений" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Попередня зміна стану" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Надає доступ до історії робочого процесу" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Опублікований" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Рецензент затвердив зміст" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Подано на публікацію." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Ідентифікатор користувача який спровокував останню зміну стану" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Загальне число коментарів" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Загальне число коментарів до цього об'єкта." -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Користувачі, які прокоментували цей об'єкт." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Видимий для всіх, не редагується." -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Коли була здійснена попередня зміна стану" diff --git a/plone/app/discussion/i18n/plone-zh_CN.po b/plone/app/discussion/i18n/plone-zh_CN.po index 3e6a87d..47d9c41 100644 --- a/plone/app/discussion/i18n/plone-zh_CN.po +++ b/plone/app/discussion/i18n/plone-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: 2011-08-19 12:23+0800\n" "Last-Translator: Jian Aijun \n" "Language-Team: plone \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "评论简单审核工作流" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "批准" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "批准评论使它对其他用户可见。" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "评论" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "评论审核工作流" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "最后状态转换的注释" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "评论者" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "评论已添加到内容条目。" -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "评论" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "评论审核" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "待审核" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "上一步状态转换" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "提供访问工作流历史记录功能" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "已发布" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "审核者批准内容" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "已提交,等待审核。" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "执行上一步状态转换的用户 ID" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "评论总数" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "此条目的评论总数。" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "此条目的评论者。" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "对任何人可见,不可编辑。" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "当上一步状态转换被执行" diff --git a/plone/app/discussion/i18n/plone-zh_TW.po b/plone/app/discussion/i18n/plone-zh_TW.po index 88b303b..e967069 100644 --- a/plone/app/discussion/i18n/plone-zh_TW.po +++ b/plone/app/discussion/i18n/plone-zh_TW.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" "PO-Revision-Date: 2010-08-07 23:11+0800\n" "Last-Translator: TsungWei Hu \n" "Language-Team: Taiwan Python User Group \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "允許" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "允許留言公開給其他使用者。" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "留言" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "留言審核流程" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "最後狀態轉移的備註" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "留言者" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "新增到內容項目的留言" -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "討論" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "審核留言" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "待審核" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "前一個移轉狀態" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "提供工作流程歷史記錄的功能" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "已發佈" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "審核者同意內容" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "已送出,待審核中。" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "執行前一個狀態移轉的使用者識別碼" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "留言總數" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "在此項目留言的總數。" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "在此項目留言的使用者" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "每個人都看得到,但無法編輯。" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "當前一個移轉動作被執行時" diff --git a/plone/app/discussion/i18n/plone.pot b/plone/app/discussion/i18n/plone.pot index 973a956..db94235 100644 --- a/plone/app/discussion/i18n/plone.pot +++ b/plone/app/discussion/i18n/plone.pot @@ -1,104 +1,107 @@ +# --- PLEASE EDIT THE LINES BELOW CORRECTLY --- +# SOME DESCRIPTIVE TITLE. +# FIRST AUTHOR , YEAR. msgid "" msgstr "" -"Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" -"PO-Revision-Date: 2010-01-28 15:00+0000\n" -"Last-Translator: Hanno Schlichting \n" -"Language-Team: Hanno Schlichting \n" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=1; plural=0\n" "Language-Code: en\n" "Language-Name: English\n" -"Preferred-Encodings: utf-8\n" +"Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Commentators" msgstr "" -#: ../profiles/default/types/Discussion_Item.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "" -#: ../profiles/default/controlpanel.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml msgid "Discussion" msgstr "" -#: ../profiles/default/actions.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml msgid "Moderate comments" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "" -#: ../profiles/default/portal_atct.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "" -#: ../profiles/default/workflows/comment_review_workflow/definition.xml +#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "" diff --git a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po index 170e99f..b422242 100644 --- a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po @@ -14,230 +14,223 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:311 +#: plone.app.discussion/plone/app/discussion/comment.py:326 msgid "A comment has been posted." msgstr "Ein Kommentar wurde abgegeben." -#: ../interfaces.py:141 +#: plone.app.discussion/plone/app/discussion/interfaces.py:143 msgid "A comment id unique to this conversation" msgstr "Eine eindeutige ID des Kommentars" -#: ../browser/comments.py:72 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:72 msgid "Add a comment" msgstr "Kommentar hinzufügen" -#: ../browser/controlpanel.py:64 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Anonyme Kommentare" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:258 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:84 msgid "Cancel" msgstr "Abbrechen" -#: ../browser/controlpanel.py:78 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:80 msgid "Changes saved" msgstr "Änderungen gespeichert" -#: ../browser/moderation.py:140 +#: plone.app.discussion/plone/app/discussion/browser/moderation.py:139 msgid "Comment approved." msgstr "Kommentar zur Veröffentlichung freigegeben." -#: ../browser/moderation.py:100 +#: plone.app.discussion/plone/app/discussion/browser/moderation.py:100 msgid "Comment deleted." msgstr "Kommentar gelöscht" -#: ../browser/controlpanel.py:65 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Porträt des Benutzers" -msgid "Commenting infrastructure for Plone" -msgstr "" - -#: ../interfaces.py:136 +#: plone.app.discussion/plone/app/discussion/interfaces.py:138 msgid "Conversation" msgstr "Diskussion" -#: ../interfaces.py:167 +#: plone.app.discussion/plone/app/discussion/interfaces.py:176 msgid "Creation date" msgstr "Erstellungsdatum" -#: ../interfaces.py:40 +#: plone.app.discussion/plone/app/discussion/interfaces.py:40 msgid "Date of the most recent public comment" msgstr "" -#: ../vocabularies.py:44 +#: plone.app.discussion/plone/app/discussion/vocabularies.py:44 msgid "Disabled" msgstr "Ausgeschaltet" -#: ../browser/controlpanel.py:34 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Kommentierungseinstellungen" -#: ../browser/controlpanel.py:84 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Bearbeitung abgebrochen" -#: ../interfaces.py:153 +#: plone.app.discussion/plone/app/discussion/interfaces.py:155 msgid "Email" msgstr "E-Mail" -#: ../browser/controlpanel.py:63 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Kommentare einschalten" -#: ../interfaces.py:144 +#: plone.app.discussion/plone/app/discussion/interfaces.py:146 msgid "Id of comment this comment is in reply to" msgstr "ID des Kommentars, auf den geantwortet wird." -#: ../interfaces.py:158 +#: plone.app.discussion/plone/app/discussion/interfaces.py:160 msgid "MIME type" msgstr "MIME-Typ" -#: ../browser/controlpanel.py:67 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Moderator E-Mail Benachrichtigung" -#: ../interfaces.py:168 +#: plone.app.discussion/plone/app/discussion/interfaces.py:177 msgid "Modification date" msgstr "Änderungsdatum" -#: ../interfaces.py:138 +#: plone.app.discussion/plone/app/discussion/interfaces.py:140 msgid "Name" msgstr "Name" -#: ../interfaces.py:162 +#: plone.app.discussion/plone/app/discussion/interfaces.py:169 msgid "Notify me of new comments via email." msgstr "E-Mail-Benachrichtigung bei neuen Kommentaren" -#: ./plone.app.discussion/plone/app/discussion/configure.zcml -msgid "Plone Discussions" -msgstr "Plone Diskussionen" - -#: ../interfaces.py:131 +#: plone.app.discussion/plone/app/discussion/interfaces.py:133 msgid "Portal type" msgstr "Artikeltyp" -#: ../browser/controlpanel.py:71 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:73 msgid "Save" msgstr "Speichern" -#: ../interfaces.py:45 +#: plone.app.discussion/plone/app/discussion/interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "Liste von Benutzern, die Kommentare abgegeben haben" -#: ../interfaces.py:50 +#: plone.app.discussion/plone/app/discussion/interfaces.py:50 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: plone.app.discussion/plone/app/discussion/interfaces.py:34 msgid "Total number of public comments on this item" msgstr "Summe der veröffentlichten Kommentare zu diesem Artikel" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: plone.app.discussion/plone/app/discussion/comment.py:158 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:71 msgid "User Email Notification" msgstr "E-Mail-Benachrichtigungen für Benutzer" -#: ../interfaces.py:166 +#: plone.app.discussion/plone/app/discussion/interfaces.py:175 msgid "Username of the commenter" msgstr "Benutzername des Kommentierenden" -#: ../browser/comments.py:244 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:251 msgid "Your comment awaits moderator approval." msgstr "Ihr Kommentar muss noch vom Moderator freigegeben werden." #. Default: "Comment" -#: ../browser/comments.py:131 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:132 msgid "add_comment_button" msgstr "Kommentieren" #. Default: "Delete" -#: ../browser/moderation.pt:68 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:68 msgid "bulkactions_delete" msgstr "Löschen" #. Default: "Approve" -#: ../browser/moderation.pt:65 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:65 msgid "bulkactions_publish" msgstr "Veröffentlichen" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:57 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Sie können einen Kommentar abgeben, indem Sie das untenstehende Formular ausfüllen. Nur Text. Web- und E-Mailadressen werden in anklickbare Links umgewandelt." #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." -#: ../browser/comments.py:51 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:51 msgid "comment_description_markdown" msgstr "Sie können einen Kommentar abgeben, indem Sie das untenstehende Formular ausfüllen. Sie können die Markdown-Syntax für Links und Bilder benutzen." #. Default: "Comments are moderated." -#: ../browser/comments.py:63 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Kommentare werden moderiert." #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:46 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Sie können einen Kommentar abgeben, indem Sie das untenstehende Formular ausfüllen. Nur Text." #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: plone.app.discussion/plone/app/discussion/comment.py:48 msgid "comment_title" msgstr "${author_name} zu ${content}" #. Default: "Action" -#: ../browser/moderation.pt:85 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:85 msgid "heading_action" msgstr "Aktion" #. Default: "Comment" -#: ../browser/moderation.pt:84 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:84 msgid "heading_comment" msgstr "Kommentar" #. Default: "Commenter" -#: ../browser/moderation.pt:81 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:81 msgid "heading_commenter" msgstr "Autor" #. Default: "Date" -#: ../browser/moderation.pt:82 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:82 msgid "heading_date" msgstr "Datum" #. Default: "In Response To" -#: ../browser/moderation.pt:83 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:83 msgid "heading_in_reponse_to" msgstr "Kommentar zu" #. Default: "Moderate comments" -#: ../browser/moderation.pt:24 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:24 msgid "heading_moderate_comments" msgstr "Kommentare moderieren" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: plone.app.discussion/plone/app/discussion/interfaces.py:215 msgid "help_anonymous_comments" msgstr "Wenn Sie diese Einstellung aktivieren, können anonyme Benutzer Kommentare abgeben. Es ist empfehlenswert, dann auch Captchas zu aktivieren." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: plone.app.discussion/plone/app/discussion/interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "Wenn Sie diese Einstellung aktivieren, müssen anonyme Benutzer ihre E-Mail-Adresse angeben." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: plone.app.discussion/plone/app/discussion/interfaces.py:265 #, fuzzy msgid "help_captcha" msgstr "Wenn Sie diese Einstellung aktivieren, wird mit Hilfe der Captcha-Validierung überprüft, ob die Kommentare von einem echten Benutzer oder von einem automatisierten Skript stammen. Falls Sie die Option nicht einschalten können, fehlt evtl. ein benötigtes Programmmodul. Stellen Sie sicher, dass entweder plone.formwidget.captcha oder plone.formwidget.recaptcha installiert ist." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:35 #, fuzzy msgid "help_discussion_settings_editform" msgstr "" @@ -246,139 +239,139 @@ msgstr "" "Um die Moderation von Kommentaren zu aktivieren, wählen Sie den Artikeltyp 'Kommentar' aus und wählen Sie als neuen Arbeitsablauf 'Arbeitsablauf für moderierte Kommentare'." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: plone.app.discussion/plone/app/discussion/interfaces.py:201 #, fuzzy msgid "help_globally_enabled" msgstr "Wenn Sie diese Einstellung aktivieren, können Artikel generell kommentiert werden." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: plone.app.discussion/plone/app/discussion/interfaces.py:231 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: plone.app.discussion/plone/app/discussion/interfaces.py:307 msgid "help_moderator_email" msgstr "E-Mail Adresse an welche die Moderatoren-Benachrichtigungen gesendet werden." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#: plone.app.discussion/plone/app/discussion/interfaces.py:292 msgid "help_moderator_notification_enabled" msgstr "" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: plone.app.discussion/plone/app/discussion/interfaces.py:281 msgid "help_show_commenter_image" msgstr "Wenn Sie diese Einstellung aktivieren, wird das Porträt des kommentierenden Benutzers neben dem Kommentar angezeigt." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: plone.app.discussion/plone/app/discussion/interfaces.py:248 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: plone.app.discussion/plone/app/discussion/interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Wenn Sie diese Einstellung auswählen, können Benutzer angeben, dass sie über neue Kommentare per E-Mail informiert werden möchten." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:173 +#: plone.app.discussion/plone/app/discussion/browser/comments.pt:71 +#: plone.app.discussion/plone/app/discussion/comment.py:176 msgid "label_anonymous" msgstr "Anonymer Benutzer" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: plone.app.discussion/plone/app/discussion/interfaces.py:213 msgid "label_anonymous_comments" msgstr "Anonyme Kommentare" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: plone.app.discussion/plone/app/discussion/interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" #. Default: "Apply" -#: ../browser/moderation.pt:71 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:71 msgid "label_apply" msgstr "Anwenden" #. Default: "Captcha" -#: ../interfaces.py:277 +#: plone.app.discussion/plone/app/discussion/interfaces.py:263 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: plone.app.discussion/plone/app/discussion/interfaces.py:162 msgid "label_comment" msgstr "Kommentar" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: plone.app.discussion/plone/app/discussion/browser/comments.pt:130 msgid "label_commenting_disabled" msgstr "" #. Default: "Delete" -#: ../browser/moderation.pt:130 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:130 msgid "label_delete" msgstr "Löschen" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: plone.app.discussion/plone/app/discussion/interfaces.py:199 msgid "label_globally_enabled" msgstr "Kommentierungsfunktion generell einschalten" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: plone.app.discussion/plone/app/discussion/interfaces.py:227 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: plone.app.discussion/plone/app/discussion/interfaces.py:303 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: plone.app.discussion/plone/app/discussion/interfaces.py:290 msgid "label_moderator_notification_enabled" msgstr "Email-Benachrichtigungen für Moderatoren aktivieren" #. Default: "Approve" -#: ../browser/moderation.pt:121 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:121 msgid "label_publish" msgstr "Veröffentlichen" #. Default: "says:" -#: ../browser/comments.pt:74 +#: plone.app.discussion/plone/app/discussion/browser/comments.pt:74 msgid "label_says" msgstr "sagt" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: plone.app.discussion/plone/app/discussion/interfaces.py:279 msgid "label_show_commenter_image" msgstr "Zeige das Portrait des Kommentators" #. Default: "show full comment text" -#: ../browser/moderation.pt:114 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:114 msgid "label_show_full_comment_text" msgstr "Den vollständigen Kommentar anzeigen" #. Default: "Subject" -#: ../interfaces.py:155 +#: plone.app.discussion/plone/app/discussion/interfaces.py:157 msgid "label_subject" msgstr "Betreff" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: plone.app.discussion/plone/app/discussion/interfaces.py:246 msgid "label_text_transform" msgstr "Text transformationen" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: plone.app.discussion/plone/app/discussion/interfaces.py:315 msgid "label_user_notification_enabled" msgstr "E-Mail-Benachrichtigungen für Benutzer aktivieren" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: plone.app.discussion/plone/app/discussion/comment.py:52 msgid "mail_notification_message" msgstr "" "Ein Kommentar zu '${title}' wurde hier abgegeben: ${link}\n" @@ -388,7 +381,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: plone.app.discussion/plone/app/discussion/comment.py:60 msgid "mail_notification_message_moderator" msgstr "" "Ein Kommentar zu '${title}' wurde hier abgegeben: ${link}\n" @@ -404,22 +397,22 @@ msgstr "" "${link_delete}\n" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" -#: ../browser/moderation.pt:33 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:33 msgid "message_enable_comment_workflow" msgstr "" #. Default: "Moderation workflow is disabled. You have to ${enable_comment_workflow} before you can moderate comments here." -#: ../browser/moderation.pt:33 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:33 msgid "message_moderation_disabled" msgstr "" #. Default: "No comments to moderate." -#: ../browser/moderation.pt:43 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:43 msgid "message_nothing_to_moderate" msgstr "Es müssen keine Kommentare moderiert werden." #. Default: "Bulk Actions" -#: ../browser/moderation.pt:64 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:64 msgid "title_bulkactions" msgstr "Sammelbearbeitung" diff --git a/plone/app/discussion/locales/plone.app.discussion.pot b/plone/app/discussion/locales/plone.app.discussion.pot index 1a7bd37..0843321 100644 --- a/plone/app/discussion/locales/plone.app.discussion.pot +++ b/plone/app/discussion/locales/plone.app.discussion.pot @@ -1,407 +1,403 @@ +# --- PLEASE EDIT THE LINES BELOW CORRECTLY --- +# SOME DESCRIPTIVE TITLE. +# FIRST AUTHOR , YEAR. msgid "" msgstr "" -"Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" -"PO-Revision-Date: 2010-01-28 15:00+0000\n" -"Last-Translator: Hanno Schlichting \n" -"Language-Team: Hanno Schlichting \n" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=1; plural=0\n" "Language-Code: en\n" "Language-Name: English\n" "Preferred-Encodings: utf-8 latin1\n" -"Domain: DOMAIN\n" +"Domain: plone.app.discussion\n" -#: ../browser/comments.py:95 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:95 msgid "" msgstr "" -#: ../comment.py:311 +#: plone.app.discussion/plone/app/discussion/comment.py:326 msgid "A comment has been posted." msgstr "" -#: ../interfaces.py:141 +#: plone.app.discussion/plone/app/discussion/interfaces.py:143 msgid "A comment id unique to this conversation" msgstr "" -#: ../browser/comments.py:72 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:72 msgid "Add a comment" msgstr "" -#: ../browser/controlpanel.py:64 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:258 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:84 msgid "Cancel" msgstr "" -#: ../browser/controlpanel.py:78 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:80 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:140 +#: plone.app.discussion/plone/app/discussion/browser/moderation.py:139 msgid "Comment approved." msgstr "" -#: ../browser/moderation.py:100 +#: plone.app.discussion/plone/app/discussion/browser/moderation.py:100 msgid "Comment deleted." msgstr "" -#: ../browser/controlpanel.py:65 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:67 msgid "Commenter Image" msgstr "" -msgid "Commenting infrastructure for Plone" -msgstr "" - -#: ../interfaces.py:136 +#: plone.app.discussion/plone/app/discussion/interfaces.py:138 msgid "Conversation" msgstr "" -#: ../interfaces.py:167 +#: plone.app.discussion/plone/app/discussion/interfaces.py:176 msgid "Creation date" msgstr "" -#: ../interfaces.py:40 +#: plone.app.discussion/plone/app/discussion/interfaces.py:40 msgid "Date of the most recent public comment" msgstr "" -#: ../vocabularies.py:44 +#: plone.app.discussion/plone/app/discussion/vocabularies.py:44 msgid "Disabled" msgstr "" -#: ../browser/controlpanel.py:34 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:34 msgid "Discussion settings" msgstr "" -#: ../browser/controlpanel.py:84 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:153 +#: plone.app.discussion/plone/app/discussion/interfaces.py:155 msgid "Email" msgstr "" -#: ../browser/controlpanel.py:63 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:65 msgid "Enable Comments" msgstr "" -#: ../interfaces.py:144 +#: plone.app.discussion/plone/app/discussion/interfaces.py:146 msgid "Id of comment this comment is in reply to" msgstr "" -#: ../interfaces.py:158 +#: plone.app.discussion/plone/app/discussion/interfaces.py:160 msgid "MIME type" msgstr "" -#: ../browser/controlpanel.py:67 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "" -#: ../interfaces.py:168 +#: plone.app.discussion/plone/app/discussion/interfaces.py:177 msgid "Modification date" msgstr "" -#: ../interfaces.py:138 +#: plone.app.discussion/plone/app/discussion/interfaces.py:140 msgid "Name" msgstr "" -#: ../interfaces.py:162 +#: plone.app.discussion/plone/app/discussion/interfaces.py:169 msgid "Notify me of new comments via email." msgstr "" -#: ./plone.app.discussion/plone/app/discussion/configure.zcml -msgid "Plone Discussions" -msgstr "" - -#: ../interfaces.py:131 +#: plone.app.discussion/plone/app/discussion/interfaces.py:133 msgid "Portal type" msgstr "" -#: ../browser/controlpanel.py:71 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:73 msgid "Save" msgstr "" -#: ../interfaces.py:45 +#: plone.app.discussion/plone/app/discussion/interfaces.py:45 msgid "The set of unique commentators (usernames)" msgstr "" -#: ../interfaces.py:50 +#: plone.app.discussion/plone/app/discussion/interfaces.py:50 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: plone.app.discussion/plone/app/discussion/interfaces.py:34 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: plone.app.discussion/plone/app/discussion/comment.py:158 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:71 msgid "User Email Notification" msgstr "" -#: ../interfaces.py:166 +#: plone.app.discussion/plone/app/discussion/interfaces.py:175 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:251 msgid "Your comment awaits moderator approval." msgstr "" #. Default: "Comment" -#: ../browser/comments.py:131 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:132 msgid "add_comment_button" msgstr "" #. Default: "Delete" -#: ../browser/moderation.pt:68 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:68 msgid "bulkactions_delete" msgstr "" #. Default: "Approve" -#: ../browser/moderation.pt:65 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:65 msgid "bulkactions_publish" msgstr "" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:57 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "" #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." -#: ../browser/comments.py:51 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:51 msgid "comment_description_markdown" msgstr "" #. Default: "Comments are moderated." -#: ../browser/comments.py:63 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "" #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:46 +#: plone.app.discussion/plone/app/discussion/browser/comments.py:46 msgid "comment_description_plain_text" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: plone.app.discussion/plone/app/discussion/comment.py:48 msgid "comment_title" msgstr "" #. Default: "Action" -#: ../browser/moderation.pt:85 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:85 msgid "heading_action" msgstr "" #. Default: "Comment" -#: ../browser/moderation.pt:84 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:84 msgid "heading_comment" msgstr "" #. Default: "Commenter" -#: ../browser/moderation.pt:81 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:81 msgid "heading_commenter" msgstr "" #. Default: "Date" -#: ../browser/moderation.pt:82 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:82 msgid "heading_date" msgstr "" #. Default: "In Response To" -#: ../browser/moderation.pt:83 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:83 msgid "heading_in_reponse_to" msgstr "" #. Default: "Moderate comments" -#: ../browser/moderation.pt:24 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:24 msgid "heading_moderate_comments" msgstr "" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: plone.app.discussion/plone/app/discussion/interfaces.py:215 msgid "help_anonymous_comments" msgstr "" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: plone.app.discussion/plone/app/discussion/interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: plone.app.discussion/plone/app/discussion/interfaces.py:265 msgid "help_captcha" msgstr "" #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: plone.app.discussion/plone/app/discussion/interfaces.py:201 msgid "help_globally_enabled" msgstr "" #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: plone.app.discussion/plone/app/discussion/interfaces.py:231 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: plone.app.discussion/plone/app/discussion/interfaces.py:307 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#: plone.app.discussion/plone/app/discussion/interfaces.py:292 msgid "help_moderator_notification_enabled" msgstr "" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: plone.app.discussion/plone/app/discussion/interfaces.py:281 msgid "help_show_commenter_image" msgstr "" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: plone.app.discussion/plone/app/discussion/interfaces.py:248 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: plone.app.discussion/plone/app/discussion/interfaces.py:319 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:173 +#: plone.app.discussion/plone/app/discussion/browser/comments.pt:71 +#: plone.app.discussion/plone/app/discussion/comment.py:176 msgid "label_anonymous" msgstr "" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: plone.app.discussion/plone/app/discussion/interfaces.py:213 msgid "label_anonymous_comments" msgstr "" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: plone.app.discussion/plone/app/discussion/interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" #. Default: "Apply" -#: ../browser/moderation.pt:71 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:71 msgid "label_apply" msgstr "" #. Default: "Captcha" -#: ../interfaces.py:277 +#: plone.app.discussion/plone/app/discussion/interfaces.py:263 msgid "label_captcha" msgstr "" #. Default: "Comment" -#: ../interfaces.py:159 +#: plone.app.discussion/plone/app/discussion/interfaces.py:162 msgid "label_comment" msgstr "" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: plone.app.discussion/plone/app/discussion/browser/comments.pt:130 msgid "label_commenting_disabled" msgstr "" #. Default: "Delete" -#: ../browser/moderation.pt:130 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:130 msgid "label_delete" msgstr "" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: plone.app.discussion/plone/app/discussion/interfaces.py:199 msgid "label_globally_enabled" msgstr "" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: plone.app.discussion/plone/app/discussion/interfaces.py:227 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: plone.app.discussion/plone/app/discussion/interfaces.py:303 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: plone.app.discussion/plone/app/discussion/interfaces.py:290 msgid "label_moderator_notification_enabled" msgstr "" #. Default: "Approve" -#: ../browser/moderation.pt:121 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:121 msgid "label_publish" msgstr "" #. Default: "says:" -#: ../browser/comments.pt:74 +#: plone.app.discussion/plone/app/discussion/browser/comments.pt:74 msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: plone.app.discussion/plone/app/discussion/interfaces.py:279 msgid "label_show_commenter_image" msgstr "" #. Default: "show full comment text" -#: ../browser/moderation.pt:114 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:114 msgid "label_show_full_comment_text" msgstr "" #. Default: "Subject" -#: ../interfaces.py:155 +#: plone.app.discussion/plone/app/discussion/interfaces.py:157 msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: plone.app.discussion/plone/app/discussion/interfaces.py:246 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: plone.app.discussion/plone/app/discussion/interfaces.py:315 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: plone.app.discussion/plone/app/discussion/comment.py:52 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: plone.app.discussion/plone/app/discussion/comment.py:60 msgid "mail_notification_message_moderator" msgstr "" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" -#: ../browser/moderation.pt:33 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:33 msgid "message_enable_comment_workflow" msgstr "" #. Default: "Moderation workflow is disabled. You have to ${enable_comment_workflow} before you can moderate comments here." -#: ../browser/moderation.pt:33 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:33 msgid "message_moderation_disabled" msgstr "" #. Default: "No comments to moderate." -#: ../browser/moderation.pt:43 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:43 msgid "message_nothing_to_moderate" msgstr "" #. Default: "Bulk Actions" -#: ../browser/moderation.pt:64 +#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:64 msgid "title_bulkactions" msgstr "" From 0a6d42923753e4224bf02144c3e3a0786511f56f Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 18:53:51 +0100 Subject: [PATCH 163/254] corrected outdated help text --- plone/app/discussion/interfaces.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index d8a4da8..01d58b7 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -293,8 +293,7 @@ class IDiscussionSettings(Interface): u"help_moderator_notification_enabled", default=u"If selected, the moderator is notified if a comment " u"needs attention. The moderator email address can " + - u"be found in the 'Mail settings' control panel " - u"(Site 'From' address)"), + u"be set below."), required=False, default=False, ) From 14263973f04cc206ad7379d775a163e23959d711 Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 19:13:43 +0100 Subject: [PATCH 164/254] synced with recent i18ndude and updated missing german translations (mostly in settings form) --- .../locales/de/LC_MESSAGES/.gitignore | 1 - .../de/LC_MESSAGES/plone.app.discussion.po | 33 ++++++++++--------- .../locales/plone.app.discussion.pot | 16 ++++----- 3 files changed, 25 insertions(+), 25 deletions(-) delete mode 100644 plone/app/discussion/locales/de/LC_MESSAGES/.gitignore diff --git a/plone/app/discussion/locales/de/LC_MESSAGES/.gitignore b/plone/app/discussion/locales/de/LC_MESSAGES/.gitignore deleted file mode 100644 index d8b1cbd..0000000 --- a/plone/app/discussion/locales/de/LC_MESSAGES/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/plone.app.discussion.mo diff --git a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po index b422242..44b7a4b 100644 --- a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po @@ -61,7 +61,7 @@ msgstr "Erstellungsdatum" #: plone.app.discussion/plone/app/discussion/interfaces.py:40 msgid "Date of the most recent public comment" -msgstr "" +msgstr "Datum des neuesten öffentlichen Kommentars" #: plone.app.discussion/plone/app/discussion/vocabularies.py:44 msgid "Disabled" @@ -129,7 +129,7 @@ msgstr "Summe der veröffentlichten Kommentare zu diesem Artikel" #: plone.app.discussion/plone/app/discussion/comment.py:158 msgid "Transform '%s' => '%s' not available." -msgstr "" +msgstr "Transformation '%s' => '%s' ist nicht verfügbar." #: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:71 msgid "User Email Notification" @@ -219,7 +219,7 @@ msgid "help_anonymous_comments" msgstr "Wenn Sie diese Einstellung aktivieren, können anonyme Benutzer Kommentare abgeben. Es ist empfehlenswert, dann auch Captchas zu aktivieren." #. Default: "If selected, anonymous user will have to give their email." -#: plone.app.discussion/plone/app/discussion/interfaces.py:330 +#: plone.app.discussion/plone/app/discussion/interfaces.py:329 msgid "help_anonymous_email_enabled" msgstr "Wenn Sie diese Einstellung aktivieren, müssen anonyme Benutzer ihre E-Mail-Adresse angeben." @@ -247,17 +247,18 @@ msgstr "Wenn Sie diese Einstellung aktivieren, können Artikel generell kommenti #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." #: plone.app.discussion/plone/app/discussion/interfaces.py:231 msgid "help_moderation_enabled" -msgstr "" +msgstr "Falls ausgewählt werden Kommentare in einem für die Öffentlichkeit unsichtbaren Schwebezustand gehalten, bis sie ein Benutzer mit der 'Review comments' Berechtigung ('Reviewer' or 'Manager') genehmigt und damit für die Öffentlichkeit sichtbar macht. Wenn Sie einen angepassten Arbeitsablauf für Kommentare einstellen wollen, so geht das mit dem Menu unter Artikeltypen." #. Default: "Address to which moderator notifications will be sent." -#: plone.app.discussion/plone/app/discussion/interfaces.py:307 +#: plone.app.discussion/plone/app/discussion/interfaces.py:306 msgid "help_moderator_email" msgstr "E-Mail Adresse an welche die Moderatoren-Benachrichtigungen gesendet werden." -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." #: plone.app.discussion/plone/app/discussion/interfaces.py:292 +#, fuzzy msgid "help_moderator_notification_enabled" -msgstr "" +msgstr "Falls ausgewählt erhält der Moderator eine E-Mail, wenn ein Kommentar Aufmerksamkeit braucht. Die E-Mail-Adresse des Moderators kann weiter unten angegeben werden." #. Default: "If selected, an image of the user is shown next to the comment." #: plone.app.discussion/plone/app/discussion/interfaces.py:281 @@ -267,10 +268,10 @@ msgstr "Wenn Sie diese Einstellung aktivieren, wird das Porträt des kommentiere #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." #: plone.app.discussion/plone/app/discussion/interfaces.py:248 msgid "help_text_transform" -msgstr "" +msgstr "Diese Einstellung wählen, wenn eine Transformation in irgend einer Art und Weise gewünscht ist. Sie können zwischen 'Plain text' und 'Intelligent text' wählen. 'Intelligent text' wandelt Plain Text in HTML um, dabei werden Zeilenumbrüche und Einrückungen beibehalten sowie Weblinks und E-Mail-Adressen in klickbare Links verwandelt." #. Default: "If selected, users can choose to be notified of new comments by email." -#: plone.app.discussion/plone/app/discussion/interfaces.py:319 +#: plone.app.discussion/plone/app/discussion/interfaces.py:318 msgid "help_user_notification_enabled" msgstr "Wenn Sie diese Einstellung auswählen, können Benutzer angeben, dass sie über neue Kommentare per E-Mail informiert werden möchten." @@ -286,9 +287,9 @@ msgid "label_anonymous_comments" msgstr "Anonyme Kommentare" #. Default: "Enable anonymous email field" -#: plone.app.discussion/plone/app/discussion/interfaces.py:328 +#: plone.app.discussion/plone/app/discussion/interfaces.py:327 msgid "label_anonymous_email_enabled" -msgstr "" +msgstr "E-Mail Feld für anonyme Kommentare einschalten" #. Default: "Apply" #: plone.app.discussion/plone/app/discussion/browser/moderation.pt:71 @@ -308,7 +309,7 @@ msgstr "Kommentar" #. Default: "Commenting has been disabled." #: plone.app.discussion/plone/app/discussion/browser/comments.pt:130 msgid "label_commenting_disabled" -msgstr "" +msgstr "Kommentare wurden abgeschaltet." #. Default: "Delete" #: plone.app.discussion/plone/app/discussion/browser/moderation.pt:130 @@ -323,12 +324,12 @@ msgstr "Kommentierungsfunktion generell einschalten" #. Default: "Enable comment moderation" #: plone.app.discussion/plone/app/discussion/interfaces.py:227 msgid "label_moderation_enabled" -msgstr "" +msgstr "Moderation für Kommentare einschalten" #. Default: "Moderator Email Address" -#: plone.app.discussion/plone/app/discussion/interfaces.py:303 +#: plone.app.discussion/plone/app/discussion/interfaces.py:302 msgid "label_moderator_email" -msgstr "" +msgstr "E-Mail Adresse des Moderators" #. Default: "Enable moderator email notification" #: plone.app.discussion/plone/app/discussion/interfaces.py:290 @@ -366,7 +367,7 @@ msgid "label_text_transform" msgstr "Text transformationen" #. Default: "Enable user email notification" -#: plone.app.discussion/plone/app/discussion/interfaces.py:315 +#: plone.app.discussion/plone/app/discussion/interfaces.py:314 msgid "label_user_notification_enabled" msgstr "E-Mail-Benachrichtigungen für Benutzer aktivieren" diff --git a/plone/app/discussion/locales/plone.app.discussion.pot b/plone/app/discussion/locales/plone.app.discussion.pot index 0843321..7cfeb86 100644 --- a/plone/app/discussion/locales/plone.app.discussion.pot +++ b/plone/app/discussion/locales/plone.app.discussion.pot @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -226,7 +226,7 @@ msgid "help_anonymous_comments" msgstr "" #. Default: "If selected, anonymous user will have to give their email." -#: plone.app.discussion/plone/app/discussion/interfaces.py:330 +#: plone.app.discussion/plone/app/discussion/interfaces.py:329 msgid "help_anonymous_email_enabled" msgstr "" @@ -251,11 +251,11 @@ msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: plone.app.discussion/plone/app/discussion/interfaces.py:307 +#: plone.app.discussion/plone/app/discussion/interfaces.py:306 msgid "help_moderator_email" msgstr "" -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." #: plone.app.discussion/plone/app/discussion/interfaces.py:292 msgid "help_moderator_notification_enabled" msgstr "" @@ -271,7 +271,7 @@ msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: plone.app.discussion/plone/app/discussion/interfaces.py:319 +#: plone.app.discussion/plone/app/discussion/interfaces.py:318 msgid "help_user_notification_enabled" msgstr "" @@ -287,7 +287,7 @@ msgid "label_anonymous_comments" msgstr "" #. Default: "Enable anonymous email field" -#: plone.app.discussion/plone/app/discussion/interfaces.py:328 +#: plone.app.discussion/plone/app/discussion/interfaces.py:327 msgid "label_anonymous_email_enabled" msgstr "" @@ -327,7 +327,7 @@ msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: plone.app.discussion/plone/app/discussion/interfaces.py:303 +#: plone.app.discussion/plone/app/discussion/interfaces.py:302 msgid "label_moderator_email" msgstr "" @@ -367,7 +367,7 @@ msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: plone.app.discussion/plone/app/discussion/interfaces.py:315 +#: plone.app.discussion/plone/app/discussion/interfaces.py:314 msgid "label_user_notification_enabled" msgstr "" From 9575a0436aaa3e5ddb149386c2f1dd75e479211e Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 19:14:26 +0100 Subject: [PATCH 165/254] synced with recent i18ndude and updated missing german translations --- plone/app/discussion/i18n/plone-ca.po | 2 +- plone/app/discussion/i18n/plone-cs.po | 2 +- plone/app/discussion/i18n/plone-da.po | 2 +- plone/app/discussion/i18n/plone-de.po | 10 +++++----- plone/app/discussion/i18n/plone-es.po | 2 +- plone/app/discussion/i18n/plone-eu.po | 2 +- plone/app/discussion/i18n/plone-fr.po | 2 +- plone/app/discussion/i18n/plone-it.po | 2 +- plone/app/discussion/i18n/plone-ja.po | 2 +- plone/app/discussion/i18n/plone-nl.po | 2 +- plone/app/discussion/i18n/plone-no.po | 2 +- plone/app/discussion/i18n/plone-pt_BR.po | 2 +- plone/app/discussion/i18n/plone-sk.po | 2 +- plone/app/discussion/i18n/plone-uk.po | 2 +- plone/app/discussion/i18n/plone-zh_CN.po | 2 +- plone/app/discussion/i18n/plone-zh_TW.po | 2 +- plone/app/discussion/i18n/plone.pot | 2 +- 17 files changed, 21 insertions(+), 21 deletions(-) diff --git a/plone/app/discussion/i18n/plone-ca.po b/plone/app/discussion/i18n/plone-ca.po index 759b5aa..6ca8b11 100644 --- a/plone/app/discussion/i18n/plone-ca.po +++ b/plone/app/discussion/i18n/plone-ca.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: Victor Fernandez de Alba \n" "Language-Team: LANGUAGE \n" diff --git a/plone/app/discussion/i18n/plone-cs.po b/plone/app/discussion/i18n/plone-cs.po index 2d93acd..37422c4 100644 --- a/plone/app/discussion/i18n/plone-cs.po +++ b/plone/app/discussion/i18n/plone-cs.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: 2010-11-03 14:51+0100\n" "Last-Translator: Radim Novotny \n" "Language-Team: DMS4U \n" diff --git a/plone/app/discussion/i18n/plone-da.po b/plone/app/discussion/i18n/plone-da.po index b716129..6cc9b07 100644 --- a/plone/app/discussion/i18n/plone-da.po +++ b/plone/app/discussion/i18n/plone-da.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Anton Stonor \n" "Language-Team: Anton Stonor \n" diff --git a/plone/app/discussion/i18n/plone-de.po b/plone/app/discussion/i18n/plone-de.po index ea7bd0c..e9c6335 100644 --- a/plone/app/discussion/i18n/plone-de.po +++ b/plone/app/discussion/i18n/plone-de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: 2010-03-17 16:11+0100\n" "Last-Translator: Timo Stollenwerk \n" "Language-Team: Deutsch \n" @@ -16,15 +16,15 @@ msgstr "" #: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" -msgstr "" +msgstr "Ein einfacher redaktioneller Workflow für Kommentare" #: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" -msgstr "" +msgstr "Genehmigen" #: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." -msgstr "" +msgstr "Durch die Genehmigung des Kommentars wird es für andere Benutzer sichtbar." #: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml msgid "Comment" @@ -72,7 +72,7 @@ msgstr "Veröffentlicht" #: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" -msgstr "" +msgstr "Der Redakteur genehmigt den Inhalt" #: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." diff --git a/plone/app/discussion/i18n/plone-es.po b/plone/app/discussion/i18n/plone-es.po index 57ecfbe..76d12b7 100644 --- a/plone/app/discussion/i18n/plone-es.po +++ b/plone/app/discussion/i18n/plone-es.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: Mikel Larreategi \n" diff --git a/plone/app/discussion/i18n/plone-eu.po b/plone/app/discussion/i18n/plone-eu.po index 1605054..7cbe585 100644 --- a/plone/app/discussion/i18n/plone-eu.po +++ b/plone/app/discussion/i18n/plone-eu.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: Mikel Larreategi \n" diff --git a/plone/app/discussion/i18n/plone-fr.po b/plone/app/discussion/i18n/plone-fr.po index 0102d4d..9492e47 100644 --- a/plone/app/discussion/i18n/plone-fr.po +++ b/plone/app/discussion/i18n/plone-fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: 2010-08-06 19:23+0100\n" "Last-Translator: Vincent Fretin \n" "Language-Team: Vincent Fretin \n" diff --git a/plone/app/discussion/i18n/plone-it.po b/plone/app/discussion/i18n/plone-it.po index 176e122..00a7428 100644 --- a/plone/app/discussion/i18n/plone-it.po +++ b/plone/app/discussion/i18n/plone-it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/plone/app/discussion/i18n/plone-ja.po b/plone/app/discussion/i18n/plone-ja.po index 4343202..78b8be4 100644 --- a/plone/app/discussion/i18n/plone-ja.po +++ b/plone/app/discussion/i18n/plone-ja.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: 2011-04-18 13:13+0900\n" "Last-Translator: Takeshi Yamamoto \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/i18n/plone-nl.po b/plone/app/discussion/i18n/plone-nl.po index f832143..3a02ab3 100644 --- a/plone/app/discussion/i18n/plone-nl.po +++ b/plone/app/discussion/i18n/plone-nl.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: 2011-09-30 16:02+0100\n" "Last-Translator: NFG Net Facilities Group BV \n" "Language-Team: Nederlands \n" diff --git a/plone/app/discussion/i18n/plone-no.po b/plone/app/discussion/i18n/plone-no.po index ff2fced..8d3481b 100644 --- a/plone/app/discussion/i18n/plone-no.po +++ b/plone/app/discussion/i18n/plone-no.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/plone/app/discussion/i18n/plone-pt_BR.po b/plone/app/discussion/i18n/plone-pt_BR.po index d013902..7aec2d9 100644 --- a/plone/app/discussion/i18n/plone-pt_BR.po +++ b/plone/app/discussion/i18n/plone-pt_BR.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: 2011-04-14 17:38-0300\n" "Last-Translator: Andre Nogueira \n" "Language-Team: Plone i18n \n" diff --git a/plone/app/discussion/i18n/plone-sk.po b/plone/app/discussion/i18n/plone-sk.po index 52fa1a0..4572740 100644 --- a/plone/app/discussion/i18n/plone-sk.po +++ b/plone/app/discussion/i18n/plone-sk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: 2012-07-02 17:54+0100\n" "Last-Translator: Radim Novotny \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/i18n/plone-uk.po b/plone/app/discussion/i18n/plone-uk.po index c094259..20c9282 100644 --- a/plone/app/discussion/i18n/plone-uk.po +++ b/plone/app/discussion/i18n/plone-uk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: 2013-04-12 14:55+0300\n" "Last-Translator: Roman Kozlovskyi \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/i18n/plone-zh_CN.po b/plone/app/discussion/i18n/plone-zh_CN.po index 47d9c41..8181ba4 100644 --- a/plone/app/discussion/i18n/plone-zh_CN.po +++ b/plone/app/discussion/i18n/plone-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: 2011-08-19 12:23+0800\n" "Last-Translator: Jian Aijun \n" "Language-Team: plone \n" diff --git a/plone/app/discussion/i18n/plone-zh_TW.po b/plone/app/discussion/i18n/plone-zh_TW.po index e967069..9d19f27 100644 --- a/plone/app/discussion/i18n/plone-zh_TW.po +++ b/plone/app/discussion/i18n/plone-zh_TW.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: 2010-08-07 23:11+0800\n" "Last-Translator: TsungWei Hu \n" "Language-Team: Taiwan Python User Group \n" diff --git a/plone/app/discussion/i18n/plone.pot b/plone/app/discussion/i18n/plone.pot index db94235..f5bbc58 100644 --- a/plone/app/discussion/i18n/plone.pot +++ b/plone/app/discussion/i18n/plone.pot @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:31+0000\n" +"POT-Creation-Date: 2014-03-25 17:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From 996592835b7d5390a0e8cec978769983dd35027e Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 19:15:52 +0100 Subject: [PATCH 166/254] state latest changes --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index d632c12..8916b52 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog 2.3.2 (unreleased) ------------------ +- updated german translations: added some missing msgstr. + [jensens] + - added i18ndude and a script ``update_translations`` to buildout in order to make translation updates simpler. [jensens] From 0b50d7c33960cdd00ecfe70c5cb82fe5f3471813 Mon Sep 17 00:00:00 2001 From: David Glick Date: Tue, 25 Mar 2014 12:24:00 -0700 Subject: [PATCH 167/254] remove setup_requires = Babel, which isn't actually used and broke the build --- setup.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/setup.py b/setup.py index dfdb31d..d2328e1 100644 --- a/setup.py +++ b/setup.py @@ -1,9 +1,6 @@ -from setuptools import dist from setuptools import find_packages from setuptools import setup -dist.Distribution(dict(setup_requires='Babel')) - version = '2.3.2.dev0' install_requires = [ From 6bfa19411db33c469772b1932d455e54c198fc92 Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 25 Mar 2014 21:30:50 +0100 Subject: [PATCH 168/254] bugfix 1: according to IDiscussionSettings.anonymous_email_enabled (cite): If selected, anonymous user will have to give their email. - But field was not required. Now it is. bugfix 2: anonymous email field was never saved. --- CHANGES.rst | 12 ++++++++-- plone/app/discussion/browser/comments.py | 29 ++++++++++++++++++------ 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 8916b52..10cce98 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,14 @@ Changelog 2.3.2 (unreleased) ------------------ +- bugfix: according to IDiscussionSettings.anonymous_email_enabled (cite): + "If selected, anonymous user will have to give their email." - But field + was not required. Now it is. + [jensens] + +- bugfix: anonymous email field was never saved. + [jensens] + - updated german translations: added some missing msgstr. [jensens] @@ -12,7 +20,7 @@ Changelog [jensens] - Fix reindexObject for content_object in moderation views. - Now reindex only "total_comments" index and not all the indexes + Now reindex only "total_comments" index and not all the indexes [cekk] - Fix comments Title if utf-8 characters in author_name @@ -56,7 +64,7 @@ Changelog PLONE_FIXTURE. [timo] -- Fix ownership of comments. +- Fix ownership of comments. [toutpt] diff --git a/plone/app/discussion/browser/comments.py b/plone/app/discussion/browser/comments.py index 30bc74c..dd0f0ff 100644 --- a/plone/app/discussion/browser/comments.py +++ b/plone/app/discussion/browser/comments.py @@ -101,14 +101,20 @@ class CommentForm(extensible.ExtensibleForm, form.Form): # Anonymous / Logged-in mtool = getToolByName(self.context, 'portal_membership') - if not mtool.isAnonymousUser(): - self.widgets['author_name'].mode = interfaces.HIDDEN_MODE - self.widgets['author_email'].mode = interfaces.HIDDEN_MODE + anon = mtool.isAnonymousUser() registry = queryUtility(IRegistry) settings = registry.forInterface(IDiscussionSettings, check=False) - if mtool.isAnonymousUser() and not settings.anonymous_email_enabled: + if anon: + if settings.anonymous_email_enabled: + # according to IDiscussionSettings.anonymous_email_enabled: + # "If selected, anonymous user will have to give their email." + self.widgets['author_email'].required = True + else: + self.widgets['author_email'].mode = interfaces.HIDDEN_MODE + else: + self.widgets['author_name'].mode = interfaces.HIDDEN_MODE self.widgets['author_email'].mode = interfaces.HIDDEN_MODE member = mtool.getAuthenticatedMember() @@ -119,7 +125,6 @@ class CommentForm(extensible.ExtensibleForm, form.Form): # email address member_email_is_empty = member_email == '' user_notification_disabled = not settings.user_notification_enabled - anon = mtool.isAnonymousUser() if member_email_is_empty or user_notification_disabled or anon: self.widgets['user_notification'].mode = interfaces.HIDDEN_MODE @@ -175,11 +180,15 @@ class CommentForm(extensible.ExtensibleForm, form.Form): # Set comment attributes (including extended comment form attributes) for attribute in self.fields.keys(): setattr(comment, attribute, data[attribute]) - # Make sure author_name is properly encoded + # Make sure author_name/ author_email is properly encoded if 'author_name' in data: author_name = data['author_name'] if isinstance(author_name, str): author_name = unicode(author_name, 'utf-8') + if 'author_email' in data: + author_email = data['author_email'] + if isinstance(author_email, str): + author_email = unicode(author_email, 'utf-8') # Set comment author properties for anonymous users or members can_reply = getSecurityManager().checkPermission('Reply to item', @@ -188,7 +197,7 @@ class CommentForm(extensible.ExtensibleForm, form.Form): if anon and anonymous_comments: # Anonymous Users comment.author_name = author_name - comment.author_email = u"" + comment.author_email = author_email comment.user_notification = None comment.creation_date = datetime.utcnow() comment.modification_date = datetime.utcnow() @@ -211,7 +220,13 @@ class CommentForm(extensible.ExtensibleForm, form.Form): comment.creator = memberid comment.author_username = memberid comment.author_name = fullname + + # XXX: according to IComment interface author_email must not be + # set for logged in users, cite: + # "for anonymous comments only, set to None for logged in comments" comment.author_email = email + # /XXX + comment.creation_date = datetime.utcnow() comment.modification_date = datetime.utcnow() else: # pragma: no cover From 2729f5a7e9861396d9b05f175f193b24ef7cde2b Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Wed, 26 Mar 2014 11:27:12 +0100 Subject: [PATCH 169/254] required showed up, but validation needs it on field too. huh. this is not what i expected, but, well, its z3cforms --- plone/app/discussion/browser/comments.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plone/app/discussion/browser/comments.py b/plone/app/discussion/browser/comments.py index dd0f0ff..0d58e59 100644 --- a/plone/app/discussion/browser/comments.py +++ b/plone/app/discussion/browser/comments.py @@ -110,6 +110,7 @@ class CommentForm(extensible.ExtensibleForm, form.Form): if settings.anonymous_email_enabled: # according to IDiscussionSettings.anonymous_email_enabled: # "If selected, anonymous user will have to give their email." + self.widgets['author_email'].field.required = True self.widgets['author_email'].required = True else: self.widgets['author_email'].mode = interfaces.HIDDEN_MODE From 7ebd2de06f9f5161f86a825093cc8f179bd3369b Mon Sep 17 00:00:00 2001 From: tisto Date: Sat, 5 Apr 2014 16:22:19 +0200 Subject: [PATCH 170/254] Preparing release 2.3.2 --- CHANGES.rst | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 10cce98..3ef6b9c 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,7 +1,7 @@ Changelog ========= -2.3.2 (unreleased) +2.3.2 (2014-04-05) ------------------ - bugfix: according to IDiscussionSettings.anonymous_email_enabled (cite): diff --git a/setup.py b/setup.py index d2328e1..61b6890 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import find_packages from setuptools import setup -version = '2.3.2.dev0' +version = '2.3.2' install_requires = [ 'setuptools', From 5c4327143026127b3e5a798398483381c56abb5e Mon Sep 17 00:00:00 2001 From: tisto Date: Sat, 5 Apr 2014 16:24:11 +0200 Subject: [PATCH 171/254] Remove message_extractors from setup.py since they currently prevent us from making a release (distutils raise an error). --- setup.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/setup.py b/setup.py index 61b6890..6e5c6ca 100644 --- a/setup.py +++ b/setup.py @@ -55,15 +55,6 @@ setup(name='plone.app.discussion', 'plone.app.contenttypes[test]', ] }, - message_extractors={ - 'src': [ - ('**.py', 'lingua_python', None), - ('**.pt', 'lingua_xml', None), - ('**.cpt', 'lingua_xml', None), - ('**.zcml', 'lingua_xml', None), - ('**.xml', 'lingua_xml', None), - ], - }, entry_points=""" [z3c.autoinclude.plugin] target = plone From c1c36c0133574cc15baa849c4bb12dd2c2f49986 Mon Sep 17 00:00:00 2001 From: tisto Date: Sat, 5 Apr 2014 16:26:24 +0200 Subject: [PATCH 172/254] Remove changes.txt in docs folder since this confuses zest.releaser. --- docs/source/changes.txt | 1 - docs/source/index.txt | 1 - 2 files changed, 2 deletions(-) delete mode 100644 docs/source/changes.txt diff --git a/docs/source/changes.txt b/docs/source/changes.txt deleted file mode 100644 index a3e71a0..0000000 --- a/docs/source/changes.txt +++ /dev/null @@ -1 +0,0 @@ -.. include:: ../../CHANGES.txt \ No newline at end of file diff --git a/docs/source/index.txt b/docs/source/index.txt index f09b01f..c8def7f 100644 --- a/docs/source/index.txt +++ b/docs/source/index.txt @@ -21,7 +21,6 @@ Contents: email-notification.txt api/index.txt howtos/index.txt - changes.txt From 5a9bfdf876d6c49b1c78f8634e90aa9ad7906115 Mon Sep 17 00:00:00 2001 From: tisto Date: Sat, 5 Apr 2014 16:36:11 +0200 Subject: [PATCH 173/254] Back to development: 2.3.3 --- CHANGES.rst | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 3ef6b9c..f3864a5 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,12 @@ Changelog ========= +2.3.3 (unreleased) +------------------ + +- Nothing changed yet. + + 2.3.2 (2014-04-05) ------------------ diff --git a/setup.py b/setup.py index 6e5c6ca..f3106be 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import find_packages from setuptools import setup -version = '2.3.2' +version = '2.3.3.dev0' install_requires = [ 'setuptools', From 4343197209d6f66166d27b28bf175f85ba1209f3 Mon Sep 17 00:00:00 2001 From: Alin Voinea Date: Wed, 16 Apr 2014 18:54:19 +0300 Subject: [PATCH 174/254] Trigger custom comment events on comment add/remove/reply Conflicts: plone/app/discussion/interfaces.py --- plone/app/discussion/comment.py | 20 +- plone/app/discussion/configure.zcml | 1 + plone/app/discussion/contentrules.py | 42 ++++ plone/app/discussion/contentrules.zcml | 313 +++++++++++++++++++++++++ plone/app/discussion/events.py | 38 +++ plone/app/discussion/interfaces.py | 25 ++ plone/app/discussion/subscribers.zcml | 12 + 7 files changed, 450 insertions(+), 1 deletion(-) create mode 100644 plone/app/discussion/contentrules.py create mode 100644 plone/app/discussion/contentrules.zcml create mode 100644 plone/app/discussion/events.py diff --git a/plone/app/discussion/comment.py b/plone/app/discussion/comment.py index 6bcfdcf..c9e7077 100644 --- a/plone/app/discussion/comment.py +++ b/plone/app/discussion/comment.py @@ -10,6 +10,7 @@ from smtplib import SMTPException from zope.annotation.interfaces import IAnnotatable +from zope.event import notify from zope.component.factory import Factory from zope.component import queryUtility @@ -32,6 +33,11 @@ from OFS.Traversable import Traversable from plone.registry.interfaces import IRegistry +from plone.app.discussion.events import CommentAddedEvent +from plone.app.discussion.events import CommentRemovedEvent +from plone.app.discussion.events import ReplyAddedEvent +from plone.app.discussion.events import ReplyRemovedEvent + from plone.app.discussion import PloneAppDiscussionMessageFactory as _ from plone.app.discussion.interfaces import IComment from plone.app.discussion.interfaces import IConversation @@ -232,7 +238,6 @@ def notify_content_object(obj, event): 'last_comment_date', 'commentators')) - def notify_content_object_deleted(obj, event): """Remove all comments of a content object when the content object has been deleted. @@ -242,6 +247,19 @@ def notify_content_object_deleted(obj, event): while conversation: del conversation[conversation.keys()[0]] +def notify_comment_added(obj, event): + """ Notify custom discussion events when a comment is added or replied + """ + if getattr(obj, 'in_reply_to', None): + return notify(ReplyAddedEvent(obj)) + return notify(CommentAddedEvent(obj)) + +def notify_comment_removed(obj, event): + """ Notify custom discussion events when a comment or reply is removed + """ + if getattr(obj, 'in_reply_to', None): + return notify(ReplyRemovedEvent(obj)) + return notify(CommentRemovedEvent(obj)) def notify_content_object_moved(obj, event): """Update all comments of a content object that has been moved. diff --git a/plone/app/discussion/configure.zcml b/plone/app/discussion/configure.zcml index ed82463..c3345f7 100644 --- a/plone/app/discussion/configure.zcml +++ b/plone/app/discussion/configure.zcml @@ -14,6 +14,7 @@ + diff --git a/plone/app/discussion/contentrules.py b/plone/app/discussion/contentrules.py new file mode 100644 index 0000000..eb46890 --- /dev/null +++ b/plone/app/discussion/contentrules.py @@ -0,0 +1,42 @@ +""" Content rules handlers +""" +from Acquisition import aq_parent +from plone.app.contentrules.handlers import execute +from plone.stringinterp import adapters + +def execute_comment(event): + """ Execute comment content rules + """ + execute(event.object, event) + +# +# String interp for comment's content rules +# +class Mixin(object): + """ Override context + """ + @property + def context(self): + """ Getter + """ + conversation = aq_parent(self._context) + return aq_parent(conversation) + + @context.setter + def context(self, value): + """ Setter + """ + self._context = value + + +class CommentUrlSubstitution(adapters.UrlSubstitution, Mixin): + """ Override context to be used for URL substitution + """ + +class CommentParentUrlSubstitution(adapters.ParentUrlSubstitution, Mixin): + """ Override context to be used for Parent URL substitution + """ + +class CommentIdSubstitution(adapters.IdSubstitution, Mixin): + """ Override context to be used for Id substitution + """ diff --git a/plone/app/discussion/contentrules.zcml b/plone/app/discussion/contentrules.zcml new file mode 100644 index 0000000..b7f0353 --- /dev/null +++ b/plone/app/discussion/contentrules.zcml @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plone/app/discussion/events.py b/plone/app/discussion/events.py new file mode 100644 index 0000000..ec60da0 --- /dev/null +++ b/plone/app/discussion/events.py @@ -0,0 +1,38 @@ +""" Custom discussion events +""" +from zope.interface import implements +from plone.app.discussion.interfaces import IDiscussionEvent +from plone.app.discussion.interfaces import ICommentAddedEvent +from plone.app.discussion.interfaces import ICommentRemovedEvent +from plone.app.discussion.interfaces import IReplyAddedEvent +from plone.app.discussion.interfaces import IReplyRemovedEvent + +class DiscussionEvent(object): + """ Custom event + """ + implements(IDiscussionEvent) + + def __init__(self, context, **kwargs): + self.object = context + for key, value in kwargs.items(): + setattr(self, key, value) + +class CommentAddedEvent(DiscussionEvent): + """ Event to be triggered when a Comment is added + """ + implements(ICommentAddedEvent) + +class CommentRemovedEvent(DiscussionEvent): + """ Event to be triggered when a Comment is removed + """ + implements(ICommentRemovedEvent) + +class ReplyAddedEvent(DiscussionEvent): + """ Event to be triggered when a Comment reply is added + """ + implements(IReplyAddedEvent) + +class ReplyRemovedEvent(DiscussionEvent): + """ Event to be triggered when a Comment reply is removed + """ + implements(IReplyRemovedEvent) diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index 01d58b7..c39b8c5 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -4,6 +4,7 @@ from zope.interface import Interface from zope.interface.common.mapping import IIterableMapping +from zope.component.interfaces import IObjectEvent from zope import schema from plone.app.discussion import PloneAppDiscussionMessageFactory as _ @@ -345,3 +346,27 @@ class ICommentingTool(Interface): This can be removed once we no longer support upgrading from versions of Plone that had a portal_discussion tool. """ + +# +# Custom events +# + +class IDiscussionEvent(IObjectEvent): + """ Discussion custom event + """ + +class ICommentAddedEvent(IDiscussionEvent): + """ Comment added + """ + +class ICommentRemovedEvent(IDiscussionEvent): + """ Comment removed + """ + +class IReplyAddedEvent(IDiscussionEvent): + """ Comment reply added + """ + +class IReplyRemovedEvent(IDiscussionEvent): + """ Comment reply removed + """ diff --git a/plone/app/discussion/subscribers.zcml b/plone/app/discussion/subscribers.zcml index e563f80..12a30a5 100644 --- a/plone/app/discussion/subscribers.zcml +++ b/plone/app/discussion/subscribers.zcml @@ -15,12 +15,24 @@ handler=".comment.notify_content_object" /> + + + + Date: Thu, 17 Apr 2014 14:57:41 +0300 Subject: [PATCH 175/254] Use commented object as context instead of comment within event trigger - In order this to work with plone.contentrules use commented object as the main context within custom discussion events and add comment as the second parameter. --- plone/app/discussion/comment.py | 12 +- plone/app/discussion/contentrules.py | 32 --- plone/app/discussion/contentrules.zcml | 257 +------------------------ plone/app/discussion/events.py | 3 +- 4 files changed, 12 insertions(+), 292 deletions(-) diff --git a/plone/app/discussion/comment.py b/plone/app/discussion/comment.py index c9e7077..bf41967 100644 --- a/plone/app/discussion/comment.py +++ b/plone/app/discussion/comment.py @@ -250,16 +250,20 @@ def notify_content_object_deleted(obj, event): def notify_comment_added(obj, event): """ Notify custom discussion events when a comment is added or replied """ + conversation = aq_parent(obj) + context = aq_parent(conversation) if getattr(obj, 'in_reply_to', None): - return notify(ReplyAddedEvent(obj)) - return notify(CommentAddedEvent(obj)) + return notify(ReplyAddedEvent(context, obj)) + return notify(CommentAddedEvent(context, obj)) def notify_comment_removed(obj, event): """ Notify custom discussion events when a comment or reply is removed """ + conversation = aq_parent(obj) + context = aq_parent(conversation) if getattr(obj, 'in_reply_to', None): - return notify(ReplyRemovedEvent(obj)) - return notify(CommentRemovedEvent(obj)) + return notify(ReplyRemovedEvent(context, obj)) + return notify(CommentRemovedEvent(context, obj)) def notify_content_object_moved(obj, event): """Update all comments of a content object that has been moved. diff --git a/plone/app/discussion/contentrules.py b/plone/app/discussion/contentrules.py index eb46890..155c8c1 100644 --- a/plone/app/discussion/contentrules.py +++ b/plone/app/discussion/contentrules.py @@ -8,35 +8,3 @@ def execute_comment(event): """ Execute comment content rules """ execute(event.object, event) - -# -# String interp for comment's content rules -# -class Mixin(object): - """ Override context - """ - @property - def context(self): - """ Getter - """ - conversation = aq_parent(self._context) - return aq_parent(conversation) - - @context.setter - def context(self, value): - """ Setter - """ - self._context = value - - -class CommentUrlSubstitution(adapters.UrlSubstitution, Mixin): - """ Override context to be used for URL substitution - """ - -class CommentParentUrlSubstitution(adapters.ParentUrlSubstitution, Mixin): - """ Override context to be used for Parent URL substitution - """ - -class CommentIdSubstitution(adapters.IdSubstitution, Mixin): - """ Override context to be used for Id substitution - """ diff --git a/plone/app/discussion/contentrules.zcml b/plone/app/discussion/contentrules.zcml index b7f0353..8b8edc6 100644 --- a/plone/app/discussion/contentrules.zcml +++ b/plone/app/discussion/contentrules.zcml @@ -2,9 +2,9 @@ xmlns="http://namespaces.zope.org/zope" xmlns:zcml="http://namespaces.zope.org/zcml"> + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plone/app/discussion/events.py b/plone/app/discussion/events.py index ec60da0..31253b7 100644 --- a/plone/app/discussion/events.py +++ b/plone/app/discussion/events.py @@ -12,8 +12,9 @@ class DiscussionEvent(object): """ implements(IDiscussionEvent) - def __init__(self, context, **kwargs): + def __init__(self, context, comment, **kwargs): self.object = context + self.comment = comment for key, value in kwargs.items(): setattr(self, key, value) From ab926d6a10b4bc0b71ddcbf87fdd9230e91be68c Mon Sep 17 00:00:00 2001 From: Alin Voinea Date: Thu, 17 Apr 2014 15:29:20 +0300 Subject: [PATCH 176/254] Update change log Conflicts: CHANGES.rst --- CHANGES.rst | 12 +++++++++++- plone/app/discussion/contentrules.py | 2 -- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index f3864a5..687bbe0 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,8 +4,11 @@ Changelog 2.3.3 (unreleased) ------------------ -- Nothing changed yet. +- Register events as Content Rules Event Types if plone.contentrules is present + [avoinea] +- Trigger custom events on comment add/remove/reply + [avoinea] 2.3.2 (2014-04-05) ------------------ @@ -54,6 +57,13 @@ Changelog - Corrections and additions to the Danish translation [aputtu] + +2.2.12 (2014-01-13) +------------------- + +- Show author email to Moderator when it is available in anonymous comment. + [gotcha, smoussiaux] + - Put defaultUser.png instead of old defaultUser.gif [bsuttor] diff --git a/plone/app/discussion/contentrules.py b/plone/app/discussion/contentrules.py index 155c8c1..0dd6681 100644 --- a/plone/app/discussion/contentrules.py +++ b/plone/app/discussion/contentrules.py @@ -1,8 +1,6 @@ """ Content rules handlers """ -from Acquisition import aq_parent from plone.app.contentrules.handlers import execute -from plone.stringinterp import adapters def execute_comment(event): """ Execute comment content rules From 13830715a7e9e79fd4f3b6227cc78cb37ba616f2 Mon Sep 17 00:00:00 2001 From: Alin Voinea Date: Thu, 17 Apr 2014 18:38:44 +0300 Subject: [PATCH 177/254] Add custom content rules string substitutions - Add content rules string substitutions for comment: - id - text - author email - author user name - author full name --- plone/app/discussion/contentrules.py | 95 +++++++++++++++++++++++++- plone/app/discussion/contentrules.zcml | 36 ++++++++++ plone/app/discussion/events.py | 12 ++++ 3 files changed, 142 insertions(+), 1 deletion(-) diff --git a/plone/app/discussion/contentrules.py b/plone/app/discussion/contentrules.py index 0dd6681..4f2b58e 100644 --- a/plone/app/discussion/contentrules.py +++ b/plone/app/discussion/contentrules.py @@ -1,8 +1,101 @@ """ Content rules handlers """ -from plone.app.contentrules.handlers import execute +from plone.app.discussion import PloneAppDiscussionMessageFactory as _ + + +try: + from plone.stringinterp.adapters import BaseSubstitution +except ImportError: + class BaseSubstitution(object): + """ Fallback class if plone.stringinterp is not available + """ + def __init__(self, context, **kwargs): + self.context = context + +try: + from plone.app.contentrules.handlers import execute +except ImportError: + execute = lambda context, event: False + def execute_comment(event): """ Execute comment content rules """ execute(event.object, event) + +class CommentSubstitution(BaseSubstitution): + """ Comment string substitution + """ + def __init__(self, context, **kwargs): + super(CommentSubstitution, self).__init__(context, **kwargs) + self._session = None + + @property + def session(self): + """ User session + """ + if self._session is None: + sdm = getattr(self.context, 'session_data_manager', None) + self._session = sdm.getSessionData(create=False) if sdm else {} + return self._session + + @property + def comment(self): + """ Get changed inline comment + """ + return self.session.get('comment', {}) + +class Id(CommentSubstitution): + """ Comment id string substitution + """ + category = _(u'Comments') + description = _(u'Comment id') + + def safe_call(self): + """ Safe call + """ + return self.comment.get('comment_id', u'') + +class Text(CommentSubstitution): + """ Comment text + """ + category = _(u'Comments') + description = _(u'Comment text') + + def safe_call(self): + """ Safe call + """ + return self.comment.get('text', u'') + +class AuthorUserName(CommentSubstitution): + """ Comment author user name string substitution + """ + category = _(u'Comments') + description = _(u'Comment author user name') + + def safe_call(self): + """ Safe call + """ + return self.comment.get('author_username', u'') + +class AuthorFullName(CommentSubstitution): + """ Comment author full name string substitution + """ + category = _(u'Comments') + description = _(u'Comment author full name') + + def safe_call(self): + """ Safe call + """ + return self.comment.get('author_name', u'') + +class AuthorEmail(CommentSubstitution): + """ Comment author email string substitution + """ + category = _(u'Comments') + description = _(u'Comment author email') + + def safe_call(self): + """ Safe call + """ + return self.comment.get('author_email', u'') diff --git a/plone/app/discussion/contentrules.zcml b/plone/app/discussion/contentrules.zcml index 8b8edc6..c3d1108 100644 --- a/plone/app/discussion/contentrules.zcml +++ b/plone/app/discussion/contentrules.zcml @@ -57,4 +57,40 @@ + + + + + + + + + + + diff --git a/plone/app/discussion/events.py b/plone/app/discussion/events.py index 31253b7..30d49a1 100644 --- a/plone/app/discussion/events.py +++ b/plone/app/discussion/events.py @@ -1,6 +1,7 @@ """ Custom discussion events """ from zope.interface import implements +from plone.app.discussion.interfaces import IComment from plone.app.discussion.interfaces import IDiscussionEvent from plone.app.discussion.interfaces import ICommentAddedEvent from plone.app.discussion.interfaces import ICommentRemovedEvent @@ -18,6 +19,17 @@ class DiscussionEvent(object): for key, value in kwargs.items(): setattr(self, key, value) + # Add comment on session to easily define content-rules dynamic strings + sdm = getattr(context, 'session_data_manager', None) + session = sdm.getSessionData(create=True) if sdm else None + + if session: + sessionComment = dict( + (field, getattr(comment, field, None)) for field in IComment + if not field.startswith('_') + ) + session.set('comment', sessionComment) + class CommentAddedEvent(DiscussionEvent): """ Event to be triggered when a Comment is added """ From 28d7556c92ac8973594ccfb59798579ff65befaf Mon Sep 17 00:00:00 2001 From: Alin Voinea Date: Fri, 18 Apr 2014 16:42:06 +0300 Subject: [PATCH 178/254] Remove hard dependency on plone.stringinterp --- plone/app/discussion/contentrules.zcml | 62 +++++++++++++------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/plone/app/discussion/contentrules.zcml b/plone/app/discussion/contentrules.zcml index c3d1108..5dd222a 100644 --- a/plone/app/discussion/contentrules.zcml +++ b/plone/app/discussion/contentrules.zcml @@ -58,39 +58,41 @@ - + + - + - + - + - + + From 6565dfe19ebf5a50d2fcc20c3d445eea0eb4863c Mon Sep 17 00:00:00 2001 From: Alin Voinea Date: Fri, 18 Apr 2014 17:26:27 +0300 Subject: [PATCH 179/254] i18n update --- plone/app/discussion/i18n/plone-ca.po | 46 ++-- plone/app/discussion/i18n/plone-cs.po | 46 ++-- plone/app/discussion/i18n/plone-da.po | 46 ++-- plone/app/discussion/i18n/plone-de.po | 46 ++-- plone/app/discussion/i18n/plone-el.po | 2 +- plone/app/discussion/i18n/plone-es.po | 46 ++-- plone/app/discussion/i18n/plone-eu.po | 46 ++-- plone/app/discussion/i18n/plone-fr.po | 46 ++-- plone/app/discussion/i18n/plone-it.po | 46 ++-- plone/app/discussion/i18n/plone-ja.po | 46 ++-- plone/app/discussion/i18n/plone-nl.po | 46 ++-- plone/app/discussion/i18n/plone-no.po | 46 ++-- plone/app/discussion/i18n/plone-pt_BR.po | 46 ++-- plone/app/discussion/i18n/plone-sk.po | 46 ++-- plone/app/discussion/i18n/plone-uk.po | 46 ++-- plone/app/discussion/i18n/plone-zh_CN.po | 46 ++-- plone/app/discussion/i18n/plone-zh_TW.po | 46 ++-- plone/app/discussion/i18n/plone.pot | 61 +++-- .../af/LC_MESSAGES/plone.app.discussion.po | 140 ++++++----- .../ca/LC_MESSAGES/plone.app.discussion.po | 140 ++++++----- .../cs/LC_MESSAGES/plone.app.discussion.po | 141 ++++++----- .../da/LC_MESSAGES/plone.app.discussion.po | 143 +++++++----- .../de/LC_MESSAGES/plone.app.discussion.po | 199 +++++++++------- .../es/LC_MESSAGES/plone.app.discussion.po | 141 ++++++----- .../eu/LC_MESSAGES/plone.app.discussion.po | 109 +++++---- .../fi/LC_MESSAGES/plone.app.discussion.po | 140 ++++++----- .../fr/LC_MESSAGES/plone.app.discussion.po | 163 ++++++++----- .../it/LC_MESSAGES/plone.app.discussion.po | 141 ++++++----- .../ja/LC_MESSAGES/plone.app.discussion.po | 141 ++++++----- .../nl/LC_MESSAGES/plone.app.discussion.po | 141 ++++++----- .../no/LC_MESSAGES/plone.app.discussion.po | 140 ++++++----- .../locales/plone.app.discussion.pot | 218 ++++++++++-------- .../pt/LC_MESSAGES/plone.app.discussion.po | 200 ++++++++++------ .../pt_BR/LC_MESSAGES/plone.app.discussion.po | 155 ++++++++----- .../ro/LC_MESSAGES/plone.app.discussion.po | 141 ++++++----- .../sk/LC_MESSAGES/plone.app.discussion.po | 140 ++++++----- .../sv/LC_MESSAGES/plone.app.discussion.po | 141 ++++++----- .../uk/LC_MESSAGES/plone.app.discussion.po | 109 +++++---- .../zh_CN/LC_MESSAGES/plone.app.discussion.po | 141 ++++++----- .../zh_TW/LC_MESSAGES/plone.app.discussion.po | 141 ++++++----- 40 files changed, 2339 insertions(+), 1725 deletions(-) diff --git a/plone/app/discussion/i18n/plone-ca.po b/plone/app/discussion/i18n/plone-ca.po index 6ca8b11..67b48c0 100644 --- a/plone/app/discussion/i18n/plone-ca.po +++ b/plone/app/discussion/i18n/plone-ca.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: Victor Fernandez de Alba \n" "Language-Team: LANGUAGE \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Workflow simple de moderació de comentaris" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Aprova" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Aprovar el comentari significa que es publicarà per a tots els usuaris" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Comentari" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Worfklow de moderació de comentaris" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Comentari sobre la última transició" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "Autors" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Comentaris afegits" -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "Comentaris" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Modera comentaris" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Pendent" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Transició anterior" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Accés a la història del workflow" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Publicat" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "El revisor aprova el comentari" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Enviat, pendent de moderació" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "L'identificador únic de l'usuari que va executar la transició anterior" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Número total de comentaris" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Número de comentaris d'aquest contingut." -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Usuaris que han comentat el contingut." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visible per a tots, no editable." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Quan es va executar la transició anterior" diff --git a/plone/app/discussion/i18n/plone-cs.po b/plone/app/discussion/i18n/plone-cs.po index 37422c4..a515afc 100644 --- a/plone/app/discussion/i18n/plone-cs.po +++ b/plone/app/discussion/i18n/plone-cs.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2010-11-03 14:51+0100\n" "Last-Translator: Radim Novotny \n" "Language-Team: DMS4U \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Jednoduché workflow pro komentáře" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Schválit" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Schválením komentáře se tento stane viditelným pro ostatní uživatele." -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Komentář" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Schvalovací workflow pro komentáře" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Poznámka k poslední transakci" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "Komentující" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Komentář byl přidán." -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "Komentáře" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderovat komentáře" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Čekající" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Předchozí přechod stavu" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Zpřístupní historii workflow" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Zveřejněno" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Schalovatel schvaluje komentář" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Předáno k posouzení." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "ID uživatele, který způsobil předchozí změnu stavu" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Celkový počet komentářů" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Celkový počet komentářů k této položce." -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Uživatelé, kteří komentovali tuto položku" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Viditelné všem, nelze editovat." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Kdy byla provedena poslední změna stavu" diff --git a/plone/app/discussion/i18n/plone-da.po b/plone/app/discussion/i18n/plone-da.po index 6cc9b07..f50808f 100644 --- a/plone/app/discussion/i18n/plone-da.po +++ b/plone/app/discussion/i18n/plone-da.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Anton Stonor \n" "Language-Team: Anton Stonor \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Simpelt godkendelses-workflow for kommentarer" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Godkend" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Når en kommentarer bliver godkendt, kan andre se den." -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Kommentar" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Godkendelses-workflow for kommentarer" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Kommentar om seneste workflow" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "Kommentatorer" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Kommentarer tilføjet til indholdet" -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "Kommentering" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderér kommentarer" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Afventer" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Foregående workflow-ændringer" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Giver adgang til workflow-historikken" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Publiceret" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "En godkender kontrollerer indholdet" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Gemt, afventer godkendelse" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Brugernavnet på den, der gennemført det seneste workflow-trin" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Kommentarer i alt" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Antal kommentarer på denne side." -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Brugere, der har kommenteret på denne side" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Synligt for alle, kan ikke redigeres." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Tidspunktet for det seneste workflow-trin" diff --git a/plone/app/discussion/i18n/plone-de.po b/plone/app/discussion/i18n/plone-de.po index e9c6335..70e7184 100644 --- a/plone/app/discussion/i18n/plone-de.po +++ b/plone/app/discussion/i18n/plone-de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2010-03-17 16:11+0100\n" "Last-Translator: Timo Stollenwerk \n" "Language-Team: Deutsch \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Ein einfacher redaktioneller Workflow für Kommentare" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Genehmigen" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Durch die Genehmigung des Kommentars wird es für andere Benutzer sichtbar." -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Kommentar" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Arbeitsablauf für moderierte Kommentare" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Kommentar zum letzten Zustandsübergang" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "Kommentatoren" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Ein Kommentar zu einem Artikel." -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "Kommentare" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Kommentare moderieren" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Zur Redaktion eingereicht" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Letzter Übergang" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Erlaubt Zugang zur Historie des Arbeitsablaufs" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Veröffentlicht" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Der Redakteur genehmigt den Inhalt" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Zur Redaktion eingereicht" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Die ID des Benutzers welcher den vorherigen Zustandsübergang durchgeführt hat" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Anzahl der Kommentare" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Anzahl der Kommentare zu diesem Artikel." -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Benutzer, die den Artikel kommentiert haben" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Für alle Benutzer sichtbar, nicht editierbar" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Wann der vorherige Übergang durchgeführt wurde" diff --git a/plone/app/discussion/i18n/plone-el.po b/plone/app/discussion/i18n/plone-el.po index 07dc8a2..10a3f51 100644 --- a/plone/app/discussion/i18n/plone-el.po +++ b/plone/app/discussion/i18n/plone-el.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2013-04-06 12:48+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2010-02-23 10:26+0100\n" "Last-Translator: Yiorgis Gozadinos \n" "Language-Team: Greek \n" diff --git a/plone/app/discussion/i18n/plone-es.po b/plone/app/discussion/i18n/plone-es.po index 76d12b7..84c3e75 100644 --- a/plone/app/discussion/i18n/plone-es.po +++ b/plone/app/discussion/i18n/plone-es.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: Mikel Larreategi \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Workflow simple de moderación de comentarios" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Aprobar" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Aprobar el comentario significa que se publicará para todos los usuarios" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Comentario" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Worfklow de moderación de comentarios" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Comentario sobre la última transición" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "Autores" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Comentarios añadidos" -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "Discusión" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderar comentarios" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Pendiente" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Transición anterior" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Acceso a la historia del workflow" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Publicado" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "El revisor aprueba el comentario" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Enviado, pendiente de moderación" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "El ID del usuario que ejecutó la transición anterior" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Número total de comentarios" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Número de comentarios de este elemento" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Usuarios que han comentado el elemento" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visible para todos, no-editable" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Cuándo se ejecutó la transición anterior" diff --git a/plone/app/discussion/i18n/plone-eu.po b/plone/app/discussion/i18n/plone-eu.po index 7cbe585..b3a1055 100644 --- a/plone/app/discussion/i18n/plone-eu.po +++ b/plone/app/discussion/i18n/plone-eu.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: Mikel Larreategi \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Erantzunentzako moderazio workflowa" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Onartu" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Erantzuna onartzean erabiltzaile guztientzat argitaratu egingo da" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Erantzuna" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Erantzunen Moderazio Workflowa" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Azken trantsizioari buruzko iruzkina" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "Egileak" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Elementuari gehitutako erantzunak" -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "Eztabaida" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Erantzunak moderatu" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Moderazio kolan" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Aurreko trantsizioa" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Workflowaren historia ikus dezakezu" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Argitaratuta" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Moderatzaileak erantzuna onartu" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Bidalita, moderazio kolan zain." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Azken trantsizioa egin zuen erabiltzailearen IDa" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Erantzun kopurua" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Elementu honen erantzun kopurua" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Elementuaren inguruan erantzuna eman duten erabiltzaileak" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Guztiek ikusteko, ez da editagarria." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Aurreko trantsizioa noiz exekutatu zen." diff --git a/plone/app/discussion/i18n/plone-fr.po b/plone/app/discussion/i18n/plone-fr.po index 9492e47..680f2bb 100644 --- a/plone/app/discussion/i18n/plone-fr.po +++ b/plone/app/discussion/i18n/plone-fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2010-08-06 19:23+0100\n" "Last-Translator: Vincent Fretin \n" "Language-Team: Vincent Fretin \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Approuver" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Approuver le commentaire le rend visible aux autres utilisateurs." -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Commentaire" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Workflow de modération des commentaires" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Commentaire à propos de la dernière transition" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "Commentateurs" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Commentaires ajoutés à un élément." -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "Discussion" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Modération des commentaires" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "En attente" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Transition précédente" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Permet d'accéder à l'historique du workflow" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Publié" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Modérateur approuve le contenu" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Soumis, en attente de modération." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "L'identifiant utilisateur qui a effectué la transition précédente" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Nombre total de commentaires" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Nombre total de commentaires pour cet élément." -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Utilisateurs qui ont commenté sur cet élément" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visible par tout le monde, non modifiable." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Quand la précédente transition a été effectué" diff --git a/plone/app/discussion/i18n/plone-it.po b/plone/app/discussion/i18n/plone-it.po index 00a7428..f62ea04 100644 --- a/plone/app/discussion/i18n/plone-it.po +++ b/plone/app/discussion/i18n/plone-it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Approva" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Approvare il commento lo rende visibile agli utenti." -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Commento" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Workflow per revisione del commento" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Commento" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "Commentatori" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Commenti aggiunti al contenuto" -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "Commenti" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderazione commenti" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "In attesa" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Transizione precedente" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Fornisce accesso alla storia del workflow" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Pubblicato" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Il revisore approva il commento" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Inviato, in attesa di revisione" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "L'ID dell'utente che ha eseguito l'ultima transizione" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Numero totale di commenti" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Numero totale di commenti per questo elemento" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Utenti che hanno commentato l'elemento" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visibile a tutti, non modificabile" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Quando l'ultima transizione è stata eseguita" diff --git a/plone/app/discussion/i18n/plone-ja.po b/plone/app/discussion/i18n/plone-ja.po index 78b8be4..0ecccdb 100644 --- a/plone/app/discussion/i18n/plone-ja.po +++ b/plone/app/discussion/i18n/plone-ja.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2011-04-18 13:13+0900\n" "Last-Translator: Takeshi Yamamoto \n" "Language-Team: Hanno Schlichting \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "コメント用簡易審査ワークフロー" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "承認する" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "コメントを承認すると、他のユーザに見えるようになります。" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "コメント" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "コメント審査ワークフロー" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "最後の遷移についてのコメント" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "コメント者" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "コンテンツアイテムにコメントが追加されました" -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "議論" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "コメントをモデレートする" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "保留" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "前の遷移" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "ワークフロー履歴へのアクセスを提供する" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "公開中" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "審査員がコンテンツを承認する" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "提出され、審査待ち" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "前の遷移を実施したユーザのID" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "コメントの合計数" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "このアイテムについてのコメントの合計数" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "このアイテムにコメントしたユーザ" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "誰にでも見え、編集不可能" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "前の遷移が実施された時" diff --git a/plone/app/discussion/i18n/plone-nl.po b/plone/app/discussion/i18n/plone-nl.po index 3a02ab3..5120025 100644 --- a/plone/app/discussion/i18n/plone-nl.po +++ b/plone/app/discussion/i18n/plone-nl.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2011-09-30 16:02+0100\n" "Last-Translator: NFG Net Facilities Group BV \n" "Language-Team: Nederlands \n" @@ -15,91 +15,91 @@ msgstr "" "Domain: plone\n" "Language: \n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Een eenvoudige herzienings werkstroom voor reacties" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Goedkeuren" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "De reactie goedkeuren maakt deze zichtbaar voor andere gebruikers." -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Reactie" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Reactie Review Werkstroom" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Reactie op de laatste transitie" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "Commentatoren" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Reacties op een content item" -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "Discussie" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Reacties modereren" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "In afwachting" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Vorige transitie" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Biedt toegang tot de werkstroom geschiedenis" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Gepubliceerd" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Recensent keurt inhoud goed" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Ingediend, in afwaching van herziening." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Het ID van de gebruiker die de vorige transitie heeft uitgevoerd" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Totaal aantal reacties" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Totaal aantal reacties op dit item." -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Gebruikers die hebben gereageerd op dit item" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Zichtbaar voor iedereen, niet bewerkbaar." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Wanneer de vorige transitie werd uitgevoerd" diff --git a/plone/app/discussion/i18n/plone-no.po b/plone/app/discussion/i18n/plone-no.po index 8d3481b..25acd02 100644 --- a/plone/app/discussion/i18n/plone-no.po +++ b/plone/app/discussion/i18n/plone-no.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "" diff --git a/plone/app/discussion/i18n/plone-pt_BR.po b/plone/app/discussion/i18n/plone-pt_BR.po index 7aec2d9..4c5b5c3 100644 --- a/plone/app/discussion/i18n/plone-pt_BR.po +++ b/plone/app/discussion/i18n/plone-pt_BR.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2011-04-14 17:38-0300\n" "Last-Translator: Andre Nogueira \n" "Language-Team: Plone i18n \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Workflow de moderação simples para comentários" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Aprovar" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Aprovar um comentário torna-o visível para todos os usuários" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Comentário" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Worfklow de Moderação de Comentários" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Comentário sobre a última transição" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "Autores" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Comentários adicionados a um conteúdo." -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "Discussão" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Moderar comentários" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Pendente" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Transição anterior" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Fornece acesso ao histórico do Workflow" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Publicado" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Revisor aprova o conteúdo" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Enviado, pendente de moderação." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "O ID do usuário que realizou a transição anterior" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Número total de comentários" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Número total de comentários deste item." -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Usuários que comentáram este item" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Visível para todos, não editável." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Quando a transição anterior foi realizada" diff --git a/plone/app/discussion/i18n/plone-sk.po b/plone/app/discussion/i18n/plone-sk.po index 4572740..2aeb820 100644 --- a/plone/app/discussion/i18n/plone-sk.po +++ b/plone/app/discussion/i18n/plone-sk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2012-07-02 17:54+0100\n" "Last-Translator: Radim Novotny \n" "Language-Team: Hanno Schlichting \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "" diff --git a/plone/app/discussion/i18n/plone-uk.po b/plone/app/discussion/i18n/plone-uk.po index 20c9282..039aee2 100644 --- a/plone/app/discussion/i18n/plone-uk.po +++ b/plone/app/discussion/i18n/plone-uk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2013-04-12 14:55+0300\n" "Last-Translator: Roman Kozlovskyi \n" "Language-Team: Hanno Schlichting \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "Простий робочий проце для розгляду коментарів" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "Опублікувати" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "Публікація коментаря зробить його видимим для інших" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "Коментар" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "Робочий процес розгляду коментарів" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "Коментар про останню зміну стану" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "Коментатори" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "Коментарі, додані до об'єкта." -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "Коментування" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "Модерування коментарів" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "Непідтверджений" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "Попередня зміна стану" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "Надає доступ до історії робочого процесу" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "Опублікований" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "Рецензент затвердив зміст" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "Подано на публікацію." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "Ідентифікатор користувача який спровокував останню зміну стану" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "Загальне число коментарів" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "Загальне число коментарів до цього об'єкта." -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "Користувачі, які прокоментували цей об'єкт." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "Видимий для всіх, не редагується." -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "Коли була здійснена попередня зміна стану" diff --git a/plone/app/discussion/i18n/plone-zh_CN.po b/plone/app/discussion/i18n/plone-zh_CN.po index 8181ba4..8fa987f 100644 --- a/plone/app/discussion/i18n/plone-zh_CN.po +++ b/plone/app/discussion/i18n/plone-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2011-08-19 12:23+0800\n" "Last-Translator: Jian Aijun \n" "Language-Team: plone \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "评论简单审核工作流" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "批准" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "批准评论使它对其他用户可见。" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "评论" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "评论审核工作流" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "最后状态转换的注释" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "评论者" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "评论已添加到内容条目。" -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "评论" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "评论审核" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "待审核" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "上一步状态转换" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "提供访问工作流历史记录功能" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "已发布" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "审核者批准内容" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "已提交,等待审核。" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "执行上一步状态转换的用户 ID" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "评论总数" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "此条目的评论总数。" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "此条目的评论者。" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "对任何人可见,不可编辑。" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "当上一步状态转换被执行" diff --git a/plone/app/discussion/i18n/plone-zh_TW.po b/plone/app/discussion/i18n/plone-zh_TW.po index 9d19f27..17e77c4 100644 --- a/plone/app/discussion/i18n/plone-zh_TW.po +++ b/plone/app/discussion/i18n/plone-zh_TW.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" "PO-Revision-Date: 2010-08-07 23:11+0800\n" "Last-Translator: TsungWei Hu \n" "Language-Team: Taiwan Python User Group \n" @@ -14,91 +14,91 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "允許" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "允許留言公開給其他使用者。" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "留言" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "留言審核流程" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "最後狀態轉移的備註" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "留言者" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "新增到內容項目的留言" -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "討論" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "審核留言" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "待審核" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "前一個移轉狀態" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "提供工作流程歷史記錄的功能" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "已發佈" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "審核者同意內容" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "已送出,待審核中。" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "執行前一個狀態移轉的使用者識別碼" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "留言總數" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "在此項目留言的總數。" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "在此項目留言的使用者" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "每個人都看得到,但無法編輯。" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "當前一個移轉動作被執行時" diff --git a/plone/app/discussion/i18n/plone.pot b/plone/app/discussion/i18n/plone.pot index f5bbc58..885461c 100644 --- a/plone/app/discussion/i18n/plone.pot +++ b/plone/app/discussion/i18n/plone.pot @@ -1,107 +1,104 @@ -# --- PLEASE EDIT THE LINES BELOW CORRECTLY --- -# SOME DESCRIPTIVE TITLE. -# FIRST AUTHOR , YEAR. msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"Project-Id-Version: plone.app.discussion\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"PO-Revision-Date: 2010-01-28 15:00+0000\n" +"Last-Translator: Hanno Schlichting \n" +"Language-Team: Hanno Schlichting \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0\n" +"Plural-Forms: nplurals=1; plural=0;\n" "Language-Code: en\n" "Language-Name: English\n" -"Preferred-Encodings: utf-8 latin1\n" +"Preferred-Encodings: utf-8\n" "Domain: plone\n" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "A simple review workflow for comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approve" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Approving the comment makes it visible to other users." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comment" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment Review Workflow" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Comment about the last transition" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Commentators" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/types/Discussion_Item.xml +#: ../profiles/default/types/Discussion_Item.xml msgid "Comments added to a content item." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/controlpanel.xml +#: ../profiles/default/controlpanel.xml msgid "Discussion" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/actions.xml +#: ../profiles/default/actions.xml msgid "Moderate comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Pending" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Previous transition" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Provides access to workflow history" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Published" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Reviewer approves content" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Submitted, pending review." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "The ID of the user who performed the previous transition" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Total number of comments on this item." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/portal_atct.xml +#: ../profiles/default/portal_atct.xml msgid "Users who have commented on the item" msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "Visible to everyone, non-editable." msgstr "" -#: plone.app.discussion/plone/app/discussion/profiles/default/workflows/comment_review_workflow/definition.xml +#: ../profiles/default/workflows/comment_review_workflow/definition.xml msgid "When the previous transition was performed" msgstr "" diff --git a/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po index 29fcd36..ba138ce 100644 --- a/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po @@ -33,11 +33,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "'n Opmerking is geplaas." -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "'n ID uniek tot hierdie gesprek" @@ -45,43 +45,67 @@ msgstr "'n ID uniek tot hierdie gesprek" msgid "Add a comment" msgstr "Voeg 'n opmerking by" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Anonieme kommentaar" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Kanselleer" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Opmerking goedgekeur" +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Opmerking verwyder" -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Kommentator se Profielfoto" msgid "Commenting infrastructure for Plone" msgstr "Kommentaarinfrastruktuur vir Plone" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Gesprek" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Skeppingsdatum" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -93,39 +117,39 @@ msgstr "Uitgeskakel" msgid "Discussion settings" msgstr "Kommentaar instellings" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "E-pos" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Laat kommentare toe" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Id van dié opmerking waarop hierdie een antwoord" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME-tipe" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "E-pos in kennis stelling vir die redaksie" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Wysigingsdatum" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Naam" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Stel my in kennis van nuwe opmerkings m.b.v e-pos" @@ -133,44 +157,44 @@ msgstr "Stel my in kennis van nuwe opmerkings m.b.v e-pos" msgid "Plone Discussions" msgstr "Plone Kommentare" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Portaaltipe" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Lys van kommentators (gebruikersname)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Gebruik e-pos in kennis stelling" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Die opmerking sal geplaas word sodra dit goedgekeur is." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Lewer kommentaar" @@ -205,7 +229,7 @@ msgid "comment_description_plain_text" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} op ${content}" @@ -241,17 +265,17 @@ msgid "heading_moderate_comments" msgstr "Modereer kommentaar" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Indien geselekteer, sal anonieme besoekers opmerkings kan laat sonder om aan te meld. Die captcha-oplossing word aanbeveel indien hierdie opsie aangeskakel word, om gemorspos te voorkom." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Gebruik hierdie instelling om Captcha validasie vir kommentaar aan of af te skakel. Installeer plone.formwidget of plone.formwidget.captcha indien daar geen opsies beskikbaar is nie." @@ -263,54 +287,54 @@ msgstr "" "Om kommentaar vir 'n spesifieke inhoudstipe aan te skakel, gaan na die Tipes Konfigurasie, kies 'Comment' en stel die werksvloei na \"Comment Review Workflow\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Indien geselekteer, sal gebruikers op die werf kommentare kan plaas. Kommentare moet moontlik ook nog vir sekere inhoudstipe, vouers en objekte aangeskakel word, voordat kommentaar daar gelewer kan word." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "" -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Indien geselekteer, sal die moderator in kennis gestel word wanneer 'n opmerking aandag verg." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Indien geselekteer, sal die profielfoto van 'n gebruiker langs sy opmerking vertoon." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Indien geselekteer, sal gebruikers kan kies om per e-pos van nuwe kommentaar in kennis gestel te word." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anoniem" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Skakel anonieme kommentaar aan" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -320,12 +344,12 @@ msgid "label_apply" msgstr "Pas toe" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Opmerking" @@ -340,22 +364,22 @@ msgid "label_delete" msgstr "Skrap" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Laat kommentare globaal toe" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Skakel moderator e-pos in kennis stelling aan" @@ -370,7 +394,7 @@ msgid "label_says" msgstr "sê:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Vertoon kommentaarleweraar se foto" @@ -380,28 +404,28 @@ msgid "label_show_full_comment_text" msgstr "Toon die volledige opmerking" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Onderwerp" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Kommentaar tekstransformasie" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Skakel e-pos in kennis stelling aan vir gebruikers" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 #, fuzzy msgid "mail_notification_message" msgstr "'n Opmerking is op '${title}' gelewer: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po index d73e295..537bd7a 100644 --- a/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po @@ -14,11 +14,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Comentari afegit." -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Un identificador exclusiu assignat al comentari per aquesta conversa" @@ -26,43 +26,67 @@ msgstr "Un identificador exclusiu assignat al comentari per aquesta conversa" msgid "Add a comment" msgstr "Afegir un comentari" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Comentaris anònims" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Cancel·la" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Comentari aprovat." +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Comentari esborrat." -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Imatge de l'autor" msgid "Commenting infrastructure for Plone" msgstr "Infraestructura de comentaris per Plone" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Conversa" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Data de creació" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -74,39 +98,39 @@ msgstr "Desactivat" msgid "Discussion settings" msgstr "Configuració dels comentaris" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "Correu electrònic" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Permetre comentaris" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Identificador únic del comentari en relació al comentari del qual és resposta" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "Tipus MIME" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Notificació al moderador per correu electrònic" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Data de modificació" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Nom" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Notifica'm de la creació de nous comentaris via correu electrònic." @@ -114,44 +138,44 @@ msgstr "Notifica'm de la creació de nous comentaris via correu electrònic." msgid "Plone Discussions" msgstr "Plone Discussions" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Tipus d'objecte" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Llistat d'usuaris que han comentat (noms d'usuari)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Notificació a l'usuari via mail" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "El vostre comentari està pendent d'aprovació per part del moderador de l'espai" #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Comenta" @@ -186,7 +210,7 @@ msgid "comment_description_plain_text" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} sobre ${content}" @@ -222,17 +246,17 @@ msgid "heading_moderate_comments" msgstr "Moderar comentaris" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Si està seleccionada, els usuaris anònims podran afegir comentaris sense identificar-se. Es recomana la utilització de una eina de captcha per evitar comentaris spam si aquesta opció està activada." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Utilitzeu aquesta opció per activar o desactivar una eina de captcha pels comentaris. Instal·leu plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet o collective.z3cform.norobots si no teniu cap opció disponible." @@ -242,54 +266,54 @@ msgid "help_discussion_settings_editform" msgstr "Algunes de les configuracions dels comentaris no estan en la element de configuració 'Comentaris' del panell de control de l'espai. Per activar els comentaris per un tipus de contingut específic, dirigiu-vos al element de configuració 'Tipus' i activeu la opció 'Permetre comentaris'. Per activar el circuit de treball (workflow) de moderació de comentaris, dirigiu-vos al element de configuració de 'Tipus', seleccioneu 'Comentari' i escolliu el 'Workflow de moderació de comentaris'." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Si està seleccionada, es permet que els usuaris puguin afegir comentaris a l'espai. De tota manera, teniu que activar els comentaris per a cada tipus de contingut específicament abans de que pogueu afegir comentaris." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "" -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Si està seleccionada, es notificarà per correu electrònic al moderador els nous comentaris." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Si està seleccionada, es mostrarà el retrat (o imatge) que hagi configurat l'usuari en el seu perfil juntament amb el comentari." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Si està seleccionada, els usuaris poden escollir si volen ser notificats cada cop que s'afegeixi un nou comentari al contingut." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anònim" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Permetre comentaris anònims" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -299,12 +323,12 @@ msgid "label_apply" msgstr "Aplica" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Comentari" @@ -319,22 +343,22 @@ msgid "label_delete" msgstr "Esborra" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Activa els comentaris de forma global" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Activa la notificació al moderador" @@ -349,7 +373,7 @@ msgid "label_says" msgstr "diu:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Mostra el retrat (o imatge) de l'autor" @@ -359,28 +383,28 @@ msgid "label_show_full_comment_text" msgstr "Mostra text complet" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Tema" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Transformacions aplicades al text del comentari" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Activa les notificacions als usuaris" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 #, fuzzy msgid "mail_notification_message" msgstr "S'ha publicat un comentari sobre el contingut ${title} en aquesta adreça: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po index 538c27e..b32355b 100644 --- a/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po @@ -14,11 +14,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Komentář byl přidán." -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Identifikátor komentáře v této konverzaci." @@ -26,43 +26,67 @@ msgstr "Identifikátor komentáře v této konverzaci." msgid "Add a comment" msgstr "Přidat komentář" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Anonymní komentáře" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Storno" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Změny byly uloženy" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Komentář byl schválen." +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Komentář byl odebrán." -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Portét komentujícího" msgid "Commenting infrastructure for Plone" msgstr "Komentářový systém pro Plone" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Konverzace" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Datum vytvoření" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -74,39 +98,39 @@ msgstr "Zakázáno" msgid "Discussion settings" msgstr "Nastavení komentářů" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Úpravy byly stornovány" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "Email" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Povolit komentáře" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Id předchozího komentáře, na který je tento odpovědí" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME typ" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Notifikace moderátorů emailem" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Datum změny" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Jméno" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Chci zasílat notifikace o nových komentářích emailem." @@ -114,44 +138,44 @@ msgstr "Chci zasílat notifikace o nových komentářích emailem." msgid "Plone Discussions" msgstr "Komentáře" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Typ položky" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Uložit" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Seznam komentujících" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Notifikace emailem" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Váš komentář čeká na schválení." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Přidat komentář" @@ -186,7 +210,7 @@ msgid "comment_description_plain_text" msgstr "Pokud chcete přidat komentář, zadejte jej do formuláře níže. Nejsou povoleny žádné formátovací značky." #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} k ${content}" @@ -222,17 +246,17 @@ msgid "heading_moderate_comments" msgstr "Správa komentářů" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Je-li zaškrtnuto, nepřihlášení uživatelé mohou posílat komentáře. Doporučujeme použití Captcha, pokud povolíte tuto volbu." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Zde můžete povolit nebo zakázat Captcha pro komentáře. Pokud zde není žádná možnost k výběru, nainstalujte prosím balíček plone.formwidget.captcha nebo plone.formwidget.recaptcha, collective.akismet nebo collective.z3cform.norobots." @@ -245,53 +269,54 @@ msgstr "" " Pokud chcete povolit moderování komentářů, přejděte do ovládacích panelů Typy, vyberte typ položky \"Komentář\" a nastavte workflow na \"Schvalovací workflow pro komentáře\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Je-li zaškrtnuto, uživatelé mohou přidávat komentáře. Navíc však musíte ověřit, že je povoleno přidávání komentářů k příslušným typům položek." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Je-li zaškrtnuto, pakbudou komentáře moderované. Po zadání komentáře bude tento komentář ve stavu \"čeká na schválení\" a nebude viditelný nepřihlášeným návštěvníkům. Moderátor (uživatel, ktewrý má opravnění schvalovat komentáře) může takové komentáře schválit a tedy zviditelnit všem." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "Adresa, na kterou budou zasílány notifikační emaily moderátorlů" -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Je-li zaškrtnuto, moderátor je upozorněn na komentáře, které vyžadují jeho zásah." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Je-li zaškrtnuto, je vedle komentáře zobrazen portrét autora komentáře." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "Zde můžete nastavit, zda mají být komentáře nějak upraveny. Je možné vybrat mezi Plain text (prostý, neupravený text) nebo \"Intelligent text\". Intelligent text konvertuje odkazy na aktivní linky a převádí text do HTML tak, jak je vidět na obrazovce (tedy se zachováním nových řádků a odsazení)." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Je-li zaškrtnuto, uživatelé se mohou rozhodnout zda si přejí být upozorněni na nové komentáře emailem." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anonym" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Povolit anonymní komentáře" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -301,12 +326,12 @@ msgid "label_apply" msgstr "Provést" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Komentář" @@ -321,22 +346,22 @@ msgid "label_delete" msgstr "Odebrat" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Globální povolení komentářů" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Povolit moderování komentářů" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Email adresa moderátora" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Povolit emailovou notifikaci moderátorů" @@ -351,7 +376,7 @@ msgid "label_says" msgstr "píše:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Zobrazit portrét komentujícího" @@ -361,22 +386,22 @@ msgid "label_show_full_comment_text" msgstr "zobrazit celý text příspěvku" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Předmět" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Transformace textu" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Povolit notifikaci uživatelů emailem" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" "Na adrese ${link} byl přidán komentář k položce '${title}'}\n" @@ -386,7 +411,7 @@ msgstr "" "---" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" "Na adrese ${link} byl vložen komentář k položce '${title}'\n" diff --git a/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po index 1fba6a5..c57e546 100644 --- a/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po @@ -14,11 +14,11 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone.app.discussion\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Der er oprettet en kommentar." -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Et kommentar-id som er unikt for denne dialog" @@ -26,43 +26,67 @@ msgstr "Et kommentar-id som er unikt for denne dialog" msgid "Add a comment" msgstr "Tilføj en kommentar" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Anonyme kommentarer" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Afbryd" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Ændringer gemt" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Kommentar godkendt." +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Kommentar slettet." -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Kommentar-billede" msgid "Commenting infrastructure for Plone" msgstr "Kommentar-funktionalitet til Plone" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Dialog" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Oprettelses-dato" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "Dato for den seneste, offentlige kommentar" @@ -74,39 +98,39 @@ msgstr "Slået fra" msgid "Discussion settings" msgstr "Indstilling for kommentarer" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Redigering blev afbrudt" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "E-mail" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Slå kommentarer til" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Id'et på den kommentar, denne kommentar er et svar til" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME-type" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Notificering af moderator" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Ændringsdato" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Navn" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Send besked om nye kommentarer per e-mail." @@ -114,44 +138,44 @@ msgstr "Send besked om nye kommentarer per e-mail." msgid "Plone Discussions" msgstr "Plone diskussioner" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Portaltype" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Gem" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Liste over kommentatorer (brugernavne)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "Gruppen af unikke kommentatorer (brugernavne) fra published_comments" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "Det samlede antal offentlige kommentarer til dette element" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." -msgstr "Transformation '%s' => '%s' er ikke muligt. Mislykkedes med at transformere kommentaren '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." +msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "E-mail-notificering af brugere" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "Kommentatorens brugernavn" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Din kommentar venter på godkendelse." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Gem" @@ -186,7 +210,7 @@ msgid "comment_description_plain_text" msgstr "Du kan tilføje en kommentar ved at udfylde formularen nedenfor. Ren tekst-formattering." #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} på ${content}" @@ -222,17 +246,17 @@ msgid "heading_moderate_comments" msgstr "Moderer kommentarer" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Hvis du krydser af, kan anonyme brugere skrive kommentarer uden at være logget ind. I så fald er det en god ide at bruge CAPTCHA for at forhindre spam." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Her kan du slå CAPTCHA til og fra for kommentarer. Installer plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet eller collective.z3cform.norobots, hvis der ikke er nogen valgmuligheder nedenfor." @@ -242,53 +266,54 @@ msgid "help_discussion_settings_editform" msgstr "Du kan justere kommentarindstillingerne nedenfor. Bemærk, at der også er indstillinger andre steder, som påvirker kommentarer. For at slå kommentarer til for en bestemt indholdstype, så klik \"Typer\" på Kontrolpanelet og afkryds \"Tillad kommentarer\" for typen. For at slå modereringsworkflow til kommentarer, så vælg \"Kommentar\" under \"Typer\" på Kontrolpanelet og vælg workflowet \"Godkendelses-workflow for kommentarer\"" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Hvis du krydser af, kan brugere skrive kommentarer på sitet. Du skal dog først slå kommentering til for bestemte indholdstyper, mapper eller indholdsobjekter, før det virker." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Hvis du krydser af, vil kommentarer automatisk bliver sat i en \"Afventer\"-tilstand, hvor de er usynlige for offentligheden. En bruger med rettigheder til at moderere kommentarer kan godkende kommentarer og gøre dem synlige for offentligheden." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "Adresse på den person, som skal modtage moderator-notificeringer." -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Hvis du krydser af, får en moderator besked, hvis en kommentarer skal vurderes." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Hvis du krydser af, bliver der vist et billede af brugeren ved siden af kommentaren." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "Vælg, hvordan kommentartekster skal vises. Du kan vælge mellem \"Plan text\", \"Markdown\" og \"Intelligent text\". Plain text gør ingenting. Markdown fortolker teksten efter Markdown-standarden. Intelligent text oversætter teksten til HTML og bibeholder indrykninger, linjeskift og oversætter emails og webadresser til klikbare links." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Hvis den er slået til, kan brugere få besked om nye kommentarer over email." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anonym" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Slå anonym kommentering til" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -298,12 +323,12 @@ msgid "label_apply" msgstr "Udfør" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "CAPTCHA" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Kommentar" @@ -318,22 +343,22 @@ msgid "label_delete" msgstr "Slet" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Tænd for kommentarer" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Slå kommentarmoderering til" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Email på moderator" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Slå moderatorer-notificering til" @@ -348,7 +373,7 @@ msgid "label_says" msgstr "siger:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Vis kommentator-billede" @@ -358,28 +383,28 @@ msgid "label_show_full_comment_text" msgstr "Hvis fuld kommentar" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Emne" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Formattering af kommentar-tekst" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Slå bruger-notificering til" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 #, fuzzy msgid "mail_notification_message" msgstr "En kommentarer om '${title}' er blevet gemt her: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" "En kommentar til '${title}' er blevet indsendt her: ${link}\n" diff --git a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po index 44b7a4b..3ddff5c 100644 --- a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po @@ -14,223 +14,254 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: plone.app.discussion/plone/app/discussion/comment.py:326 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Ein Kommentar wurde abgegeben." -#: plone.app.discussion/plone/app/discussion/interfaces.py:143 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Eine eindeutige ID des Kommentars" -#: plone.app.discussion/plone/app/discussion/browser/comments.py:72 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Kommentar hinzufügen" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:66 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Anonyme Kommentare" -#: plone.app.discussion/plone/app/discussion/browser/comments.py:258 -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:84 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Abbrechen" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:80 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Änderungen gespeichert" -#: plone.app.discussion/plone/app/discussion/browser/moderation.py:139 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Kommentar zur Veröffentlichung freigegeben." -#: plone.app.discussion/plone/app/discussion/browser/moderation.py:100 +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Kommentar gelöscht" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:67 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Porträt des Benutzers" -#: plone.app.discussion/plone/app/discussion/interfaces.py:138 +msgid "Commenting infrastructure for Plone" +msgstr "" + +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Diskussion" -#: plone.app.discussion/plone/app/discussion/interfaces.py:176 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Erstellungsdatum" -#: plone.app.discussion/plone/app/discussion/interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "Datum des neuesten öffentlichen Kommentars" -#: plone.app.discussion/plone/app/discussion/vocabularies.py:44 +#: ../vocabularies.py:44 msgid "Disabled" msgstr "Ausgeschaltet" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:34 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Kommentierungseinstellungen" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:86 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Bearbeitung abgebrochen" -#: plone.app.discussion/plone/app/discussion/interfaces.py:155 +#: ../interfaces.py:156 msgid "Email" msgstr "E-Mail" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:65 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Kommentare einschalten" -#: plone.app.discussion/plone/app/discussion/interfaces.py:146 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "ID des Kommentars, auf den geantwortet wird." -#: plone.app.discussion/plone/app/discussion/interfaces.py:160 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME-Typ" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:69 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Moderator E-Mail Benachrichtigung" -#: plone.app.discussion/plone/app/discussion/interfaces.py:177 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Änderungsdatum" -#: plone.app.discussion/plone/app/discussion/interfaces.py:140 +#: ../interfaces.py:141 msgid "Name" msgstr "Name" -#: plone.app.discussion/plone/app/discussion/interfaces.py:169 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "E-Mail-Benachrichtigung bei neuen Kommentaren" -#: plone.app.discussion/plone/app/discussion/interfaces.py:133 +#: ./plone.app.discussion/plone/app/discussion/configure.zcml +msgid "Plone Discussions" +msgstr "" + +#: ../interfaces.py:134 msgid "Portal type" msgstr "Artikeltyp" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:73 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Speichern" -#: plone.app.discussion/plone/app/discussion/interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Liste von Benutzern, die Kommentare abgegeben haben" -#: plone.app.discussion/plone/app/discussion/interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "Summe der veröffentlichten Kommentare zu diesem Artikel" -#: plone.app.discussion/plone/app/discussion/comment.py:158 +#: ../comment.py:164 msgid "Transform '%s' => '%s' not available." msgstr "Transformation '%s' => '%s' ist nicht verfügbar." -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:71 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "E-Mail-Benachrichtigungen für Benutzer" -#: plone.app.discussion/plone/app/discussion/interfaces.py:175 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "Benutzername des Kommentierenden" -#: plone.app.discussion/plone/app/discussion/browser/comments.py:251 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Ihr Kommentar muss noch vom Moderator freigegeben werden." #. Default: "Comment" -#: plone.app.discussion/plone/app/discussion/browser/comments.py:132 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Kommentieren" #. Default: "Delete" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:68 +#: ../browser/moderation.pt:68 msgid "bulkactions_delete" msgstr "Löschen" #. Default: "Approve" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:65 +#: ../browser/moderation.pt:65 msgid "bulkactions_publish" msgstr "Veröffentlichen" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: plone.app.discussion/plone/app/discussion/browser/comments.py:57 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Sie können einen Kommentar abgeben, indem Sie das untenstehende Formular ausfüllen. Nur Text. Web- und E-Mailadressen werden in anklickbare Links umgewandelt." #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." -#: plone.app.discussion/plone/app/discussion/browser/comments.py:51 +#: ../browser/comments.py:51 msgid "comment_description_markdown" msgstr "Sie können einen Kommentar abgeben, indem Sie das untenstehende Formular ausfüllen. Sie können die Markdown-Syntax für Links und Bilder benutzen." #. Default: "Comments are moderated." -#: plone.app.discussion/plone/app/discussion/browser/comments.py:63 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Kommentare werden moderiert." #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: plone.app.discussion/plone/app/discussion/browser/comments.py:46 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Sie können einen Kommentar abgeben, indem Sie das untenstehende Formular ausfüllen. Nur Text." #. Default: "${author_name} on ${content}" -#: plone.app.discussion/plone/app/discussion/comment.py:48 +#: ../comment.py:54 msgid "comment_title" msgstr "${author_name} zu ${content}" #. Default: "Action" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:85 +#: ../browser/moderation.pt:85 msgid "heading_action" msgstr "Aktion" #. Default: "Comment" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:84 +#: ../browser/moderation.pt:84 msgid "heading_comment" msgstr "Kommentar" #. Default: "Commenter" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:81 +#: ../browser/moderation.pt:81 msgid "heading_commenter" msgstr "Autor" #. Default: "Date" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:82 +#: ../browser/moderation.pt:82 msgid "heading_date" msgstr "Datum" #. Default: "In Response To" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:83 +#: ../browser/moderation.pt:83 msgid "heading_in_reponse_to" msgstr "Kommentar zu" #. Default: "Moderate comments" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:24 +#: ../browser/moderation.pt:24 msgid "heading_moderate_comments" msgstr "Kommentare moderieren" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: plone.app.discussion/plone/app/discussion/interfaces.py:215 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Wenn Sie diese Einstellung aktivieren, können anonyme Benutzer Kommentare abgeben. Es ist empfehlenswert, dann auch Captchas zu aktivieren." #. Default: "If selected, anonymous user will have to give their email." -#: plone.app.discussion/plone/app/discussion/interfaces.py:329 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "Wenn Sie diese Einstellung aktivieren, müssen anonyme Benutzer ihre E-Mail-Adresse angeben." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: plone.app.discussion/plone/app/discussion/interfaces.py:265 +#: ../interfaces.py:266 #, fuzzy msgid "help_captcha" msgstr "Wenn Sie diese Einstellung aktivieren, wird mit Hilfe der Captcha-Validierung überprüft, ob die Kommentare von einem echten Benutzer oder von einem automatisierten Skript stammen. Falls Sie die Option nicht einschalten können, fehlt evtl. ein benötigtes Programmmodul. Stellen Sie sicher, dass entweder plone.formwidget.captcha oder plone.formwidget.recaptcha installiert ist." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:35 +#: ../browser/controlpanel.py:35 #, fuzzy msgid "help_discussion_settings_editform" msgstr "" @@ -239,140 +270,140 @@ msgstr "" "Um die Moderation von Kommentaren zu aktivieren, wählen Sie den Artikeltyp 'Kommentar' aus und wählen Sie als neuen Arbeitsablauf 'Arbeitsablauf für moderierte Kommentare'." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: plone.app.discussion/plone/app/discussion/interfaces.py:201 +#: ../interfaces.py:202 #, fuzzy msgid "help_globally_enabled" msgstr "Wenn Sie diese Einstellung aktivieren, können Artikel generell kommentiert werden." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: plone.app.discussion/plone/app/discussion/interfaces.py:231 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Falls ausgewählt werden Kommentare in einem für die Öffentlichkeit unsichtbaren Schwebezustand gehalten, bis sie ein Benutzer mit der 'Review comments' Berechtigung ('Reviewer' or 'Manager') genehmigt und damit für die Öffentlichkeit sichtbar macht. Wenn Sie einen angepassten Arbeitsablauf für Kommentare einstellen wollen, so geht das mit dem Menu unter Artikeltypen." #. Default: "Address to which moderator notifications will be sent." -#: plone.app.discussion/plone/app/discussion/interfaces.py:306 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "E-Mail Adresse an welche die Moderatoren-Benachrichtigungen gesendet werden." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: plone.app.discussion/plone/app/discussion/interfaces.py:292 +#: ../interfaces.py:293 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Falls ausgewählt erhält der Moderator eine E-Mail, wenn ein Kommentar Aufmerksamkeit braucht. Die E-Mail-Adresse des Moderators kann weiter unten angegeben werden." #. Default: "If selected, an image of the user is shown next to the comment." -#: plone.app.discussion/plone/app/discussion/interfaces.py:281 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Wenn Sie diese Einstellung aktivieren, wird das Porträt des kommentierenden Benutzers neben dem Kommentar angezeigt." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: plone.app.discussion/plone/app/discussion/interfaces.py:248 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "Diese Einstellung wählen, wenn eine Transformation in irgend einer Art und Weise gewünscht ist. Sie können zwischen 'Plain text' und 'Intelligent text' wählen. 'Intelligent text' wandelt Plain Text in HTML um, dabei werden Zeilenumbrüche und Einrückungen beibehalten sowie Weblinks und E-Mail-Adressen in klickbare Links verwandelt." #. Default: "If selected, users can choose to be notified of new comments by email." -#: plone.app.discussion/plone/app/discussion/interfaces.py:318 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Wenn Sie diese Einstellung auswählen, können Benutzer angeben, dass sie über neue Kommentare per E-Mail informiert werden möchten." #. Default: "Anonymous" -#: plone.app.discussion/plone/app/discussion/browser/comments.pt:71 -#: plone.app.discussion/plone/app/discussion/comment.py:176 +#: ../browser/comments.pt:71 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anonymer Benutzer" #. Default: "Enable anonymous comments" -#: plone.app.discussion/plone/app/discussion/interfaces.py:213 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Anonyme Kommentare" #. Default: "Enable anonymous email field" -#: plone.app.discussion/plone/app/discussion/interfaces.py:327 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "E-Mail Feld für anonyme Kommentare einschalten" #. Default: "Apply" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:71 +#: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Anwenden" #. Default: "Captcha" -#: plone.app.discussion/plone/app/discussion/interfaces.py:263 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: plone.app.discussion/plone/app/discussion/interfaces.py:162 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Kommentar" #. Default: "Commenting has been disabled." -#: plone.app.discussion/plone/app/discussion/browser/comments.pt:130 +#: ../browser/comments.pt:130 msgid "label_commenting_disabled" msgstr "Kommentare wurden abgeschaltet." #. Default: "Delete" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:130 +#: ../browser/moderation.pt:130 msgid "label_delete" msgstr "Löschen" #. Default: "Globally enable comments" -#: plone.app.discussion/plone/app/discussion/interfaces.py:199 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Kommentierungsfunktion generell einschalten" #. Default: "Enable comment moderation" -#: plone.app.discussion/plone/app/discussion/interfaces.py:227 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Moderation für Kommentare einschalten" #. Default: "Moderator Email Address" -#: plone.app.discussion/plone/app/discussion/interfaces.py:302 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "E-Mail Adresse des Moderators" #. Default: "Enable moderator email notification" -#: plone.app.discussion/plone/app/discussion/interfaces.py:290 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Email-Benachrichtigungen für Moderatoren aktivieren" #. Default: "Approve" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:121 +#: ../browser/moderation.pt:121 msgid "label_publish" msgstr "Veröffentlichen" #. Default: "says:" -#: plone.app.discussion/plone/app/discussion/browser/comments.pt:74 +#: ../browser/comments.pt:74 msgid "label_says" msgstr "sagt" #. Default: "Show commenter image" -#: plone.app.discussion/plone/app/discussion/interfaces.py:279 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Zeige das Portrait des Kommentators" #. Default: "show full comment text" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:114 +#: ../browser/moderation.pt:114 msgid "label_show_full_comment_text" msgstr "Den vollständigen Kommentar anzeigen" #. Default: "Subject" -#: plone.app.discussion/plone/app/discussion/interfaces.py:157 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Betreff" #. Default: "Comment text transform" -#: plone.app.discussion/plone/app/discussion/interfaces.py:246 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Text transformationen" #. Default: "Enable user email notification" -#: plone.app.discussion/plone/app/discussion/interfaces.py:314 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "E-Mail-Benachrichtigungen für Benutzer aktivieren" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: plone.app.discussion/plone/app/discussion/comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" "Ein Kommentar zu '${title}' wurde hier abgegeben: ${link}\n" @@ -382,7 +413,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: plone.app.discussion/plone/app/discussion/comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" "Ein Kommentar zu '${title}' wurde hier abgegeben: ${link}\n" @@ -398,22 +429,22 @@ msgstr "" "${link_delete}\n" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:33 +#: ../browser/moderation.pt:33 msgid "message_enable_comment_workflow" msgstr "" #. Default: "Moderation workflow is disabled. You have to ${enable_comment_workflow} before you can moderate comments here." -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:33 +#: ../browser/moderation.pt:33 msgid "message_moderation_disabled" msgstr "" #. Default: "No comments to moderate." -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:43 +#: ../browser/moderation.pt:43 msgid "message_nothing_to_moderate" msgstr "Es müssen keine Kommentare moderiert werden." #. Default: "Bulk Actions" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:64 +#: ../browser/moderation.pt:64 msgid "title_bulkactions" msgstr "Sammelbearbeitung" diff --git a/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po index 8d97d19..2bbc42d 100644 --- a/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po @@ -16,11 +16,11 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Is-Fallback-For: es-ar es-bo es-cl es-co es-cr es-do es-ec es-es es-sv es-gt es-hn es-mx es-ni es-pa es-py es-pe es-pr es-us es-uy es-ve\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Comentario añadido." -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Un comentario de ID exclusivo para esta conversación" @@ -28,43 +28,67 @@ msgstr "Un comentario de ID exclusivo para esta conversación" msgid "Add a comment" msgstr "Añadir un comentario" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Comentarios anónimos" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Cancelar" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Cambios guardados" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Comentario aprobado." +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Comentario eliminado." -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Imagen del autor" msgid "Commenting infrastructure for Plone" msgstr "Infraestructura de comentarios para Plone" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Conversación" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Fecha de creación" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -76,39 +100,39 @@ msgstr "Desactivado" msgid "Discussion settings" msgstr "Ajustes de discusión" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Edición cancelada" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "Correo electrónico" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Permitir comentarios" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "ID del comentario este comentario es en respuesta a" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "Tipo MIME" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Notificación al moderador por correo electrónico" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Fecha de modificación" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Nombre" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Recibir avisos por correo cuando haya nuevos comentarios." @@ -116,44 +140,44 @@ msgstr "Recibir avisos por correo cuando haya nuevos comentarios." msgid "Plone Discussions" msgstr "Plone Discussions" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Tipo de objeto" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Guardar" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Listado de usuarios que han comentado (nombres de usuario)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Notificaciones de correo para usuarios" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Su comentario está pendiente de aprobación por el moderador." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Comentar" @@ -188,7 +212,7 @@ msgid "comment_description_plain_text" msgstr "Puede agregar un comentario llenando el sigueinte formulario. Formato de texto plano." #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} sobre ${content}" @@ -224,17 +248,17 @@ msgid "heading_moderate_comments" msgstr "Moderar comentarios" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Si está seleccionado, los usuarios anónimos podrán añadir comentarios sin tener que iniciar una sesión. Recomendamos encarecidamente que utilice una solución Captcha para evitar el spam si esta opción está activada." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Utilice esta opción para activar o desactivar Captcha para los comentarios. Instale plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet o collective.z3cform.norobots si no tiene ninguna opción disponible." @@ -247,53 +271,54 @@ msgstr "" "Para activar el workflow de moderación de comentarios, vaya al Panel de Control de Tipos, elija 'Comentario' y elija el 'Workflow de Moderación de Comentarios'." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Si está seleccionado, se permite que los visitantes hagan comentarios en la web. Sin embargo, tiene que activar los comentarios para cada tipo de objeto específicamente antes de que se puedan añadir los comentarios." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Si está seleccionado, los comentarios entraran en un estado 'Pendiente' en el cual ellos no son visibles para el público. Un usuario con el permiso 'Revisar comentarios' ('Revisor' o 'Administrador') puede aprobar los comentarios y hacerlos visibles al público. Si desea habilitar un workflow de comentarios diferente, puede hacerlo a través de la opción 'Configuración de Tipos' en el panel de control." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "La dirección de correo electrónico a la cual se enviarán las notificaciones de moderación." -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Si está seleccionado, se notifica al moderador cuando un nuevo comentario requiere de su atención. La dirección de correo electrónico del moderador se puede encontrar en la opción 'Configuración de correo' del panel de control (Dirección del remitente del sitio)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Si está seleccionado, se mostrará una imagen del autor junto al comentario." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "Elija si el texto de los comentario será transformado de algún modo. Puede seleccionar entre 'Texto plano' y 'Texto inteligente'. 'Texto inteligente' convierte el texto plano en HTML, conservando los cambios de línea y la indentación, y transformando las direcciones web y de correo electrónico en vínculos." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Si está seleccionado, los usuarios pueden solicitar recibir avisos por correo cuando haya nuevos comentarios." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anónimo" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Permitir comentarios anónimos" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -303,12 +328,12 @@ msgid "label_apply" msgstr "Aplicar" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Comentario" @@ -323,22 +348,22 @@ msgid "label_delete" msgstr "Borrar" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Activar comentarios de forma global" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Habilitar la moderación de comentarios" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Dirección de correo electrónico del moderador" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Activar notificación al moderador" @@ -353,7 +378,7 @@ msgid "label_says" msgstr "dice:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Mostrar imagen del autor" @@ -363,22 +388,22 @@ msgid "label_show_full_comment_text" msgstr "Mostrar texto completo" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Tema" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Transformaciones aplicadas al texto del comentario" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Activar notificación de correo a los usuarios" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" "Se ha agregado un comentario a ${title} aquí: ${link}\n" @@ -388,7 +413,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" "Se ha agregado un comentario a '${title}' aquí: ${link}\n" diff --git a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po index a699fbc..dbf91e7 100644 --- a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po @@ -15,11 +15,11 @@ msgstr "" "Domain: DOMAIN\n" "X-Poedit-Language: Basque\n" -#: ../comment.py:326 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Erantzun bat argitaratu da." -#: ../interfaces.py:143 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Eztabaida honetarako bakarra den erantzunaren id-a." @@ -31,7 +31,7 @@ msgstr "Erantzuna gehitu" msgid "Anonymous Comments" msgstr "Erantzun anonimoak" -#: ../browser/comments.py:258 +#: ../browser/comments.py:274 #: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Utzi" @@ -40,14 +40,34 @@ msgstr "Utzi" msgid "Changes saved" msgstr "Aldaketak gordeta" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Erantzuna onartuta." +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Erantzuna ezabatuta." +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + #: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Erantzuna eman duenaren irudia." @@ -55,15 +75,19 @@ msgstr "Erantzuna eman duenaren irudia." msgid "Commenting infrastructure for Plone" msgstr "Ploneren Erantzunen Azpiegitura" -#: ../interfaces.py:138 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Eztabaida" -#: ../interfaces.py:176 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Sorrera data" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "Azken erantzunaren data" @@ -79,7 +103,7 @@ msgstr "Eztabaidaren ezarpenak" msgid "Edit cancelled" msgstr "Edizioa utzita" -#: ../interfaces.py:155 +#: ../interfaces.py:156 msgid "Email" msgstr "E-posta" @@ -87,11 +111,11 @@ msgstr "E-posta" msgid "Enable Comments" msgstr "Erantzunak aktibatu" -#: ../interfaces.py:146 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Erantzun honek erreferentzia egiten dion erantzunaren id-a" -#: ../interfaces.py:160 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME mota" @@ -99,15 +123,15 @@ msgstr "MIME mota" msgid "Moderator Email Notification" msgstr "Moderatzailea e-postaz abisatu" -#: ../interfaces.py:177 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Aldaketa data" -#: ../interfaces.py:140 +#: ../interfaces.py:141 msgid "Name" msgstr "Izena" -#: ../interfaces.py:169 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Erantzun berriak e-postaz bidali" @@ -115,7 +139,7 @@ msgstr "Erantzun berriak e-postaz bidali" msgid "Plone Discussions" msgstr "Plone Eztabaidak" -#: ../interfaces.py:133 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Elementu mota" @@ -123,19 +147,19 @@ msgstr "Elementu mota" msgid "Save" msgstr "Gorde" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Erantzunak eman dituzten erabiltzaileak (erabiltzaile-izenak)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "Erantzun-emaleen erabiltzaile izenak" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "Elementu honen erantzun publiko kopurua" -#: ../comment.py:158 +#: ../comment.py:164 msgid "Transform '%s' => '%s' not available." msgstr "'%s' => '%s' eraldaketa ez dago erabilgarri." @@ -143,16 +167,16 @@ msgstr "'%s' => '%s' eraldaketa ez dago erabilgarri." msgid "User Email Notification" msgstr "E-posta abisuak" -#: ../interfaces.py:175 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "Erantzuna utzi duenaren erabiltzaile-izena" -#: ../browser/comments.py:251 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Zure erantzuna moderazio kolan dago." #. Default: "Comment" -#: ../browser/comments.py:132 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Eman erantzuna" @@ -187,7 +211,7 @@ msgid "comment_description_plain_text" msgstr "Erantzuna formulario hau betez utzi dezakezu. Formatua testu arruntarena da." #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 msgid "comment_title" msgstr "${content} - ${creator}" @@ -222,7 +246,7 @@ msgid "heading_moderate_comments" msgstr "Erantzunak moderatu" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:215 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Aukeratuta badago, erabiltzaile anonimoek erantzunak gehitu ditzakete login egin gabe. Berariaz gomendatzen dizugu Captcha kontrolen bat aktibatzea anonimoen erantzunak baimentzen badituzu." @@ -232,7 +256,7 @@ msgid "help_anonymous_email_enabled" msgstr "Aukeratuta badago, erabiltzaile anonimoek eposta helbidea idatzi beharko dute" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:265 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Erabili aukera hau Captcha aktibatu edo desaktibatzeko. Instalatu plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet edo collective.z3cform.norobots aukerarik ez baldin badago." @@ -245,12 +269,12 @@ msgstr "" "Erantzunen Moderazio Workflowa aktibatzeko, joan elementu-moten kontrol panelera, aukeratu 'Erantzuna' eta ezarri 'Erantzunen Moderazio Workflowa'." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:201 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Aukeratuta badago, atarian erantzunak gehitu daitezke. Edonola ere, elementu-mota bakoitzarentzat erantzunak baimendu beharko dituzu erabiltzaileak erantzunak ematen hasi aurretik." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:231 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Aukeratuta badago, erantzuna 'Zain' izeneko egoeran geldituko da eta ez da argitaratuko. 'Erantzunak errebisatu' baimena duten erabiltzaileek ('Zuzentzailea' edo 'Kudeatzailea') argitaratu ditzakete albisteak. Erantzunen worfklowa pertsonalizatu nahi baduzu, elementu-moten kontrol panelera joan zaitez." @@ -259,18 +283,19 @@ msgstr "Aukeratuta badago, erantzuna 'Zain' izeneko egoeran geldituko da eta ez msgid "help_moderator_email" msgstr "Moderatzailearen notifikazioak bidali behar diren helbidea." -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:292 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Aukeratuta badago, moderatzaileari e-posta abisua helduko zaio erantzun bat gehitzean. Moderatzailearen e-posta atariaren E-postaren konfigurazioan dago (Atariaren 'Nork' helbidea)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:281 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Aukeratuta badago, erantzuna eman duenaren irudi bat agertuko da testuaren ondoan." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:248 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "Erabili aukera hau erantzunaren testua nolabait eraldatu behar bada. 'Testu arrunta' edo 'Testu argia'ren artean aukeratu dezakezu. 'Testu argia'-k testu arrunta HTML bihurtzen du lerro saltoak eta espazioak mantenduz, eta web helbideak eta e-postak klikagarri eginez." @@ -281,12 +306,12 @@ msgstr "Aukeratuta badago, erabiltzaileek euren erantzunen erantzunak e-postaz j #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:176 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anonimoak" #. Default: "Enable anonymous comments" -#: ../interfaces.py:213 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Aktibatu erabiltzaile anonimoen erantzunak" @@ -301,12 +326,12 @@ msgid "label_apply" msgstr "Aplikatu" #. Default: "Captcha" -#: ../interfaces.py:263 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:162 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Erantzuna" @@ -321,12 +346,12 @@ msgid "label_delete" msgstr "Ezabatu" #. Default: "Globally enable comments" -#: ../interfaces.py:199 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Erantzunak globalki aktibatu" #. Default: "Enable comment moderation" -#: ../interfaces.py:227 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Erantzunen moderazioa aktibatu." @@ -336,7 +361,7 @@ msgid "label_moderator_email" msgstr "Moderatzailearen e-posta helbidea" #. Default: "Enable moderator email notification" -#: ../interfaces.py:290 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Aktibatu moderatzaileari e-postaz abisatzea" @@ -351,7 +376,7 @@ msgid "label_says" msgstr "dio:" #. Default: "Show commenter image" -#: ../interfaces.py:279 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Erantzuna eman duenaren irudia erakutsi" @@ -361,12 +386,12 @@ msgid "label_show_full_comment_text" msgstr "Erakutsi testu osoa" #. Default: "Subject" -#: ../interfaces.py:157 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Gaia" #. Default: "Comment text transform" -#: ../interfaces.py:246 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Erantzunari aplikatu beharreko transformazioa" @@ -376,7 +401,7 @@ msgid "label_user_notification_enabled" msgstr "Aktibatu erabiltzaileek e-postaz jakinaraztea" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" "Erantzuna berria:Izenburua: ${title} \n" @@ -386,7 +411,7 @@ msgstr "" "--" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" "Erantzun berria:\n" diff --git a/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po index 682e50e..a16eff2 100644 --- a/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po @@ -16,11 +16,11 @@ msgstr "" "X-Poedit-Language: Finnish\n" "X-Poedit-Country: FINLAND\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "" -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Tämän keskustelun sisällä uniikki tunniste" @@ -28,43 +28,67 @@ msgstr "Tämän keskustelun sisällä uniikki tunniste" msgid "Add a comment" msgstr "Lisää viesti" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Viestit tunnistamattomilta käyttäjiltä" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Peru" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Viesti hyväksytty." +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Viesti poistettu." -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Kirjoittajan kuva" msgid "Commenting infrastructure for Plone" msgstr "Plone:n kommentointi- ja keskustelutoiminnot" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Keskustelu" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Luotu" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -76,39 +100,39 @@ msgstr "Ei käytössä" msgid "Discussion settings" msgstr "Kommentointi- ja keskustelutoimintojen asetukset" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "Sähköposti" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Salli Kommentointi & Keskustelut" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Sen viestin tunniste johon tämä viesti vastaa" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME-tyyppi" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Ilmoitukset sähköpostitse tarkistajille" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Muutettu" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Nimi" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "" @@ -116,44 +140,44 @@ msgstr "" msgid "Plone Discussions" msgstr "Kommentointi & Keskustelut (Plone Discussions)" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Sisältötyyppi" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Kirjoittajat (käyttäjätunnukset)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Viestisi on vastaanotettu. Se tulee näkyviin heti kun ylläpito on hyväksynyt sen julkaistavaksi." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Lisää" @@ -188,7 +212,7 @@ msgid "comment_description_plain_text" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 msgid "comment_title" msgstr "" @@ -223,17 +247,17 @@ msgid "heading_moderate_comments" msgstr "Viestien esitarkistus" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Jos viestit tunnistamattomilta käyttäjiltä sallitaan, on erittäin suositeltavaa käyttää automaattisten roskapostittimien estintä (engl. captcha)." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 #, fuzzy msgid "help_captcha" msgstr "Roskaviestiautomaattien estimen (engl. captcha) käyttö. Jos mitään estintä ei ole valittavissa, järjestelmään ei ole asennettu mitään estintä. Soveltuvia estimiä ovat plone.formwidget.captcha ('Captcha') ja plone.formwidget.recaptcha ('ReCapthca')." @@ -244,55 +268,55 @@ msgid "help_discussion_settings_editform" msgstr "Tarkista myös keskusteluun / kommentointiin liittyvät asetukset sisältötyyppien hallintapaneelissa ('Sisältötyypit')." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 #, fuzzy msgid "help_globally_enabled" msgstr "Huomaa, että keskustelu/kommentointi pitää myös lisäksi erikseen asettaa päälle halutuille sisältötyypeille ja/tai yksittäisille sisällöille." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "" -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Tarkistajana toimivalle ylläpitäjälle ilmoitetaan toimenpiteitä edellyttävistä viesteistä." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Näytetäänkö kirjoittajan kuva viestin yhteydessä." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Salli viestit tunnistamattomilta käyttäjiltä" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -302,12 +326,12 @@ msgid "label_apply" msgstr "toteuta" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Roskaviestien estin" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Viesti" @@ -322,22 +346,22 @@ msgid "label_delete" msgstr "Poista" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Keskustelu/kommentointitoiminnot käytössä" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Ilmoita viesteistä sähköpostitse ylläpitäjälle" @@ -352,7 +376,7 @@ msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Näytä kirjoittajan kuva" @@ -362,27 +386,27 @@ msgid "label_show_full_comment_text" msgstr "Näytä kokonaan" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Aihe" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po index 23f449b..8723fb3 100644 --- a/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po @@ -14,11 +14,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Un commentaire a été posté." -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Un id de commentaire unique pour cette conversation" @@ -26,43 +26,67 @@ msgstr "Un id de commentaire unique pour cette conversation" msgid "Add a comment" msgstr "Ajouter un commentaire" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Commentaires anonymes" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Annuler" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Modifications enregistrées" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Commentaire approuvé." +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Commentaire supprimé." -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Portrait de l'utilisateur" msgid "Commenting infrastructure for Plone" msgstr "Infrastructure pour déposer des commentaires." -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Conversation" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Date de création" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "Date du dernier commentaire public" @@ -74,39 +98,39 @@ msgstr "Désactivé" msgid "Discussion settings" msgstr "Paramètres des discussions" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Édition annulée" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "Adresse courriel" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Activation des commentaires" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Id du commentaire dont ce commentaire répond" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "Type MIME" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Notification du modérateur par courriel" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Date de modification" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Nom" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "M'avertir des nouveaux commentaires par courriel." @@ -114,44 +138,44 @@ msgstr "M'avertir des nouveaux commentaires par courriel." msgid "Plone Discussions" msgstr "Plone Discussions" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Portal type" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Enregistrer" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "L'ensemble des commentateurs uniques (identifiants)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "L'ensemble des commentateurs uniques des commentaires publiés (identifiants)" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "Nombre total de commentaires publics sur cet élément" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." -msgstr "Transformation '%s' => '%s' indisponible. La transformation du commentaire '%s' a échoué." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." +msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Notification des utilisateurs par courriel" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "Identifiant de l'auteur du commentaire" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Votre commentaire attend d'être modéré." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Commenter" @@ -186,7 +210,7 @@ msgid "comment_description_plain_text" msgstr "Vous pouvez ajouter un commentaire en complétant le formulaire ci-dessous. Le format doit être plain text." #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 msgid "comment_title" msgstr "${author_name} sur ${content}" @@ -221,17 +245,17 @@ msgid "heading_moderate_comments" msgstr "Modération des commentaires" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Si activé, les utilisateurs anonymes peuvent poster des commentaires sans se connecter. Il est fortement recommandé d'utiliser un captcha pour prévenir du spam si cette option est activée." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "Si cette case est cochée, les utilisateurs anonymes devront donner leur email." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Utilisez cette option pour activer la validation par captcha pour les commentaires. Installez plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet ou collective.z3cform.norobots s'il n'y a aucune option de disponible." @@ -243,53 +267,54 @@ msgstr "" "Pour activer les commentaires pour un type de contenu spécifique, allez dans \"Paramètres des types\", choisissez \"Commentaire\" et sélectionnez le workflow \"Workflow de modération des commentaires\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Si vous cochez cette case, les utilisateurs pourront poster des commentaires sur ce site. Vous devez néanmoins activer les commentaires pour des types de contenu spécifiques, dossiers, ou éléments avant que les utilisateurs puissent poster des commentaires." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Si cette case est cochée, les commentaires ajoutés seront mis 'en attente' et seront invisibles pour les visiteurs. Un utilisateur ayant la permission 'Review comments' (Modérateur ou Administrateur) peut approuver les commentaires pour les rendre visibles. Vous pouvez choisir un workflow spécifique pour les commentaires depuis le menu de configuration des types de contenu." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "Addresse à laquelle les notifications de modération seront envoyées." -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Si activé, le modérateur est notifié si un commentaire requiert une attention particulière. Le courriel du modérateur est défini sur la page 'Envoi de courriels' de la configuration du site (Adresse d'expéditeur des courriels)." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Si activé, le portrait de l'utilisateur apparait à côté du commentaire." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "Choisissez si le texte des commentaires doit être éventuellement transformé. Vous pouvez choisir entre 'Plain text' et 'Intelligent text'. Ce dernier convertit le texte en HTML, en préservant notamment les retours chariots et l'indentation, et en transformant les url et les addresses courriel en liens cliquables." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Si vous cochez cette case, les utilisateurs pourront choisir d'être avertis par courriel des nouveaux commentaires." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anonyme" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Activer les commentaires anonymes" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "Activer le champ email pour les anonymes" @@ -299,12 +324,12 @@ msgid "label_apply" msgstr "Appliquer" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Commentaire" @@ -319,22 +344,22 @@ msgid "label_delete" msgstr "Supprimer" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Activer globalement les commentaires" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Activer la modération des commentaires" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Addresse courriel du modérateur" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Activer la notification du modérateur par courriel" @@ -349,7 +374,7 @@ msgid "label_says" msgstr "a écrit :" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Afficher le portrait de l'utilisateur" @@ -359,29 +384,45 @@ msgid "label_show_full_comment_text" msgstr "afficher le texte complet du commentaire" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Sujet" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Transformation du texte du commentaire" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Activer la notification par courriel des utilisateurs" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" -msgstr "Un commentaire a été ajouté sur '${title}' à cette addresse : ${link}\n\n---\n${text}\n---\n" +msgstr "" +"Un commentaire a été ajouté sur '${title}' à cette addresse : ${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" -msgstr "Un commentaire a été ajouté sur '${title}' à cette addresse : ${link}\n\n---\n${text}\n---\n\nApprover le commentaire :\n${link_approve}\n\nSupprimer le commentaire :\n${link_delete}\n" +msgstr "" +"Un commentaire a été ajouté sur '${title}' à cette addresse : ${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" +"\n" +"Approver le commentaire :\n" +"${link_approve}\n" +"\n" +"Supprimer le commentaire :\n" +"${link_delete}\n" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 diff --git a/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po index 8f8a427..8842760 100644 --- a/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po @@ -18,11 +18,11 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Is-Fallback-For: it-it it-ch it-sm it-hr it-si\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Un commento è stato inserito." -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Id univoco del commento per questa conversazione" @@ -30,43 +30,67 @@ msgstr "Id univoco del commento per questa conversazione" msgid "Add a comment" msgstr "Aggiungi un commento" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Commenti Anonimi" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Annulla" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Modifiche salvate" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Commento approvato." +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Commento eliminato." -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Immagine Commentatore" msgid "Commenting infrastructure for Plone" msgstr "Infrastruttura dei commenti per Plone" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Conversazione" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Data di creazione" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -78,39 +102,39 @@ msgstr "Disabilitato" msgid "Discussion settings" msgstr "Impostazioni dei commenti" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Modifiche annullate" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "E-mail" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Abilita commenti" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Id del commento a cui si risponde" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME type" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Notifiche e-mail" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Data di modifica" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Nome" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Notificami nuovi commenti via e-mail" @@ -118,44 +142,44 @@ msgstr "Notificami nuovi commenti via e-mail" msgid "Plone Discussions" msgstr "Supporto ai commenti Plone" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Tipo di contenuto" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Salva" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "L'insieme unico dei commentatori (username)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Notifiche utenti via e-mail" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Il tuo commento è in attesa di approvazione" #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Commenta" @@ -192,7 +216,7 @@ msgid "comment_description_plain_text" msgstr "Puoi aggiungere un commento compilando la form sotto. Utilizza il testo semplice." #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} su ${content}" @@ -228,17 +252,17 @@ msgid "heading_moderate_comments" msgstr "Moderazione commenti" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Se selezionato, gli utenti anonimi saranno in grado di inserire commenti senza autenticazione. E' altamente consigliato l'uso di captcha to prevenire spam se questa impostazione viene abilitata." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Usa questa impostazione per abilitare o disabilitare la validazione tramite captcha. Se nessuna opzione di captcha è disponibile, installa plone.formwidget.captcha o plone.formwidget.recaptcha." @@ -251,53 +275,54 @@ msgstr "" "Per abilitare il workflow per la moderazione dei commenti, vai al Pannello dei Tipi di Contenuto, scegli \"Comment\" e imposta il workflow \"Comment Review Workflow\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Se selezionato, gli utenti saranno in grado di inserire commenti nel sito. Comunque, dovrai abilitare i commenti per specifici tipi di contenuto, cartelle o oggetti prima che gli utenti siano in grado di commentare." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Se selezionato, i commenti verranno creati in stato 'In attesa' in cui sono non sono visibili pubblicamente. Un utento con il permesso 'Revisiona i commenti' ('Revisore' o 'Manager') possono approvare i commenti per renderli pubblici. Se si vuole abilitare un workflow personalizzato per i commenti, bisogna andare nel pannello di controllo dei tipi." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "Indirizzo a cui verranno spedite le notifiche per la moderazione." -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Se selezionato il moderatore riceverà una notifica se il commento dovrà necessita della sua attenzione. L'indirizzo email del moderatore può essere impostato nel pannello di controllo nella sezione 'Posta' (Indirizzo 'mittente' del sito)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Se selezionato, un'immagine dell'utente verrà mostrata a fianco dei commenti." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "Utilizzare questa impostazione per scegliere se il testo del commento deve essere trasformato in qualche modo. E' possibile scegliere tra 'Plain text' e 'Testo intelligente'. 'Testo intelligente' converte il testo in HTML dove le interruzioni di linea e le indentazioni vengono preservate, e gli indirizzi web o email vengono trasformati in collegamenti cliccabili." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Se selezionato, gli utenti possono scegliere di essere notificati ad ogni nuovo commenti via e-mail." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anonimo" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Abilita i commenti agli utenti anonimi" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -307,12 +332,12 @@ msgid "label_apply" msgstr "Applica" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Commento" @@ -327,22 +352,22 @@ msgid "label_delete" msgstr "Elimina" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Abilita globalmente i commenti" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Abilita la moderazione dei commenti" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Indirizzo email del moderatore" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Abilita le notifiche ai moderatori" @@ -357,7 +382,7 @@ msgid "label_says" msgstr ":" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Visualizza le immagini dei commentatori" @@ -367,22 +392,22 @@ msgid "label_show_full_comment_text" msgstr "mostra testo completo del commento" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Oggetto" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Transformazioni testo del commento" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Abilita notifica via e-mail" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" "Un commento a '${title}' è stato inserito qui: ${link}\n" @@ -392,7 +417,7 @@ msgstr "" "---" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" "Un commento su '${title}' è stato aggiunto qui: ${link}\n" diff --git a/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po index a4d4142..3ea2f91 100644 --- a/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po @@ -14,11 +14,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "コメントが投稿されました" -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "このカンバセーションにユニークなコメントID" @@ -26,43 +26,67 @@ msgstr "このカンバセーションにユニークなコメントID" msgid "Add a comment" msgstr "コメントを追加" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "無名コメント" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "取り消す" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "変更が保存されました" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "コメントが承認されました" +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "コメントが削除されました" -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "コメント者の画像" msgid "Commenting infrastructure for Plone" msgstr "Ploneのコメント基盤" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "カンバセーション" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "作成日付" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -74,39 +98,39 @@ msgstr "無効になりました" msgid "Discussion settings" msgstr "議論の設定" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "編集が取り消されました" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "メール" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "コメントを有効にする" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "このコメントが回答する先であるコメントのID" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIMEタイプ" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "モデレータへのメール通知" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "変更日付" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "名前" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "新しいコメントを私にメールで知らせる" @@ -114,44 +138,44 @@ msgstr "新しいコメントを私にメールで知らせる" msgid "Plone Discussions" msgstr "Plone 議論" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "ポータルタイプ" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "保存" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "ユニークなコメント者(ユーザ名)のセット" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "ユーザへのメール通知" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "コメントは司会の承認を待ちます" #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "コメント" @@ -186,7 +210,7 @@ msgid "comment_description_plain_text" msgstr "下のフォームに書き込むことで、コメントを追加することができます。プレーンテキスト形式です。" #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} が ${content} にコメント" @@ -222,17 +246,17 @@ msgid "heading_moderate_comments" msgstr "コメントをモデレートする" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "選ばれると、ログインせずに無名ユーザがコメントを投稿できるようになります。もしこの設定が有効にされるなら、キャプチャを使ってスパムを防ぐ解決策をとることをお勧めします。" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "コメントでのキャプチャ検査を有効にするか無効にするかを設定するのにこれを使います。もし選択できないようになっていたら、 plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet または collective.z3cform.norobots をインストールしてください。" @@ -245,53 +269,54 @@ msgstr "" "コメントに対してモデレーションワークフローを有効にするには、タイプコントロールパネルに行き、「コメント」を選び、ワークフローを「コメント審査ワークフロー」に設定します。" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "選ばれると、このサイトでユーザがコメントを投稿できるようになります。とはいえ、ユーザがコメントを投稿できるようになるためには、さらにコンテンツタイプ、フォルダ、コンテンツオブジェクトに対して、コメントを有効にしなければなりません。" #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "選ばれると、コメントは投稿されると一般公衆からは見えない「保留」状態になります。「コメントを審査(Review comments}」パーミッションを持つユーザ、つまり審査員あるいは管理者がコメントを一般に見えるように承認することができます。カスタムコメントワークフローを有効にしたいなら、タイプコントロールパネルに行く必要があります。" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "モデレータへの通知が送られる送付先アドレス" -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "選ばれると、コメントが注意を要するものであるかどうか、モデレータは通知を受けるようになります。モデレータのメールアドレスはメール設定コントロールパネルの中のサイト「差出人」アドレスです。" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "選ばれると、コメントの隣にユーザの画像が見えるようになります。" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "コメントテキストがなんらかの形で変換されるべきかどうかを選ぶのに、この設定を使います。「プレーンテキスト」と「インテリジェントテキスト」の間で選べるようになります。「インテリジェントテキスト」はプレーンテキストをHTMLに変換します。改行とインデントは温存され、Webアドレスやメールアドレスはクリッカブルリンクになります。" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "選ばれると、新しいコメントをメールによって通知してもらうように、ユーザが選べるようになります。" #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "無名" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "無名コメントを有効にする" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -301,12 +326,12 @@ msgid "label_apply" msgstr "適用" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "キャプチャ" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "コメント" @@ -321,22 +346,22 @@ msgid "label_delete" msgstr "削除" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "サイト全体でコメントを有効にする" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "コメントのモデレーションを有効にする" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "モデレータのメールアドレス" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "モデレータへのメール通知を有効にする" @@ -351,7 +376,7 @@ msgid "label_says" msgstr "曰く:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "コメント者の画像を見せる" @@ -361,28 +386,28 @@ msgid "label_show_full_comment_text" msgstr "コメントテキストをそのまま見せる" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "題目" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "コメントテキスト変換" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "ユーザへのメール通知を有効にする" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 #, fuzzy msgid "mail_notification_message" msgstr "'${title}' へのコメントが、ここに投稿されました: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po index 68dca59..efddc59 100644 --- a/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po @@ -15,11 +15,11 @@ msgstr "" "Domain: plone.app.discussion\n" "Language: nl\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Commentaar is geplaatst" -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Een unieke ID voor dit commentaar" @@ -27,43 +27,67 @@ msgstr "Een unieke ID voor dit commentaar" msgid "Add a comment" msgstr "Voeg opmerking toe" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Anoniem commentaar" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Annuleren" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Wijzigingen opgeslagen" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Commentaar goedgekeurd" +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Commentaar verwijderd" -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Profielfoto commentator" msgid "Commenting infrastructure for Plone" msgstr "Reactie infrastructuur voor Plone" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Conversatie" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Aanmaakdatum" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -75,39 +99,39 @@ msgstr "Uitgeschakeld" msgid "Discussion settings" msgstr "Discussie instellingen" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Bewerken geannulleerd." -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "E-mail" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Commentaar toestaan" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Id van commentaar waarop deze commentaar reageert" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME-type" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "E-mail notificatie voor de redactie" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Wijzigingsdatum" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Naam" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Hou me middels e-mail op de hoogte van nieuwe commentaar." @@ -115,44 +139,44 @@ msgstr "Hou me middels e-mail op de hoogte van nieuwe commentaar." msgid "Plone Discussions" msgstr "Plone Discussies" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "type" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Bewaren" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Lijst van commentatoren (gebruikernamen)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Gebruker E-mail Notificatie" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Je commentaar zal geplaatst worden na goedkeuring." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Commentaar toevoegen" @@ -187,7 +211,7 @@ msgid "comment_description_plain_text" msgstr "U kunt commentaar toevoegen door onderstaand formulier in te vullen. Platte tekst formaat." #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} over ${content}" @@ -223,17 +247,17 @@ msgid "heading_moderate_comments" msgstr "Commentaar modereren" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Indien geselecteerd, anonieme bezoekers kunnen commentaar achterlaten zonder in te loggen. Het is aanbevolen om de captcha-oplossing te gebruiken om spam te voorkomen als deze optie is ingeschakeld." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Indien geselecteerd, Captcha validatie wordt gebruikt voor het commentaar. Installeer plone.formwidget of plone.formwidget.recaptcha als er geen opties beschikbaar zijn." @@ -243,53 +267,54 @@ msgid "help_discussion_settings_editform" msgstr "Sommige discussie instellingen staan niet op deze pagina. Om commentaar in te schakelen voor een specifiek content-type, ga naar het Typen instellingenscherm van het betreffende type en kies 'commentaar toestaan'. Om de moderatie-workflow in te schakelen, ga naar het Typen instellingenscherm en kies het type 'Comment' stel de 'Comment Review Workflow' in." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Indien geselecteerd, gebruikers kunnen commentaar plaatsen op de site. Het kan zijn dat commentaar voor een specifiek content-type ingeschakeld moet worden voordat commentaar mogelijk is." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Indien geselecteerd, de moderator zal ingelicht worden als een commentaar aandacht nodig heeft." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "Emailadres van de moderator naar wie een notificatie zal worden gestuurd." -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Indien geselecteerd, de moderator zal ingelicht worden als een commentaar aandacht nodig heeft." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Indien geselecteerd, de profielfoto van een gebruiker wordt naast het commentaar getoond." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "Gebruik deze instelling om ervoor te kiezen of de commentaar tekst getransformeerd moet worden. U kunt kiezen uit 'Platte tekst' en 'Intelligente tekst'. 'Intelligente tekst' zet platte tekst om in HTML waarbij nieuwe regels en inspringen worden gehandhaaft, en waarbij web en e-mail adressen in klikbare links worden omgezet." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Indien geselecteerd kunnen gebruikers ervoor kiezen per e-mail bericht te ontvangen van nieuwe commentaar." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anoniem" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Anoniem commentariëren inschakelen" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -299,12 +324,12 @@ msgid "label_apply" msgstr "Toepassen" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Commentaar" @@ -319,22 +344,22 @@ msgid "label_delete" msgstr "Verwijderen" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Commentaar globaal toestaan" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Moderatie is ingeschakeld" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Moderator emailadres" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Notificatie voor moderator inschakelen" @@ -349,7 +374,7 @@ msgid "label_says" msgstr "zegt:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Toon portret commentator" @@ -359,27 +384,27 @@ msgid "label_show_full_comment_text" msgstr "Toon het volledige commentaar" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Onderwerp" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Reactie tekst transformatie" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Gebruikers-notificatie ingeschakeld" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "Een commentaar op '${title}' is geplaatst: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "Commentaar op '${title}' is geplaatst: ${link}" diff --git a/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po index 6b94ac8..abdfb45 100644 --- a/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po @@ -14,11 +14,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "" -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "En kommentar-id unik for denne kommentaren" @@ -26,43 +26,67 @@ msgstr "En kommentar-id unik for denne kommentaren" msgid "Add a comment" msgstr "Legg til en kommentar" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Anonym kommentar" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Avbryt" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Kommentaren er godkjent" +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Kommentaren er slettet" -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Forfatterbilde" msgid "Commenting infrastructure for Plone" msgstr "" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Diskusjon" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Dato opprettet" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -74,39 +98,39 @@ msgstr "Slått av" msgid "Discussion settings" msgstr "Innstillinger for kommentarer" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "E-post" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Slå på kommentarer" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Id til kommentar som denne kommentaren er en kommentar til" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME-type" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Varsling av moderator på epost" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Endringsdato" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Navn" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "" @@ -114,44 +138,44 @@ msgstr "" msgid "Plone Discussions" msgstr "" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Portaltype" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Listen over forfattere (brukernavn)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Kommentaren venter på godkjenning av moderator." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Kommentér" @@ -186,7 +210,7 @@ msgid "comment_description_plain_text" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 msgid "comment_title" msgstr "" @@ -221,17 +245,17 @@ msgid "heading_moderate_comments" msgstr "Moderer kommentar" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Dersom innstillingen er valgt kan anonyme brukere kommentere uten å logge inn. Det er anbefalt å bruke en captcha-løsning for å forhindre nettsøppel dersom denne innstillingen er valgt" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 #, fuzzy msgid "help_captcha" msgstr "Bruk denne innstillingen for å aktivere eller deaktivere captcha-validering av kommentarer. Installér plone.formwidget.captcha eller plone.formwidget.recaptcha dersom det mangler valg her." @@ -245,55 +269,55 @@ msgstr "" "For å aktivere arbeidsflyten for moderering, må man gå til kontrollpanelet for innholdstyper og velge \"Kommentarer\" og stille inn arbeidsflyten til å vere \"Comment Review Workflow\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 #, fuzzy msgid "help_globally_enabled" msgstr "Dersom denne instillingen er valgt kan brukerene legge til kommentarer på nettstedet. Men du må likevel aktivere kommentarer for spesifikke innholdstyper, mapper eller innholdsobjekter før brukerene får lov til å legge til kommentarer." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "" -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Dersom innstillingen er valgt vil moderatoren bli varslet når en kommentar er lagt til." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Dersom denne er valgt vil bildet av brukeren vise ved siden av kommentaren." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -303,12 +327,12 @@ msgid "label_apply" msgstr "Bruk" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "" @@ -323,22 +347,22 @@ msgid "label_delete" msgstr "Slett" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Aktiver kommentarer globalt" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Slå på e-postvarsling av moderator" @@ -353,7 +377,7 @@ msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "" @@ -363,27 +387,27 @@ msgid "label_show_full_comment_text" msgstr "Vis hele kommentaren" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/plone.app.discussion.pot b/plone/app/discussion/locales/plone.app.discussion.pot index 7cfeb86..7c14a87 100644 --- a/plone/app/discussion/locales/plone.app.discussion.pot +++ b/plone/app/discussion/locales/plone.app.discussion.pot @@ -1,403 +1,431 @@ -# --- PLEASE EDIT THE LINES BELOW CORRECTLY --- -# SOME DESCRIPTIVE TITLE. -# FIRST AUTHOR , YEAR. msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-03-25 17:54+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"Project-Id-Version: plone.app.discussion\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"PO-Revision-Date: 2010-01-28 15:00+0000\n" +"Last-Translator: Hanno Schlichting \n" +"Language-Team: Hanno Schlichting \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0\n" +"Plural-Forms: nplurals=1; plural=0;\n" "Language-Code: en\n" "Language-Name: English\n" "Preferred-Encodings: utf-8 latin1\n" -"Domain: plone.app.discussion\n" +"Domain: DOMAIN\n" -#: plone.app.discussion/plone/app/discussion/browser/comments.py:95 +#: ../browser/comments.py:95 msgid "" msgstr "" -#: plone.app.discussion/plone/app/discussion/comment.py:326 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:143 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/comments.py:72 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:66 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/comments.py:258 -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:84 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:80 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/moderation.py:139 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/moderation.py:100 +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:67 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:138 +msgid "Commenting infrastructure for Plone" +msgstr "" + +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:176 +#: ../interfaces.py:177 msgid "Creation date" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" -#: plone.app.discussion/plone/app/discussion/vocabularies.py:44 +#: ../vocabularies.py:44 msgid "Disabled" msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:34 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:86 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:155 +#: ../interfaces.py:156 msgid "Email" msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:65 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:146 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:160 +#: ../interfaces.py:161 msgid "MIME type" msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:69 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:177 +#: ../interfaces.py:178 msgid "Modification date" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:140 +#: ../interfaces.py:141 msgid "Name" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:169 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:133 +#: ./plone.app.discussion/plone/app/discussion/configure.zcml +msgid "Plone Discussions" +msgstr "" + +#: ../interfaces.py:134 msgid "Portal type" msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:73 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: plone.app.discussion/plone/app/discussion/comment.py:158 +#: ../comment.py:164 msgid "Transform '%s' => '%s' not available." msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:71 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "" -#: plone.app.discussion/plone/app/discussion/interfaces.py:175 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: plone.app.discussion/plone/app/discussion/browser/comments.py:251 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "" #. Default: "Comment" -#: plone.app.discussion/plone/app/discussion/browser/comments.py:132 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "" #. Default: "Delete" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:68 +#: ../browser/moderation.pt:68 msgid "bulkactions_delete" msgstr "" #. Default: "Approve" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:65 +#: ../browser/moderation.pt:65 msgid "bulkactions_publish" msgstr "" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: plone.app.discussion/plone/app/discussion/browser/comments.py:57 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "" #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." -#: plone.app.discussion/plone/app/discussion/browser/comments.py:51 +#: ../browser/comments.py:51 msgid "comment_description_markdown" msgstr "" #. Default: "Comments are moderated." -#: plone.app.discussion/plone/app/discussion/browser/comments.py:63 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "" #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: plone.app.discussion/plone/app/discussion/browser/comments.py:46 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "" #. Default: "${author_name} on ${content}" -#: plone.app.discussion/plone/app/discussion/comment.py:48 +#: ../comment.py:54 msgid "comment_title" msgstr "" #. Default: "Action" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:85 +#: ../browser/moderation.pt:85 msgid "heading_action" msgstr "" #. Default: "Comment" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:84 +#: ../browser/moderation.pt:84 msgid "heading_comment" msgstr "" #. Default: "Commenter" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:81 +#: ../browser/moderation.pt:81 msgid "heading_commenter" msgstr "" #. Default: "Date" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:82 +#: ../browser/moderation.pt:82 msgid "heading_date" msgstr "" #. Default: "In Response To" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:83 +#: ../browser/moderation.pt:83 msgid "heading_in_reponse_to" msgstr "" #. Default: "Moderate comments" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:24 +#: ../browser/moderation.pt:24 msgid "heading_moderate_comments" msgstr "" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: plone.app.discussion/plone/app/discussion/interfaces.py:215 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "" #. Default: "If selected, anonymous user will have to give their email." -#: plone.app.discussion/plone/app/discussion/interfaces.py:329 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: plone.app.discussion/plone/app/discussion/interfaces.py:265 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "" #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: plone.app.discussion/plone/app/discussion/browser/controlpanel.py:35 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: plone.app.discussion/plone/app/discussion/interfaces.py:201 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "" #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: plone.app.discussion/plone/app/discussion/interfaces.py:231 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: plone.app.discussion/plone/app/discussion/interfaces.py:306 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: plone.app.discussion/plone/app/discussion/interfaces.py:292 +#: ../interfaces.py:293 msgid "help_moderator_notification_enabled" msgstr "" #. Default: "If selected, an image of the user is shown next to the comment." -#: plone.app.discussion/plone/app/discussion/interfaces.py:281 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: plone.app.discussion/plone/app/discussion/interfaces.py:248 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: plone.app.discussion/plone/app/discussion/interfaces.py:318 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: plone.app.discussion/plone/app/discussion/browser/comments.pt:71 -#: plone.app.discussion/plone/app/discussion/comment.py:176 +#: ../browser/comments.pt:71 +#: ../comment.py:182 msgid "label_anonymous" msgstr "" #. Default: "Enable anonymous comments" -#: plone.app.discussion/plone/app/discussion/interfaces.py:213 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "" #. Default: "Enable anonymous email field" -#: plone.app.discussion/plone/app/discussion/interfaces.py:327 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" #. Default: "Apply" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:71 +#: ../browser/moderation.pt:71 msgid "label_apply" msgstr "" #. Default: "Captcha" -#: plone.app.discussion/plone/app/discussion/interfaces.py:263 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "" #. Default: "Comment" -#: plone.app.discussion/plone/app/discussion/interfaces.py:162 +#: ../interfaces.py:163 msgid "label_comment" msgstr "" #. Default: "Commenting has been disabled." -#: plone.app.discussion/plone/app/discussion/browser/comments.pt:130 +#: ../browser/comments.pt:130 msgid "label_commenting_disabled" msgstr "" #. Default: "Delete" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:130 +#: ../browser/moderation.pt:130 msgid "label_delete" msgstr "" #. Default: "Globally enable comments" -#: plone.app.discussion/plone/app/discussion/interfaces.py:199 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "" #. Default: "Enable comment moderation" -#: plone.app.discussion/plone/app/discussion/interfaces.py:227 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: plone.app.discussion/plone/app/discussion/interfaces.py:302 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: plone.app.discussion/plone/app/discussion/interfaces.py:290 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "" #. Default: "Approve" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:121 +#: ../browser/moderation.pt:121 msgid "label_publish" msgstr "" #. Default: "says:" -#: plone.app.discussion/plone/app/discussion/browser/comments.pt:74 +#: ../browser/comments.pt:74 msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: plone.app.discussion/plone/app/discussion/interfaces.py:279 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "" #. Default: "show full comment text" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:114 +#: ../browser/moderation.pt:114 msgid "label_show_full_comment_text" msgstr "" #. Default: "Subject" -#: plone.app.discussion/plone/app/discussion/interfaces.py:157 +#: ../interfaces.py:158 msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: plone.app.discussion/plone/app/discussion/interfaces.py:246 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: plone.app.discussion/plone/app/discussion/interfaces.py:314 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: plone.app.discussion/plone/app/discussion/comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: plone.app.discussion/plone/app/discussion/comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:33 +#: ../browser/moderation.pt:33 msgid "message_enable_comment_workflow" msgstr "" #. Default: "Moderation workflow is disabled. You have to ${enable_comment_workflow} before you can moderate comments here." -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:33 +#: ../browser/moderation.pt:33 msgid "message_moderation_disabled" msgstr "" #. Default: "No comments to moderate." -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:43 +#: ../browser/moderation.pt:43 msgid "message_nothing_to_moderate" msgstr "" #. Default: "Bulk Actions" -#: plone.app.discussion/plone/app/discussion/browser/moderation.pt:64 +#: ../browser/moderation.pt:64 msgid "title_bulkactions" msgstr "" diff --git a/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po index 2e56bed..a0cfd98 100644 --- a/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po @@ -15,103 +15,123 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Poedit-Language: Português\n" -#: ../comment.py:264 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Foi adicionado um comentário." -#: ../interfaces.py:257 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Um id do comentário único para esta conversação." -#: ../browser/comments.py:67 +#: ../browser/comments.py:72 msgid "Add a comment" msgstr "Adicionar comentário" -#: ../browser/controlpanel.py:62 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Comentários Anónimos" -#: ../interfaces.py:282 -msgid "Author name (for display)" -msgstr "Nome do autor (para exibição)" - -#: ../browser/comments.py:248 -#: ../browser/controlpanel.py:80 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Cancelar" -#: ../browser/controlpanel.py:76 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Alterações guardadas" -#: ../browser/moderation.py:133 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Comentário aprovado" -#: ../browser/moderation.py:94 +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + +#: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Comentário excluído." -#: ../browser/controlpanel.py:63 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Imagem do comentador" msgid "Commenting infrastructure for Plone" msgstr "Infraestrutura de comentários para o Plone" -#: ../interfaces.py:252 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Conversação" -#: ../interfaces.py:283 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Data de criação" -#: ../interfaces.py:162 -msgid "Date of the most recent comment" -msgstr "Data do comentário mais recente" +#: ../interfaces.py:41 +msgid "Date of the most recent public comment" +msgstr "" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Desativado" -#: ../browser/controlpanel.py:32 +#: ../browser/controlpanel.py:34 msgid "Discussion settings" msgstr "Configurações da discussão" -#: ../browser/controlpanel.py:82 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Edição cancelada" -#: ../interfaces.py:269 +#: ../interfaces.py:156 msgid "Email" msgstr "Email" -#: ../browser/controlpanel.py:61 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Permitir comentários" -#: ../interfaces.py:260 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "ID do comentário para qual este comentário é resposta" -#: ../interfaces.py:274 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME type" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Notificação de e-mail para o moderador" -#: ../interfaces.py:284 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Data de modificação" -#: ../interfaces.py:254 +#: ../interfaces.py:141 msgid "Name" msgstr "Nome" -#: ../interfaces.py:278 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Notificar-me por email da existência de novos comentários." @@ -119,32 +139,44 @@ msgstr "Notificar-me por email da existência de novos comentários." msgid "Plone Discussions" msgstr "Discussões Plone" -#: ../interfaces.py:247 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Tipo de conteúdo" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Guardar" -#: ../interfaces.py:167 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Lista de utilizadores que fizeram comentários (nome de utilizador)" -#: ../interfaces.py:156 -msgid "Total number of comments on this item" -msgstr "Número total de comentários para este item" +#: ../interfaces.py:51 +msgid "The set of unique commentators (usernames) of published_comments" +msgstr "" -#: ../browser/controlpanel.py:67 +#: ../interfaces.py:35 +msgid "Total number of public comments on this item" +msgstr "" + +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." +msgstr "" + +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Notificar o utilizador por email" -#: ../browser/comments.py:241 +#: ../interfaces.py:176 +msgid "Username of the commenter" +msgstr "" + +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Seu comentário encontra-se pendente e aguarda a aprovação do moderador." #. Default: "Comment" -#: ../browser/comments.py:123 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Comentar" @@ -159,22 +191,28 @@ msgid "bulkactions_publish" msgstr "Publicar" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." -#: ../browser/comments.py:52 +#: ../browser/comments.py:57 msgid "comment_description_intelligent_text" msgstr "Pode adicionar um comentário usando o formulário a seguir. Campo de texto simples. Endereços web e e-mail são transformados em links clicáveis." +#. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." +#: ../browser/comments.py:51 +msgid "comment_description_markdown" +msgstr "" + #. Default: "Comments are moderated." -#: ../browser/comments.py:58 +#: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" msgstr "Os comentários são moderados" #. Default: "You can add a comment by filling out the form below. Plain text formatting." -#: ../browser/comments.py:47 +#: ../browser/comments.py:46 msgid "comment_description_plain_text" msgstr "Pode adicionar um comentário usando o formulário a seguir. Campo de texto simples." -#. Default: "${creator} on ${content}" -#: ../comment.py:46 +#. Default: "${author_name} on ${content}" +#: ../comment.py:54 +#, fuzzy msgid "comment_title" msgstr "${creator} em ${content}" @@ -209,17 +247,22 @@ msgid "heading_moderate_comments" msgstr "Moderar comentários" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:38 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Se selecionado, os utilizadores anonimos poderão adicionar comentários sem estar autenticados. É altamente recomendável a utilização de uma solução de captcha para evitar spam quando esta configuração está activa." +#. Default: "If selected, anonymous user will have to give their email." +#: ../interfaces.py:330 +msgid "help_anonymous_email_enabled" +msgstr "" + #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:82 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Utilize esta opção para ativar ou desativar o Captcha para os comentários. Instale plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet ou collective.z3cform.norobots caso não tenha nenhuma opção disponível." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:33 +#: ../browser/controlpanel.py:35 msgid "help_discussion_settings_editform" msgstr "" "Algumas configurações relacionadas com os comentários não se encontram localizadas no Painel de Controle de Comentários.\n" @@ -227,62 +270,69 @@ msgstr "" "Para ativar o workflow de moderação de comentários, aceda à configuração de Tipos no Painel de Controle, escolha \"Comentário\" e selecione o workflow para \"Workflow de Revisão de Comentários\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:26 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Se selecionado, permite que os visitantes adicionem comentários ao site. Porém, você deve habilitar comentários para cada tipo de conteúdo antes que os usuários possam adicionar comentários." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:50 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Se selecionado, os comentários serão adicionados no estado \"Pendente\", que é invisível ao público. Utilizadores com permissão para 'Moderar Comentários' ('Gestor' ou 'Administrador') podem aprovar os comentários para torná-los visíveis ao público. Caso queira ativar um workflow de comentários personalizado, aceda à Configuração dos Tipos no Painel de Controle." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:118 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "Endereço para o qual as notificações do moderador serão enviadas." -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:107 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Se selecionado, o moderador será avisado quando um comentário precisar de atenção. O endereço de e-mail do moderador pode ser encontrado nas configurações de e-mail no Painel de Controle (campo Endereço de 'Remetente' do site)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:97 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Se selecionado, uma imagem do usuário será exibida próxima ao comentário." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:66 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "Use esta configuração para escolher se o texto do comentário deve ser transformado. Você pode escolher entre 'texto puro' e 'texto inteligente'. 'Texto inteligente' converte texto simples em HTML, onde as quebras de linha e os recuos são preservados, e os endereços web e e-mail são transformados em links clicáveis." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:127 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Se selecionado, permite aos usuários solicitar o notificações por e-mail sempre que hover um novo comentário." #. Default: "Anonymous" -#: ../comment.py:156 +#: ../browser/comments.pt:71 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anónimo" #. Default: "Enable anonymous comments" -#: ../interfaces.py:36 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Permitir comentários anónimos." +#. Default: "Enable anonymous email field" +#: ../interfaces.py:328 +msgid "label_anonymous_email_enabled" +msgstr "" + #. Default: "Apply" #: ../browser/moderation.pt:71 msgid "label_apply" msgstr "Aplicar" #. Default: "Captcha" -#: ../interfaces.py:80 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:275 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Comentário" @@ -297,22 +347,22 @@ msgid "label_delete" msgstr "Excluir" #. Default: "Globally enable comments" -#: ../interfaces.py:24 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Ativar comentários globalmente" #. Default: "Enable comment moderation" -#: ../interfaces.py:48 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Ativar moderação de comentários" #. Default: "Moderator Email Address" -#: ../interfaces.py:117 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Endereço de e-mail do moderador" #. Default: "Enable moderator email notification" -#: ../interfaces.py:105 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Ativar notificação ao moderador" @@ -327,7 +377,7 @@ msgid "label_says" msgstr "disse:" #. Default: "Show commenter image" -#: ../interfaces.py:95 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Exibir imagem do autor" @@ -337,30 +387,41 @@ msgid "label_show_full_comment_text" msgstr "Exibir texto completo" #. Default: "Subject" -#: ../interfaces.py:271 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Assunto" #. Default: "Comment text transform" -#: ../interfaces.py:64 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Transformações aplicadas ao texto do comentário" #. Default: "Enable user email notification" -#: ../interfaces.py:125 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Activar notificação de utilizadores por email" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:50 +#: ../comment.py:58 #, fuzzy msgid "mail_notification_message" msgstr "Um comentário em '${title}' foi adicionado aqui: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:58 +#: ../comment.py:66 msgid "mail_notification_message_moderator" -msgstr "Um comentário sobre '${title}' foi adicionado aqui: ${link}\n\n---\n${text}\n---\n\nAprovar comentário:\n${link_approve}\n\nApagar comentário:\n${link_delete}\n" +msgstr "" +"Um comentário sobre '${title}' foi adicionado aqui: ${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" +"\n" +"Aprovar comentário:\n" +"${link_approve}\n" +"\n" +"Apagar comentário:\n" +"${link_delete}\n" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 @@ -381,3 +442,4 @@ msgstr "Nenhum comentário para moderação." #: ../browser/moderation.pt:64 msgid "title_bulkactions" msgstr "Ações em massa" + diff --git a/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po index 17b5cba..ccbf498 100644 --- a/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po @@ -15,11 +15,11 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Poedit-Language: Português do Brasil\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Comentário adicionado." -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Um comentário com ID exclusivo para esta conversação" @@ -27,43 +27,67 @@ msgstr "Um comentário com ID exclusivo para esta conversação" msgid "Add a comment" msgstr "Adicionar comentário" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Comentários Anônimos" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Cancelar" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Alterações salvas" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Comentário aprovado" +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Comentário excluído." -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Imagedo autor" msgid "Commenting infrastructure for Plone" msgstr "Infraestrutura de comentários para o Plone" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Conversação" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Data de criação" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "Data do comentário, público, mais recente" @@ -75,39 +99,39 @@ msgstr "Desativado" msgid "Discussion settings" msgstr "Configurações da discussão" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Edição cancelada" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "E-mail" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Permitir comentários" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "ID do comentário para qual este comentário é resposta" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME type" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Notificação de e-mail para o moderador" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Data de modificação" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Nome" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Receber avisos por e-mail para novos comentários." @@ -115,44 +139,44 @@ msgstr "Receber avisos por e-mail para novos comentários." msgid "Plone Discussions" msgstr "Plone Discussions" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Tipo de objeto" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Salvar" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Lista de usuários que fizeram comentários (nome de usuário)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "O grupo de comentadoristas (nomes de usuários) com comentários publicados" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "Número total de comentários públicos neste item" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." -msgstr "A transformação '%s' => '%s' não está disponível. Ocorreu uma falha ao transformar o comentário '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." +msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Notificação de e-mail para o usuário" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "Nome de usuário do comentarista" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Seu comentário está pendente e aguarda a aprovação do moderador." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Comentar" @@ -187,7 +211,7 @@ msgid "comment_description_plain_text" msgstr "Você pode adicionar um comentário preenchendo o formulário a seguir. Campo de texto simples." #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} em ${content}" @@ -223,17 +247,17 @@ msgid "heading_moderate_comments" msgstr "Moderar comentários" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Se selecionado, usuários anonimos poderão adicionar comentários sem precisar de usuário e senha. É altamente recomendável a utilização de uma solução de captcha para evitar spam caso esta configuração esteja ativada." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "Caso selecionado, usuários anônimos devem informar um email." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Utilize esta opção para ativar ou desativar o Captcha para os comentários. Instale plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet ou collective.z3cform.norobots caso não tenha nenhuma opção disponível." @@ -246,53 +270,54 @@ msgstr "" "Para ativar o workflow de moderação de comentários, vá até a configuração de Tipos no Painel de Controle, escolha \"Comentário\" e selecione o workflow para \"Workflow de Revisão de Comentários\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Caso selecionado, permite que os visitantes adicionem comentários ao site. Porém, você deve habilitar comentários para cada tipo de conteúdo antes que os usuários possam adicionar comentários." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Caso selecionado, os comentários serão adicionados no estado \"Pendente\", que é invisível ao público. Usuários com permissão para 'Revisar Comentários' ('Revisor' ou 'Administrador') podem aprovar os comentários para torná-los visíveis ao público. Caso queira ativar um workflow de comentários personalizado, você deve ir até a Configuração dos Tipos no Painel de Controle." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "Endereço para o qual as notificações do moderador serão enviadas." -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Se selecionado, o moderador será avisado quando um comentário precisar de atenção. O endereço de e-mail do moderador pode ser encontrado nas configurações de e-mail no Painel de Controle (campo Endereço de 'Remetente' do site)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Se selecionado, uma imagem do usuário será exibida próxima ao comentário." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "Use esta configuração para escolher se o texto do comentário deve ser transformado. Você pode escolher entre 'texto puro' e 'texto inteligente'. 'Texto inteligente' converte texto simples em HTML, onde as quebras de linha e os recuos são preservados, e os endereços web e e-mail são transformados em links clicáveis." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Se selecionado, permite aos usuários solicitar o recebimento de avisos por e-mail sempre que hover um novo comentário." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anônimo" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Permitir comentários anônimos." #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "Habilitar campo de email para usuários anônimos" @@ -302,12 +327,12 @@ msgid "label_apply" msgstr "Aplicar" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Comentário" @@ -322,22 +347,22 @@ msgid "label_delete" msgstr "Excluir" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Ativar comentários globalmente" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Ativar moderação de comentários" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Endereço de e-mail do moderador" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Ativar notificação ao moderador" @@ -352,7 +377,7 @@ msgid "label_says" msgstr "disse:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Exibir imagem do autor" @@ -362,30 +387,40 @@ msgid "label_show_full_comment_text" msgstr "Exibir texto completo" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Assunto" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Transformações aplicadas ao texto do comentário" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Ativar notificação de e-mail para os usuários" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 #, fuzzy msgid "mail_notification_message" msgstr "Um comentário em '${title}' foi adicionado aqui: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" -msgstr "Um comentário no conteúdo '${title}' foi adicionado em: ${link}\n\n---\n${text}\n---\n\Aprove o comentário:\n${link_approve}\n\nRemova o comentário:\n${link_delete}\n" +msgstr "" +"Um comentário no conteúdo '${title}' foi adicionado em: ${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" +"\Aprove o comentário:\n" +"${link_approve}\n" +"\n" +"Remova o comentário:\n" +"${link_delete}\n" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 diff --git a/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po index e5ee778..6adb09d 100644 --- a/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po @@ -15,11 +15,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Un comentariu a fost postat." -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Un id de comentariu unic pentru aceasta conversatie" @@ -27,43 +27,67 @@ msgstr "Un id de comentariu unic pentru aceasta conversatie" msgid "Add a comment" msgstr "Adauga comentariu" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Comentarii de la anonimi" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Anuleaza" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Schimbari salvate" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Comentariul a fost aprobat." +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Comentariul a fost sters." -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Imaginea comentatorului" msgid "Commenting infrastructure for Plone" msgstr "Infrastructura de comentarii pentru Plone" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Conversatie" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Data creerii" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -75,39 +99,39 @@ msgstr "Dezactivat" msgid "Discussion settings" msgstr "Setarile Discutiilor" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Editare anulata" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "Email" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Permite Comentarii" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Id-ul comentariului pentru care acest comentariu raspunde" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "Tip MIME" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Notificare Moderatorului prin Email" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Data modificarii" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Nume" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Anuntama de noi comentarii prin email." @@ -115,44 +139,44 @@ msgstr "Anuntama de noi comentarii prin email." msgid "Plone Discussions" msgstr "Discutii Plone" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Tip obiect" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Salveaza" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Setul comentatorilor unici (nume de utilizator)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Notificarea utilizatorului prin email" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Comentariul tau asteapta sa fie moderat." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Comentariu" @@ -187,7 +211,7 @@ msgid "comment_description_plain_text" msgstr "Poti adauga un comentariu prin completarea formularului de mai jos. Format de text simplu doar." #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} al ${content}" @@ -223,17 +247,17 @@ msgid "heading_moderate_comments" msgstr "Modereaza comentarii" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Daca selectat, utilizatorii anonimi vor putea posta comentarii fara a fi autentificati. Este recomandat a se folosi o solutie captcha pentru a preveni spam-ul daca aceasta setare este activata." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Foloseste aceasta setare pentru a activa sau dezactiva validarea Captcha a comentariilor. Instaleaza plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet sau collective.z3cform.norobots daca nu este nici o optiune disponibila." @@ -246,53 +270,54 @@ msgstr "" "Pentru a alege workflow-ul de moderare pentru comentarii, dute la Panoul de Control pentru Tipuri de obiect, alege \"Comentariu\" si seteaza workflow-ul la \"Workflow de moderare al Comentariilor\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Daca selectat, utilizatorii pot posta comentarii in acest site. Totusi, trebuie sa activezi comentariile pentru tipurile de obiecte in mod specific, fie directoare sau alte tipurile de obiect inainte ca utilizatorii sa poata posta comentarii." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Daca selectat, comentariile vor intra intr-o stare de 'Asteptare' in care ele sunt invizibile publicului. Un utilizator cu permisia 'Modereaza Comentarii' ('Moderator' sau 'Manager') poate aprova comentariile pentru a le face vizibile publicului. Daca doresti sa activezi un workflow de comentariu specific, trebuie sa mergi la panoul de control al obiectelor" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "Adresa de email la care notificarile de moderare vor fi trimise." -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Daca selectat, moderatorul este notificat daca un comentariu are nevoie de atentie. Adresa de email al moderatorului poate fi gasita in panoul de control numit 'Setari mail' (Adresa 'De la' pentru Site)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Daca selectat, o imagine al utilizatorului este afisata langa comentariul sau." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "Foloseste aceasta setare pentru a alege daca textul comentariului ar trebui sa fie transformat intr-un fel. Poti alege intre 'Text simplu' si 'Text inteligent'. 'Text inteligent' transforma textul simplu in HTML unde indentarea si liniile sunt pastrate si adresele de email si web sunt transformate in link-uri." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Daca selectat, utilizatorii pot alege sa fie notificati de noi comentarii prin email." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anonimi" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Permite comentariile anonime" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -302,12 +327,12 @@ msgid "label_apply" msgstr "Aplica" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Comentariu" @@ -322,22 +347,22 @@ msgid "label_delete" msgstr "Sterge" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Activeaza comentariile in mod global" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Activeaza moderarea comentariilor" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Adresa de email al moderatorului de comentarii" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Activeaza notificarea moderatorului de comentarii prin email" @@ -352,7 +377,7 @@ msgid "label_says" msgstr "zice:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Arata imaginea comentatorului" @@ -362,22 +387,22 @@ msgid "label_show_full_comment_text" msgstr "Arata textul intreg al comentariului" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Subiect" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Transformarea textului comentariului" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Activeaza notificarea utilizatorului prin email" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" "Un comentariu pe '${title}' a fost postat aici: ${link}\n" @@ -387,7 +412,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" "Un comentariu pe '${title}' a fost postat aici: ${link}\n" diff --git a/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po index 78d6353..90e4e13 100644 --- a/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po @@ -14,11 +14,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "" -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "" @@ -26,43 +26,67 @@ msgstr "" msgid "Add a comment" msgstr "" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "" +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "" -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "" msgid "Commenting infrastructure for Plone" msgstr "" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -74,39 +98,39 @@ msgstr "" msgid "Discussion settings" msgstr "" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "" @@ -114,44 +138,44 @@ msgstr "" msgid "Plone Discussions" msgstr "" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "" #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "" @@ -186,7 +210,7 @@ msgid "comment_description_plain_text" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 msgid "comment_title" msgstr "" @@ -221,17 +245,17 @@ msgid "heading_moderate_comments" msgstr "" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "" @@ -241,53 +265,53 @@ msgid "help_discussion_settings_editform" msgstr "" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "" #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "" -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 msgid "help_moderator_notification_enabled" msgstr "" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -297,12 +321,12 @@ msgid "label_apply" msgstr "" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "" @@ -317,22 +341,22 @@ msgid "label_delete" msgstr "" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "" @@ -347,7 +371,7 @@ msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "" @@ -357,27 +381,27 @@ msgid "label_show_full_comment_text" msgstr "" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po index 8ecb817..45537e2 100644 --- a/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po @@ -15,12 +15,12 @@ msgstr "" "Domain: DOMAIN\n" "X-Is-Fallback-For: sv-fi sv-se\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "En kommentar har postats." # kommentarstråd? -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "En id unik för denna kommentar" @@ -28,43 +28,67 @@ msgstr "En id unik för denna kommentar" msgid "Add a comment" msgstr "Lägg till en kommentar" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Anonym kommentar" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Avbryt" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Ändringar sparade" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Kommentaren har nu godkänts." +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Kommentaren har nu raderats." -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Porträtt av kommentatorn" msgid "Commenting infrastructure for Plone" msgstr "Infrastruktur för kommentarer i Plone" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Diskussion" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Skapelsedatum" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -76,39 +100,39 @@ msgstr "Inaktiverad" msgid "Discussion settings" msgstr "Inställningar för kommentarer" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Redigering avbruten" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "E-post" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Aktivera kommentarer" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Id för den kommentar som denna kommentar besvarar" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME-type" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Varsling av moderator på epostAvisering till moderatorn med e-post" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Ändringsdatum" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "Namn" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Avisera mig om nya kommentarer med e-post." @@ -116,44 +140,44 @@ msgstr "Avisera mig om nya kommentarer med e-post." msgid "Plone Discussions" msgstr "Plone Discussions" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Portaltyp" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Spara" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Lista över kommentatorer (användarnamn)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Avisering till användare med e-post" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Din kommentar inväntar moderatorns godkännande." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Kommentera" @@ -188,7 +212,7 @@ msgid "comment_description_plain_text" msgstr "Du kan lägga till en kommentar genom att fylla i fälten nedan." #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} om ${content}" @@ -224,17 +248,17 @@ msgid "heading_moderate_comments" msgstr "Moderera kommentarer" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Tillåt anonyma användare att kommentera utan att logga in. För att undvika skräppost, rekommenderas starkt att Captcha-validering aktiveras." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Aktivera captcha-validering av kommentarer. Om listrutan saknar alternativ: installera plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet eller collective.z3cform.norobots." @@ -246,54 +270,55 @@ msgid "help_discussion_settings_editform" msgstr "Vissa inställningar för kommentarer finns inte på denna kontrollpanel. — För att aktivera kommentarer för en viss innehållstyp, välj denna på kontrollpanelen \"Innehållstyper\" och markera rutan \"Tillåt kommentarer \". — För att aktivera ett arbetsflöde för moderation av kommentarer, välj \"Kommentar\" på kontrollpanelen \"Innehållstyper\" och sätt nytt arbetsflöde \"Comment Review Workflow\"." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Ge användarna möjlighet att kommentera innehållsposter. Dessutom måste du aktivera kommentarer för berörda innehållstyper, mappar eller poster." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Nya kommentarer får arbetsflödesstatus \"Pending\", och blir inte publikt tillgängliga förrän de godkänns av en moderator. Moderatorn behöver behörigheten \"Review comments\", rollerna \"Reviewer\" och \"Manager\" har det som standard. — För att ge kommentarer ett anpassat arbetsflöde, använd kontrollpanelen \"Innehållstyper\"." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "E-postadress för aviseringar till moderatorn." # " The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" is FALSE! -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Avisera moderatorn med e-post när en ny kommentar behöver åtgärdas." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Visa ett porträtt av kommentatorn bredvid kommentaren." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "\"Plain text\": Endast radbrytningar bevaras. — \"Intelligent text\": Konvertering till HTML; radbrytningar och indrag bevaras, webbadresser och e-postadresser blir klickbara länkar." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Ge inloggade användare möjlighet att välja att bli aviserade med e-post om nya kommentarer." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Anonym" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Tillåt anonyma kommentarer" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -303,12 +328,12 @@ msgid "label_apply" msgstr "Verkställ" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Kommentar" @@ -323,22 +348,22 @@ msgid "label_delete" msgstr "Radera" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Aktivera kommentarer globalt" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Aktivera moderation för kommentarer" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Moderatorns e-postadress" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Aktivera avisering med e-post till moderatorn" @@ -353,7 +378,7 @@ msgid "label_says" msgstr "säger:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Visa porträtt av kommentatorn" @@ -363,22 +388,22 @@ msgid "label_show_full_comment_text" msgstr "visa hela kommentaren" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Ämne" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Texttransformering för kommentarer" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Aktivera e-post-avisering till användare" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" "En kommentar till '${title}' har postats här: ${link}\n" @@ -388,7 +413,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" "En kommentar till '${title}' har postats här: ${link}\n" diff --git a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po index c9a1694..e1e2425 100644 --- a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po @@ -14,11 +14,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../comment.py:326 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "Коментар додано." -#: ../interfaces.py:143 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "Унікальний ідентифікатор коментаря для цієї розмови" @@ -30,7 +30,7 @@ msgstr "Додати коментар" msgid "Anonymous Comments" msgstr "Анонімне коментування" -#: ../browser/comments.py:258 +#: ../browser/comments.py:274 #: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Скасувати" @@ -39,14 +39,34 @@ msgstr "Скасувати" msgid "Changes saved" msgstr "Зміни збережено" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "Коментар опубліковано." +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "Коментар знищено." +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + #: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Зображення коментатора" @@ -54,15 +74,19 @@ msgstr "Зображення коментатора" msgid "Commenting infrastructure for Plone" msgstr "Інфраструктура коментування в Plone" -#: ../interfaces.py:138 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "Розмова" -#: ../interfaces.py:176 +#: ../interfaces.py:177 msgid "Creation date" msgstr "Дата створення" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "Дата останного публічного коментаря" @@ -78,7 +102,7 @@ msgstr "Налаштуванняя коментування" msgid "Edit cancelled" msgstr "Редагування скасовано" -#: ../interfaces.py:155 +#: ../interfaces.py:156 msgid "Email" msgstr "Електронна адреса" @@ -86,11 +110,11 @@ msgstr "Електронна адреса" msgid "Enable Comments" msgstr "Увімкнути можливість додавати коментарі" -#: ../interfaces.py:146 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "Id коментаря, відповіддю на який - є цей коментар" -#: ../interfaces.py:160 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME-тип" @@ -98,15 +122,15 @@ msgstr "MIME-тип" msgid "Moderator Email Notification" msgstr "Сповіщення модератора електронною поштою" -#: ../interfaces.py:177 +#: ../interfaces.py:178 msgid "Modification date" msgstr "Дата зміни" -#: ../interfaces.py:140 +#: ../interfaces.py:141 msgid "Name" msgstr "Ім'я" -#: ../interfaces.py:169 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "Повідомляти про нові коментарі поштою." @@ -114,7 +138,7 @@ msgstr "Повідомляти про нові коментарі поштою." msgid "Plone Discussions" msgstr "Коментування в Plone" -#: ../interfaces.py:133 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Портал тип" @@ -122,19 +146,19 @@ msgstr "Портал тип" msgid "Save" msgstr "Зберегти" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "Перелік коментаторів (імена користувачів)" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "Перелік коментаторів (імена користувачів) опублікованих коментарів" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "Загальна кількість публічних коментарів для даного елемента" -#: ../comment.py:158 +#: ../comment.py:164 msgid "Transform '%s' => '%s' not available." msgstr "Не доступне перетворення '%s' => '%s'." @@ -142,16 +166,16 @@ msgstr "Не доступне перетворення '%s' => '%s'." msgid "User Email Notification" msgstr "Сповіщення користувача електронною поштою" -#: ../interfaces.py:175 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "Ім'я автора коментаря" -#: ../browser/comments.py:251 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "Ваш коментар очікує затвердження модератором." #. Default: "Comment" -#: ../browser/comments.py:132 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "Коментар" @@ -186,7 +210,7 @@ msgid "comment_description_plain_text" msgstr "Ви можете додати коментар, заповнивши наступну форму. Просте форматування тексту. " #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 msgid "comment_title" msgstr "${author_name} до ${content}" @@ -221,7 +245,7 @@ msgid "heading_moderate_comments" msgstr "Модерування коментарів" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:215 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "Якщо вибрано - то анонімні користувачі зможуть додавати коментарі без входу в систему. Для таких випадків рекомендуєтсья використовувати капчу, щоб запобігти надсиланню спаму." @@ -231,7 +255,7 @@ msgid "help_anonymous_email_enabled" msgstr "Якщо вибрано, анонімний користувач повинен буде вказати свою електронну пошту." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:265 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "Використовуйте цей параметр, щоб увімкнути або вимкнути капчу для коментарів. Для цього спершу встановіть plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet або collective.z3cform.norobots." @@ -244,12 +268,12 @@ msgstr "" "To enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\".\"" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:201 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "Якщо вибрано, користувачі зможуть додавати коментарі на сайт. Але спочатку необхідно увімкнути можливість коментування для певних типів вмісту, тек, об'єктів." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:231 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "Якщо вибрано, коментарі увійде в стан 'В очікуванні', у якому вони невидимі для громадськості. Користувач з правом 'Огляд коментарів' ('Рецензент' або 'Менеджер') може схвалити коментар, щоб зробити їх видимими для громадськості. Якщо ви хочете налаштувати робочий процес коментарів, ви повинні піти в панель керування типів." @@ -258,18 +282,19 @@ msgstr "Якщо вибрано, коментарі увійде в стан 'В msgid "help_moderator_email" msgstr "Адреса, за якою модератору будуть надсилатися повідомлення." -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:292 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Якщо вибрано, модератор отримує повідомлення, якщо коментар вимагає уваги. Адресу електронної пошти модератора можна знайти в 'Пошта' панелі керування (Адреса 'Від')" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:281 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "Якщо вибрано, зображення коментатора буде відображатись поруч з коментарем." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:248 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "Виберіть як повинен бути перетворений текст коментаря. Ви можете вибрати між 'Звичайний текст' і 'Інтелектуальні тексту'. 'Інтелектуальний текст' перетворює текст в HTML, де рядки і відступи зберігаються, інтернет адреси та адреси електронної пошти перетворяться в активні посилання." @@ -280,12 +305,12 @@ msgstr "Якщо вибрано, користувачі зможуть обра #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:176 +#: ../comment.py:182 msgid "label_anonymous" msgstr "Анонім" #. Default: "Enable anonymous comments" -#: ../interfaces.py:213 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "Увімкнути можливість анонімного коментування" @@ -300,12 +325,12 @@ msgid "label_apply" msgstr "Застосувати" #. Default: "Captcha" -#: ../interfaces.py:263 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "Капча" #. Default: "Comment" -#: ../interfaces.py:162 +#: ../interfaces.py:163 msgid "label_comment" msgstr "Коментар" @@ -320,12 +345,12 @@ msgid "label_delete" msgstr "Знищити" #. Default: "Globally enable comments" -#: ../interfaces.py:199 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "Увімкнути коментування для цілого сайту" #. Default: "Enable comment moderation" -#: ../interfaces.py:227 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "Увімкнути модерування коментарів" @@ -335,7 +360,7 @@ msgid "label_moderator_email" msgstr "Електронна адреса модератора" #. Default: "Enable moderator email notification" -#: ../interfaces.py:290 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "Увімкнути сповіщення модератора" @@ -350,7 +375,7 @@ msgid "label_says" msgstr "каже:" #. Default: "Show commenter image" -#: ../interfaces.py:279 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "Показати зображення коментатора" @@ -360,12 +385,12 @@ msgid "label_show_full_comment_text" msgstr "показати повний текст коментаря" #. Default: "Subject" -#: ../interfaces.py:157 +#: ../interfaces.py:158 msgid "label_subject" msgstr "Тема" #. Default: "Comment text transform" -#: ../interfaces.py:246 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "Перетворення тексту коментаря" @@ -375,7 +400,7 @@ msgid "label_user_notification_enabled" msgstr "Увімкнути надcилання нотифікації користувачу через електронну адресу" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" "Коментар до '${title}' було додано тут: ${link}\n" @@ -385,7 +410,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" "Коментар до '${title}' було додано тут: ${link}\n" diff --git a/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po index f692907..efdd404 100644 --- a/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po @@ -16,11 +16,11 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: DOMAIN\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "一个评论已发布。" -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "此对话的评论 ID" @@ -28,43 +28,67 @@ msgstr "此对话的评论 ID" msgid "Add a comment" msgstr "添加​​评论" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "匿名评论" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "取消" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "更改已保存" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "评论已批准。" +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "评论已删除。" -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "评论者头像" msgid "Commenting infrastructure for Plone" msgstr "Plone 的评论功能" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "对话" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "创建日期" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -76,39 +100,39 @@ msgstr "禁用" msgid "Discussion settings" msgstr "评论设置" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "编辑已取消" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "Email" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "启用评论" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "针对回复评论ID" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME 类型" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Email 通知审核者" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "修改日期" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "名称" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "有新的评论,通过 Email 通知我" @@ -116,44 +140,44 @@ msgstr "有新的评论,通过 Email 通知我" msgid "Plone Discussions" msgstr "Plone 评论" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "Portal 类型" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "保存" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "评论者(用户名)的集合" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Email 通知用户" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "您的评论正等待审核者的批准。" #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "发表评论" @@ -188,7 +212,7 @@ msgid "comment_description_plain_text" msgstr "您可以通过填写以下表单发表评论,使用纯文本格式。" #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} 在 ${content}" @@ -224,17 +248,17 @@ msgid "heading_moderate_comments" msgstr "审核评论" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "如果选中,匿名用户可不登录的情况下发布评论。如果启用了此设置,强烈建议使用验证码,以防止垃圾评论。" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "设置启用或禁用评论验证码功能。如果没有任何可选项,可安装plone.formwidget.captcha,plone.formwidget.recaptcha,collective.akismet,或collective.z3cform.norobots。" @@ -247,53 +271,54 @@ msgstr "" "要启用评论审核工作流,请到类型控制面板,选择 \"评论\" 并将工作流设置为 \"评论审核工作流\"。" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "如果选中,用户可在网站上发表评论。不过,为使用户将能够发表评论,您还需要启用特定的内容类型、 文件夹或内容对象的发表评论功能。" #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "如果选中,评论将进入'待审核'状态,它们对用户是看不见的。'具有审核权限的用户('审核者'或'管理者')可以批准评论,使它们对用户可见。如果你要启用定制的评论工作流,你必须到类型控制面板。" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "审核通知发送地址。" -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "如果选中,如评论需要注意,审核者将被通知。审核者的Email地址,可以在'邮件设置'控制面板(网站'发件人'地址)中找到。" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "如果选中,用户的头像显示在评论旁边。" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "使用此设置选择评论文本的转换方式,你可以选择'纯文本'和'智能文本。'智能文本'转换纯文本成HTML格式,其中换行和缩进保留,Web和Email地址都转换为可点击链接。" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "如果选中,用户可以选择通过Email通知新的评论。" #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "匿名" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "启用匿名评论" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -303,12 +328,12 @@ msgid "label_apply" msgstr "应用" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "验证码" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "评论" @@ -323,22 +348,22 @@ msgid "label_delete" msgstr "删除" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "全局启用评论" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "启用评论审核" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "审核者Email地址" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "启用审核者Email通知" @@ -353,7 +378,7 @@ msgid "label_says" msgstr "说:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "显示评论者的头像" @@ -363,22 +388,22 @@ msgid "label_show_full_comment_text" msgstr "显示完整的评论文本" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "标题" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "评论文本转换" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "启用用户Email通知" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" "一条评论 '${title}' 已发布在: ${link}\n" @@ -388,7 +413,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" "一条评论 '${title}' 已发布在: ${link}\n" diff --git a/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po index 4f566ac..e4c12f9 100644 --- a/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po @@ -14,11 +14,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:311 +#: ../comment.py:348 msgid "A comment has been posted." msgstr "留言已張貼。" -#: ../interfaces.py:141 +#: ../interfaces.py:144 msgid "A comment id unique to this conversation" msgstr "留言的識別碼" @@ -26,43 +26,67 @@ msgstr "留言的識別碼" msgid "Add a comment" msgstr "新增留言" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "匿名留言" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:274 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "取消" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "變更已儲存" -#: ../browser/moderation.py:140 +#: ../browser/moderation.py:139 msgid "Comment approved." msgstr "留言已審核" +#: ../contentrules.py:96 +msgid "Comment author email" +msgstr "" + +#: ../contentrules.py:85 +msgid "Comment author full name" +msgstr "" + +#: ../contentrules.py:74 +msgid "Comment author user name" +msgstr "" + #: ../browser/moderation.py:100 msgid "Comment deleted." msgstr "留言已刪除" -#: ../browser/controlpanel.py:65 +#: ../contentrules.py:52 +msgid "Comment id" +msgstr "" + +#: ../contentrules.py:63 +msgid "Comment text" +msgstr "" + +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "留言者圖檔" msgid "Commenting infrastructure for Plone" msgstr "Plone 的留言功能" -#: ../interfaces.py:136 +#: ../contentrules.py:51 +msgid "Comments" +msgstr "" + +#: ../interfaces.py:139 msgid "Conversation" msgstr "討論" -#: ../interfaces.py:167 +#: ../interfaces.py:177 msgid "Creation date" msgstr "建立日期" -#: ../interfaces.py:40 +#: ../interfaces.py:41 msgid "Date of the most recent public comment" msgstr "" @@ -74,39 +98,39 @@ msgstr "已停用" msgid "Discussion settings" msgstr "討論區設定" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "取消編輯" -#: ../interfaces.py:153 +#: ../interfaces.py:156 msgid "Email" msgstr "E-Mail" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "允許留言" -#: ../interfaces.py:144 +#: ../interfaces.py:147 msgid "Id of comment this comment is in reply to" msgstr "留言的識別碼" -#: ../interfaces.py:158 +#: ../interfaces.py:161 msgid "MIME type" msgstr "MIME-Type" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "審核者的電子郵件通知" -#: ../interfaces.py:168 +#: ../interfaces.py:178 msgid "Modification date" msgstr "修改日期" -#: ../interfaces.py:138 +#: ../interfaces.py:141 msgid "Name" msgstr "名稱" -#: ../interfaces.py:162 +#: ../interfaces.py:170 msgid "Notify me of new comments via email." msgstr "寄送電郵通知新留言。" @@ -114,44 +138,44 @@ msgstr "寄送電郵通知新留言。" msgid "Plone Discussions" msgstr "Plone 討論區" -#: ../interfaces.py:131 +#: ../interfaces.py:134 msgid "Portal type" msgstr "網站型別" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "儲存" -#: ../interfaces.py:45 +#: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" msgstr "留言者 (使用者名稱) 的集合" -#: ../interfaces.py:50 +#: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" msgstr "" -#: ../interfaces.py:34 +#: ../interfaces.py:35 msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." +#: ../comment.py:164 +msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "新留言通知使用者" -#: ../interfaces.py:166 +#: ../interfaces.py:176 msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:244 +#: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." msgstr "你的留言等待審核中。" #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:138 msgid "add_comment_button" msgstr "留言" @@ -186,7 +210,7 @@ msgid "comment_description_plain_text" msgstr "填寫下列表單後,就可以新增留言。" #. Default: "${author_name} on ${content}" -#: ../comment.py:48 +#: ../comment.py:54 #, fuzzy msgid "comment_title" msgstr "${creator} 在 ${content} 留言" @@ -222,17 +246,17 @@ msgid "heading_moderate_comments" msgstr "審核留言" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:216 msgid "help_anonymous_comments" msgstr "勾選的話,匿名使用者不必登入系統就能留言。建議使用 captcha 來避免垃圾留言。" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:266 msgid "help_captcha" msgstr "設定留言是否啟用或停用 captcha 功能,如果還沒有這類模組選項的話,可安裝 plone.formwidget.captcha、plone.formwidget.recaptcha、collective.akismet 或 collective.z3cform.norobots。" @@ -245,53 +269,54 @@ msgstr "" "想要指定留言的審核流程,請到型別控制面板,點選「留言」並指定工作流程為「留言審核流程」。" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:202 msgid "help_globally_enabled" msgstr "勾選的話,就啟用使用者的留言功能,不過,仍然要決定哪些內容型別、目錄、項目,能讓使用者留言。" #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "勾選的話,留言會先變成待審狀態,直到通過審核後才會公開,想要客製化管理流程的話,必須到型別設定頁面。" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "審核通知信的寄送地址。" -#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." +#: ../interfaces.py:293 +#, fuzzy msgid "help_moderator_notification_enabled" msgstr "勾選的話,有人留言時就會通知審核者。審核者的寄信地址記錄在郵件設定頁面裡。" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:282 msgid "help_show_commenter_image" msgstr "勾選的話,使用者的圖檔會顯示在留言旁邊。" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:249 msgid "help_text_transform" msgstr "選擇留言的標註格式,選擇「排版文字」的話,會主動保留內容的換行和縮排,也會把網址變成可以點選的連結。" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "勾選的話,使用者可以收到新留言的通知信。" #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:182 msgid "label_anonymous" msgstr "無名氏" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:214 msgid "label_anonymous_comments" msgstr "啟用匿名留言功能" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "" @@ -301,12 +326,12 @@ msgid "label_apply" msgstr "更新" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:264 msgid "label_captcha" msgstr "captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:163 msgid "label_comment" msgstr "留言" @@ -321,22 +346,22 @@ msgid "label_delete" msgstr "刪除" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:200 msgid "label_globally_enabled" msgstr "全域啟用留言功能" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:228 msgid "label_moderation_enabled" msgstr "啟用審核功能" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "審核者電郵地址" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:291 msgid "label_moderator_notification_enabled" msgstr "啟用通知審核者的功能" @@ -351,7 +376,7 @@ msgid "label_says" msgstr "留言:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:280 msgid "label_show_commenter_image" msgstr "顯示留言者圖檔" @@ -361,22 +386,22 @@ msgid "label_show_full_comment_text" msgstr "顯示完整的留言內容" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:158 msgid "label_subject" msgstr "標題" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:247 msgid "label_text_transform" msgstr "留言排版格式" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "啟用通知使用者的功能" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:52 +#: ../comment.py:58 msgid "mail_notification_message" msgstr "" "${title} 有新留言:${link}\n" @@ -386,7 +411,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:60 +#: ../comment.py:66 msgid "mail_notification_message_moderator" msgstr "" "${title} 有新留言:${link}\n" From fa17c51a7bf233fb9760130f378e846bd5ac7998 Mon Sep 17 00:00:00 2001 From: Gaudenz Steinlin Date: Fri, 14 Mar 2014 16:51:57 +0100 Subject: [PATCH 180/254] Replace $.live with $.on This is needed for jQuery >= 1.9 compatibility and is compatible with JQuery >= 1.7 (Plone 4.3 onwards). --- CHANGES.rst | 4 ++++ plone/app/discussion/browser/javascripts/comments.js | 4 ++-- plone/app/discussion/browser/javascripts/controlpanel.js | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 687bbe0..bc28a4d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,6 +10,10 @@ Changelog - Trigger custom events on comment add/remove/reply [avoinea] +- Replace $.live with $.on for jQuery >= 1.9 compatibility. This works on + jQuery >= 1.7 (Plone 4.3 onwards). + [gaudenz] + 2.3.2 (2014-04-05) ------------------ diff --git a/plone/app/discussion/browser/javascripts/comments.js b/plone/app/discussion/browser/javascripts/comments.js index 85f2e96..4da5af5 100644 --- a/plone/app/discussion/browser/javascripts/comments.js +++ b/plone/app/discussion/browser/javascripts/comments.js @@ -143,7 +143,7 @@ /********************************************************************** * Publish a single comment. **********************************************************************/ - $("input[name='form.button.PublishComment']").live('click', function () { + $("input[name='form.button.PublishComment']").on('click', function () { var trigger = this; var form = $(this).parents("form"); var data = $(form).serialize(); @@ -169,7 +169,7 @@ /********************************************************************** * Delete a comment and its answers. **********************************************************************/ - $("input[name='form.button.DeleteComment']").live('click', function () { + $("input[name='form.button.DeleteComment']").on('click', function () { var trigger = this; var form = $(this).parents("form"); var data = $(form).serialize(); diff --git a/plone/app/discussion/browser/javascripts/controlpanel.js b/plone/app/discussion/browser/javascripts/controlpanel.js index ba32492..f821bf9 100644 --- a/plone/app/discussion/browser/javascripts/controlpanel.js +++ b/plone/app/discussion/browser/javascripts/controlpanel.js @@ -100,7 +100,7 @@ $.updateSettings(); // Set #content class and update settings afterwards - $("input,select").live("change", function (e) { + $("input,select").on("change", function (e) { var id = $(this).attr("id"); if (id === "form-widgets-globally_enabled-0") { if ($(this).attr("checked")) { From 6ced9ed0a57c4df9323e60ce70140a82434e2aed Mon Sep 17 00:00:00 2001 From: TsungWei Hu Date: Fri, 2 May 2014 18:30:08 +0800 Subject: [PATCH 181/254] Update Traditional Chinese Translation. --- .../zh_TW/LC_MESSAGES/plone.app.discussion.po | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po index e4c12f9..032bd78 100644 --- a/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" -"PO-Revision-Date: 2012-10-09 20:55+0800\n" +"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"PO-Revision-Date: 2014-05-02 20:55+0800\n" "Last-Translator: TsungWei Hu \n" "Language-Team: Plone I18N \n" "MIME-Version: 1.0\n" @@ -45,15 +45,15 @@ msgstr "留言已審核" #: ../contentrules.py:96 msgid "Comment author email" -msgstr "" +msgstr "留言作者電郵" #: ../contentrules.py:85 msgid "Comment author full name" -msgstr "" +msgstr "留言作者姓名" #: ../contentrules.py:74 msgid "Comment author user name" -msgstr "" +msgstr "留言作者帳號" #: ../browser/moderation.py:100 msgid "Comment deleted." @@ -61,11 +61,11 @@ msgstr "留言已刪除" #: ../contentrules.py:52 msgid "Comment id" -msgstr "" +msgstr "留言識別碼" #: ../contentrules.py:63 msgid "Comment text" -msgstr "" +msgstr "留言內文" #: ../browser/controlpanel.py:67 msgid "Commenter Image" @@ -76,11 +76,11 @@ msgstr "Plone 的留言功能" #: ../contentrules.py:51 msgid "Comments" -msgstr "" +msgstr "留言" #: ../interfaces.py:139 msgid "Conversation" -msgstr "討論" +msgstr "留言功能" #: ../interfaces.py:177 msgid "Creation date" @@ -88,7 +88,7 @@ msgstr "建立日期" #: ../interfaces.py:41 msgid "Date of the most recent public comment" -msgstr "" +msgstr "最新留言的日期" #: ../vocabularies.py:44 msgid "Disabled" @@ -152,15 +152,15 @@ msgstr "留言者 (使用者名稱) 的集合" #: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" -msgstr "" +msgstr "留言的帳號列表" #: ../interfaces.py:35 msgid "Total number of public comments on this item" -msgstr "" +msgstr "留言的數量統計" #: ../comment.py:164 msgid "Transform '%s' => '%s' not available." -msgstr "" +msgstr "轉換 '%s' => '%s' 並不存在" #: ../browser/controlpanel.py:71 msgid "User Email Notification" @@ -168,7 +168,7 @@ msgstr "新留言通知使用者" #: ../interfaces.py:176 msgid "Username of the commenter" -msgstr "" +msgstr "留言者的帳號" #: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." @@ -197,7 +197,7 @@ msgstr "填寫下列表單後,就可以新增留言。網址會被轉換成可 #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." #: ../browser/comments.py:51 msgid "comment_description_markdown" -msgstr "" +msgstr "填寫表單後可以留言,可以套用 Markdown 語法來輸入連結或圖檔。" #. Default: "Comments are moderated." #: ../browser/comments.py:63 @@ -211,9 +211,8 @@ msgstr "填寫下列表單後,就可以新增留言。" #. Default: "${author_name} on ${content}" #: ../comment.py:54 -#, fuzzy msgid "comment_title" -msgstr "${creator} 在 ${content} 留言" +msgstr "${author_name} 在 ${content} 留言" #. Default: "Action" #: ../browser/moderation.pt:85 @@ -253,7 +252,7 @@ msgstr "勾選的話,匿名使用者不必登入系統就能留言。建議使 #. Default: "If selected, anonymous user will have to give their email." #: ../interfaces.py:330 msgid "help_anonymous_email_enabled" -msgstr "" +msgstr "勾選的話,匿名留言者必須填寫電郵信箱。" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." #: ../interfaces.py:266 @@ -285,9 +284,8 @@ msgstr "審核通知信的寄送地址。" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." #: ../interfaces.py:293 -#, fuzzy msgid "help_moderator_notification_enabled" -msgstr "勾選的話,有人留言時就會通知審核者。審核者的寄信地址記錄在郵件設定頁面裡。" +msgstr "勾選的話,有人留言時就會通知審核者。審核者的寄信地址可在下列欄位設定。" #. Default: "If selected, an image of the user is shown next to the comment." #: ../interfaces.py:282 @@ -318,7 +316,7 @@ msgstr "啟用匿名留言功能" #. Default: "Enable anonymous email field" #: ../interfaces.py:328 msgid "label_anonymous_email_enabled" -msgstr "" +msgstr "啟用匿名留言的電郵欄位" #. Default: "Apply" #: ../browser/moderation.pt:71 From f894d47d629205d248849177460f236bac8fccb9 Mon Sep 17 00:00:00 2001 From: tisto Date: Fri, 2 May 2014 13:22:08 +0200 Subject: [PATCH 182/254] Add basic robot test setup and a first test. --- plone/app/discussion/testing.py | 27 +++++++- .../tests/robot/test_discussion.robot | 62 +++++++++++++++++++ plone/app/discussion/tests/test_robot.py | 27 ++++++++ setup.py | 1 + 4 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 plone/app/discussion/tests/robot/test_discussion.robot create mode 100644 plone/app/discussion/tests/test_robot.py diff --git a/plone/app/discussion/testing.py b/plone/app/discussion/testing.py index cf1066c..e7a397d 100644 --- a/plone/app/discussion/testing.py +++ b/plone/app/discussion/testing.py @@ -1,11 +1,17 @@ from Products.CMFCore.utils import getToolByName -from plone.app.testing import PloneSandboxLayer -from plone.app.testing import applyProfile from plone.app.contenttypes.testing import PLONE_APP_CONTENTTYPES_FIXTURE +from plone.app.discussion.interfaces import IDiscussionSettings +from plone.app.robotframework.testing import REMOTE_LIBRARY_ROBOT_TESTING from plone.app.testing import IntegrationTesting from plone.app.testing import FunctionalTesting +from plone.app.testing import PloneSandboxLayer +from plone.app.testing import applyProfile +from plone.testing import z2 +from plone.registry.interfaces import IRegistry + +from zope.component import queryUtility from zope.configuration import xmlconfig try: @@ -72,6 +78,16 @@ class PloneAppDiscussion(PloneSandboxLayer): [], ) + +class PloneAppDiscussionRobot(PloneAppDiscussion): + + def setUpPloneSite(self, portal): + registry = queryUtility(IRegistry) + settings = registry.forInterface(IDiscussionSettings) + settings.globally_enabled = True + + +PLONE_APP_DISCUSSION_ROBOT_FIXTURE = PloneAppDiscussionRobot() PLONE_APP_DISCUSSION_FIXTURE = PloneAppDiscussion() PLONE_APP_DISCUSSION_INTEGRATION_TESTING = IntegrationTesting( bases=(PLONE_APP_DISCUSSION_FIXTURE,), @@ -79,3 +95,10 @@ PLONE_APP_DISCUSSION_INTEGRATION_TESTING = IntegrationTesting( PLONE_APP_DISCUSSION_FUNCTIONAL_TESTING = FunctionalTesting( bases=(PLONE_APP_DISCUSSION_FIXTURE,), name="PloneAppDiscussion:Functional") +PLONE_APP_DISCUSSION_ROBOT_TESTING = FunctionalTesting( + bases=( + PLONE_APP_DISCUSSION_ROBOT_FIXTURE, + REMOTE_LIBRARY_ROBOT_TESTING + ), + name="PloneAppDiscussion:Robot" +) diff --git a/plone/app/discussion/tests/robot/test_discussion.robot b/plone/app/discussion/tests/robot/test_discussion.robot new file mode 100644 index 0000000..f6140e8 --- /dev/null +++ b/plone/app/discussion/tests/robot/test_discussion.robot @@ -0,0 +1,62 @@ +# bin/robot-server plone.app.discussion.testing.PLONE_APP_DISCUSSION_ROBOT_TESTING +# $ bin/robot src/plone.app.discussion/src/plone/app/discussion/tests/robot/test_discussion.robot + +*** Settings *** + +Resource plone/app/robotframework/selenium.robot + +Library Remote ${PLONE_URL}/RobotRemote + +Test Setup Open test browser +Test Teardown Close all browsers + +*** Test Cases *** + +Enable Discussion on Document + Given a logged-in Site Administrator + and a document + When I enable discussion on the document + Then I can see a comment form on the document + +#Post Comment on Document +# Given a logged-in Site Administrator +# and a document with discussion enabled +# When I post a comment +# Then I can see the comment below the document + +#Reply to comment on Document +# Given a logged-in Site Administrator +# and a document with discussion enabled + +#Delete Comment +# Given a logged-in Site Administrator +# and a document with discussion enabled + + +*** Keywords *** + +# Given + +a logged-in Site Administrator + Enable autologin as Site Administrator + +a document + Create content type=Document id=my-document title=My Document + +# When + +I enable discussion on the document + Go To ${PLONE_URL}/my-document/edit + Wait until page contains Settings + Click Link Settings + Wait until element is visible name=form.widgets.IAllowDiscussion.allow_discussion:list + Select From List name=form.widgets.IAllowDiscussion.allow_discussion:list True + Click Button Save + +# Then + +I can see a comment form on the document + Go To ${PLONE_URL}/my-document/view + Wait until page contains My Document + Page should contain Add comment + Page should contain element id=form-widgets-comment-text diff --git a/plone/app/discussion/tests/test_robot.py b/plone/app/discussion/tests/test_robot.py new file mode 100644 index 0000000..3b9eb21 --- /dev/null +++ b/plone/app/discussion/tests/test_robot.py @@ -0,0 +1,27 @@ +from plone.app.discussion.testing import PLONE_APP_DISCUSSION_ROBOT_TESTING +from plone.app.testing import ROBOT_TEST_LEVEL +from plone.testing import layered +import os +import unittest +import robotsuite + + +def test_suite(): + suite = unittest.TestSuite() + current_dir = os.path.abspath(os.path.dirname(__file__)) + robot_dir = os.path.join(current_dir, 'robot') + robot_tests = [ + os.path.join('robot', doc) for doc in + os.listdir(robot_dir) if doc.endswith('.robot') and + doc.startswith('test_') + ] + for robot_test in robot_tests: + robottestsuite = robotsuite.RobotTestSuite(robot_test) + robottestsuite.level = ROBOT_TEST_LEVEL + suite.addTests([ + layered( + robottestsuite, + layer=PLONE_APP_DISCUSSION_ROBOT_TESTING + ), + ]) + return suite diff --git a/setup.py b/setup.py index f3106be..cdf21c7 100644 --- a/setup.py +++ b/setup.py @@ -53,6 +53,7 @@ setup(name='plone.app.discussion', 'test': [ 'plone.app.testing', 'plone.app.contenttypes[test]', + 'plone.app.robotframework[ride,reload,debug]', ] }, entry_points=""" From 22ed06b66d53336f82770724c458f2008211eb61 Mon Sep 17 00:00:00 2001 From: tisto Date: Fri, 2 May 2014 13:42:19 +0200 Subject: [PATCH 183/254] Add second robot test to test adding comments. --- .../tests/robot/test_discussion.robot | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/plone/app/discussion/tests/robot/test_discussion.robot b/plone/app/discussion/tests/robot/test_discussion.robot index f6140e8..a4e56e1 100644 --- a/plone/app/discussion/tests/robot/test_discussion.robot +++ b/plone/app/discussion/tests/robot/test_discussion.robot @@ -1,5 +1,11 @@ -# bin/robot-server plone.app.discussion.testing.PLONE_APP_DISCUSSION_ROBOT_TESTING +# ============================================================================ +# Test basic discussion features (adding, replying, deleting) +# ============================================================================ +# +# $ bin/robot-server plone.app.discussion.testing.PLONE_APP_DISCUSSION_ROBOT_TESTING # $ bin/robot src/plone.app.discussion/src/plone/app/discussion/tests/robot/test_discussion.robot +# +# ============================================================================ *** Settings *** @@ -10,25 +16,26 @@ Library Remote ${PLONE_URL}/RobotRemote Test Setup Open test browser Test Teardown Close all browsers + *** Test Cases *** -Enable Discussion on Document +Enable Discussion on a Document Given a logged-in Site Administrator and a document When I enable discussion on the document Then I can see a comment form on the document -#Post Comment on Document -# Given a logged-in Site Administrator -# and a document with discussion enabled -# When I post a comment -# Then I can see the comment below the document +Add Comment to a Document + Given a logged-in Site Administrator + and a document with discussion enabled + When I add a comment + Then I can see the comment below the document -#Reply to comment on Document +#Reply to a comment on a Document # Given a logged-in Site Administrator # and a document with discussion enabled -#Delete Comment +#Delete Comment from a Document # Given a logged-in Site Administrator # and a document with discussion enabled @@ -43,6 +50,11 @@ a logged-in Site Administrator a document Create content type=Document id=my-document title=My Document +a document with discussion enabled + a document + I enable discussion on the document + + # When I enable discussion on the document @@ -53,6 +65,12 @@ I enable discussion on the document Select From List name=form.widgets.IAllowDiscussion.allow_discussion:list True Click Button Save +I add a comment + Wait until page contains element id=form-widgets-comment-text + Input Text id=form-widgets-comment-text This is a comment + Click Button Comment + + # Then I can see a comment form on the document @@ -60,3 +78,7 @@ I can see a comment form on the document Wait until page contains My Document Page should contain Add comment Page should contain element id=form-widgets-comment-text + +I can see the comment below the document + Go To ${PLONE_URL}/my-document/view + Page should contain This is a comment From 236093402963f9ae25608baff9aeebc781e5aea1 Mon Sep 17 00:00:00 2001 From: TsungWei Hu Date: Wed, 7 May 2014 23:28:48 +0800 Subject: [PATCH 184/254] Update ChangeLog. --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index bc28a4d..12fe219 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -14,6 +14,9 @@ Changelog jQuery >= 1.7 (Plone 4.3 onwards). [gaudenz] +- Update Traditional Chinese translations. + [marr] + 2.3.2 (2014-04-05) ------------------ From fe91d7801e8c21fa344db2cef8ca8784d9703ff0 Mon Sep 17 00:00:00 2001 From: Alin Voinea Date: Mon, 12 May 2014 20:20:18 +0300 Subject: [PATCH 185/254] Add tests for custom events and contentrules events/string substitutions --- .../app/discussion/tests/test_contentrules.py | 151 +++++++++++++++ plone/app/discussion/tests/test_events.py | 179 ++++++++++++++++++ setup.py | 3 + 3 files changed, 333 insertions(+) create mode 100644 plone/app/discussion/tests/test_contentrules.py create mode 100644 plone/app/discussion/tests/test_events.py diff --git a/plone/app/discussion/tests/test_contentrules.py b/plone/app/discussion/tests/test_contentrules.py new file mode 100644 index 0000000..16618e2 --- /dev/null +++ b/plone/app/discussion/tests/test_contentrules.py @@ -0,0 +1,151 @@ +# -*- coding: utf-8 -*- + +import unittest2 as unittest +from Testing import ZopeTestCase as ztc +from zope.component import createObject, getAdapter +from zope.event import notify +from plone.app.testing import TEST_USER_ID, setRoles + +from plone.contentrules.rule.interfaces import IRuleEventType +from plone.stringinterp.interfaces import IStringSubstitution + +from plone.app.discussion.interfaces import IConversation, IReplies +from plone.app.discussion.interfaces import ICommentAddedEvent +from plone.app.discussion.interfaces import ICommentRemovedEvent +from plone.app.discussion.interfaces import IReplyAddedEvent +from plone.app.discussion.interfaces import IReplyRemovedEvent + +from plone.app.discussion.testing import ( + PLONE_APP_DISCUSSION_INTEGRATION_TESTING, +) + +class CommentContentRulesTest(unittest.TestCase): + """ Test custom comments events + """ + layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING + + def setUp(self): + # Setup session manager + ztc.utils.setupCoreSessions(self.layer['app']) + + # Setup sandbox + self.portal = self.layer['portal'] + self.request = self.layer['request'] + + # Setup current user properties + member = self.portal.portal_membership.getMemberById(TEST_USER_ID) + member.setMemberProperties({ + 'fullname': 'X Manager', + 'email': 'xmanager@example.com' + }) + + setRoles(self.portal, TEST_USER_ID, ['Manager']) + name = self.portal.invokeFactory( + id='doc1', + title='Document 1', + type_name='Document') + + self.document = self.portal[name] + + comment = createObject('plone.Comment') + comment.text = "This is a comment" + comment.author_username = "jim" + comment.author_name = "Jim" + comment.author_email = "jim@example.com" + conversation = IConversation(self.document) + conversation.addComment(comment) + + + def testEventTypesMarked(self): + self.assertTrue(IRuleEventType.providedBy(ICommentAddedEvent)) + self.assertTrue(IRuleEventType.providedBy(ICommentRemovedEvent)) + self.assertTrue(IRuleEventType.providedBy(IReplyAddedEvent)) + self.assertTrue(IRuleEventType.providedBy(IReplyRemovedEvent)) + + def testCommentIdStringSubstitution(self): + comment_id = getAdapter(self.document, IStringSubstitution, + name=u"comment_id") + self.assertIsInstance(comment_id(), long) + + def testCommentTextStringSubstitution(self): + comment_text = getAdapter(self.document, IStringSubstitution, + name=u"comment_text") + self.assertEqual(comment_text(), u"This is a comment") + + def testCommentUserIdStringSubstitution(self): + comment_user_id = getAdapter(self.document, IStringSubstitution, + name=u"comment_user_id") + self.assertEqual(comment_user_id(), u"jim") + + def testCommentUserFullNameStringSubstitution(self): + comment_user_fullname = getAdapter(self.document, IStringSubstitution, + name=u"comment_user_fullname") + self.assertEqual(comment_user_fullname(), u"Jim") + + def testCommentUserEmailStringSubstitution(self): + comment_user_email = getAdapter(self.document, IStringSubstitution, + name=u"comment_user_email") + self.assertEqual(comment_user_email(), u"jim@example.com") + + +class ReplyContentRulesTest(unittest.TestCase): + """ Test custom comments events + """ + layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING + + def setUp(self): + # Setup session manager + ztc.utils.setupCoreSessions(self.layer['app']) + + # Setup sandbox + self.portal = self.layer['portal'] + self.request = self.layer['request'] + setRoles(self.portal, TEST_USER_ID, ['Manager']) + name = self.portal.invokeFactory( + id='doc1', + title='Document 1', + type_name='Document') + + self.document = self.portal[name] + conversation = IConversation(self.document) + replies = IReplies(conversation) + + comment = createObject('plone.Comment') + comment.text = 'This is a comment' + new_id = replies.addComment(comment) + comment = self.document.restrictedTraverse( + '++conversation++default/%s' % new_id) + + re_comment = createObject('plone.Comment') + re_comment.text = 'This is a reply' + re_comment.author_username = "julia" + re_comment.author_name = "Juliana" + re_comment.author_email = "julia@example.com" + + replies = IReplies(comment) + new_re_id = replies.addComment(re_comment) + + def testReplyIdStringSubstitution(self): + reply_id = getAdapter(self.document, IStringSubstitution, + name=u"comment_id") + self.assertIsInstance(reply_id(), long) + + def testReplyTextStringSubstitution(self): + reply_text = getAdapter(self.document, IStringSubstitution, + name=u"comment_text") + self.assertEqual(reply_text(), u"This is a reply") + + def testReplyUserIdStringSubstitution(self): + reply_user_id = getAdapter(self.document, IStringSubstitution, + name=u"comment_user_id") + self.assertEqual(reply_user_id(), u"julia") + + def testReplyUserFullNameStringSubstitution(self): + reply_user_fullname = getAdapter(self.document, IStringSubstitution, + name=u"comment_user_fullname") + self.assertEqual(reply_user_fullname(), u"Juliana") + + def testReplyUserEmailStringSubstitution(self): + reply_user_email = getAdapter(self.document, IStringSubstitution, + name=u"comment_user_email") + self.assertEqual(reply_user_email(), u"julia@example.com") diff --git a/plone/app/discussion/tests/test_events.py b/plone/app/discussion/tests/test_events.py new file mode 100644 index 0000000..11ab4c9 --- /dev/null +++ b/plone/app/discussion/tests/test_events.py @@ -0,0 +1,179 @@ +# -*- coding: utf-8 -*- + +import unittest2 as unittest +from zope.component import createObject +from Zope2.App import zcml +import Products.Five +from plone.app.testing import TEST_USER_ID, setRoles +from plone.app.discussion.interfaces import IConversation, IReplies +from plone.app.discussion.testing import ( + PLONE_APP_DISCUSSION_INTEGRATION_TESTING, +) +# +# Fake events registry +# +class EventsRegistry(object): + """ Fake registry to be used while testing discussion events + """ + commentAdded = False + commentRemoved = False + replyAdded = False + replyRemoved = False + +# +# Fake event handlers +# +def comment_added(doc, evt): + EventsRegistry.commentAdded = True + +def comment_removed(doc, evt): + EventsRegistry.commentRemoved = True + +def reply_added(doc, evt): + EventsRegistry.replyAdded = True + +def reply_removed(doc, evt): + EventsRegistry.replyRemoved = True +# +# Tests +# +class CommentEventsTest(unittest.TestCase): + """ Test custom comments events + """ + layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING + + def setUp(self): + + # Setup sandbox + self.portal = self.layer['portal'] + self.request = self.layer['request'] + self.registry = EventsRegistry + + setRoles(self.portal, TEST_USER_ID, ['Manager']) + name = self.portal.invokeFactory( + id='doc1', + title='Document 1', + type_name='Document') + + self.document = self.portal[name] + + # + # Subscribers + # + configure = """ + + + + + + + + """ + zcml.load_config("configure.zcml", Products.Five) + zcml.load_string(configure) + + def test_addEvent(self): + self.assertFalse(self.registry.commentAdded) + comment = createObject('plone.Comment') + conversation = IConversation(self.document) + conversation.addComment(comment) + self.assertTrue(self.registry.commentAdded) + + def test_removedEvent(self): + self.assertFalse(self.registry.commentRemoved) + comment = createObject('plone.Comment') + conversation = IConversation(self.document) + cid = conversation.addComment(comment) + del conversation[cid] + self.assertTrue(self.registry.commentRemoved) + +class RepliesEventsTest(unittest.TestCase): + """ Test custom replies events + """ + layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING + + def setUp(self): + self.portal = self.layer['portal'] + self.request = self.layer['request'] + self.registry = EventsRegistry + + setRoles(self.portal, TEST_USER_ID, ['Manager']) + name = self.portal.invokeFactory( + id='doc1', + title='Document 1', + type_name='Document') + + self.document = self.portal[name] + + # + # Subscribers + # + configure = """ + + + + + + + + """ + zcml.load_config("configure.zcml", Products.Five) + zcml.load_string(configure) + + def test_addEvent(self): + self.assertFalse(self.registry.replyAdded) + + conversation = IConversation(self.document) + replies = IReplies(conversation) + + comment = createObject('plone.Comment') + comment.text = 'Comment text' + new_id = replies.addComment(comment) + comment = self.document.restrictedTraverse( + '++conversation++default/%s' % new_id) + + re_comment = createObject('plone.Comment') + re_comment.text = 'Comment text' + + replies = IReplies(comment) + new_re_id = replies.addComment(re_comment) + + self.assertTrue(self.registry.replyAdded) + + def test_removedEvent(self): + self.assertFalse(self.registry.replyRemoved) + + conversation = IConversation(self.portal.doc1) + replies = IReplies(conversation) + + comment = createObject('plone.Comment') + comment.text = 'Comment text' + new_id = replies.addComment(comment) + comment = self.portal.doc1.restrictedTraverse( + '++conversation++default/%s' % new_id) + + re_comment = createObject('plone.Comment') + re_comment.text = 'Comment text' + replies = IReplies(comment) + new_re_id = replies.addComment(re_comment) + + del replies[new_re_id] + self.assertTrue(self.registry.replyRemoved) diff --git a/setup.py b/setup.py index cdf21c7..a912d59 100644 --- a/setup.py +++ b/setup.py @@ -52,6 +52,9 @@ setup(name='plone.app.discussion', extras_require={ 'test': [ 'plone.app.testing', + 'plone.stringinterp', + 'plone.contentrules', + 'plone.app.contentrules', 'plone.app.contenttypes[test]', 'plone.app.robotframework[ride,reload,debug]', ] From 2b18d5a2e4e65ceddd551697b1ae73713e0ffab4 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Tue, 13 May 2014 07:07:37 +0200 Subject: [PATCH 186/254] Revert "Merge pull request #38 from delib/evilbungle-comment-acquisition" This reverts commit e18598e316e824795e752e7bb1c90ee37dc1cc6f, reversing changes made to fd6ac0788bf3ade982e60ede7ceda26b0c0e598e. This pull request introduces two test failures. See http://jenkins.plone.org/job/plone-5.0-python-2.7/lastCompletedBuild/testReport/ for details. --- plone/app/discussion/conversation.py | 18 +- plone/app/discussion/testing.py | 4 - plone/app/discussion/tests/configure.zcml | 16 -- plone/app/discussion/tests/profile/types.xml | 4 - .../profile/types/sample_content_type.xml | 47 ---- .../discussion/tests/profile/workflows.xml | 4 - .../definition.xml | 75 ------ .../app/discussion/tests/test_acquisition.py | 243 ------------------ 8 files changed, 6 insertions(+), 405 deletions(-) delete mode 100644 plone/app/discussion/tests/configure.zcml delete mode 100644 plone/app/discussion/tests/profile/types.xml delete mode 100644 plone/app/discussion/tests/profile/types/sample_content_type.xml delete mode 100644 plone/app/discussion/tests/profile/workflows.xml delete mode 100644 plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml delete mode 100644 plone/app/discussion/tests/test_acquisition.py diff --git a/plone/app/discussion/conversation.py b/plone/app/discussion/conversation.py index ca22c05..ba27c0f 100644 --- a/plone/app/discussion/conversation.py +++ b/plone/app/discussion/conversation.py @@ -50,14 +50,8 @@ from plone.app.discussion.comment import Comment from AccessControl.SpecialUsers import nobody as user_nobody -from ComputedAttribute import ComputedAttribute - ANNOTATION_KEY = 'plone.app.discussion:conversation' -def computed_attribute_decorator(level=0): - def computed_attribute_wrapper(func): - return ComputedAttribute(func, level) - return computed_attribute_wrapper class Conversation(Traversable, Persistent, Explicit): """A conversation is a container for all comments on a content object. @@ -93,21 +87,21 @@ class Conversation(Traversable, Persistent, Explicit): parent = aq_inner(self.__parent__) return parent.restrictedTraverse('@@conversation_view').enabled() - @computed_attribute_decorator(level=1) + @property def total_comments(self): public_comments = [ - x for x in self.values() + x for x in self._comments.values() if user_nobody.has_permission('View', x) ] return len(public_comments) - @computed_attribute_decorator(level=1) + @property def last_comment_date(self): # self._comments is an Instance of a btree. The keys # are always ordered comment_keys = self._comments.keys() for comment_key in reversed(comment_keys): - comment = self[comment_key] + comment = self._comments[comment_key] if user_nobody.has_permission('View', comment): return comment.creation_date return None @@ -116,10 +110,10 @@ class Conversation(Traversable, Persistent, Explicit): def commentators(self): return self._commentators - @computed_attribute_decorator(level=1) + @property def public_commentators(self): retval = set() - for comment in self.values(): + for comment in self._comments.values(): if not user_nobody.has_permission('View', comment): continue retval.add(comment.author_username) diff --git a/plone/app/discussion/testing.py b/plone/app/discussion/testing.py index e47026f..e7a397d 100644 --- a/plone/app/discussion/testing.py +++ b/plone/app/discussion/testing.py @@ -41,14 +41,10 @@ class PloneAppDiscussion(PloneSandboxLayer): xmlconfig.file('configure.zcml', plone.app.discussion, context=configurationContext) - xmlconfig.file('configure.zcml', - plone.app.discussion.tests, - context=configurationContext) def setUpPloneSite(self, portal): # Install into Plone site using portal_setup applyProfile(portal, 'plone.app.discussion:default') - applyProfile(portal, 'plone.app.discussion.tests:testing') # Creates some users acl_users = getToolByName(portal, 'acl_users') diff --git a/plone/app/discussion/tests/configure.zcml b/plone/app/discussion/tests/configure.zcml deleted file mode 100644 index ee79b95..0000000 --- a/plone/app/discussion/tests/configure.zcml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - diff --git a/plone/app/discussion/tests/profile/types.xml b/plone/app/discussion/tests/profile/types.xml deleted file mode 100644 index 0aec569..0000000 --- a/plone/app/discussion/tests/profile/types.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/plone/app/discussion/tests/profile/types/sample_content_type.xml b/plone/app/discussion/tests/profile/types/sample_content_type.xml deleted file mode 100644 index 7869638..0000000 --- a/plone/app/discussion/tests/profile/types/sample_content_type.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - sample_content_type - Sample Content - document_icon.png - True - True - - - True - - plone.dexterity.content.Item - - cmf.AddPortalContent - - - - - - view - False - - - - - - - - - - - - - - - - - - - diff --git a/plone/app/discussion/tests/profile/workflows.xml b/plone/app/discussion/tests/profile/workflows.xml deleted file mode 100644 index 500f444..0000000 --- a/plone/app/discussion/tests/profile/workflows.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml b/plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml deleted file mode 100644 index 89a9fb2..0000000 --- a/plone/app/discussion/tests/profile/workflows/comment_workflow_acquired_view/definition.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - Access contents information - Change portal events - Modify portal content - View - - Visible to everyone, editable by the owner. - - Anonymous - - - Editor - Manager - Owner - Site Administrator - - - Editor - Manager - Owner - Site Administrator - - - - - - Previous transition - - transition/getId|nothing - - - - - - The ID of the user who performed the previous transition - - user/getId - - - - - - Comment about the last transition - - python:state_change.kwargs.get('comment', '') - - - - - - Provides access to workflow history - - state_change/getHistory - - - Request review - Review portal content - - - - When the previous transition was performed - - state_change/getDateTime - - - - - diff --git a/plone/app/discussion/tests/test_acquisition.py b/plone/app/discussion/tests/test_acquisition.py deleted file mode 100644 index c6a96db..0000000 --- a/plone/app/discussion/tests/test_acquisition.py +++ /dev/null @@ -1,243 +0,0 @@ -# -*- coding: utf-8 -*- -from AccessControl.User import User # before SpecialUsers -from AccessControl.SpecialUsers import nobody as user_nobody -from AccessControl.PermissionRole import rolesForPermissionOn -from Acquisition import aq_chain, aq_base -from plone.app.discussion.testing import \ - PLONE_APP_DISCUSSION_INTEGRATION_TESTING -from plone.app.discussion.interfaces import IConversation -from plone.app.testing import TEST_USER_ID, setRoles -from Products.CMFCore.utils import getToolByName -from zope.component import createObject - -import unittest2 as unittest - - -dexterity_type_name = 'sample_content_type' -dexterity_object_id = 'instance-of-dexterity-type' -archetypes_object_id = 'instance-of-archetypes-type' -one_state_workflow = 'one_state_workflow' -comment_workflow_acquired_view = 'comment_workflow_acquired_view' - -class AcquisitionTest(unittest.TestCase): - """ Define the expected behaviour of wrapped and unwrapped comments. """ - - layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING - - def setUp(self): - self.portal = self.layer['portal'] - self.request = self.layer['request'] - setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.wftool = getToolByName(self.portal, 'portal_workflow') - - # Use customized workflow for comments. - self.wftool.setChainForPortalTypes( - ['Discussion Item'], - (comment_workflow_acquired_view,), - ) - - # Use one_state_workflow for Document and sample_content_type, - # so they're always published. - self.wftool.setChainForPortalTypes( - ['Document', dexterity_type_name], - (one_state_workflow,), - ) - - # Create a dexterity item and add a comment. - self.portal.invokeFactory( - id=dexterity_object_id, - title='Instance Of Dexterity Type', - type_name=dexterity_type_name, - ) - - self.dexterity_object = self.portal.get(dexterity_object_id) - dx_conversation = IConversation(self.dexterity_object) - self.dexterity_conversation = dx_conversation - dx_comment = createObject('plone.Comment') - dx_conversation.addComment(dx_comment) - self.unwrapped_dexterity_comment = dx_comment - self.wrapped_dexterity_comment = dx_conversation[dx_comment.id] - - # Create an Archetypes item and add a comment. - self.portal.invokeFactory( - id=archetypes_object_id, - title='Instance Of Archetypes Type', - type_name='Document', - ) - - self.archetypes_object = self.portal.get(archetypes_object_id) - at_conversation = IConversation(self.archetypes_object) - self.archetypes_conversation = at_conversation - at_comment = createObject('plone.Comment') - at_conversation.addComment(at_comment) - self.unwrapped_archetypes_comment = at_comment - self.wrapped_archetypes_comment = at_conversation[at_comment.id] - - - def test_workflows_installed(self): - """Check that the new comment workflow has been installed properly. - (Just a test to check our test setup.) - """ - workflows = self.wftool.objectIds() - self.assertTrue('comment_workflow_acquired_view' in workflows) - - def test_workflows_applied(self): - """Check that all objects have the workflow that we expect. - (Just a test to check our test setup.)""" - self.assertEqual( - self.wftool.getChainFor(self.archetypes_object), - (one_state_workflow,) - ) - self.assertEqual( - self.wftool.getChainFor(self.dexterity_object), - (one_state_workflow,) - ) - self.assertEqual( - self.wftool.getChainFor(self.unwrapped_archetypes_comment), - (comment_workflow_acquired_view,) - ) - self.assertEqual( - self.wftool.getChainFor(self.unwrapped_dexterity_comment), - (comment_workflow_acquired_view,) - ) - - def test_comment_acquisition_chain(self): - """ Test that the acquisition chains for wrapped and unwrapped - comments are as expected. """ - - # Unwrapped comments rely on __parent__ attributes to determine - # parentage. Frustratingly there is no guarantee that __parent__ - # is always set, so the computed acquisition chain may be short. - # In this case the unwrapped AT and DX objects stored as the - # conversation parents don't have a __parent__, preventing the portal - # from being included in the chain. - self.assertNotIn(self.portal, - aq_chain(self.unwrapped_archetypes_comment)) - self.assertNotIn(self.portal, - aq_chain(self.unwrapped_dexterity_comment)) - - # Wrapped comments however have a complete chain and thus can find the - # portal object reliably. - self.assertIn(self.portal,aq_chain(self.wrapped_archetypes_comment)) - self.assertIn(self.portal,aq_chain(self.wrapped_dexterity_comment)) - - - def test_acquiring_comment_permissions(self): - """ Unwrapped comments should not be able to acquire permissions - controlled by unreachable objects """ - - # We use the "Allow sendto" permission as by default it is - # controlled by the portal, which is unreachable via __parent__ - # attributes on the comments. - permission = "Allow sendto" - - # Unwrapped comments can't find the portal so just return manager - self.assertNotIn("Anonymous", - rolesForPermissionOn(permission, - self.unwrapped_archetypes_comment)) - self.assertNotIn("Anonymous", - rolesForPermissionOn(permission, - self.unwrapped_dexterity_comment)) - - # Wrapped objects can find the portal and correctly return the - # anonymous role. - self.assertIn("Anonymous", - rolesForPermissionOn(permission, - self.wrapped_archetypes_comment)) - self.assertIn("Anonymous", - rolesForPermissionOn(permission, - self.wrapped_dexterity_comment)) - - def test_acquiring_comment_permissions_via_user_nobody(self): - """ The current implementation uses user_nobody.has_permission to - check whether anonymous can view comments. This confirms it also - works. """ - - # Again we want to use a permission that's not managed by any of our - # content objects so it must be acquired from the portal. - permission = "Allow sendto" - - self.assertFalse( - user_nobody.has_permission(permission, - self.unwrapped_archetypes_comment)) - - self.assertFalse( - user_nobody.has_permission(permission, - self.unwrapped_dexterity_comment)) - - self.assertTrue( - user_nobody.has_permission(permission, - self.wrapped_archetypes_comment)) - - self.assertTrue( - user_nobody.has_permission(permission, - self.wrapped_dexterity_comment)) - -class AcquiredPermissionTest(unittest.TestCase): - """ Test methods of a conversation which rely on acquired permissions """ - - layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING - - def setUp(self): - self.portal = self.layer['portal'] - self.request = self.layer['request'] - setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.wftool = getToolByName(self.portal, 'portal_workflow') - - # Disable workflow for comments and content. - self.wftool.setChainForPortalTypes(["Discussion Item"],[]) - self.wftool.setChainForPortalTypes([dexterity_type_name],[]) - - # Create a dexterity item. - self.portal.invokeFactory( - id=dexterity_object_id, - title='Instance Of Dexterity Type', - type_name=dexterity_type_name, - ) - - self.content = self.portal.get(dexterity_object_id) - - # Absolutely make sure that we're replicating the case of an - # incomplete chain correctly. - aq_base(self.content).__parent__ = None - - self.conversation = IConversation(self.content) - - # Add a comment - comment = createObject('plone.Comment') - self.conversation.addComment(comment) - self.comment = comment - - def test_view_permission_is_only_available_on_portal(self): - """ Check that the test setup is correct """ - - content_roles = rolesForPermissionOn("View",aq_base(self.content)) - self.assertNotIn("Anonymous",content_roles) - - comment_roles = rolesForPermissionOn("View",aq_base(self.comment)) - self.assertNotIn("Anonymous",comment_roles) - - # This actually acquires view from the app root, but we don't really - # care, we just need to confirm that something above our content - # object will give us View. - portal_roles = rolesForPermissionOn("View",self.portal) - self.assertIn("Anonymous",portal_roles) - - # The following tests fail when the conversation uses unwrapped comment - # objects to determine whether an anonymous user has the view permission. - - def test_total_comments(self): - self.assertEqual(self.conversation.total_comments,1) - - def test_last_comment_date(self): - self.assertEqual(self.conversation.last_comment_date, - self.comment.creation_date) - - def test_public_commentators(self): - self.assertEqual(self.conversation.public_commentators, - (self.comment.author_username,)) - - - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) From f2d11021a3f8b79f5234bf1918dd3fecb58382f1 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Tue, 4 Feb 2014 11:35:20 +0100 Subject: [PATCH 187/254] rebased branch from master --- CHANGES.rst | 29 +- buildout.cfg | 7 + plone/app/discussion/bbb/__init__.py | 0 plone/app/discussion/bbb/discussiontool.py | 0 plone/app/discussion/bbb/migration.py | 0 plone/app/discussion/bbb/talkback.py | 0 plone/app/discussion/browser/comments.py | 3 + plone/app/discussion/interfaces.py | 40 +- .../da/LC_MESSAGES/plone.app.discussion.po | 28 +- .../eu/LC_MESSAGES/plone.app.discussion.po | 115 +- .../uk/LC_MESSAGES/plone.app.discussion.po | 98 +- plone/app/discussion/patches.py | 9 +- .../profiles/default/componentregistry.xml | 9 - .../discussion/profiles/default/toolset.xml | 5 - plone/app/discussion/subscribers.py | 15 + plone/app/discussion/subscribers.zcml | 4 +- .../discussion/tests/javascripts/README.txt | 41 - .../discussion/tests/javascripts/jquery.js | 154 --- .../tests/javascripts/test_comments.html | 42 - .../tests/javascripts/test_comments.js | 146 --- .../javascripts/test_moderation.html.txt | 40 - .../tests/javascripts/test_moderation.js.txt | 72 -- plone/app/discussion/tests/jsTestDriver.conf | 18 - plone/app/discussion/tests/jsTestDriver.txt | 5 - .../discussion/tests/qunit/QUnitAdapter.js | 85 -- plone/app/discussion/tests/qunit/equiv.js | 185 ---- plone/app/discussion/tests/qunit/qunit.css | 17 - plone/app/discussion/tests/qunit/qunit.js | 997 ------------------ plone/app/discussion/tests/test_catalog.py | 35 +- plone/app/discussion/tests/test_comment.py | 3 - .../discussion/tests/test_comments_viewlet.py | 63 +- .../app/discussion/tests/test_controlpanel.py | 3 - .../app/discussion/tests/test_conversation.py | 19 +- plone/app/discussion/tests/test_indexers.py | 3 - plone/app/discussion/tests/test_migration.py | 328 ------ .../discussion/tests/test_moderation_view.py | 28 - .../discussion/tests/test_notifications.py | 5 - plone/app/discussion/tests/test_tool.py | 56 - plone/app/discussion/tests/test_workflow.py | 5 - 39 files changed, 235 insertions(+), 2477 deletions(-) delete mode 100644 plone/app/discussion/bbb/__init__.py delete mode 100644 plone/app/discussion/bbb/discussiontool.py delete mode 100644 plone/app/discussion/bbb/migration.py delete mode 100644 plone/app/discussion/bbb/talkback.py delete mode 100644 plone/app/discussion/profiles/default/componentregistry.xml delete mode 100644 plone/app/discussion/profiles/default/toolset.xml create mode 100644 plone/app/discussion/subscribers.py delete mode 100644 plone/app/discussion/tests/javascripts/README.txt delete mode 100644 plone/app/discussion/tests/javascripts/jquery.js delete mode 100644 plone/app/discussion/tests/javascripts/test_comments.html delete mode 100644 plone/app/discussion/tests/javascripts/test_comments.js delete mode 100644 plone/app/discussion/tests/javascripts/test_moderation.html.txt delete mode 100644 plone/app/discussion/tests/javascripts/test_moderation.js.txt delete mode 100644 plone/app/discussion/tests/jsTestDriver.conf delete mode 100644 plone/app/discussion/tests/jsTestDriver.txt delete mode 100644 plone/app/discussion/tests/qunit/QUnitAdapter.js delete mode 100644 plone/app/discussion/tests/qunit/equiv.js delete mode 100644 plone/app/discussion/tests/qunit/qunit.css delete mode 100644 plone/app/discussion/tests/qunit/qunit.js delete mode 100644 plone/app/discussion/tests/test_migration.py delete mode 100644 plone/app/discussion/tests/test_tool.py diff --git a/CHANGES.rst b/CHANGES.rst index 17efe2d..9cdfec9 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,20 +4,39 @@ Changelog 2.3.0 (unreleased) ------------------ +- Corrections and additions to the Danish translation + [aputtu] + +- Put defaultUser.png instead of old defaultUser.gif + [bsuttor] + +- Remove bbb directory. bbb was never really implemented. + [timo] + +- Replace deprecated test assert statements. + [timo] + +- Remove portal_discussion tool. + [timo] + +- Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of + PLONE_FIXTURE. + [timo] + +- Fix ownership of comments. [toutpt] + - Provide 'delete own comments' as a configurable option [gyst] - Make comments editable. [pjstevns, gyst] -- Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of the PLONE_FIXTURE. - [timo] - - 2.2.10 (2013-09-24) ------------------- -- Revert "Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of the PLONE_FIXTURE." that has been accidentially introduced into the 2.2.9 release. +- Revert "Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of + the PLONE_FIXTURE." that has been accidentially introduced into the 2.2.9 + release. [timo] diff --git a/buildout.cfg b/buildout.cfg index 0b66ca6..d8d5f93 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -5,6 +5,7 @@ package-extras = [test] parts += mkrelease pocompile + code-analysis [mkrelease] recipe = zc.recipe.egg @@ -14,7 +15,13 @@ eggs = jarn.mkrelease recipe = zc.recipe.egg eggs = zest.pocompile +[code-analysis] +recipe = plone.recipe.codeanalysis +directory = ${buildout:directory}/plone/app/discussion +flake8-max-complexity = 50 + [versions] plone.app.discussion = zope.interface = 4.0.5 +plone.app.portlets = 2.5a1 diff --git a/plone/app/discussion/bbb/__init__.py b/plone/app/discussion/bbb/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/plone/app/discussion/bbb/discussiontool.py b/plone/app/discussion/bbb/discussiontool.py deleted file mode 100644 index e69de29..0000000 diff --git a/plone/app/discussion/bbb/migration.py b/plone/app/discussion/bbb/migration.py deleted file mode 100644 index e69de29..0000000 diff --git a/plone/app/discussion/bbb/talkback.py b/plone/app/discussion/bbb/talkback.py deleted file mode 100644 index e69de29..0000000 diff --git a/plone/app/discussion/browser/comments.py b/plone/app/discussion/browser/comments.py index 7f9b59d..d58dfb7 100644 --- a/plone/app/discussion/browser/comments.py +++ b/plone/app/discussion/browser/comments.py @@ -196,6 +196,7 @@ class CommentForm(extensible.ExtensibleForm, form.Form): # Member member = portal_membership.getAuthenticatedMember() username = member.getUserName() + user = member.getUser() email = member.getProperty('email') fullname = member.getProperty('fullname') if not fullname or fullname == '': @@ -205,6 +206,8 @@ class CommentForm(extensible.ExtensibleForm, form.Form): fullname = unicode(fullname, 'utf-8') if email and isinstance(email, str): email = unicode(email, 'utf-8') + comment.changeOwnership(user, recursive=False) + comment.manage_setLocalRoles(username, ["Owner"]) comment.creator = username comment.author_username = username comment.author_name = fullname diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index 8bf188a..70b9f4b 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -184,38 +184,6 @@ class ICaptcha(Interface): required=False) -class ICommentingTool(Interface): - """A tool that indexes all comments for usage by the management interface. - - This means the management interface can still work even though we don't - index the comments in portal_catalog. - - The default implementation of this interface simply defers to - portal_catalog, but a custom version of the tool can be used to provide - an alternate indexing mechanism. - """ - - def indexObject(comment): - """Indexes a comment - """ - - def reindexObject(comment): - """Reindex a comment - """ - - def unindexObject(comment): - """Removes a comment from the indexes - """ - - def uniqueValuesFor(name): - """Get unique values for FieldIndex name - """ - - def searchResults(REQUEST=None, **kw): - """Perform a search over all indexed comments. - """ - - class IDiscussionSettings(Interface): """Global discussion settings. This describes records stored in the configuration registry and obtainable via plone.registry. @@ -392,3 +360,11 @@ class IDiscussionSettings(Interface): class IDiscussionLayer(Interface): """Request marker installed via browserlayer.xml. """ + + +class ICommentingTool(Interface): + """For backwards-compatibility. + + This can be removed once we no longer support upgrading from versions + of Plone that had a portal_discussion tool. + """ diff --git a/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po index ec13feb..1fba6a5 100644 --- a/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po @@ -16,11 +16,11 @@ msgstr "" #: ../comment.py:311 msgid "A comment has been posted." -msgstr "En kommentar er gem." +msgstr "Der er oprettet en kommentar." #: ../interfaces.py:141 msgid "A comment id unique to this conversation" -msgstr "En kommentar-id som er unik for denne dialog" +msgstr "Et kommentar-id som er unikt for denne dialog" #: ../browser/comments.py:72 msgid "Add a comment" @@ -64,7 +64,7 @@ msgstr "Oprettelses-dato" #: ../interfaces.py:40 msgid "Date of the most recent public comment" -msgstr "" +msgstr "Dato for den seneste, offentlige kommentar" #: ../vocabularies.py:44 msgid "Disabled" @@ -80,7 +80,7 @@ msgstr "Redigering blev afbrudt" #: ../interfaces.py:153 msgid "Email" -msgstr "Email" +msgstr "E-mail" #: ../browser/controlpanel.py:63 msgid "Enable Comments" @@ -88,7 +88,7 @@ msgstr "Slå kommentarer til" #: ../interfaces.py:144 msgid "Id of comment this comment is in reply to" -msgstr "Id'en på den kommentar, denne kommentar er et svar til" +msgstr "Id'et på den kommentar, denne kommentar er et svar til" #: ../interfaces.py:158 msgid "MIME type" @@ -108,7 +108,7 @@ msgstr "Navn" #: ../interfaces.py:162 msgid "Notify me of new comments via email." -msgstr "Send besked om nye kommentarer pr. email." +msgstr "Send besked om nye kommentarer per e-mail." #: ./plone.app.discussion/plone/app/discussion/configure.zcml msgid "Plone Discussions" @@ -116,7 +116,7 @@ msgstr "Plone diskussioner" #: ../interfaces.py:131 msgid "Portal type" -msgstr "Portal type" +msgstr "Portaltype" #: ../browser/controlpanel.py:71 msgid "Save" @@ -128,27 +128,27 @@ msgstr "Liste over kommentatorer (brugernavne)" #: ../interfaces.py:50 msgid "The set of unique commentators (usernames) of published_comments" -msgstr "" +msgstr "Gruppen af unikke kommentatorer (brugernavne) fra published_comments" #: ../interfaces.py:34 msgid "Total number of public comments on this item" -msgstr "" +msgstr "Det samlede antal offentlige kommentarer til dette element" #: ../comment.py:158 msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." -msgstr "" +msgstr "Transformation '%s' => '%s' er ikke muligt. Mislykkedes med at transformere kommentaren '%s'." #: ../browser/controlpanel.py:69 msgid "User Email Notification" -msgstr "Email-notificering af brugere" +msgstr "E-mail-notificering af brugere" #: ../interfaces.py:166 msgid "Username of the commenter" -msgstr "" +msgstr "Kommentatorens brugernavn" #: ../browser/comments.py:244 msgid "Your comment awaits moderator approval." -msgstr "Din kommentar venter på godkendelse." +msgstr "Din kommentar venter på godkendelse." #. Default: "Comment" #: ../browser/comments.py:131 @@ -168,7 +168,7 @@ msgstr "Godkend" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" -msgstr "Du kan tilføje en kommentar ved at udfylde formularen nedenfor. Ren tekst-formattering. Web- og emailadresser bliver automatisk lavet om til klikbare links." +msgstr "Du kan tilføje en kommentar ved at udfylde formularen nedenfor. Ren tekst-formattering. Web- og e-mailadresser bliver automatisk lavet om til klikbare links." #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." #: ../browser/comments.py:51 diff --git a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po index df9ac4a..a699fbc 100644 --- a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" "POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" -"PO-Revision-Date: 2012-02-08 09:14+0100\n" +"PO-Revision-Date: 2013-11-14 09:09+0100\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: eu \n" "MIME-Version: 1.0\n" @@ -15,11 +15,11 @@ msgstr "" "Domain: DOMAIN\n" "X-Poedit-Language: Basque\n" -#: ../comment.py:311 +#: ../comment.py:326 msgid "A comment has been posted." msgstr "Erantzun bat argitaratu da." -#: ../interfaces.py:141 +#: ../interfaces.py:143 msgid "A comment id unique to this conversation" msgstr "Eztabaida honetarako bakarra den erantzunaren id-a." @@ -27,16 +27,16 @@ msgstr "Eztabaida honetarako bakarra den erantzunaren id-a." msgid "Add a comment" msgstr "Erantzuna gehitu" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Erantzun anonimoak" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:258 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Utzi" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Aldaketak gordeta" @@ -48,24 +48,24 @@ msgstr "Erantzuna onartuta." msgid "Comment deleted." msgstr "Erantzuna ezabatuta." -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Erantzuna eman duenaren irudia." msgid "Commenting infrastructure for Plone" msgstr "Ploneren Erantzunen Azpiegitura" -#: ../interfaces.py:136 +#: ../interfaces.py:138 msgid "Conversation" msgstr "Eztabaida" -#: ../interfaces.py:167 +#: ../interfaces.py:176 msgid "Creation date" msgstr "Sorrera data" #: ../interfaces.py:40 msgid "Date of the most recent public comment" -msgstr "" +msgstr "Azken erantzunaren data" #: ../vocabularies.py:44 msgid "Disabled" @@ -75,39 +75,39 @@ msgstr "Desaktibatuta" msgid "Discussion settings" msgstr "Eztabaidaren ezarpenak" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Edizioa utzita" -#: ../interfaces.py:153 +#: ../interfaces.py:155 msgid "Email" msgstr "E-posta" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Erantzunak aktibatu" -#: ../interfaces.py:144 +#: ../interfaces.py:146 msgid "Id of comment this comment is in reply to" msgstr "Erantzun honek erreferentzia egiten dion erantzunaren id-a" -#: ../interfaces.py:158 +#: ../interfaces.py:160 msgid "MIME type" msgstr "MIME mota" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Moderatzailea e-postaz abisatu" -#: ../interfaces.py:168 +#: ../interfaces.py:177 msgid "Modification date" msgstr "Aldaketa data" -#: ../interfaces.py:138 +#: ../interfaces.py:140 msgid "Name" msgstr "Izena" -#: ../interfaces.py:162 +#: ../interfaces.py:169 msgid "Notify me of new comments via email." msgstr "Erantzun berriak e-postaz bidali" @@ -115,11 +115,11 @@ msgstr "Erantzun berriak e-postaz bidali" msgid "Plone Discussions" msgstr "Plone Eztabaidak" -#: ../interfaces.py:131 +#: ../interfaces.py:133 msgid "Portal type" msgstr "Elementu mota" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Gorde" @@ -129,30 +129,30 @@ msgstr "Erantzunak eman dituzten erabiltzaileak (erabiltzaile-izenak)" #: ../interfaces.py:50 msgid "The set of unique commentators (usernames) of published_comments" -msgstr "" +msgstr "Erantzun-emaleen erabiltzaile izenak" #: ../interfaces.py:34 msgid "Total number of public comments on this item" -msgstr "" +msgstr "Elementu honen erantzun publiko kopurua" #: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." -msgstr "" +msgid "Transform '%s' => '%s' not available." +msgstr "'%s' => '%s' eraldaketa ez dago erabilgarri." -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "E-posta abisuak" -#: ../interfaces.py:166 +#: ../interfaces.py:175 msgid "Username of the commenter" -msgstr "" +msgstr "Erantzuna utzi duenaren erabiltzaile-izena" -#: ../browser/comments.py:244 +#: ../browser/comments.py:251 msgid "Your comment awaits moderator approval." msgstr "Zure erantzuna moderazio kolan dago." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:132 msgid "add_comment_button" msgstr "Eman erantzuna" @@ -188,9 +188,8 @@ msgstr "Erantzuna formulario hau betez utzi dezakezu. Formatua testu arruntarena #. Default: "${author_name} on ${content}" #: ../comment.py:48 -#, fuzzy msgid "comment_title" -msgstr "${creator} ${content} buruz" +msgstr "${content} - ${creator}" #. Default: "Action" #: ../browser/moderation.pt:85 @@ -223,17 +222,17 @@ msgid "heading_moderate_comments" msgstr "Erantzunak moderatu" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:215 msgid "help_anonymous_comments" msgstr "Aukeratuta badago, erabiltzaile anonimoek erantzunak gehitu ditzakete login egin gabe. Berariaz gomendatzen dizugu Captcha kontrolen bat aktibatzea anonimoen erantzunak baimentzen badituzu." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" -msgstr "" +msgstr "Aukeratuta badago, erabiltzaile anonimoek eposta helbidea idatzi beharko dute" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:265 msgid "help_captcha" msgstr "Erabili aukera hau Captcha aktibatu edo desaktibatzeko. Instalatu plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet edo collective.z3cform.norobots aukerarik ez baldin badago." @@ -246,55 +245,55 @@ msgstr "" "Erantzunen Moderazio Workflowa aktibatzeko, joan elementu-moten kontrol panelera, aukeratu 'Erantzuna' eta ezarri 'Erantzunen Moderazio Workflowa'." #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:201 msgid "help_globally_enabled" msgstr "Aukeratuta badago, atarian erantzunak gehitu daitezke. Edonola ere, elementu-mota bakoitzarentzat erantzunak baimendu beharko dituzu erabiltzaileak erantzunak ematen hasi aurretik." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:231 msgid "help_moderation_enabled" msgstr "Aukeratuta badago, erantzuna 'Zain' izeneko egoeran geldituko da eta ez da argitaratuko. 'Erantzunak errebisatu' baimena duten erabiltzaileek ('Zuzentzailea' edo 'Kudeatzailea') argitaratu ditzakete albisteak. Erantzunen worfklowa pertsonalizatu nahi baduzu, elementu-moten kontrol panelera joan zaitez." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "Moderatzailearen notifikazioak bidali behar diren helbidea." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#: ../interfaces.py:292 msgid "help_moderator_notification_enabled" msgstr "Aukeratuta badago, moderatzaileari e-posta abisua helduko zaio erantzun bat gehitzean. Moderatzailearen e-posta atariaren E-postaren konfigurazioan dago (Atariaren 'Nork' helbidea)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:281 msgid "help_show_commenter_image" msgstr "Aukeratuta badago, erantzuna eman duenaren irudi bat agertuko da testuaren ondoan." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:248 msgid "help_text_transform" msgstr "Erabili aukera hau erantzunaren testua nolabait eraldatu behar bada. 'Testu arrunta' edo 'Testu argia'ren artean aukeratu dezakezu. 'Testu argia'-k testu arrunta HTML bihurtzen du lerro saltoak eta espazioak mantenduz, eta web helbideak eta e-postak klikagarri eginez." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Aukeratuta badago, erabiltzaileek euren erantzunen erantzunak e-postaz jasotzea aktibatu dezakete." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:176 msgid "label_anonymous" msgstr "Anonimoak" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:213 msgid "label_anonymous_comments" msgstr "Aktibatu erabiltzaile anonimoen erantzunak" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" -msgstr "" +msgstr "Aktibatu anonimoentzat eposta eremua" #. Default: "Apply" #: ../browser/moderation.pt:71 @@ -302,12 +301,12 @@ msgid "label_apply" msgstr "Aplikatu" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:263 msgid "label_captcha" msgstr "Captcha" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:162 msgid "label_comment" msgstr "Erantzuna" @@ -322,22 +321,22 @@ msgid "label_delete" msgstr "Ezabatu" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:199 msgid "label_globally_enabled" msgstr "Erantzunak globalki aktibatu" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:227 msgid "label_moderation_enabled" msgstr "Erantzunen moderazioa aktibatu." #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Moderatzailearen e-posta helbidea" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:290 msgid "label_moderator_notification_enabled" msgstr "Aktibatu moderatzaileari e-postaz abisatzea" @@ -352,7 +351,7 @@ msgid "label_says" msgstr "dio:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:279 msgid "label_show_commenter_image" msgstr "Erantzuna eman duenaren irudia erakutsi" @@ -362,17 +361,17 @@ msgid "label_show_full_comment_text" msgstr "Erakutsi testu osoa" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:157 msgid "label_subject" msgstr "Gaia" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:246 msgid "label_text_transform" msgstr "Erantzunari aplikatu beharreko transformazioa" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Aktibatu erabiltzaileek e-postaz jakinaraztea" diff --git a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po index 615f639..c9a1694 100644 --- a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po @@ -14,11 +14,11 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../comment.py:311 +#: ../comment.py:326 msgid "A comment has been posted." msgstr "Коментар додано." -#: ../interfaces.py:141 +#: ../interfaces.py:143 msgid "A comment id unique to this conversation" msgstr "Унікальний ідентифікатор коментаря для цієї розмови" @@ -26,16 +26,16 @@ msgstr "Унікальний ідентифікатор коментаря дл msgid "Add a comment" msgstr "Додати коментар" -#: ../browser/controlpanel.py:64 +#: ../browser/controlpanel.py:66 msgid "Anonymous Comments" msgstr "Анонімне коментування" -#: ../browser/comments.py:251 -#: ../browser/controlpanel.py:82 +#: ../browser/comments.py:258 +#: ../browser/controlpanel.py:84 msgid "Cancel" msgstr "Скасувати" -#: ../browser/controlpanel.py:78 +#: ../browser/controlpanel.py:80 msgid "Changes saved" msgstr "Зміни збережено" @@ -47,18 +47,18 @@ msgstr "Коментар опубліковано." msgid "Comment deleted." msgstr "Коментар знищено." -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:67 msgid "Commenter Image" msgstr "Зображення коментатора" msgid "Commenting infrastructure for Plone" msgstr "Інфраструктура коментування в Plone" -#: ../interfaces.py:136 +#: ../interfaces.py:138 msgid "Conversation" msgstr "Розмова" -#: ../interfaces.py:167 +#: ../interfaces.py:176 msgid "Creation date" msgstr "Дата створення" @@ -74,39 +74,39 @@ msgstr "Вимкнено" msgid "Discussion settings" msgstr "Налаштуванняя коментування" -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:86 msgid "Edit cancelled" msgstr "Редагування скасовано" -#: ../interfaces.py:153 +#: ../interfaces.py:155 msgid "Email" msgstr "Електронна адреса" -#: ../browser/controlpanel.py:63 +#: ../browser/controlpanel.py:65 msgid "Enable Comments" msgstr "Увімкнути можливість додавати коментарі" -#: ../interfaces.py:144 +#: ../interfaces.py:146 msgid "Id of comment this comment is in reply to" msgstr "Id коментаря, відповіддю на який - є цей коментар" -#: ../interfaces.py:158 +#: ../interfaces.py:160 msgid "MIME type" msgstr "MIME-тип" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:69 msgid "Moderator Email Notification" msgstr "Сповіщення модератора електронною поштою" -#: ../interfaces.py:168 +#: ../interfaces.py:177 msgid "Modification date" msgstr "Дата зміни" -#: ../interfaces.py:138 +#: ../interfaces.py:140 msgid "Name" msgstr "Ім'я" -#: ../interfaces.py:162 +#: ../interfaces.py:169 msgid "Notify me of new comments via email." msgstr "Повідомляти про нові коментарі поштою." @@ -114,11 +114,11 @@ msgstr "Повідомляти про нові коментарі поштою." msgid "Plone Discussions" msgstr "Коментування в Plone" -#: ../interfaces.py:131 +#: ../interfaces.py:133 msgid "Portal type" msgstr "Портал тип" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:73 msgid "Save" msgstr "Зберегти" @@ -135,23 +135,23 @@ msgid "Total number of public comments on this item" msgstr "Загальна кількість публічних коментарів для даного елемента" #: ../comment.py:158 -msgid "Transform '%s' => '%s' not available. Failed to transform comment '%s'." -msgstr "Не доступне перетворення '%s' => '%s'. Не вдалося перетворити коментар '%s'." +msgid "Transform '%s' => '%s' not available." +msgstr "Не доступне перетворення '%s' => '%s'." -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:71 msgid "User Email Notification" msgstr "Сповіщення користувача електронною поштою" -#: ../interfaces.py:166 +#: ../interfaces.py:175 msgid "Username of the commenter" msgstr "Ім'я автора коментаря" -#: ../browser/comments.py:244 +#: ../browser/comments.py:251 msgid "Your comment awaits moderator approval." msgstr "Ваш коментар очікує затвердження модератором." #. Default: "Comment" -#: ../browser/comments.py:131 +#: ../browser/comments.py:132 msgid "add_comment_button" msgstr "Коментар" @@ -221,17 +221,17 @@ msgid "heading_moderate_comments" msgstr "Модерування коментарів" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." -#: ../interfaces.py:236 +#: ../interfaces.py:215 msgid "help_anonymous_comments" msgstr "Якщо вибрано - то анонімні користувачі зможуть додавати коментарі без входу в систему. Для таких випадків рекомендуєтсья використовувати капчу, щоб запобігти надсиланню спаму." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:334 +#: ../interfaces.py:330 msgid "help_anonymous_email_enabled" msgstr "Якщо вибрано, анонімний користувач повинен буде вказати свою електронну пошту." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:279 +#: ../interfaces.py:265 msgid "help_captcha" msgstr "Використовуйте цей параметр, щоб увімкнути або вимкнути капчу для коментарів. Для цього спершу встановіть plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet або collective.z3cform.norobots." @@ -244,53 +244,53 @@ msgstr "" "To enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\".\"" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." -#: ../interfaces.py:224 +#: ../interfaces.py:201 msgid "help_globally_enabled" msgstr "Якщо вибрано, користувачі зможуть додавати коментарі на сайт. Але спочатку необхідно увімкнути можливість коментування для певних типів вмісту, тек, об'єктів." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." -#: ../interfaces.py:248 +#: ../interfaces.py:231 msgid "help_moderation_enabled" msgstr "Якщо вибрано, коментарі увійде в стан 'В очікуванні', у якому вони невидимі для громадськості. Користувач з правом 'Огляд коментарів' ('Рецензент' або 'Менеджер') може схвалити коментар, щоб зробити їх видимими для громадськості. Якщо ви хочете налаштувати робочий процес коментарів, ви повинні піти в панель керування типів." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:316 +#: ../interfaces.py:307 msgid "help_moderator_email" msgstr "Адреса, за якою модератору будуть надсилатися повідомлення." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" -#: ../interfaces.py:304 +#: ../interfaces.py:292 msgid "help_moderator_notification_enabled" msgstr "Якщо вибрано, модератор отримує повідомлення, якщо коментар вимагає уваги. Адресу електронної пошти модератора можна знайти в 'Пошта' панелі керування (Адреса 'Від')" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:294 +#: ../interfaces.py:281 msgid "help_show_commenter_image" msgstr "Якщо вибрано, зображення коментатора буде відображатись поруч з коментарем." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:263 +#: ../interfaces.py:248 msgid "help_text_transform" msgstr "Виберіть як повинен бути перетворений текст коментаря. Ви можете вибрати між 'Звичайний текст' і 'Інтелектуальні тексту'. 'Інтелектуальний текст' перетворює текст в HTML, де рядки і відступи зберігаються, інтернет адреси та адреси електронної пошти перетворяться в активні посилання." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:325 +#: ../interfaces.py:319 msgid "help_user_notification_enabled" msgstr "Якщо вибрано, користувачі зможуть обрати можливість отримувати нотифікації про нові коментарі поштою." #. Default: "Anonymous" #: ../browser/comments.pt:71 -#: ../comment.py:173 +#: ../comment.py:176 msgid "label_anonymous" msgstr "Анонім" #. Default: "Enable anonymous comments" -#: ../interfaces.py:234 +#: ../interfaces.py:213 msgid "label_anonymous_comments" msgstr "Увімкнути можливість анонімного коментування" #. Default: "Enable anonymous email field" -#: ../interfaces.py:332 +#: ../interfaces.py:328 msgid "label_anonymous_email_enabled" msgstr "Увімкнути поле електронної адреси для аноніма" @@ -300,12 +300,12 @@ msgid "label_apply" msgstr "Застосувати" #. Default: "Captcha" -#: ../interfaces.py:277 +#: ../interfaces.py:263 msgid "label_captcha" msgstr "Капча" #. Default: "Comment" -#: ../interfaces.py:159 +#: ../interfaces.py:162 msgid "label_comment" msgstr "Коментар" @@ -320,22 +320,22 @@ msgid "label_delete" msgstr "Знищити" #. Default: "Globally enable comments" -#: ../interfaces.py:222 +#: ../interfaces.py:199 msgid "label_globally_enabled" msgstr "Увімкнути коментування для цілого сайту" #. Default: "Enable comment moderation" -#: ../interfaces.py:246 +#: ../interfaces.py:227 msgid "label_moderation_enabled" msgstr "Увімкнути модерування коментарів" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:303 msgid "label_moderator_email" msgstr "Електронна адреса модератора" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:290 msgid "label_moderator_notification_enabled" msgstr "Увімкнути сповіщення модератора" @@ -350,7 +350,7 @@ msgid "label_says" msgstr "каже:" #. Default: "Show commenter image" -#: ../interfaces.py:292 +#: ../interfaces.py:279 msgid "label_show_commenter_image" msgstr "Показати зображення коментатора" @@ -360,17 +360,17 @@ msgid "label_show_full_comment_text" msgstr "показати повний текст коментаря" #. Default: "Subject" -#: ../interfaces.py:155 +#: ../interfaces.py:157 msgid "label_subject" msgstr "Тема" #. Default: "Comment text transform" -#: ../interfaces.py:261 +#: ../interfaces.py:246 msgid "label_text_transform" msgstr "Перетворення тексту коментаря" #. Default: "Enable user email notification" -#: ../interfaces.py:323 +#: ../interfaces.py:315 msgid "label_user_notification_enabled" msgstr "Увімкнути надcилання нотифікації користувачу через електронну адресу" diff --git a/plone/app/discussion/patches.py b/plone/app/discussion/patches.py index 47ec27b..9491702 100644 --- a/plone/app/discussion/patches.py +++ b/plone/app/discussion/patches.py @@ -1,4 +1,4 @@ -from zope.component import queryUtility +from Products.CMFCore.utils import getToolByName from Acquisition import aq_inner, aq_parent @@ -8,7 +8,6 @@ from Products.CMFPlone.utils import base_hasattr from Products.CMFPlone.utils import safe_callable from plone.app.discussion.conversation import ANNOTATION_KEY -from plone.app.discussion.interfaces import ICommentingTool def patchedClearFindAndRebuild(self): @@ -26,14 +25,14 @@ def patchedClearFindAndRebuild(self): obj.indexObject() annotions = IAnnotations(obj) - ctool = queryUtility(ICommentingTool) + catalog = getToolByName(obj, "portal_catalog") if ANNOTATION_KEY in annotions: conversation = annotions[ANNOTATION_KEY] conversation = conversation.__of__(obj) for comment in conversation.getComments(): try: - if ctool: - ctool.indexObject(comment) + if catalog: + catalog.indexObject(comment) except StopIteration: # pragma: no cover pass diff --git a/plone/app/discussion/profiles/default/componentregistry.xml b/plone/app/discussion/profiles/default/componentregistry.xml deleted file mode 100644 index 635cae9..0000000 --- a/plone/app/discussion/profiles/default/componentregistry.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/plone/app/discussion/profiles/default/toolset.xml b/plone/app/discussion/profiles/default/toolset.xml deleted file mode 100644 index 0823a74..0000000 --- a/plone/app/discussion/profiles/default/toolset.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/plone/app/discussion/subscribers.py b/plone/app/discussion/subscribers.py new file mode 100644 index 0000000..07e0bb5 --- /dev/null +++ b/plone/app/discussion/subscribers.py @@ -0,0 +1,15 @@ +from Products.CMFCore.utils import getToolByName + + +def index_object(obj, event): + """Index the object when it is added to the conversation. + """ + catalog = getToolByName(obj, 'portal_catalog') + return catalog.reindexObject(obj) + + +def unindex_object(obj, event): + """Unindex the object when it is removed from the conversation. + """ + catalog = getToolByName(obj, 'portal_catalog') + return catalog.unindexObject(obj) diff --git a/plone/app/discussion/subscribers.zcml b/plone/app/discussion/subscribers.zcml index d0d848d..e563f80 100644 --- a/plone/app/discussion/subscribers.zcml +++ b/plone/app/discussion/subscribers.zcml @@ -24,13 +24,13 @@ `__, and -the test suite will run instrumented in an iframe. Select the Summary tab to see -the results. - -The command-line options ensure that only our tests and the modules being -tested are instrumented for coverage, not the testing framework nor jQuery. - -Note that JSCoverage adds instrumentation statements to the code, so don't try -to debug your tests when running via the jscoverage server. - -.. _QUnit: http://docs.jquery.com/QUnit -.. _JSCoverage: http://siliconforks.com/jscoverage/ diff --git a/plone/app/discussion/tests/javascripts/jquery.js b/plone/app/discussion/tests/javascripts/jquery.js deleted file mode 100644 index 7c24308..0000000 --- a/plone/app/discussion/tests/javascripts/jquery.js +++ /dev/null @@ -1,154 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Sat Feb 13 22:33:48 2010 -0500 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
    a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

    ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
    ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
    ","
    "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
    ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
    "; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/plone/app/discussion/tests/javascripts/test_comments.html b/plone/app/discussion/tests/javascripts/test_comments.html deleted file mode 100644 index be846e0..0000000 --- a/plone/app/discussion/tests/javascripts/test_comments.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - plone.app.discussion comments Test Suite - - - - - - - - - - - - - - - - - -

    plone.app.discussion comments Test - Suite

    - -

    - -
    -
    - -

    - -
      -
    - - - - diff --git a/plone/app/discussion/tests/javascripts/test_comments.js b/plone/app/discussion/tests/javascripts/test_comments.js deleted file mode 100644 index 8bca11f..0000000 --- a/plone/app/discussion/tests/javascripts/test_comments.js +++ /dev/null @@ -1,146 +0,0 @@ - -$(document).ready(function () { - - /* TEST SETUP */ - - module("comments", { - setup: function () { - - // Create a comments section with one comment inside - // - //
    - //
    - //
    - //

    Lorem ipsum.

    - //
    - //
    - // - //
    - //
    - //
    - - var comments = $(document.createElement("div")) - .addClass("discussion") - .append($(document.createElement("div")) - .addClass("comment") - .attr("id", "1282720906349675") - .append($(document.createElement("div")) - .addClass("commentBody") - .append($(document.createElement("p")) - .text("Lorem ipsum.") - ) - ) - .append($(document.createElement("div")) - .addClass("commentActions") - .append($(document.createElement("button")) - .addClass("reply-to-comment-button") - )) - ); - $(document.body).append(comments); - - // Create a basic commenting form - // - // - //
    - // - //
    - //
    - // - //
    - //
    - // - //
    - //
    - // - // - //
    - // - - var commentform = $(document.createElement("div")) - .append($(document.createElement("form")) - .addClass("form") - .append($(document.createElement("div")) - .addClass("formfield-form-widgets-in_reply_to") - .append($(document.createElement("input")) - .attr("name", "form.widgets.in_reply_to") - .val("") - ) - ) - .append($(document.createElement("div")) - .addClass("formfield-form-widgets-author_name") - .append($(document.createElement("input")) - .attr("name", "form.widgets.author") - .attr("type", "text") - ) - ) - .append($(document.createElement("div")) - .addClass("formfield-form-widgets-text") - .append($(document.createElement("textarea")) - .attr("name", "form.widgets.text") - ) - ) - .append($(document.createElement("div")) - .addClass("formControls") - .append($(document.createElement("input")) - .attr("name", "form.buttons.comment")) - .append($(document.createElement("input")) - .attr("name", "form.buttons.cancel")) - ) - ) - .addClass("reply") - .attr("id", "commenting"); - $(document.body).append(commentform); - }, - teardown: function () { - $("#commenting").remove(); - $(".discussion").remove(); - } - }); - - - /* TESTS */ - - test("Hide the reply and the cancel button for the comment form", function(){ - expect(1); - $(".reply").find("input[name='form.buttons.cancel']").css("display", "none"); - equals($("input[name='form.buttons.cancel']").css("display"), "none", "The cancel button should be hidden"); - }); - - test("Show the reply button only when Javascript is enabled", function(){ - expect(1); - $(".reply-to-comment-button").css("display", "inline"); - equals($("button[class='reply-to-comment-button']").attr("style"), "display: inline;", "The reply button should show up when Javascript is enabled"); - }); - - test("Create a comment reply form.", function() { - expect(2); - var comment_div = $("#1282720906349675"); - var reply_button = comment_div.children(".reply-to-comment-button"); - $.createReplyForm(comment_div); - var reply_form = comment_div.children(".reply"); - ok(reply_form.find("input[name='form.widgets.in_reply_to']"), "Reply form has been copied"); - same(reply_form.find("input[name='form.widgets.in_reply_to']").val(), "1282720906349675", "The reply for should have the id of the comment in the in_reply_to field"); - }); - - test("Clear all form values from a form.", function() { - // Create a reply form with some values - var comment_div = $("#1282720906349675"); - $.createReplyForm(comment_div); - var reply_form = comment_div.find(".reply"); - var author = reply_form.find("input[name='form.widgets.author']"); - var text = comment_div.find("input[name='form.widgets.text']"); - author.val("my author"); - text.val("my text"); - // Call the clearForm function to clear the form - $.clearForm(comment_div); - // Check if all form fields have been cleared - var author = comment_div.find("input[name='form.widgets.author']"); - var text = comment_div.find("input[name='form.widgets.text']"); - equals(author.val(), "", "The author form value should be empty"); - equals(text.text(), "", "The text form value should be empty"); - - }); - -}); - - diff --git a/plone/app/discussion/tests/javascripts/test_moderation.html.txt b/plone/app/discussion/tests/javascripts/test_moderation.html.txt deleted file mode 100644 index 36afc81..0000000 --- a/plone/app/discussion/tests/javascripts/test_moderation.html.txt +++ /dev/null @@ -1,40 +0,0 @@ - - - - - plone.app.discussion moderation Test Suite - - - - - - - - - - - - - - - - - - -

    plone.app.discussion moderation Test Suite

    - -

    - -
    - -

    - -
      - - - - diff --git a/plone/app/discussion/tests/javascripts/test_moderation.js.txt b/plone/app/discussion/tests/javascripts/test_moderation.js.txt deleted file mode 100644 index 49755d0..0000000 --- a/plone/app/discussion/tests/javascripts/test_moderation.js.txt +++ /dev/null @@ -1,72 +0,0 @@ -/* TEST SETUP */ - -module("comments", { - setup: function () { - //
      - // - // - // - // - // - // - // - //
      - // My comment - // - // - // - //
      - //
      - var review_table = $(document.createElement("form")) - .append($(document.createElement("table")) - .attr("id", "review-comments") - .append($(document.createElement("tbody")) - .append($(document.createElement("tr")) - .append($(document.createElement("td")) - .append($(document.createElement("a")) - .text("My comment.") - .attr("href", "http://localhost:8080/Plone/front-page/++conversation++default/1285339036601284") - ) - ) - .append($(document.createElement("td")) - .append($(document.createElement("input")) - .attr("id", "1285339036601284") - .attr("value", "Publish") - .attr("name", "form.button.Publish") - ) - .append($(document.createElement("input")) - .attr("id", "1285339036601284") - .attr("value", "Delete") - .attr("name", "form.button.Delete") - ) - .addClass("actions") - ) - ) - ) - ); - $(document.body).append(review_table); - }, - teardown: function () { - $("form").remove(); - } -}); - - -/* TESTS */ - -test("Delete a single comment", function(){ - expect(1); - stop(); - var delete_button = $(".actions").children("input[name='form.button.Delete']"); - delete_button.trigger('click'); - start(); - equals($("#1285339036601284").attr("name", "form.button.Delete").length, 0, "The comment row should have been deleted."); -}); - - -test("Publish a single comment", function(){ - expect(1); - var publish_button = $(".actions").children("input[name='form.button.Publish']"); - publish_button.trigger('click'); - equals($("#1285339036601284").attr("name", "form.button.Publish").length, 0, "The comment row should have been removed since the comment has been published."); -}); diff --git a/plone/app/discussion/tests/jsTestDriver.conf b/plone/app/discussion/tests/jsTestDriver.conf deleted file mode 100644 index c5335fb..0000000 --- a/plone/app/discussion/tests/jsTestDriver.conf +++ /dev/null @@ -1,18 +0,0 @@ -server: http://localhost:9876 - -load: - # Add these lines to load the equiv function and adapter in order, before the - # tests (assuming they are saved to tests/qunit/) - - qunit/equiv.js - - qunit/QUnitAdapter.js - - # This is where we load the qunit tests - - javascripts/*.js - - # And this loads the source files we are testing - - ../browser/javascripts/*.js - -plugin: - - name: "coverage" - jar: "../../../../parts/jstestdriver/coverage.jar" - module: "com.google.jstestdriver.coverage.CoverageModule" diff --git a/plone/app/discussion/tests/jsTestDriver.txt b/plone/app/discussion/tests/jsTestDriver.txt deleted file mode 100644 index 7751bb8..0000000 --- a/plone/app/discussion/tests/jsTestDriver.txt +++ /dev/null @@ -1,5 +0,0 @@ -============== -JS TEST DRIVER -============== - -java -jar JsTestDriver.jar --port 9876 --config jsTestDriver.conf --browser /usr/bin/firefox --tests all \ No newline at end of file diff --git a/plone/app/discussion/tests/qunit/QUnitAdapter.js b/plone/app/discussion/tests/qunit/QUnitAdapter.js deleted file mode 100644 index a3fc18c..0000000 --- a/plone/app/discussion/tests/qunit/QUnitAdapter.js +++ /dev/null @@ -1,85 +0,0 @@ -/* -QUnitAdapter -Version: 1.1.0 - -Run qunit tests using JS Test Driver - -This provides almost the same api as qunit. - -Tests must run sychronously, which means no use of stop and start methods. -You can use jsUnit Clock object to deal with timeouts and intervals: -http://googletesting.blogspot.com/2007/03/javascript-simulating-time-in-jsunit.html - -The qunit #main DOM element is not included. If you need to do any DOM manipulation -you need to set it up and tear it down in each test. - -*/ -(function() { - - if(!(window.equiv)) { - throw new Error("QUnitAdapter.js - Unable to find equiv function. Ensure you have added equiv.js to the load section of your jsTestDriver.conf"); - } - - var QUnitTestCase; - - window.module = function(name, lifecycle) { - QUnitTestCase = TestCase(name); - QUnitTestCase.prototype.lifecycle = lifecycle || {}; - }; - - window.test = function(name, expected, test) { - QUnitTestCase.prototype['test ' + name] = function() { - if(this.lifecycle.setup) { - this.lifecycle.setup(); - } - if(expected.constructor === Number) { - expectAsserts(expected); - } else { - test = expected; - } - test.call(this.lifecycle); - - if(this.lifecycle.teardown) { - this.lifecycle.teardown(); - } - }; - }; - - window.expect = function(count) { - expectAsserts(count); - }; - - window.ok = function(actual, msg) { - assertTrue(msg ? msg : '', !!actual); - }; - - window.equals = function(a, b, msg) { - assertEqual(msg ? msg : '', b, a); - }; - - window.start = window.stop = function() { - fail('start and stop methods are not available when using JS Test Driver.\n' + - 'Use jsUnit Clock object to deal with timeouts and intervals:\n' + - 'http://googletesting.blogspot.com/2007/03/javascript-simulating-time-in-jsunit.html.'); - }; - - window.same = function(a, b, msg) { - assertTrue(msg ? msg : '', window.equiv(b, a)); - }; - - window.reset = function() { - fail('reset method is not available when using JS Test Driver'); - }; - - window.isLocal = function() { - return false; - }; - - window.QUnit = { - equiv: window.equiv, - ok: window.ok - }; - - module('Default Module'); - -})(); diff --git a/plone/app/discussion/tests/qunit/equiv.js b/plone/app/discussion/tests/qunit/equiv.js deleted file mode 100644 index 2f5b9f3..0000000 --- a/plone/app/discussion/tests/qunit/equiv.js +++ /dev/null @@ -1,185 +0,0 @@ - -// Tests for equality any JavaScript type and structure without unexpected results. -// Discussions and reference: http://philrathe.com/articles/equiv -// Test suites: http://philrathe.com/tests/equiv -// Author: Philippe Rath -window.equiv = function () { - - var innerEquiv; // the real equiv function - var callers = []; // stack to decide between skip/abort functions - - // Determine what is o. - function hoozit(o) { - if (typeof o === "string") { - return "string"; - - } else if (typeof o === "boolean") { - return "boolean"; - - } else if (typeof o === "number") { - - if (isNaN(o)) { - return "nan"; - } else { - return "number"; - } - - } else if (typeof o === "undefined") { - return "undefined"; - - // consider: typeof null === object - } else if (o === null) { - return "null"; - - // consider: typeof [] === object - } else if (o instanceof Array) { - return "array"; - - // consider: typeof new Date() === object - } else if (o instanceof Date) { - return "date"; - - // consider: /./ instanceof Object; - // /./ instanceof RegExp; - // typeof /./ === "function"; // => false in IE and Opera, - // true in FF and Safari - } else if (o instanceof RegExp) { - return "regexp"; - - } else if (typeof o === "object") { - return "object"; - - } else if (o instanceof Function) { - return "function"; - } - } - - // Call the o related callback with the given arguments. - function bindCallbacks(o, callbacks, args) { - var prop = hoozit(o); - if (prop) { - if (hoozit(callbacks[prop]) === "function") { - return callbacks[prop].apply(callbacks, args); - } else { - return callbacks[prop]; // or undefined - } - } - } - - var callbacks = function () { - - // for string, boolean, number and null - function useStrictEquality(b, a) { - return a === b; - } - - return { - "string": useStrictEquality, - "boolean": useStrictEquality, - "number": useStrictEquality, - "null": useStrictEquality, - "undefined": useStrictEquality, - - "nan": function (b) { - return isNaN(b); - }, - - "date": function (b, a) { - return hoozit(b) === "date" && a.valueOf() === b.valueOf(); - }, - - "regexp": function (b, a) { - return hoozit(b) === "regexp" && - a.source === b.source && // the regex itself - a.global === b.global && // and its modifers (gmi) ... - a.ignoreCase === b.ignoreCase && - a.multiline === b.multiline; - }, - - // - skip when the property is a method of an instance (OOP) - // - abort otherwise, - // initial === would have catch identical references anyway - "function": function () { - var caller = callers[callers.length - 1]; - return caller !== Object && - typeof caller !== "undefined"; - }, - - "array": function (b, a) { - var i; - var len; - - // b could be an object literal here - if ( ! (hoozit(b) === "array")) { - return false; - } - - len = a.length; - if (len !== b.length) { // safe and faster - return false; - } - for (i = 0; i < len; i++) { - if( ! innerEquiv(a[i], b[i])) { - return false; - } - } - return true; - }, - - "object": function (b, a) { - var i; - var eq = true; // unless we can proove it - var aProperties = [], bProperties = []; // collection of strings - - // comparing constructors is more strict than using instanceof - if ( a.constructor !== b.constructor) { - return false; - } - - // stack constructor before traversing properties - callers.push(a.constructor); - - for (i in a) { // be strict: don't ensures hasOwnProperty and go deep - - aProperties.push(i); // collect a's properties - - if ( ! innerEquiv(a[i], b[i])) { - eq = false; - } - } - - callers.pop(); // unstack, we are done - - for (i in b) { - bProperties.push(i); // collect b's properties - } - - // Ensures identical properties name - return eq && innerEquiv(aProperties.sort(), bProperties.sort()); - } - }; - }(); - - innerEquiv = function () { // can take multiple arguments - var args = Array.prototype.slice.apply(arguments); - if (args.length < 2) { - return true; // end transition - } - - return (function (a, b) { - if (a === b) { - return true; // catch the most you can - - } else if (typeof a !== typeof b || a === null || b === null || typeof a === "undefined" || typeof b === "undefined") { - return false; // don't lose time with error prone cases - - } else { - return bindCallbacks(a, callbacks, [b, a]); - } - - // apply transition with (1..n) arguments - })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1)); - }; - - return innerEquiv; -}(); // equiv diff --git a/plone/app/discussion/tests/qunit/qunit.css b/plone/app/discussion/tests/qunit/qunit.css deleted file mode 100644 index 4542933..0000000 --- a/plone/app/discussion/tests/qunit/qunit.css +++ /dev/null @@ -1,17 +0,0 @@ -h1#qunit-header { padding: 15px; font-size: large; background-color: #06b; color: white; font-family: 'trebuchet ms', verdana, arial; margin: 0; } -h1#qunit-header a { color: white; } - -h2#qunit-banner { height: 2em; border-bottom: 1px solid white; background-color: #eee; margin: 0; font-family: 'trebuchet ms', verdana, arial; } -h2#qunit-banner.pass { background-color: green; } -h2#qunit-banner.fail { background-color: red; } - -h2#qunit-userAgent { padding: 10px; background-color: #eee; color: black; margin: 0; font-size: small; font-weight: normal; font-family: 'trebuchet ms', verdana, arial; font-size: 10pt; } - -div#qunit-testrunner-toolbar { background: #eee; border-top: 1px solid black; padding: 10px; font-family: 'trebuchet ms', verdana, arial; margin: 0; font-size: 10pt; } - -ol#qunit-tests { font-family: 'trebuchet ms', verdana, arial; font-size: 10pt; } -ol#qunit-tests li strong { cursor:pointer; } -ol#qunit-tests .pass { color: green; } -ol#qunit-tests .fail { color: red; } - -p#qunit-testresult { margin-left: 1em; font-size: 10pt; font-family: 'trebuchet ms', verdana, arial; } diff --git a/plone/app/discussion/tests/qunit/qunit.js b/plone/app/discussion/tests/qunit/qunit.js deleted file mode 100644 index 51ec655..0000000 --- a/plone/app/discussion/tests/qunit/qunit.js +++ /dev/null @@ -1,997 +0,0 @@ -/* - * QUnit - A JavaScript Unit Testing Framework - * - * http://docs.jquery.com/QUnit - * - * Copyright (c) 2009 John Resig, Jörn Zaefferer - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - */ - -(function(window) { - -var QUnit = { - - // Initialize the configuration options - init: function init() { - config = { - stats: { all: 0, bad: 0 }, - moduleStats: { all: 0, bad: 0 }, - started: +new Date, - blocking: false, - autorun: false, - assertions: [], - filters: [], - queue: [] - }; - - var tests = id("qunit-tests"), - banner = id("qunit-banner"), - result = id("qunit-testresult"); - - if ( tests ) { - tests.innerHTML = ""; - } - - if ( banner ) { - banner.className = ""; - } - - if ( result ) { - result.parentNode.removeChild( result ); - } - }, - - // call on start of module test to prepend name to all tests - module: function module(name, testEnvironment) { - - synchronize(function() { - if ( config.currentModule ) { - QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all ); - } - - config.currentModule = name; - config.moduleTestEnvironment = testEnvironment; - config.moduleStats = { all: 0, bad: 0 }; - - QUnit.moduleStart( name, testEnvironment ); - }); - }, - - asyncTest: function asyncTest(testName, expected, callback) { - if ( arguments.length === 2 ) { - callback = expected; - expected = 0; - } - - QUnit.test(testName, expected, callback, true); - }, - - test: function test(testName, expected, callback, async) { - var name = testName, testEnvironment = {}; - - if ( arguments.length === 2 ) { - callback = expected; - expected = null; - } - - if ( config.currentModule ) { - name = config.currentModule + " module: " + name; - } - - if ( !validTest(name) ) { - return; - } - - synchronize(function() { - QUnit.testStart( testName ); - - testEnvironment = extend({ - setup: function() {}, - teardown: function() {} - }, config.moduleTestEnvironment); - - config.assertions = []; - config.expected = null; - - if ( arguments.length >= 3 ) { - config.expected = callback; - callback = arguments[2]; - } - - try { - if ( !config.pollution ) { - saveGlobal(); - } - - testEnvironment.setup.call(testEnvironment); - } catch(e) { - QUnit.ok( false, "Setup failed on " + name + ": " + e.message ); - } - - if ( async ) { - QUnit.stop(); - } - - try { - callback.call(testEnvironment); - } catch(e) { - fail("Test " + name + " died, exception and test follows", e, callback); - QUnit.ok( false, "Died on test #" + (config.assertions.length + 1) + ": " + e.message ); - // else next test will carry the responsibility - saveGlobal(); - - // Restart the tests if they're blocking - if ( config.blocking ) { - start(); - } - } - }); - - synchronize(function() { - try { - checkPollution(); - testEnvironment.teardown.call(testEnvironment); - } catch(e) { - QUnit.ok( false, "Teardown failed on " + name + ": " + e.message ); - } - - try { - QUnit.reset(); - } catch(e) { - fail("reset() failed, following Test " + name + ", exception and reset fn follows", e, reset); - } - - if ( config.expected && config.expected != config.assertions.length ) { - QUnit.ok( false, "Expected " + config.expected + " assertions, but " + config.assertions.length + " were run" ); - } - - var good = 0, bad = 0, - tests = id("qunit-tests"); - - config.stats.all += config.assertions.length; - config.moduleStats.all += config.assertions.length; - - if ( tests ) { - var ol = document.createElement("ol"); - ol.style.display = "none"; - - for ( var i = 0; i < config.assertions.length; i++ ) { - var assertion = config.assertions[i]; - - var li = document.createElement("li"); - li.className = assertion.result ? "pass" : "fail"; - li.innerHTML = assertion.message || "(no message)"; - ol.appendChild( li ); - - if ( assertion.result ) { - good++; - } else { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - - var b = document.createElement("strong"); - b.innerHTML = name + " (" + bad + ", " + good + ", " + config.assertions.length + ")"; - - addEvent(b, "click", function() { - var next = b.nextSibling, display = next.style.display; - next.style.display = display === "none" ? "block" : "none"; - }); - - addEvent(b, "dblclick", function(e) { - var target = (e || window.event).target; - if ( target.nodeName.toLowerCase() === "strong" ) { - var text = "", node = target.firstChild; - - while ( node.nodeType === 3 ) { - text += node.nodeValue; - node = node.nextSibling; - } - - text = text.replace(/(^\s*|\s*$)/g, ""); - - if ( window.location ) { - window.location.href = window.location.href.match(/^(.+?)(\?.*)?$/)[1] + "?" + encodeURIComponent(text); - } - } - }); - - var li = document.createElement("li"); - li.className = bad ? "fail" : "pass"; - li.appendChild( b ); - li.appendChild( ol ); - tests.appendChild( li ); - - if ( bad ) { - var toolbar = id("qunit-testrunner-toolbar"); - if ( toolbar ) { - toolbar.style.display = "block"; - id("qunit-filter-pass").disabled = null; - id("qunit-filter-missing").disabled = null; - } - } - - } else { - for ( var i = 0; i < config.assertions.length; i++ ) { - if ( !config.assertions[i].result ) { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - } - - QUnit.testDone( testName, bad, config.assertions.length ); - - if ( !window.setTimeout && !config.queue.length ) { - done(); - } - }); - - if ( window.setTimeout && !config.doneTimer ) { - config.doneTimer = window.setTimeout(function(){ - if ( !config.queue.length ) { - done(); - } else { - synchronize( done ); - } - }, 13); - } - }, - - /** - * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. - */ - expect: function expect(asserts) { - config.expected = asserts; - }, - - /** - * Asserts true. - * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); - */ - ok: function ok(a, msg) { - QUnit.log(a, msg); - - config.assertions.push({ - result: !!a, - message: msg - }); - }, - - /** - * Checks that the first two arguments are equal, with an optional message. - * Prints out both actual and expected values. - * - * Prefered to ok( actual == expected, message ) - * - * @example equals( format("Received {0} bytes.", 2), "Received 2 bytes." ); - * - * @param Object actual - * @param Object expected - * @param String message (optional) - */ - equals: function equals(actual, expected, message) { - push(expected == actual, actual, expected, message); - }, - - same: function(a, b, message) { - push(QUnit.equiv(a, b), a, b, message); - }, - - start: function start() { - // A slight delay, to avoid any current callbacks - if ( window.setTimeout ) { - window.setTimeout(function() { - if ( config.timeout ) { - clearTimeout(config.timeout); - } - - config.blocking = false; - process(); - }, 13); - } else { - config.blocking = false; - process(); - } - }, - - stop: function stop(timeout) { - config.blocking = true; - - if ( timeout && window.setTimeout ) { - config.timeout = window.setTimeout(function() { - QUnit.ok( false, "Test timed out" ); - QUnit.start(); - }, timeout); - } - }, - - /** - * Resets the test setup. Useful for tests that modify the DOM. - */ - reset: function reset() { - if ( window.jQuery ) { - jQuery("#main").html( config.fixture ); - jQuery.event.global = {}; - jQuery.ajaxSettings = extend({}, config.ajaxSettings); - } - }, - - /** - * Trigger an event on an element. - * - * @example triggerEvent( document.body, "click" ); - * - * @param DOMElement elem - * @param String type - */ - triggerEvent: function triggerEvent( elem, type, event ) { - if ( document.createEvent ) { - event = document.createEvent("MouseEvents"); - event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, - 0, 0, 0, 0, 0, false, false, false, false, 0, null); - elem.dispatchEvent( event ); - - } else if ( elem.fireEvent ) { - elem.fireEvent("on"+type); - } - }, - - // Logging callbacks - done: function done(failures, total) {}, - log: function log(result, message) {}, - testStart: function testStart(name) {}, - testDone: function testDone(name, failures, total) {}, - moduleStart: function moduleStart(name, testEnvironment) {}, - moduleDone: function moduleDone(name, failures, total) {} -}; - -// Maintain internal state -var config = { - // The queue of tests to run - queue: [], - - // block until document ready - blocking: true -}; - -// Load paramaters -(function() { - var location = window.location || { search: "", protocol: "file:" }, - GETParams = location.search.slice(1).split('&'); - - for ( var i = 0; i < GETParams.length; i++ ) { - GETParams[i] = decodeURIComponent( GETParams[i] ); - if ( GETParams[i] === "noglobals" ) { - GETParams.splice( i, 1 ); - i--; - config.noglobals = true; - } - } - - // restrict modules/tests by get parameters - config.filters = GETParams; - - // Figure out if we're running the tests from a server or not - QUnit.isLocal = !!(location.protocol === 'file:'); -})(); - -// Expose the API as global variables, unless an 'exports' -// object exists, in that case we assume we're in CommonJS -if ( typeof exports === "undefined" || typeof require === "undefined" ) { - extend(window, QUnit); - window.QUnit = QUnit; -} else { - extend(exports, QUnit); - exports.QUnit = QUnit; -} - -if ( typeof document === "undefined" || document.readyState === "complete" ) { - config.autorun = true; -} - -addEvent(window, "load", function() { - // Initialize the config, saving the execution queue - var oldconfig = extend({}, config); - QUnit.init(); - extend(config, oldconfig); - - config.blocking = false; - - var userAgent = id("qunit-userAgent"); - if ( userAgent ) { - userAgent.innerHTML = navigator.userAgent; - } - - var toolbar = id("qunit-testrunner-toolbar"); - if ( toolbar ) { - toolbar.style.display = "none"; - - var filter = document.createElement("input"); - filter.type = "checkbox"; - filter.id = "qunit-filter-pass"; - filter.disabled = true; - addEvent( filter, "click", function() { - var li = document.getElementsByTagName("li"); - for ( var i = 0; i < li.length; i++ ) { - if ( li[i].className.indexOf("pass") > -1 ) { - li[i].style.display = filter.checked ? "none" : "block"; - } - } - }); - toolbar.appendChild( filter ); - - var label = document.createElement("label"); - label.setAttribute("for", "filter-pass"); - label.innerHTML = "Hide passed tests"; - toolbar.appendChild( label ); - - var missing = document.createElement("input"); - missing.type = "checkbox"; - missing.id = "qunit-filter-missing"; - missing.disabled = true; - addEvent( missing, "click", function() { - var li = document.getElementsByTagName("li"); - for ( var i = 0; i < li.length; i++ ) { - if ( li[i].className.indexOf("fail") > -1 && li[i].innerHTML.indexOf('missing test - untested code is broken code') > - 1 ) { - li[i].parentNode.parentNode.style.display = missing.checked ? "none" : "block"; - } - } - }); - toolbar.appendChild( missing ); - - label = document.createElement("label"); - label.setAttribute("for", "filter-missing"); - label.innerHTML = "Hide missing tests (untested code is broken code)"; - toolbar.appendChild( label ); - } - - var main = id('main'); - if ( main ) { - config.fixture = main.innerHTML; - } - - if ( window.jQuery ) { - config.ajaxSettings = window.jQuery.ajaxSettings; - } - - QUnit.start(); -}); - -function done() { - if ( config.doneTimer && window.clearTimeout ) { - window.clearTimeout( config.doneTimer ); - config.doneTimer = null; - } - - if ( config.queue.length ) { - config.doneTimer = window.setTimeout(function(){ - if ( !config.queue.length ) { - done(); - } else { - synchronize( done ); - } - }, 13); - - return; - } - - config.autorun = true; - - // Log the last module results - if ( config.currentModule ) { - QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all ); - } - - var banner = id("qunit-banner"), - tests = id("qunit-tests"), - html = ['Tests completed in ', - +new Date - config.started, ' milliseconds.
      ', - '', config.stats.all - config.stats.bad, ' tests of ', config.stats.all, ' passed, ', config.stats.bad,' failed.'].join(''); - - if ( banner ) { - banner.className += " " + (config.stats.bad ? "fail" : "pass"); - } - - if ( tests ) { - var result = id("qunit-testresult"); - - if ( !result ) { - result = document.createElement("p"); - result.id = "qunit-testresult"; - result.className = "result"; - tests.parentNode.insertBefore( result, tests.nextSibling ); - } - - result.innerHTML = html; - } - - QUnit.done( config.stats.bad, config.stats.all ); -} - -function validTest( name ) { - var i = config.filters.length, - run = false; - - if ( !i ) { - return true; - } - - while ( i-- ) { - var filter = config.filters[i], - not = filter.charAt(0) == '!'; - - if ( not ) { - filter = filter.slice(1); - } - - if ( name.indexOf(filter) !== -1 ) { - return !not; - } - - if ( not ) { - run = true; - } - } - - return run; -} - -function push(result, actual, expected, message) { - message = message || (result ? "okay" : "failed"); - QUnit.ok( result, result ? message + ": " + expected : message + ", expected: " + QUnit.jsDump.parse(expected) + " result: " + QUnit.jsDump.parse(actual) ); -} - -function synchronize( callback ) { - config.queue.push( callback ); - - if ( config.autorun && !config.blocking ) { - process(); - } -} - -function process() { - while ( config.queue.length && !config.blocking ) { - config.queue.shift()(); - } -} - -function saveGlobal() { - config.pollution = []; - - if ( config.noglobals ) { - for ( var key in window ) { - config.pollution.push( key ); - } - } -} - -function checkPollution( name ) { - var old = config.pollution; - saveGlobal(); - - var newGlobals = diff( old, config.pollution ); - if ( newGlobals.length > 0 ) { - ok( false, "Introduced global variable(s): " + newGlobals.join(", ") ); - config.expected++; - } - - var deletedGlobals = diff( config.pollution, old ); - if ( deletedGlobals.length > 0 ) { - ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") ); - config.expected++; - } -} - -// returns a new Array with the elements that are in a but not in b -function diff( a, b ) { - var result = a.slice(); - for ( var i = 0; i < result.length; i++ ) { - for ( var j = 0; j < b.length; j++ ) { - if ( result[i] === b[j] ) { - result.splice(i, 1); - i--; - break; - } - } - } - return result; -} - -function fail(message, exception, callback) { - if ( typeof console !== "undefined" && console.error && console.warn ) { - console.error(message); - console.error(exception); - console.warn(callback.toString()); - - } else if ( window.opera && opera.postError ) { - opera.postError(message, exception, callback.toString); - } -} - -function extend(a, b) { - for ( var prop in b ) { - a[prop] = b[prop]; - } - - return a; -} - -function addEvent(elem, type, fn) { - if ( elem.addEventListener ) { - elem.addEventListener( type, fn, false ); - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, fn ); - } else { - fn(); - } -} - -function id(name) { - return !!(typeof document !== "undefined" && document && document.getElementById) && - document.getElementById( name ); -} - -// Test for equality any JavaScript type. -// Discussions and reference: http://philrathe.com/articles/equiv -// Test suites: http://philrathe.com/tests/equiv -// Author: Philippe Rathé -QUnit.equiv = function () { - - var innerEquiv; // the real equiv function - var callers = []; // stack to decide between skip/abort functions - - - // Determine what is o. - function hoozit(o) { - if (o.constructor === String) { - return "string"; - - } else if (o.constructor === Boolean) { - return "boolean"; - - } else if (o.constructor === Number) { - - if (isNaN(o)) { - return "nan"; - } else { - return "number"; - } - - } else if (typeof o === "undefined") { - return "undefined"; - - // consider: typeof null === object - } else if (o === null) { - return "null"; - - // consider: typeof [] === object - } else if (o instanceof Array) { - return "array"; - - // consider: typeof new Date() === object - } else if (o instanceof Date) { - return "date"; - - // consider: /./ instanceof Object; - // /./ instanceof RegExp; - // typeof /./ === "function"; // => false in IE and Opera, - // true in FF and Safari - } else if (o instanceof RegExp) { - return "regexp"; - - } else if (typeof o === "object") { - return "object"; - - } else if (o instanceof Function) { - return "function"; - } else { - return undefined; - } - } - - // Call the o related callback with the given arguments. - function bindCallbacks(o, callbacks, args) { - var prop = hoozit(o); - if (prop) { - if (hoozit(callbacks[prop]) === "function") { - return callbacks[prop].apply(callbacks, args); - } else { - return callbacks[prop]; // or undefined - } - } - } - - var callbacks = function () { - - // for string, boolean, number and null - function useStrictEquality(b, a) { - if (b instanceof a.constructor || a instanceof b.constructor) { - // to catch short annotaion VS 'new' annotation of a declaration - // e.g. var i = 1; - // var j = new Number(1); - return a == b; - } else { - return a === b; - } - } - - return { - "string": useStrictEquality, - "boolean": useStrictEquality, - "number": useStrictEquality, - "null": useStrictEquality, - "undefined": useStrictEquality, - - "nan": function (b) { - return isNaN(b); - }, - - "date": function (b, a) { - return hoozit(b) === "date" && a.valueOf() === b.valueOf(); - }, - - "regexp": function (b, a) { - return hoozit(b) === "regexp" && - a.source === b.source && // the regex itself - a.global === b.global && // and its modifers (gmi) ... - a.ignoreCase === b.ignoreCase && - a.multiline === b.multiline; - }, - - // - skip when the property is a method of an instance (OOP) - // - abort otherwise, - // initial === would have catch identical references anyway - "function": function () { - var caller = callers[callers.length - 1]; - return caller !== Object && - typeof caller !== "undefined"; - }, - - "array": function (b, a) { - var i; - var len; - - // b could be an object literal here - if ( ! (hoozit(b) === "array")) { - return false; - } - - len = a.length; - if (len !== b.length) { // safe and faster - return false; - } - for (i = 0; i < len; i++) { - if ( ! innerEquiv(a[i], b[i])) { - return false; - } - } - return true; - }, - - "object": function (b, a) { - var i; - var eq = true; // unless we can proove it - var aProperties = [], bProperties = []; // collection of strings - - // comparing constructors is more strict than using instanceof - if ( a.constructor !== b.constructor) { - return false; - } - - // stack constructor before traversing properties - callers.push(a.constructor); - - for (i in a) { // be strict: don't ensures hasOwnProperty and go deep - - aProperties.push(i); // collect a's properties - - if ( ! innerEquiv(a[i], b[i])) { - eq = false; - } - } - - callers.pop(); // unstack, we are done - - for (i in b) { - bProperties.push(i); // collect b's properties - } - - // Ensures identical properties name - return eq && innerEquiv(aProperties.sort(), bProperties.sort()); - } - }; - }(); - - innerEquiv = function () { // can take multiple arguments - var args = Array.prototype.slice.apply(arguments); - if (args.length < 2) { - return true; // end transition - } - - return (function (a, b) { - if (a === b) { - return true; // catch the most you can - } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || hoozit(a) !== hoozit(b)) { - return false; // don't lose time with error prone cases - } else { - return bindCallbacks(a, callbacks, [b, a]); - } - - // apply transition with (1..n) arguments - })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1)); - }; - - return innerEquiv; - -}(); - -/** - * jsDump - * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php) - * Date: 5/15/2008 - * @projectDescription Advanced and extensible data dumping for Javascript. - * @version 1.0.0 - * @author Ariel Flesler - * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} - */ -QUnit.jsDump = (function() { - function quote( str ) { - return '"' + str.toString().replace(/"/g, '\\"') + '"'; - }; - function literal( o ) { - return o + ''; - }; - function join( pre, arr, post ) { - var s = jsDump.separator(), - base = jsDump.indent(), - inner = jsDump.indent(1); - if ( arr.join ) - arr = arr.join( ',' + s + inner ); - if ( !arr ) - return pre + post; - return [ pre, inner + arr, base + post ].join(s); - }; - function array( arr ) { - var i = arr.length, ret = Array(i); - this.up(); - while ( i-- ) - ret[i] = this.parse( arr[i] ); - this.down(); - return join( '[', ret, ']' ); - }; - - var reName = /^function (\w+)/; - - var jsDump = { - parse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance - var parser = this.parsers[ type || this.typeOf(obj) ]; - type = typeof parser; - - return type == 'function' ? parser.call( this, obj ) : - type == 'string' ? parser : - this.parsers.error; - }, - typeOf:function( obj ) { - var type = typeof obj, - f = 'function';//we'll use it 3 times, save it - return type != 'object' && type != f ? type : - !obj ? 'null' : - obj.exec ? 'regexp' :// some browsers (FF) consider regexps functions - obj.getHours ? 'date' : - obj.scrollBy ? 'window' : - obj.nodeName == '#document' ? 'document' : - obj.nodeName ? 'node' : - obj.item ? 'nodelist' : // Safari reports nodelists as functions - obj.callee ? 'arguments' : - obj.call || obj.constructor != Array && //an array would also fall on this hack - (obj+'').indexOf(f) != -1 ? f : //IE reports functions like alert, as objects - 'length' in obj ? 'array' : - type; - }, - separator:function() { - return this.multiline ? this.HTML ? '
      ' : '\n' : this.HTML ? ' ' : ' '; - }, - indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing - if ( !this.multiline ) - return ''; - var chr = this.indentChar; - if ( this.HTML ) - chr = chr.replace(/\t/g,' ').replace(/ /g,' '); - return Array( this._depth_ + (extra||0) ).join(chr); - }, - up:function( a ) { - this._depth_ += a || 1; - }, - down:function( a ) { - this._depth_ -= a || 1; - }, - setParser:function( name, parser ) { - this.parsers[name] = parser; - }, - // The next 3 are exposed so you can use them - quote:quote, - literal:literal, - join:join, - // - _depth_: 1, - // This is the list of parsers, to modify them, use jsDump.setParser - parsers:{ - window: '[Window]', - document: '[Document]', - error:'[ERROR]', //when no parser is found, shouldn't happen - unknown: '[Unknown]', - 'null':'null', - undefined:'undefined', - 'function':function( fn ) { - var ret = 'function', - name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE - if ( name ) - ret += ' ' + name; - ret += '('; - - ret = [ ret, this.parse( fn, 'functionArgs' ), '){'].join(''); - return join( ret, this.parse(fn,'functionCode'), '}' ); - }, - array: array, - nodelist: array, - arguments: array, - object:function( map ) { - var ret = [ ]; - this.up(); - for ( var key in map ) - ret.push( this.parse(key,'key') + ': ' + this.parse(map[key]) ); - this.down(); - return join( '{', ret, '}' ); - }, - node:function( node ) { - var open = this.HTML ? '<' : '<', - close = this.HTML ? '>' : '>'; - - var tag = node.nodeName.toLowerCase(), - ret = open + tag; - - for ( var a in this.DOMAttrs ) { - var val = node[this.DOMAttrs[a]]; - if ( val ) - ret += ' ' + a + '=' + this.parse( val, 'attribute' ); - } - return ret + close + open + '/' + tag + close; - }, - functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function - var l = fn.length; - if ( !l ) return ''; - - var args = Array(l); - while ( l-- ) - args[l] = String.fromCharCode(97+l);//97 is 'a' - return ' ' + args.join(', ') + ' '; - }, - key:quote, //object calls it internally, the key part of an item in a map - functionCode:'[code]', //function calls it internally, it's the content of the function - attribute:quote, //node calls it internally, it's an html attribute value - string:quote, - date:quote, - regexp:literal, //regex - number:literal, - 'boolean':literal - }, - DOMAttrs:{//attributes to dump from nodes, name=>realName - id:'id', - name:'name', - 'class':'className' - }, - HTML:true,//if true, entities are escaped ( <, >, \t, space and \n ) - indentChar:' ',//indentation unit - multiline:true //if true, items in a collection, are separated by a \n, else just a space. - }; - - return jsDump; -})(); - -})(this); diff --git a/plone/app/discussion/tests/test_catalog.py b/plone/app/discussion/tests/test_catalog.py index 5cb26a7..cbff0cd 100644 --- a/plone/app/discussion/tests/test_catalog.py +++ b/plone/app/discussion/tests/test_catalog.py @@ -19,8 +19,6 @@ from plone.app.discussion.testing import ( from plone.app.discussion.interfaces import IConversation -from plone.app.discussion.testing import COLLECTION_TYPE - class CatalogSetupTest(unittest.TestCase): @@ -48,6 +46,8 @@ class CatalogSetupTest(unittest.TestCase): ) def test_collection_criteria_installed(self): + if 'portal_atct' not in self.portal: + return try: self.portal.portal_atct.getIndex('commentators') self.portal.portal_atct.getIndex('total_comments') @@ -459,6 +459,9 @@ class CommentCatalogTest(unittest.TestCase): ) def test_clear_and_rebuild_catalog(self): + brains = self.catalog.searchResults({'portal_type': 'Discussion Item'}) + self.assertTrue(brains) + # Clear and rebuild catalog self.catalog.clearFindAndRebuild() @@ -529,31 +532,6 @@ class CommentCatalogTest(unittest.TestCase): self.assertTrue(brains) self.assertEqual(len(brains), 6) - def test_collection(self): - if COLLECTION_TYPE == "Topic": - self.portal.invokeFactory('Topic', id='topic') - topic = self.portal.topic - crit = topic.addCriterion('Type', 'ATSimpleStringCriterion') - crit.setValue('Comment') - query = topic.buildQuery() - - self.assertEqual(len(query), 1) - self.assertEqual(query['Type'], 'Comment') - self.assertEqual(len(topic.queryCatalog()), 1) - else: - self.portal.invokeFactory('Collection', id='collection') - collection = self.portal.collection - collection.query = [{ - 'i': 'Type', - 'o': 'plone.app.querystring.operation.string.is', - 'v': 'Comment', - }] - - self.assertEqual(collection.results().length, 1) - self.assertEqual(collection.results()[0].text, 'Comment text') - self.assertEqual(collection.results()[0].creator, 'jim') - self.assertEqual(collection.results()[0].author_name, 'Jim') - class NoConversationCatalogTest(unittest.TestCase): @@ -591,6 +569,3 @@ class NoConversationCatalogTest(unittest.TestCase): IAnnotations(self.portal.doc1) ) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_comment.py b/plone/app/discussion/tests/test_comment.py index 09bdea2..88abff3 100644 --- a/plone/app/discussion/tests/test_comment.py +++ b/plone/app/discussion/tests/test_comment.py @@ -509,6 +509,3 @@ class RepliesTest(unittest.TestCase): re_re_re_comment.absolute_url() ) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index 7ed9da4..a12d909 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -63,12 +63,7 @@ class TestCommentForm(unittest.TestCase): typetool.constructContent('Document', self.portal, 'doc1') wftool = getToolByName(self.portal, "portal_workflow") wftool.doActionFor(self.portal.doc1, action='publish') - self.discussionTool = getToolByName( - self.portal, - 'portal_discussion', - None - ) - self.discussionTool.overrideDiscussionFor(self.portal.doc1, False) + self.portal.doc1.allow_discussion = True self.membershipTool = getToolByName(self.folder, 'portal_membership') self.memberdata = self.portal.portal_memberdata self.context = getattr(self.portal, 'doc1') @@ -83,7 +78,7 @@ class TestCommentForm(unittest.TestCase): """ # Allow discussion - self.discussionTool.overrideDiscussionFor(self.portal.doc1, True) + self.portal.doc1.allow_discussion = True self.viewlet = CommentsViewlet(self.context, self.request, None, None) def make_request(form={}): @@ -186,8 +181,23 @@ class TestCommentForm(unittest.TestCase): comment = [x for x in conversation.getComments()][-1] self.assertEquals(comment.text, u"foobar") + comments = IConversation(commentForm.context).getComments() + comments = [comment for comment in comments] # consume itertor + self.assertEqual(len(comments), 1) + + for comment in comments: + self.assertEqual(comment.text, u"bar") + self.assertEqual(comment.creator, "test-user") + self.assertEqual(comment.getOwner().getUserName(), "test-user") + local_roles = comment.get_local_roles() + self.assertEqual(len(local_roles), 1) + userid, roles = local_roles[0] + self.assertEqual(userid, 'test-user') + self.assertEqual(len(roles), 1) + self.assertEqual(roles[0], 'Owner') + def test_add_anonymous_comment(self): - self.discussionTool.overrideDiscussionFor(self.portal.doc1, True) + self.portal.doc1.allow_discussion = True self.viewlet = CommentsViewlet(self.context, self.request, None, None) @@ -226,11 +236,24 @@ class TestCommentForm(unittest.TestCase): self.assertEqual(len(errors), 0) self.assertFalse(commentForm.handleComment(commentForm, "action")) + comments = IConversation(commentForm.context).getComments() + comments = [comment for comment in comments] # consume itertor + self.assertEqual(len(comments), 1) + + for comment in IConversation(commentForm.context).getComments(): + self.assertEqual(comment.text, u"bar") + self.assertIsNone(comment.creator) + roles = comment.get_local_roles() + self.assertEqual(len(roles), 0) + def test_can_not_add_comments_if_discussion_is_not_allowed(self): """Make sure that comments can't be posted if discussion is disabled. """ - # Discussion is disabled by default + # Disable discussion + registry = queryUtility(IRegistry) + settings = registry.forInterface(IDiscussionSettings) + settings.globally_enabled = False def make_request(form={}): request = TestRequest() @@ -256,6 +279,7 @@ class TestCommentForm(unittest.TestCase): # No form errors, but raise unauthorized because discussion is not # allowed self.assertEqual(len(errors), 0) + self.assertRaises(Unauthorized, commentForm.handleComment, commentForm, @@ -318,11 +342,6 @@ class TestCommentsViewlet(unittest.TestCase): typetool = self.portal.portal_types typetool.constructContent('Document', self.portal, 'doc1') - self.portal_discussion = getToolByName( - self.portal, - 'portal_discussion', - None - ) self.membershipTool = getToolByName(self.folder, 'portal_membership') self.memberdata = self.portal.portal_memberdata context = getattr(self.portal, 'doc1') @@ -372,8 +391,7 @@ class TestCommentsViewlet(unittest.TestCase): # By default, discussion is disabled self.assertFalse(self.viewlet.is_discussion_allowed()) # Enable discussion - portal_discussion = getToolByName(self.portal, 'portal_discussion') - portal_discussion.overrideDiscussionFor(self.portal.doc1, True) + self.portal.doc1.allow_discussion = True # Test if discussion has been enabled self.assertTrue(self.viewlet.is_discussion_allowed()) @@ -520,11 +538,11 @@ class TestCommentsViewlet(unittest.TestCase): ) def test_get_commenter_portrait_is_none(self): - self.assertTrue( - self.viewlet.get_commenter_portrait() in ( - 'defaultUser.png', - 'defaultUser.gif', - ) + + self.assertEqual( + self.viewlet.get_commenter_portrait(), + 'defaultUser.png' + ) def test_get_commenter_portrait_without_userimage(self): @@ -604,6 +622,3 @@ class TestCommentsViewlet(unittest.TestCase): self.assertTrue( localized_time in ['Feb 01, 2009 11:32 PM', '2009-02-01 23:32']) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_controlpanel.py b/plone/app/discussion/tests/test_controlpanel.py index ca56c0b..1fe8115 100644 --- a/plone/app/discussion/tests/test_controlpanel.py +++ b/plone/app/discussion/tests/test_controlpanel.py @@ -230,6 +230,3 @@ class ConfigurationChangedSubscriberTest(unittest.TestCase): # setting itself remains unchanged. self.settings.moderation_enabled = True - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_conversation.py b/plone/app/discussion/tests/test_conversation.py index 59bca9d..29976e8 100644 --- a/plone/app/discussion/tests/test_conversation.py +++ b/plone/app/discussion/tests/test_conversation.py @@ -91,10 +91,10 @@ class ConversationTest(unittest.TestCase): comment.author_username = "nobody" conversation.addComment(comment) comment.manage_permission("View", roles=tuple()) - self.assertEquals(0, conversation.total_comments) - self.assertEquals(None, conversation.last_comment_date) - self.assertEquals(["nobody"], list(conversation.commentators)) - self.assertEquals([], list(conversation.public_commentators)) + self.assertEqual(0, conversation.total_comments) + self.assertEqual(None, conversation.last_comment_date) + self.assertEqual(["nobody"], list(conversation.commentators)) + self.assertEqual([], list(conversation.public_commentators)) def test_delete_comment(self): # Create a conversation. In this case we doesn't assign it to an @@ -308,12 +308,12 @@ class ConversationTest(unittest.TestCase): # Create a folder self.typetool.constructContent('Folder', self.portal, 'f1') - f1 = self.portal.f1 + # Usually we don't create a conversation on a folder conversation = self.portal.f1.restrictedTraverse('@@conversation_view') # Allow discussion for the folder - self.portal_discussion.overrideDiscussionFor(f1, True) + self.portal.f1.allow_discussion = True # Allow discussion on Folder content type portal_types = getToolByName(self.portal, 'portal_types') @@ -334,12 +334,12 @@ class ConversationTest(unittest.TestCase): self.assertEqual(conversation.enabled(), False) # Allow discussion on content object - self.portal_discussion.overrideDiscussionFor(self.portal.doc1, True) + self.portal.doc1.allow_discussion = True # Check if discussion is now allowed on the content object self.assertEqual(conversation.enabled(), True) - self.portal_discussion.overrideDiscussionFor(self.portal.doc1, False) + self.portal.doc1.allow_discussion = False self.assertEqual(conversation.enabled(), False) def test_dict_operations(self): @@ -874,6 +874,3 @@ class RepliesTest(unittest.TestCase): self.assertEqual(len(replies_to_comment1_1), 1) self.assertEqual(len(replies_to_comment2), 1) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_indexers.py b/plone/app/discussion/tests/test_indexers.py index 0701e27..2d4e6da 100644 --- a/plone/app/discussion/tests/test_indexers.py +++ b/plone/app/discussion/tests/test_indexers.py @@ -204,6 +204,3 @@ class CommentIndexersTest(unittest.TestCase): # object the comment was added to self.assertEqual(catalog.in_response_to(self.comment)(), 'Document 1') - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_migration.py b/plone/app/discussion/tests/test_migration.py deleted file mode 100644 index eec1215..0000000 --- a/plone/app/discussion/tests/test_migration.py +++ /dev/null @@ -1,328 +0,0 @@ -from datetime import datetime -from DateTime import DateTime - -import unittest2 as unittest - -from zope.annotation.interfaces import IAnnotations - -from Products.CMFCore.utils import getToolByName - -from plone.app.testing import TEST_USER_ID, setRoles - -from plone.app.discussion.testing import ( - PLONE_APP_DISCUSSION_INTEGRATION_TESTING -) - -from plone.app.discussion.browser.migration import View - -from plone.app.discussion.interfaces import IConversation, IComment - - -class MigrationTest(unittest.TestCase): - - layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING - - def _publish(self, reply): - # publish the reply - status = self.portal.portal_workflow.getStatusOf( - 'comment_review_workflow', reply - ).copy() - status['review_state'] = 'published' - self.portal.portal_workflow.setStatusOf( - 'comment_review_workflow', - reply, - status, - ) - - def setUp(self): - self.portal = self.layer['portal'] - self.request = self.layer['request'] - setRoles(self.portal, TEST_USER_ID, ['Manager']) - - self.portal.invokeFactory( - id='doc', - title='Document 1', - type_name='Document' - ) - # Create a document - self.discussion = getToolByName(self.portal, 'portal_discussion', None) - self.discussion.overrideDiscussionFor(self.portal.doc, 1) - # Publish it - self.workflowTool = getToolByName(self.portal, 'portal_workflow') - self.workflowTool.setDefaultChain('simple_publication_workflow') - self.workflowTool.doActionFor(self.portal.doc, 'publish') - - self.request.set("test", True) - self.view = View(self.portal, self.request) - self.workflowTool.setChainForPortalTypes( - ('Discussion Item',), - 'comment_review_workflow' - ) - - # Create a user Jimmy Jones so comments creator migration can work? - acl_users = getToolByName(self.portal, 'acl_users') - acl_users.userFolderAddUser('Jim', 'secret', ['Member'], []) - mt = getToolByName(self.portal, 'portal_membership') - member = mt.getMemberById('Jim') - member.fullname = 'Jimmy Jones' - - self.doc = self.portal.doc - - def test_migrate_comment(self): - - # Create a comment - talkback = self.discussion.getDiscussionFor(self.doc) - self.doc.talkback.createReply('My Title', 'My Text', Creator='Jim') - reply = talkback.getReplies()[0] - reply.setReplyTo(self.doc) - reply.creation_date = DateTime(2003, 3, 11, 9, 28, 6, 'GMT') - reply.modification_date = DateTime(2009, 7, 12, 19, 38, 7, 'GMT') - - self._publish(reply) - self.assertEqual(reply.Title(), 'My Title') - self.assertEqual(reply.EditableBody(), 'My Text') - self.assertTrue('Jim' in reply.listCreators()) - self.assertEqual(talkback.replyCount(self.doc), 1) - self.assertEqual(reply.inReplyTo(), self.doc) - - # Call migration script - self.view() - - # Make sure a conversation has been created - self.assertTrue( - 'plone.app.discussion:conversation' in IAnnotations(self.doc) - ) - conversation = IConversation(self.doc) - - # Check migration - self.assertEqual(conversation.total_comments, 1) - self.assertTrue(conversation.getComments().next()) - comment1 = conversation.values()[0] - self.assertTrue(IComment.providedBy(comment1)) - self.assertEqual(comment1.Title(), 'My Title') - self.assertEqual(comment1.text, '

      My Text

      \n') - self.assertEqual(comment1.mime_type, 'text/html') - self.assertEqual(comment1.Creator(), 'Jim') - self.assertEqual( - comment1.creation_date, - datetime(2003, 3, 11, 9, 28, 6) - ) - self.assertEqual( - comment1.modification_date, - datetime(2009, 7, 12, 19, 38, 7) - ) - self.assertEqual([ - {'comment': comment1, 'depth': 0, 'id': long(comment1.id)} - ], list(conversation.getThreads())) - self.assertFalse(self.doc.talkback) - - def test_migrate_comment_with_creator(self): - # Create a comment - talkback = self.discussion.getDiscussionFor(self.doc) - self.doc.talkback.createReply('My Title', 'My Text', Creator='Jim') - reply = talkback.getReplies()[0] - reply.setReplyTo(self.doc) - reply.creation_date = DateTime(2003, 3, 11, 9, 28, 6, 'GMT') - reply.modification_date = DateTime(2009, 7, 12, 19, 38, 7, 'GMT') - reply.author_username = 'Jim' - reply.email = 'jimmy@jones.xyz' - - self._publish(reply) - self.assertEqual(reply.Title(), 'My Title') - self.assertEqual(reply.EditableBody(), 'My Text') - self.assertTrue('Jim' in reply.listCreators()) - self.assertEqual(talkback.replyCount(self.doc), 1) - self.assertEqual(reply.inReplyTo(), self.doc) - self.assertEqual(reply.author_username, 'Jim') - self.assertEqual(reply.email, 'jimmy@jones.xyz') - - # Call migration script - self.view() - - # Make sure a conversation has been created - self.assertTrue( - 'plone.app.discussion:conversation' in IAnnotations(self.doc) - ) - conversation = IConversation(self.doc) - - # Check migration - self.assertEqual(conversation.total_comments, 1) - self.assertTrue(conversation.getComments().next()) - comment1 = conversation.values()[0] - self.assertTrue(IComment.providedBy(comment1)) - self.assertEqual(comment1.Title(), 'My Title') - self.assertEqual(comment1.text, '

      My Text

      \n') - self.assertEqual(comment1.mime_type, 'text/html') - self.assertEqual(comment1.Creator(), 'Jim') - self.assertEqual( - comment1.creation_date, - datetime(2003, 3, 11, 9, 28, 6) - ) - self.assertEqual( - comment1.modification_date, - datetime(2009, 7, 12, 19, 38, 7) - ) - self.assertEqual([ - {'comment': comment1, 'depth': 0, 'id': long(comment1.id)} - ], list(conversation.getThreads())) - self.assertFalse(self.doc.talkback) - - # Though this should be Jimmy, but looks like getProperty won't pick - # up 'author_username' (reply.author_username is not None), so it's - # propagating Creator()..? - self.assertEqual(comment1.author_username, 'Jim') - - self.assertEqual(comment1.author_name, 'Jimmy Jones') - self.assertEqual(comment1.author_email, 'jimmy@jones.xyz') - - def test_migrate_nested_comments(self): - # Create some nested comments and migrate them - # - # self.doc - # +- First comment - # +- Re: First comment - # + Re: Re: First comment - # + Re: Re: Re: First comment - # +- Re: First comment (2) - # +- Re: First comment (3) - # +- Re: First comment (4) - # +- Second comment - - talkback = self.discussion.getDiscussionFor(self.doc) - - # First comment - talkback.createReply(title='First comment', - text='This is my first comment.') - comment1 = talkback.getReplies()[0] - self._publish(comment1) - - talkback_comment1 = self.discussion.getDiscussionFor(comment1) - - # Re: First comment - talkback_comment1.createReply(title='Re: First comment', - text='This is my first reply.') - comment1_1 = talkback_comment1.getReplies()[0] - self._publish(comment1_1) - - talkback_comment1_1 = self.discussion.getDiscussionFor(comment1_1) - - self.assertEqual(len(talkback.getReplies()), 1) - self.assertEqual(len(talkback_comment1.getReplies()), 1) - self.assertEqual(len(talkback_comment1_1.getReplies()), 0) - - #Re: Re: First comment - talkback_comment1_1.createReply(title='Re: Re: First comment', - text='This is my first re-reply.') - comment1_1_1 = talkback_comment1_1.getReplies()[0] - self._publish(comment1_1_1) - - talkback_comment1_1_1 = self.discussion.getDiscussionFor(comment1_1_1) - - # Re: Re: Re: First comment - talkback_comment1_1_1.createReply(title='Re: Re: Re: First comment', - text='This is my first re-re-reply.') - self._publish(talkback_comment1_1_1.getReplies()[0]) - - # Re: First comment (2) - talkback_comment1.createReply(title='Re: First comment (2)', - text='This is my first reply (2).') - self._publish(talkback_comment1.getReplies()[1]) - - # Re: First comment (3) - talkback_comment1.createReply(title='Re: First comment (3)', - text='This is my first reply (3).') - self._publish(talkback_comment1.getReplies()[2]) - - # Re: First comment (4) - talkback_comment1.createReply(title='Re: First comment (4)', - text='This is my first reply (4).') - self._publish(talkback_comment1.getReplies()[3]) - - # Second comment - talkback.createReply(title='Second comment', - text='This is my second comment.') - self._publish(talkback.getReplies()[1]) - - # Call migration script - self.view() - - # Check migration - conversation = IConversation(self.doc) - self.assertEqual(conversation.total_comments, 8) - - comment1 = conversation.values()[0] - comment1_1 = conversation.values()[1] - comment1_1_1 = conversation.values()[2] - comment1_1_1_1 = conversation.values()[3] - comment1_2 = conversation.values()[4] - comment1_3 = conversation.values()[5] - comment1_4 = conversation.values()[6] - comment2 = conversation.values()[7] - - self.assertEqual([ - {'comment': comment1, 'depth': 0, 'id': long(comment1.id)}, - {'comment': comment1_1, 'depth': 1, 'id': long(comment1_1.id)}, - {'comment': comment1_1_1, 'depth': 2, 'id': long(comment1_1_1.id)}, - {'comment': comment1_1_1_1, 'depth': 3, - 'id': long(comment1_1_1_1.id)}, - {'comment': comment1_2, 'depth': 1, 'id': long(comment1_2.id)}, - {'comment': comment1_3, 'depth': 1, 'id': long(comment1_3.id)}, - {'comment': comment1_4, 'depth': 1, 'id': long(comment1_4.id)}, - {'comment': comment2, 'depth': 0, 'id': long(comment2.id)}, - ], list(conversation.getThreads())) - - talkback = self.discussion.getDiscussionFor(self.doc) - self.assertEqual(len(talkback.getReplies()), 0) - - def test_migrate_nested_comments_with_filter(self): - # Create some nested comments and migrate them. - # But use a filter that filters the top-level comment. - # All the comments should be removed, but not migrated. - # - # self.doc - # +- First comment - # +- Re: First comment - - talkback = self.discussion.getDiscussionFor(self.doc) - - # First comment - talkback.createReply(title='First comment', - text='This is my first comment.') - comment1 = talkback.getReplies()[0] - talkback_comment1 = self.discussion.getDiscussionFor(comment1) - - # Re: First comment - talkback_comment1.createReply(title='Re: First comment', - text='This is my first reply.') - comment1_1 = talkback_comment1.getReplies()[0] - talkback_comment1_1 = self.discussion.getDiscussionFor(comment1_1) - - self.assertEqual(len(talkback.getReplies()), 1) - self.assertEqual(len(talkback_comment1.getReplies()), 1) - self.assertEqual(len(talkback_comment1_1.getReplies()), 0) - - def deny_comments(reply): - return False - - # Call migration script - self.view(filter_callback=deny_comments) - - # Check migration - conversation = IConversation(self.doc) - self.assertEqual(conversation.total_comments, 0) - talkback = self.discussion.getDiscussionFor(self.doc) - self.assertEqual(len(talkback.getReplies()), 0) - - def test_migrate_no_comment(self): - - # Call migration script - self.view() - - # Make sure no conversation has been created - self.assertTrue( - 'plone.app.discussion:conversation' not in IAnnotations(self.doc) - ) - - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_moderation_view.py b/plone/app/discussion/tests/test_moderation_view.py index ac0a7bd..1c9cf18 100644 --- a/plone/app/discussion/tests/test_moderation_view.py +++ b/plone/app/discussion/tests/test_moderation_view.py @@ -1,8 +1,6 @@ # -*- coding: utf-8 -*- import unittest -from DateTime import DateTime - from zope.component import createObject from Products.CMFCore.utils import getToolByName @@ -58,29 +56,6 @@ class ModerationViewTest(unittest.TestCase): ('comment_review_workflow,')) self.assertEqual(self.view.moderation_enabled(), True) - def test_old_comments_not_shown_in_moderation_view(self): - # Create old comment - discussion = getToolByName(self.portal, 'portal_discussion', None) - discussion.overrideDiscussionFor(self.portal.doc1, 1) - talkback = discussion.getDiscussionFor(self.portal.doc1) - self.portal.doc1.talkback.createReply('My Title', - 'My Text', - Creator='Jim') - reply = talkback.getReplies()[0] - reply.setReplyTo(self.portal.doc1) - reply.creation_date = DateTime(2003, 3, 11, 9, 28, 6) - reply.modification_date = DateTime(2009, 7, 12, 19, 38, 7) - self.assertEqual(reply.Title(), 'My Title') - self.assertEqual(reply.EditableBody(), 'My Text') - self.assertTrue('Jim' in reply.listCreators()) - self.assertEqual(talkback.replyCount(self.portal.doc1), 1) - self.assertEqual(reply.inReplyTo(), self.portal.doc1) - - view = self.view() - - self.assertTrue('No comments to moderate' in view) - self.assertEqual(len(self.view.comments), 0) - class ModerationBulkActionsViewTest(unittest.TestCase): @@ -189,6 +164,3 @@ class ModerationBulkActionsViewTest(unittest.TestCase): self.assertTrue(comment) self.assertEqual(comment, self.comment2) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_notifications.py b/plone/app/discussion/tests/test_notifications.py index 1c397c1..548681c 100644 --- a/plone/app/discussion/tests/test_notifications.py +++ b/plone/app/discussion/tests/test_notifications.py @@ -42,7 +42,6 @@ class TestUserNotificationUnit(unittest.TestCase): '.user_notification_enabled'] = True # Create test content self.portal.invokeFactory('Document', 'doc1') - self.portal_discussion = self.portal.portal_discussion # Archetypes content types store data as utf-8 encoded strings # The missing u in front of a string is therefor not missing self.portal.doc1.title = 'Kölle Alaaf' # What is "Fasching"? @@ -189,7 +188,6 @@ class TestModeratorNotificationUnit(unittest.TestCase): ] = True # Create test content self.portal.invokeFactory('Document', 'doc1') - self.portal_discussion = self.portal.portal_discussion # Archetypes content types store data as utf-8 encoded strings # The missing u in front of a string is therefor not missing self.portal.doc1.title = 'Kölle Alaaf' # What is "Fasching"? @@ -278,6 +276,3 @@ class TestModeratorNotificationUnit(unittest.TestCase): self.assertEqual(len(self.mailhost.messages), 0) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_tool.py b/plone/app/discussion/tests/test_tool.py deleted file mode 100644 index 1386cff..0000000 --- a/plone/app/discussion/tests/test_tool.py +++ /dev/null @@ -1,56 +0,0 @@ -import unittest2 as unittest - -from zope.component import queryUtility, createObject - -from plone.app.testing import TEST_USER_ID, setRoles - -from plone.app.discussion.testing import \ - PLONE_APP_DISCUSSION_INTEGRATION_TESTING - -from plone.app.discussion.interfaces import ICommentingTool, IConversation - - -class ToolTest(unittest.TestCase): - - layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING - - def setUp(self): - self.portal = self.layer['portal'] - setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory(id='doc1', - title='Document 1', - type_name='Document') - - def test_tool_indexing(self): - # Create a conversation. In this case we doesn't assign it to an - # object, as we just want to check the Conversation object API. - conversation = IConversation(self.portal.doc1) - - # Add a comment. - comment = createObject('plone.Comment') - comment.creator = 'jim' - comment.author_name = "Jim" - comment.text = 'Comment text' - - conversation.addComment(comment) - - # Check that the comment got indexed in the tool: - tool = queryUtility(ICommentingTool) - comment = list(tool.searchResults()) - self.assertTrue( - len(comment) == 1, - "There is only one comment, but we got" - " %s results in the search" % len(comment) - ) - self.assertEqual(comment[0].Title, 'Jim on Document 1') - - def test_unindexing(self): - pass - - def test_search(self): - # search returns only comments - pass - - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/plone/app/discussion/tests/test_workflow.py b/plone/app/discussion/tests/test_workflow.py index 8ea9e30..65361aa 100644 --- a/plone/app/discussion/tests/test_workflow.py +++ b/plone/app/discussion/tests/test_workflow.py @@ -32,7 +32,6 @@ class WorkflowSetupTest(unittest.TestCase): self.portal.invokeFactory('Folder', 'test-folder') self.folder = self.portal['test-folder'] self.portal.portal_types['Document'].allow_discussion = True - self.portal_discussion = self.portal.portal_discussion self.folder.invokeFactory('Document', 'doc1') self.doc = self.folder.doc1 @@ -190,7 +189,6 @@ class CommentReviewWorkflowTest(unittest.TestCase): # Create a Document self.portal.invokeFactory('Document', 'doc1') - self.portal_discussion = self.portal.portal_discussion # Create a conversation for this Document conversation = IConversation(self.portal.doc1) @@ -277,6 +275,3 @@ class CommentReviewWorkflowTest(unittest.TestCase): ) ) - -def test_suite(): - return unittest.defaultTestLoader.loadTestsFromName(__name__) From 6ee480a229d6e8eda3bad1bae8a797c93beb7bcf Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Mon, 3 Mar 2014 15:09:30 +0100 Subject: [PATCH 188/254] fixed edit test --- plone/app/discussion/tests/test_comments_viewlet.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index a12d909..275f3b9 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -127,7 +127,7 @@ class TestCommentForm(unittest.TestCase): """ # Allow discussion - self.discussionTool.overrideDiscussionFor(self.portal.doc1, True) + self.portal.doc1.allow_discussion = True self.viewlet = CommentsViewlet(self.context, self.request, None, None) def make_request(form={}): @@ -186,11 +186,11 @@ class TestCommentForm(unittest.TestCase): self.assertEqual(len(comments), 1) for comment in comments: - self.assertEqual(comment.text, u"bar") + self.assertEqual(comment.text, u"foobar") self.assertEqual(comment.creator, "test-user") self.assertEqual(comment.getOwner().getUserName(), "test-user") local_roles = comment.get_local_roles() - self.assertEqual(len(local_roles), 1) + self.assertEqual(len(local_roles), 2) userid, roles = local_roles[0] self.assertEqual(userid, 'test-user') self.assertEqual(len(roles), 1) From 920392d1244f91919ce5e4a838fbb6d57ad91d31 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Mon, 3 Mar 2014 15:12:16 +0100 Subject: [PATCH 189/254] added Delete comments permission to manage comments deletion --- CHANGES.rst | 6 +- plone/app/discussion/browser/comments.py | 11 +-- plone/app/discussion/browser/configure.zcml | 2 +- plone/app/discussion/browser/controlpanel.py | 2 - plone/app/discussion/browser/moderation.py | 11 +-- plone/app/discussion/interfaces.py | 11 --- plone/app/discussion/permissions.zcml | 4 + .../discussion/profiles/default/rolemap.xml | 9 ++- plone/app/discussion/testing.py | 10 +++ .../tests/functional_test_comments.txt | 76 ++++--------------- 10 files changed, 43 insertions(+), 99 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 9cdfec9..9cfe383 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -25,12 +25,12 @@ Changelog - Fix ownership of comments. [toutpt] -- Provide 'delete own comments' as a configurable option - [gyst] - - Make comments editable. [pjstevns, gyst] +- Provide 'Delete comments' permission to handle comments deletion + [cekk] + 2.2.10 (2013-09-24) ------------------- diff --git a/plone/app/discussion/browser/comments.py b/plone/app/discussion/browser/comments.py index d58dfb7..0661654 100644 --- a/plone/app/discussion/browser/comments.py +++ b/plone/app/discussion/browser/comments.py @@ -312,18 +312,9 @@ class CommentsViewlet(ViewletBase): """By default requires 'Review comments'. If 'delete own comments' is enabled, requires 'Edit comments'. """ - if self.is_delete_own_comment_allowed(): - permission = 'Edit comments' - else: - permission = 'Review comments' - return getSecurityManager().checkPermission(permission, + return getSecurityManager().checkPermission('Delete comments', aq_inner(reply)) - def is_delete_own_comment_allowed(self): - registry = queryUtility(IRegistry) - settings = registry.forInterface(IDiscussionSettings, check=False) - return settings.delete_own_comment_enabled - def is_discussion_allowed(self): context = aq_inner(self.context) return context.restrictedTraverse('@@conversation_view').enabled() diff --git a/plone/app/discussion/browser/configure.zcml b/plone/app/discussion/browser/configure.zcml index facb643..427395d 100644 --- a/plone/app/discussion/browser/configure.zcml +++ b/plone/app/discussion/browser/configure.zcml @@ -88,7 +88,7 @@ name="moderate-delete-comment" layer="..interfaces.IDiscussionLayer" class=".moderation.DeleteComment" - permission="zope2.DeleteObjects" + permission="plone.app.discussion.DeleteComments" /> diff --git a/plone/app/discussion/browser/controlpanel.py b/plone/app/discussion/browser/controlpanel.py index 84ded37..822ca2b 100644 --- a/plone/app/discussion/browser/controlpanel.py +++ b/plone/app/discussion/browser/controlpanel.py @@ -54,8 +54,6 @@ class DiscussionSettingsEditForm(controlpanel.RegistryEditForm): SingleCheckBoxFieldWidget self.fields['edit_comment_enabled'].widgetFactory = \ SingleCheckBoxFieldWidget - self.fields['delete_own_comment_enabled'].widgetFactory = \ - SingleCheckBoxFieldWidget self.fields['anonymous_comments'].widgetFactory = \ SingleCheckBoxFieldWidget self.fields['show_commenter_image'].widgetFactory = \ diff --git a/plone/app/discussion/browser/moderation.py b/plone/app/discussion/browser/moderation.py index 0324a43..66f235b 100644 --- a/plone/app/discussion/browser/moderation.py +++ b/plone/app/discussion/browser/moderation.py @@ -117,18 +117,9 @@ class DeleteComment(BrowserView): """By default requires 'Review comments'. If 'delete own comments' is enabled, requires 'Edit comments'. """ - if self.is_delete_own_comment_allowed(): - permission = 'Edit comments' - else: - permission = 'Review comments' - return getSecurityManager().checkPermission(permission, + return getSecurityManager().checkPermission('Delete comments', aq_inner(reply)) - def is_delete_own_comment_allowed(self): - registry = queryUtility(IRegistry) - settings = registry.forInterface(IDiscussionSettings, check=False) - return settings.delete_own_comment_enabled - class PublishComment(BrowserView): """Publish a comment. diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index 70b9f4b..e8ff537 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -253,17 +253,6 @@ class IDiscussionSettings(Interface): default=False, ) - delete_own_comment_enabled = schema.Bool( - title=_(u"label_delete_own_comment_enabled", - default="Allow users to delete their own comment threads"), - description=_(u"help_edit_comment_enabled", - default=u"If selected, users may delete their own " - "comments -> AND the whole reply thread below that " - "comment!"), - required=False, - default=False, - ) - text_transform = schema.Choice( title=_(u"label_text_transform", default="Comment text transform"), diff --git a/plone/app/discussion/permissions.zcml b/plone/app/discussion/permissions.zcml index dd71e63..97c6782 100644 --- a/plone/app/discussion/permissions.zcml +++ b/plone/app/discussion/permissions.zcml @@ -14,5 +14,9 @@ title="Edit comments" /> + diff --git a/plone/app/discussion/profiles/default/rolemap.xml b/plone/app/discussion/profiles/default/rolemap.xml index 8e8b019..83a67fc 100644 --- a/plone/app/discussion/profiles/default/rolemap.xml +++ b/plone/app/discussion/profiles/default/rolemap.xml @@ -3,15 +3,20 @@ - + - + + + + + + diff --git a/plone/app/discussion/testing.py b/plone/app/discussion/testing.py index cf1066c..6a52a9b 100644 --- a/plone/app/discussion/testing.py +++ b/plone/app/discussion/testing.py @@ -28,6 +28,8 @@ class PloneAppDiscussion(PloneSandboxLayer): USER_WITH_FULLNAME_PASSWORD = 'secret' MANAGER_USER_NAME = 'manager' MANAGER_USER_PASSWORD = 'secret' + REVIEWER_NAME = 'reviewer' + REVIEWER_PASSWORD = 'secret' def setUpZope(self, app, configurationContext): # Load ZCML @@ -60,7 +62,15 @@ class PloneAppDiscussion(PloneSandboxLayer): ['Member'], [], ) + acl_users.userFolderAddUser( + self.REVIEWER_NAME, + self.REVIEWER_PASSWORD, + ['Member'], + [], + ) mtool = getToolByName(portal, 'portal_membership', None) + gtool = getToolByName(portal, 'portal_groups', None) + gtool.addPrincipalToGroup(self.REVIEWER_NAME, 'Reviewers') mtool.addMember('jim', 'Jim', ['Member'], []) mtool.getMemberById('jim').setMemberProperties( {"fullname": 'Jim Fult\xc3\xb8rn'}) diff --git a/plone/app/discussion/tests/functional_test_comments.txt b/plone/app/discussion/tests/functional_test_comments.txt index a31ed48..180b2b5 100644 --- a/plone/app/discussion/tests/functional_test_comments.txt +++ b/plone/app/discussion/tests/functional_test_comments.txt @@ -32,6 +32,7 @@ you're not logged in:: >>> unprivileged_browser = Browser(app) >>> browser_member = Browser(app) >>> browser_user = Browser(app) + >>> browser_reviewer = Browser(app) Make sure we have a test user from the layer and it uses fancy characters: @@ -143,7 +144,6 @@ Post a comment as member ------------------------ Login as user 'jim'. - >>> browser_member.open(portal_url + '/login_form') >>> browser_member.getControl(name='__ac_name').value = 'jim' >>> browser_member.getControl(name='__ac_password').value = 'secret' @@ -320,8 +320,8 @@ But Anon can see the edited comment. True -Deleting existing comments | 'delete own comments' disabled ------------------------------------------------------------ +Deleting existing comments | 'Delete comments' permission +---------------------------------------------------------- Anonymous cannot delete comments @@ -329,7 +329,7 @@ Anonymous cannot delete comments >>> 'form.button.Delete' in unprivileged_browser.contents False -A member cannot delete his own comments, unless this is explicitly enabled (see later) +A member cannot delete his own comments if he can't review or he isn't a Site Administrator >>> browser_member.open(urldoc1) >>> 'form.button.Delete' in browser_member.contents @@ -360,7 +360,6 @@ The comment is still there >>> comment_id in unprivileged_browser.contents True - A Member cannot delete even his own comment by hitting the delete url directly. Extract the member comment id from the admin browser @@ -387,10 +386,17 @@ The comment is still there >>> 'Comment from Jim' in browser_member.contents True -Admin, who hase 'review comments' permission, can delete comments +Now login as user 'reviewer' - >>> browser.open(urldoc1) - >>> form = browser.getForm(name='delete', index=0) + >>> browser_reviewer.open(portal_url + '/login_form') + >>> browser_reviewer.getControl(name='__ac_name').value = 'reviewer' + >>> browser_reviewer.getControl(name='__ac_password').value = 'secret' + >>> browser_reviewer.getControl(name='submit').click() + +Admin and who have 'Delete comments' permission (reviewers for example), can delete comments + + >>> browser_reviewer.open(urldoc1) + >>> form = browser_reviewer.getForm(name='delete', index=0) >>> '@@moderate-delete-comment' in form.action True @@ -406,58 +412,8 @@ We'll just catch that and check the result later. Returning to the document we find the deleted comment is indeed gone - >>> browser.open(urldoc1) - >>> comment_id in browser.contents - False - - -Deleting existing comments | 'delete own comments' ENABLED ----------------------------------------------------------- - -Enable deletion of own comments - - >>> from zope.component import queryUtility - >>> from plone.registry.interfaces import IRegistry - >>> from plone.app.discussion.interfaces import IDiscussionSettings - >>> registry = queryUtility(IRegistry) - >>> settings = registry.forInterface(IDiscussionSettings) - >>> settings.delete_own_comment_enabled = True - - >>> import transaction - >>> transaction.commit() - -Anonymous still cannot delete comments - - >>> unprivileged_browser.open(urldoc1) - >>> 'form.button.Delete' in unprivileged_browser.contents - False - -A member can now delete his own comments - - >>> browser_member.open(urldoc1) - >>> 'form.button.Delete' in browser_member.contents - True - - >>> form = browser_member.getForm(name='delete', index=0) - >>> '@@moderate-delete-comment' in form.action - True - - >>> comment_id = form.action.split('/')[-2] - -Submitting the form runs into a testbrowser notFoundException. -We'll just catch that and check the result later. - - >>> try: - ... form.submit() - ... except: - ... pass - -Returning to the document we find the deleted comment is indeed gone - - >>> browser_member.open(urldoc1) - >>> comment_id in browser_member.contents - False - >>> 'Comment from Jim' in browser_member.contents + >>> browser_reviewer.open(urldoc1) + >>> comment_id in browser_reviewer.contents False From 770651cf72aabbf91aef53a44a7974aa9b84a944 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Mon, 3 Mar 2014 16:15:12 +0100 Subject: [PATCH 190/254] fixed upgrade step --- plone/app/discussion/configure.zcml | 6 +++--- plone/app/discussion/upgrades.py | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/plone/app/discussion/configure.zcml b/plone/app/discussion/configure.zcml index 536994e..bbe8b7c 100644 --- a/plone/app/discussion/configure.zcml +++ b/plone/app/discussion/configure.zcml @@ -54,11 +54,11 @@ /> diff --git a/plone/app/discussion/upgrades.py b/plone/app/discussion/upgrades.py index bf9df71..652e060 100644 --- a/plone/app/discussion/upgrades.py +++ b/plone/app/discussion/upgrades.py @@ -2,7 +2,13 @@ from zope.component import getUtility from plone.registry.interfaces import IRegistry from plone.app.discussion.interfaces import IDiscussionSettings +default_profile = 'profile-plone.app.discussion:default' + def update_registry(context): registry = getUtility(IRegistry) registry.registerInterface(IDiscussionSettings) + + +def update_rolemap(context): + context.runImportStepFromProfile(default_profile, 'rolemap') From 22cc340ff6bc7c72a0f95403d76c1d9ef9fc8b7f Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Wed, 26 Mar 2014 18:07:28 +0100 Subject: [PATCH 191/254] fixed HISTORY and add delete test to test_comments_viewlet --- CHANGES.rst | 57 ++++++++++++++++-- .../discussion/tests/test_comments_viewlet.py | 60 ++++++++++++++++++- 2 files changed, 108 insertions(+), 9 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 9cfe383..fc099ad 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,9 +1,59 @@ Changelog ========= -2.3.0 (unreleased) +2.3.2 (unreleased) ------------------ +- bugfix: according to IDiscussionSettings.anonymous_email_enabled (cite): + "If selected, anonymous user will have to give their email." - But field + was not required. Now it is. + [jensens] + +- bugfix: anonymous email field was never saved. + [jensens] + +- updated german translations: added some missing msgstr. + [jensens] + +- added i18ndude and a script ``update_translations`` to buildout in order + to make translation updates simpler. + [jensens] + +- Fix reindexObject for content_object in moderation views. + Now reindex only "total_comments" index and not all the indexes + [cekk] + +- Fix comments Title if utf-8 characters in author_name + [huub_bouma] + +- use member.getId as author_username, so membrane users having different id + then username still have there picture shown and author path is correct. + [maartenkling] + +- Make comments editable. + [pjstevns, gyst] + +- Provide 'Delete comments' permission to handle comments deletion + [cekk] + +- Fixed Italian translations + [cekk] + + +2.3.1 (2014-02-22) +------------------ + +- 2.3.0 was a brown bag release. + [timo] + + +2.3.0 (2014-02-22) +------------------ + +- Execute the proper workflow change when using the moderation buttons instead + of hardcoding the workflow action to always publish + [omiron] + - Corrections and additions to the Danish translation [aputtu] @@ -25,11 +75,6 @@ Changelog - Fix ownership of comments. [toutpt] -- Make comments editable. - [pjstevns, gyst] - -- Provide 'Delete comments' permission to handle comments deletion - [cekk] 2.2.10 (2013-09-24) ------------------- diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index 275f3b9..efcbdf0 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -187,15 +187,69 @@ class TestCommentForm(unittest.TestCase): for comment in comments: self.assertEqual(comment.text, u"foobar") - self.assertEqual(comment.creator, "test-user") + self.assertEqual(comment.creator, "test_user_1_") self.assertEqual(comment.getOwner().getUserName(), "test-user") local_roles = comment.get_local_roles() - self.assertEqual(len(local_roles), 2) + self.assertEqual(len(local_roles), 1) userid, roles = local_roles[0] - self.assertEqual(userid, 'test-user') + self.assertEqual(userid, 'test_user_1_') self.assertEqual(len(roles), 1) self.assertEqual(roles[0], 'Owner') + def test_delete_comment(self): + """Delete a comment as logged-in user. + """ + + # Allow discussion + self.portal.doc1.allow_discussion = True + self.viewlet = CommentsViewlet(self.context, self.request, None, None) + + def make_request(form={}): + request = TestRequest() + request.form.update(form) + alsoProvides(request, IFormLayer) + alsoProvides(request, IAttributeAnnotatable) + return request + + provideAdapter( + adapts=(Interface, IBrowserRequest), + provides=Interface, + factory=CommentForm, + name=u"comment-form" + ) + + # The form is submitted successfully, if the required text field is + # filled out + form_request = make_request(form={'form.widgets.text': u'bar'}) + + commentForm = getMultiAdapter( + (self.context, form_request), + name=u"comment-form" + ) + + commentForm.update() + data, errors = commentForm.extractData() # pylint: disable-msg=W0612 + self.assertEqual(len(errors), 0) + self.assertFalse(commentForm.handleComment(commentForm, "foo")) + + # Delete the last comment + conversation = IConversation(self.context) + comment = [x for x in conversation.getComments()][-1] + deleteView = getMultiAdapter( + (comment, self.request), + name=u"moderate-delete-comment" + ) + # try to delete last comment without "Delete comments" permission + setRoles(self.portal, TEST_USER_ID, ['Member']) + self.assertRaises(Unauthorized, comment.restrictedTraverse, "@@moderate-delete-comment") + deleteView() + self.assertEqual(1, len([x for x in conversation.getComments()])) + # try to delete last comment with "Delete comments" permission + setRoles(self.portal, TEST_USER_ID, ['Reviewer']) + deleteView() + self.assertEqual(0, len([x for x in conversation.getComments()])) + setRoles(self.portal, TEST_USER_ID, ['Manager']) + def test_add_anonymous_comment(self): self.portal.doc1.allow_discussion = True From dec8bd63dd105780a25dd91ba9da99d825fde821 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Wed, 26 Mar 2014 18:22:59 +0100 Subject: [PATCH 192/254] rebased CHANGES and tests --- CHANGES.rst | 4 ++-- plone/app/discussion/tests/test_comments_viewlet.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index fc099ad..3c504a3 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -73,8 +73,8 @@ Changelog PLONE_FIXTURE. [timo] -- Fix ownership of comments. [toutpt] - +- Fix ownership of comments. + [toutpt] 2.2.10 (2013-09-24) ------------------- diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index efcbdf0..fd81b7a 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -188,6 +188,7 @@ class TestCommentForm(unittest.TestCase): for comment in comments: self.assertEqual(comment.text, u"foobar") self.assertEqual(comment.creator, "test_user_1_") + self.assertEqual(comment.getOwner().getUserName(), "test-user") local_roles = comment.get_local_roles() self.assertEqual(len(local_roles), 1) From a82352a36c197e17612000c17b40b67e663e6a3c Mon Sep 17 00:00:00 2001 From: "Guido A.J. Stevens" Date: Tue, 17 Sep 2013 12:03:46 +0000 Subject: [PATCH 193/254] Make comments editable --- CHANGES.rst | 5 ++ plone/app/discussion/browser/comment.py | 69 ++++++++++++++++++ plone/app/discussion/browser/comments.pt | 21 +++++- plone/app/discussion/browser/comments.py | 13 ++++ plone/app/discussion/browser/configure.zcml | 9 +++ plone/app/discussion/browser/controlpanel.py | 14 +++- .../browser/javascripts/comments.js | 9 +++ .../browser/javascripts/controlpanel.js | 2 + .../browser/stylesheets/discussion.css | 6 ++ plone/app/discussion/comment.py | 11 ++- plone/app/discussion/configure.zcml | 11 +++ plone/app/discussion/interfaces.py | 11 +++ plone/app/discussion/permissions.zcml | 6 ++ .../discussion/profiles/default/metadata.xml | 2 +- .../discussion/profiles/default/registry.xml | 6 +- .../discussion/profiles/default/rolemap.xml | 6 ++ .../tests/functional_test_comments.txt | 71 +++++++++++++++++++ plone/app/discussion/tests/test_comment.py | 10 +++ .../discussion/tests/test_comments_viewlet.py | 71 ++++++++++++++++++- .../app/discussion/tests/test_controlpanel.py | 16 +++++ 20 files changed, 359 insertions(+), 10 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 6790b6e..27b7716 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,7 @@ Changelog ========= + 2.3.3 (unreleased) ------------------ @@ -17,6 +18,10 @@ Changelog - Update Traditional Chinese translations. [marr] +- Make comments editable. + [pjstevns, gyst] + + 2.3.2 (2014-04-05) ------------------ diff --git a/plone/app/discussion/browser/comment.py b/plone/app/discussion/browser/comment.py index 97eec23..03e0732 100644 --- a/plone/app/discussion/browser/comment.py +++ b/plone/app/discussion/browser/comment.py @@ -1,8 +1,16 @@ from Acquisition import aq_inner, aq_parent +from AccessControl import getSecurityManager +from zope.component import getMultiAdapter +from Products.statusmessages.interfaces import IStatusMessage from Products.Five.browser import BrowserView from Products.CMFCore.utils import getToolByName +from plone.app.discussion import PloneAppDiscussionMessageFactory as _ +from comments import CommentForm +from z3c.form import button +from plone.z3cform.layout import wrap_form + class View(BrowserView): """Comment View. @@ -37,3 +45,64 @@ class View(BrowserView): url = "%s/view" % url self.request.response.redirect('%s#%s' % (url, context.id)) + + +class EditCommentForm(CommentForm): + """Form to edit an existing comment.""" + ignoreContext = True + id = "edit-comment-form" + label = _(u'edit_comment_form_title', default=u'Edit comment') + + def updateWidgets(self): + super(EditCommentForm, self).updateWidgets() + self.widgets['text'].value = self.context.text + # We have to rename the id, otherwise TinyMCE can't initialize + # because there are two textareas with the same id. + self.widgets['text'].id = 'overlay-comment-text' + + def _redirect(self, target=''): + if not target: + portal_state = getMultiAdapter((self.context, self.request), + name=u'plone_portal_state') + target = portal_state.portal_url() + self.request.response.redirect(target) + + @button.buttonAndHandler(_(u"edit_comment_form_button", + default=u"Edit comment"), name='comment') + def handleComment(self, action): + + # Validate form + data, errors = self.extractData() + if errors: + return + + # Check permissions + can_edit = getSecurityManager().checkPermission( + 'Edit comments', + self.context) + mtool = getToolByName(self.context, 'portal_membership') + if mtool.isAnonymousUser() or not can_edit: + return + + # Update text + self.context.text = data['text'] + + # Redirect to comment + IStatusMessage(self.request).add(_(u'comment_edit_notification', + default="Comment was edited"), + type='info') + return self._redirect( + target=self.action.replace("@@edit-comment", "@@view")) + + @button.buttonAndHandler(_(u'cancel_form_button', + default=u'Cancel'), name='cancel') + def handle_cancel(self, action): + IStatusMessage(self.request).add( + _(u'comment_edit_cancel_notification', + default=u'Edit comment cancelled'), + type='info') + return self._redirect(target=self.context.absolute_url()) + +EditComment = wrap_form(EditCommentForm) + +#EOF diff --git a/plone/app/discussion/browser/comments.pt b/plone/app/discussion/browser/comments.pt index 4e32e99..203e813 100644 --- a/plone/app/discussion/browser/comments.pt +++ b/plone/app/discussion/browser/comments.pt @@ -1,6 +1,7 @@ @@ -87,7 +89,7 @@ action="" method="post" class="commentactionsform" - tal:condition="canReview" + tal:condition="python:canReview" tal:attributes="action string:${reply/absolute_url}/@@moderate-delete-comment"> +
      + +
      + +
      + + + *' + }) /********************************************************************** * Delete a comment and its answers. diff --git a/plone/app/discussion/browser/javascripts/controlpanel.js b/plone/app/discussion/browser/javascripts/controlpanel.js index f821bf9..e379f6f 100644 --- a/plone/app/discussion/browser/javascripts/controlpanel.js +++ b/plone/app/discussion/browser/javascripts/controlpanel.js @@ -40,6 +40,7 @@ $.enableSettings([ $('#formfield-form-widgets-anonymous_comments'), $('#formfield-form-widgets-moderation_enabled'), + $('#formfield-form-widgets-edit_comment_enabled'), $('#formfield-form-widgets-text_transform'), $('#formfield-form-widgets-captcha'), $('#formfield-form-widgets-show_commenter_image'), @@ -52,6 +53,7 @@ $.disableSettings([ $('#formfield-form-widgets-anonymous_comments'), $('#formfield-form-widgets-moderation_enabled'), + $('#formfield-form-widgets-edit_comment_enabled'), $('#formfield-form-widgets-text_transform'), $('#formfield-form-widgets-captcha'), $('#formfield-form-widgets-show_commenter_image'), diff --git a/plone/app/discussion/browser/stylesheets/discussion.css b/plone/app/discussion/browser/stylesheets/discussion.css index a8ca7a5..3857836 100644 --- a/plone/app/discussion/browser/stylesheets/discussion.css +++ b/plone/app/discussion/browser/stylesheets/discussion.css @@ -223,3 +223,9 @@ .row .discussion label { font-weight:bold; } + +/* editing comments */ + +.overlay-edit-comment textarea { + height: 10em; +} \ No newline at end of file diff --git a/plone/app/discussion/comment.py b/plone/app/discussion/comment.py index bf41967..193f30e 100644 --- a/plone/app/discussion/comment.py +++ b/plone/app/discussion/comment.py @@ -48,6 +48,7 @@ from Products.CMFCore.CMFCatalogAware import WorkflowAware from OFS.role import RoleManager from AccessControl import ClassSecurityInfo +from AccessControl.SecurityManagement import getSecurityManager from Products.CMFCore import permissions @@ -121,6 +122,14 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable, self.creation_date = self.modification_date = datetime.utcnow() self.mime_type = 'text/plain' + user = getSecurityManager().getUser() + if user and user.getId(): + aclpath = [x for x in user.getPhysicalPath() if x] + self._owner = (aclpath, user.getId(),) + self.__ac_local_roles__ = { + user.getId(): ['Owner'] + } + @property def __name__(self): return self.comment_id and unicode(self.comment_id) or None @@ -199,7 +208,7 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable, def Creator(self): """The name of the person who wrote the comment. """ - return self.creator + return self.creator or self.author_name security.declareProtected(permissions.View, 'Type') diff --git a/plone/app/discussion/configure.zcml b/plone/app/discussion/configure.zcml index c3345f7..0a689b1 100644 --- a/plone/app/discussion/configure.zcml +++ b/plone/app/discussion/configure.zcml @@ -44,6 +44,17 @@ for="Products.CMFPlone.interfaces.IPloneSiteRoot" /> + + + diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index c39b8c5..a807580 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -243,6 +243,17 @@ class IDiscussionSettings(Interface): default=False, ) + edit_comment_enabled = schema.Bool( + title=_(u"label_edit_comment_enabled", + default="Enable editing of comments"), + description=_(u"help_edit_comment_enabled", + default=u"If selected, supports editing and deletion " + "of comments for users with the 'Edit comments' " + "permission."), + required=False, + default=False, + ) + text_transform = schema.Choice( title=_(u"label_text_transform", default="Comment text transform"), diff --git a/plone/app/discussion/permissions.zcml b/plone/app/discussion/permissions.zcml index c5b090c..dd71e63 100644 --- a/plone/app/discussion/permissions.zcml +++ b/plone/app/discussion/permissions.zcml @@ -9,4 +9,10 @@ title="Review comments" /> + + + diff --git a/plone/app/discussion/profiles/default/metadata.xml b/plone/app/discussion/profiles/default/metadata.xml index ffedb11..7a20473 100644 --- a/plone/app/discussion/profiles/default/metadata.xml +++ b/plone/app/discussion/profiles/default/metadata.xml @@ -1,5 +1,5 @@ - 100 + 101 profile-plone.app.registry:default diff --git a/plone/app/discussion/profiles/default/registry.xml b/plone/app/discussion/profiles/default/registry.xml index fd2a894..2518c9a 100644 --- a/plone/app/discussion/profiles/default/registry.xml +++ b/plone/app/discussion/profiles/default/registry.xml @@ -1,4 +1,6 @@ - - \ No newline at end of file + + False + + diff --git a/plone/app/discussion/profiles/default/rolemap.xml b/plone/app/discussion/profiles/default/rolemap.xml index 83318d8..8e8b019 100644 --- a/plone/app/discussion/profiles/default/rolemap.xml +++ b/plone/app/discussion/profiles/default/rolemap.xml @@ -6,6 +6,12 @@ + + + + + + diff --git a/plone/app/discussion/tests/functional_test_comments.txt b/plone/app/discussion/tests/functional_test_comments.txt index 55a489d..8a15209 100644 --- a/plone/app/discussion/tests/functional_test_comments.txt +++ b/plone/app/discussion/tests/functional_test_comments.txt @@ -250,6 +250,77 @@ Check that the reply has been posted properly. True +Edit an existing comment +------------------------ + +Log in as admin + + >>> browser.getLink('Log out').click() + >>> browser.open(portal_url + '/login_form') + >>> browser.getControl('Login Name').value = 'admin' + >>> browser.getControl('Password').value = 'secret' + >>> browser.getControl('Log in').click() + +Use the Plone control panel to enable comment editing. + + >>> browser.open(portal_url + '/plone_control_panel') + >>> browser.getLink('Discussion').click() + >>> browser.getControl('Enable editing of comments').selected = True + >>> browser.getControl(name='form.buttons.save').click() + +Extract the edit comment url from the first "edit comment" button + + >>> browser.open(urldoc1) + >>> form = browser.getForm(name='edit', index=0) + >>> '@@edit-comment' in form.action + True + +Open the edit comment view + + >>> browser.open(form.action) + >>> ctrl = browser.getControl('Comment') + >>> ctrl.value + 'Comment from admin' + +Change and save the comment + + >>> ctrl.value = 'Comment from admin / was edited' + >>> browser.getControl('Edit comment').click() + +This used to trigger permissions problems in some portlet configurations. +Check it ain't so. + + >>> 'require_login' in browser.url + False + >>> browser.url.startswith('http://nohost/plone/doc1') + True + >>> 'Comment from admin / was edited' in browser.contents + True + +Opening the edit comment view, then cancel, does nothing. + + >>> form = browser.getForm(name='edit', index=0) + >>> '@@edit-comment' in form.action + True + >>> browser.open(form.action) + >>> browser.getControl('Cancel').click() + >>> browser.url.startswith('http://nohost/plone/doc1') + True + + +Anon cannot edit comments. + + >>> unprivileged_browser.open(urldoc1) + >>> '@@edit-comments' in browser.contents + False + +But Anon can see the edited comment. + + >>> 'Comment from admin / was edited' in unprivileged_browser.contents + True + + + Post a comment with comment review workflow enabled --------------------------------------------------- diff --git a/plone/app/discussion/tests/test_comment.py b/plone/app/discussion/tests/test_comment.py index d3c25e0..5277f5f 100644 --- a/plone/app/discussion/tests/test_comment.py +++ b/plone/app/discussion/tests/test_comment.py @@ -142,6 +142,16 @@ class CommentTest(unittest.TestCase): comment1.creator = "jim" self.assertEqual("jim", comment1.Creator()) + def test_creator_author_name(self): + comment1 = createObject('plone.Comment') + comment1.author_name = "joey" + self.assertEqual("joey", comment1.Creator()) + + def test_owner(self): + comment1 = createObject('plone.Comment') + self.assertEqual((['plone', 'acl_users'], TEST_USER_ID), + comment1.getOwnerTuple()) + def test_type(self): comment1 = createObject('plone.Comment') self.assertEqual(comment1.Type(), 'Comment') diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index c0d45b2..e469b91 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -33,12 +33,14 @@ from plone.app.testing import login from plone.app.discussion.browser.comments import CommentsViewlet from plone.app.discussion.browser.comments import CommentForm +from plone.app.discussion.browser.comment import EditCommentForm from plone.app.discussion import interfaces from plone.app.discussion.interfaces import IConversation from plone.app.discussion.testing import ( PLONE_APP_DISCUSSION_INTEGRATION_TESTING ) from plone.app.discussion.interfaces import IDiscussionSettings +from plone.app.discussion.interfaces import IConversation class TestCommentForm(unittest.TestCase): @@ -135,6 +137,65 @@ class TestCommentForm(unittest.TestCase): self.assertEqual(len(roles), 1) self.assertEqual(roles[0], 'Owner') + def test_edit_comment(self): + """Edit a comment as logged-in user. + """ + + # Allow discussion + self.discussionTool.overrideDiscussionFor(self.portal.doc1, True) + self.viewlet = CommentsViewlet(self.context, self.request, None, None) + + def make_request(form={}): + request = TestRequest() + request.form.update(form) + alsoProvides(request, IFormLayer) + alsoProvides(request, IAttributeAnnotatable) + return request + + provideAdapter( + adapts=(Interface, IBrowserRequest), + provides=Interface, + factory=CommentForm, + name=u"comment-form" + ) + + provideAdapter( + adapts=(Interface, IBrowserRequest), + provides=Interface, + factory=EditCommentForm, + name=u"edit-comment-form" + ) + + # The form is submitted successfully, if the required text field is + # filled out + request = make_request(form={'form.widgets.text': u'bar'}) + + commentForm = getMultiAdapter( + (self.context, request), + name=u"comment-form" + ) + commentForm.update() + data, errors = commentForm.extractData() # pylint: disable-msg=W0612 + + self.assertEqual(len(errors), 0) + self.assertFalse(commentForm.handleComment(commentForm, "foo")) + + # Edit the last comment + conversation = IConversation(self.context) + comment = [x for x in conversation.getComments()][-1] + request = make_request(form={'form.widgets.text': u'foobar'}) + editForm = getMultiAdapter( + (comment, request), + name=u"edit-comment-form" + ) + editForm.update() + data, errors = editForm.extractData() # pylint: disable-msg=W0612 + + self.assertEqual(len(errors), 0) + self.assertFalse(editForm.handleComment(editForm, "foo")) + comment = [x for x in conversation.getComments()][-1] + self.assertEquals(comment.text, u"foobar") + def test_add_anonymous_comment(self): self.portal.doc1.allow_discussion = True @@ -477,9 +538,13 @@ class TestCommentsViewlet(unittest.TestCase): ) def test_get_commenter_portrait_is_none(self): - self.assertEqual( - self.viewlet.get_commenter_portrait(), - 'defaultUser.png' + + self.assertTrue( + self.viewlet.get_commenter_portrait() in ( + 'defaultUser.png', + 'defaultUser.gif', + ) + ) def test_get_commenter_portrait_without_userimage(self): diff --git a/plone/app/discussion/tests/test_controlpanel.py b/plone/app/discussion/tests/test_controlpanel.py index 40d4540..8a2ba47 100644 --- a/plone/app/discussion/tests/test_controlpanel.py +++ b/plone/app/discussion/tests/test_controlpanel.py @@ -81,6 +81,22 @@ class RegistryTest(unittest.TestCase): False ) + def test_edit_comment_enabled(self): + # Check edit_comment_enabled record + self.assertTrue('edit_comment_enabled' in IDiscussionSettings) + self.assertEqual( + self.registry['plone.app.discussion.interfaces.' + + 'IDiscussionSettings.edit_comment_enabled'], + False) + + def test_edit_comment_enabled(self): + # Check edit_comment_enabled record + self.assertTrue('edit_comment_enabled' in IDiscussionSettings) + self.assertEqual( + self.registry['plone.app.discussion.interfaces.' + + 'IDiscussionSettings.edit_comment_enabled'], + False) + def test_text_transform(self): self.assertTrue('text_transform' in IDiscussionSettings) self.assertEqual( From 520b1e83f461103faa13d35516435acf42be4ab8 Mon Sep 17 00:00:00 2001 From: "Guido A.J. Stevens" Date: Thu, 19 Sep 2013 08:39:52 +0000 Subject: [PATCH 194/254] provide "delete own comments" as a configurable option --- plone/app/discussion/browser/comments.pt | 5 +- plone/app/discussion/browser/comments.py | 18 ++- plone/app/discussion/browser/configure.zcml | 6 +- plone/app/discussion/browser/controlpanel.py | 2 + plone/app/discussion/browser/moderation.py | 34 ++++- plone/app/discussion/configure.zcml | 10 ++ plone/app/discussion/interfaces.py | 11 ++ .../discussion/profiles/default/metadata.xml | 2 +- .../tests/functional_test_comments.txt | 140 ++++++++++++++++++ 9 files changed, 217 insertions(+), 11 deletions(-) diff --git a/plone/app/discussion/browser/comments.pt b/plone/app/discussion/browser/comments.pt index 203e813..0348f33 100644 --- a/plone/app/discussion/browser/comments.pt +++ b/plone/app/discussion/browser/comments.pt @@ -36,7 +36,8 @@ has_author_link python:author_home_url and not isAnon; portrait_url python:view.get_commenter_portrait(reply.author_username); review_state python:wtool.getInfoFor(reply, 'review_state', 'none'); - canEdit python:view.can_edit(reply)" + canEdit python:view.can_edit(reply); + canDelete python:view.can_delete(reply)" tal:attributes="class python:'comment replyTreeLevel'+str(depth)+' state-'+str(review_state); id string:${reply/getId}" tal:condition="python:canReview or review_state == 'published'"> @@ -89,7 +90,7 @@ action="" method="post" class="commentactionsform" - tal:condition="python:canReview" + tal:condition="python:canDelete" tal:attributes="action string:${reply/absolute_url}/@@moderate-delete-comment"> - + diff --git a/plone/app/discussion/browser/controlpanel.py b/plone/app/discussion/browser/controlpanel.py index 822ca2b..84ded37 100644 --- a/plone/app/discussion/browser/controlpanel.py +++ b/plone/app/discussion/browser/controlpanel.py @@ -54,6 +54,8 @@ class DiscussionSettingsEditForm(controlpanel.RegistryEditForm): SingleCheckBoxFieldWidget self.fields['edit_comment_enabled'].widgetFactory = \ SingleCheckBoxFieldWidget + self.fields['delete_own_comment_enabled'].widgetFactory = \ + SingleCheckBoxFieldWidget self.fields['anonymous_comments'].widgetFactory = \ SingleCheckBoxFieldWidget self.fields['show_commenter_image'].widgetFactory = \ diff --git a/plone/app/discussion/browser/moderation.py b/plone/app/discussion/browser/moderation.py index 55110e8..ea92515 100644 --- a/plone/app/discussion/browser/moderation.py +++ b/plone/app/discussion/browser/moderation.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- from Acquisition import aq_inner, aq_parent +from AccessControl import getSecurityManager +from zope.component import queryUtility from Products.Five.browser import BrowserView from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile @@ -8,6 +10,8 @@ from Products.CMFCore.utils import getToolByName from Products.statusmessages.interfaces import IStatusMessage +from plone.registry.interfaces import IRegistry +from plone.app.discussion.interfaces import IDiscussionSettings from plone.app.discussion.interfaces import _ from plone.app.discussion.interfaces import IComment @@ -94,17 +98,37 @@ class DeleteComment(BrowserView): comment = aq_inner(self.context) conversation = aq_parent(comment) content_object = aq_parent(conversation) - del conversation[comment.id] - content_object.reindexObject(idxs=['total_comments']) - IStatusMessage(self.context.REQUEST).addStatusMessage( - _("Comment deleted."), - type="info") + # conditional security + # base ZCML condition zope2.deleteObject allows 'delete own object' + # modify this for 'delete_own_comment_allowed' controlpanel setting + if self.can_delete(comment): + del conversation[comment.id] + content_object.reindexObject() + IStatusMessage(self.context.REQUEST).addStatusMessage( + _("Comment deleted."), + type="info") came_from = self.context.REQUEST.HTTP_REFERER # if the referrer already has a came_from in it, don't redirect back if len(came_from) == 0 or 'came_from=' in came_from: came_from = content_object.absolute_url() return self.context.REQUEST.RESPONSE.redirect(came_from) + def can_delete(self, reply): + """By default requires 'Review comments'. + If 'delete own comments' is enabled, requires 'Edit comments'. + """ + if self.is_delete_own_comment_allowed(): + permission = 'Edit comments' + else: + permission = 'Review comments' + return getSecurityManager().checkPermission(permission, + aq_inner(reply)) + + def is_delete_own_comment_allowed(self): + registry = queryUtility(IRegistry) + settings = registry.forInterface(IDiscussionSettings, check=False) + return settings.delete_own_comment_enabled + class PublishComment(BrowserView): """Publish a comment. diff --git a/plone/app/discussion/configure.zcml b/plone/app/discussion/configure.zcml index 0a689b1..d1d2675 100644 --- a/plone/app/discussion/configure.zcml +++ b/plone/app/discussion/configure.zcml @@ -54,6 +54,16 @@ profile="plone.app.discussion:default" /> + + diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index a807580..5a6cc8d 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -254,6 +254,17 @@ class IDiscussionSettings(Interface): default=False, ) + delete_own_comment_enabled = schema.Bool( + title=_(u"label_delete_own_comment_enabled", + default="Allow users to delete their own comment threads"), + description=_(u"help_edit_comment_enabled", + default=u"If selected, users may delete their own " + "comments -> AND the whole reply thread below that " + "comment!"), + required=False, + default=False, + ) + text_transform = schema.Choice( title=_(u"label_text_transform", default="Comment text transform"), diff --git a/plone/app/discussion/profiles/default/metadata.xml b/plone/app/discussion/profiles/default/metadata.xml index 7a20473..ce1f445 100644 --- a/plone/app/discussion/profiles/default/metadata.xml +++ b/plone/app/discussion/profiles/default/metadata.xml @@ -1,5 +1,5 @@ - 101 + 102 profile-plone.app.registry:default diff --git a/plone/app/discussion/tests/functional_test_comments.txt b/plone/app/discussion/tests/functional_test_comments.txt index 8a15209..9e7350c 100644 --- a/plone/app/discussion/tests/functional_test_comments.txt +++ b/plone/app/discussion/tests/functional_test_comments.txt @@ -320,6 +320,146 @@ But Anon can see the edited comment. True +Deleting existing comments | 'delete own comments' disabled +----------------------------------------------------------- + +Anonymous cannot delete comments + + >>> unprivileged_browser.open(urldoc1) + >>> 'form.button.Delete' in unprivileged_browser.contents + False + +A member cannot delete his own comments, unless this is explicitly enabled (see later) + + >>> browser_member.open(urldoc1) + >>> 'form.button.Delete' in browser_member.contents + False + +Admin can delete comments + + >>> browser.open(urldoc1) + >>> 'form.button.Delete' in browser.contents + True + +Extract the delete comment url from the first "delete comment" button + + >>> browser.open(urldoc1) + >>> form = browser.getForm(name='delete', index=0) + >>> delete_url = form.action + >>> '@@moderate-delete-comment' in delete_url + True + >>> comment_id = delete_url.split('/')[-2] + +Anonymous cannot delete a comment by hitting the delete url directly. + + >>> unprivileged_browser.open(delete_url) + +The comment is still there + + >>> unprivileged_browser.open(urldoc1) + >>> comment_id in unprivileged_browser.contents + True + + +A Member cannot delete even his own comment by hitting the delete url directly. + +Extract the member comment id from the admin browser + + >>> form = browser.getForm(name='delete', index=2) + >>> delete_url = form.action + >>> '@@moderate-delete-comment' in delete_url + True + >>> comment_id = delete_url.split('/')[-2] + +Now try to hit that url as the member owning that comment. +Work around some possible testbrowser breakage and check the result later. + + >>> try: + ... browser_member.open(delete_url) + ... except: + ... pass + +The comment is still there + + >>> browser_member.open(urldoc1) + >>> comment_id in browser_member.contents + True + >>> 'Comment from Jim' in browser_member.contents + True + +Admin, who hase 'review comments' permission, can delete comments + + >>> browser.open(urldoc1) + >>> form = browser.getForm(name='delete', index=0) + >>> '@@moderate-delete-comment' in form.action + True + + >>> comment_id = form.action.split('/')[-2] + +Submitting the form runs into a testbrowser notFoundException. +We'll just catch that and check the result later. + + >>> try: + ... form.submit() + ... except: + ... pass + +Returning to the document we find the deleted comment is indeed gone + + >>> browser.open(urldoc1) + >>> comment_id in browser.contents + False + + +Deleting existing comments | 'delete own comments' ENABLED +---------------------------------------------------------- + +Enable deletion of own comments + + >>> from zope.component import queryUtility + >>> from plone.registry.interfaces import IRegistry + >>> from plone.app.discussion.interfaces import IDiscussionSettings + >>> registry = queryUtility(IRegistry) + >>> settings = registry.forInterface(IDiscussionSettings) + >>> settings.delete_own_comment_enabled = True + + >>> import transaction + >>> transaction.commit() + +Anonymous still cannot delete comments + + >>> unprivileged_browser.open(urldoc1) + >>> 'form.button.Delete' in unprivileged_browser.contents + False + +A member can now delete his own comments + + >>> browser_member.open(urldoc1) + >>> 'form.button.Delete' in browser_member.contents + True + + >>> form = browser_member.getForm(name='delete', index=0) + >>> '@@moderate-delete-comment' in form.action + True + + >>> comment_id = form.action.split('/')[-2] + +Submitting the form runs into a testbrowser notFoundException. +We'll just catch that and check the result later. + + >>> try: + ... form.submit() + ... except: + ... pass + +Returning to the document we find the deleted comment is indeed gone + + >>> browser_member.open(urldoc1) + >>> comment_id in browser_member.contents + False + >>> 'Comment from Jim' in browser_member.contents + False + Post a comment with comment review workflow enabled --------------------------------------------------- From 3711d2fb5fb9867344f232f4b7dec0175601540f Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Tue, 4 Feb 2014 11:35:20 +0100 Subject: [PATCH 195/254] rebased branch from master --- CHANGES.rst | 2 ++ .../app/discussion/tests/test_comments_viewlet.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 27b7716..4ac4976 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -100,6 +100,8 @@ Changelog [toutpt] +======= +>>>>>>> rebased branch from master 2.2.10 (2013-09-24) ------------------- diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index e469b91..dcf4246 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -196,6 +196,21 @@ class TestCommentForm(unittest.TestCase): comment = [x for x in conversation.getComments()][-1] self.assertEquals(comment.text, u"foobar") + comments = IConversation(commentForm.context).getComments() + comments = [comment for comment in comments] # consume itertor + self.assertEqual(len(comments), 1) + + for comment in comments: + self.assertEqual(comment.text, u"bar") + self.assertEqual(comment.creator, "test-user") + self.assertEqual(comment.getOwner().getUserName(), "test-user") + local_roles = comment.get_local_roles() + self.assertEqual(len(local_roles), 1) + userid, roles = local_roles[0] + self.assertEqual(userid, 'test-user') + self.assertEqual(len(roles), 1) + self.assertEqual(roles[0], 'Owner') + def test_add_anonymous_comment(self): self.portal.doc1.allow_discussion = True From fd16144b9b3dd8e7881e141f750d741b5e2073f5 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Mon, 3 Mar 2014 15:09:30 +0100 Subject: [PATCH 196/254] fixed edit test --- plone/app/discussion/tests/test_comments_viewlet.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index dcf4246..449efee 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -142,7 +142,7 @@ class TestCommentForm(unittest.TestCase): """ # Allow discussion - self.discussionTool.overrideDiscussionFor(self.portal.doc1, True) + self.portal.doc1.allow_discussion = True self.viewlet = CommentsViewlet(self.context, self.request, None, None) def make_request(form={}): @@ -201,11 +201,11 @@ class TestCommentForm(unittest.TestCase): self.assertEqual(len(comments), 1) for comment in comments: - self.assertEqual(comment.text, u"bar") + self.assertEqual(comment.text, u"foobar") self.assertEqual(comment.creator, "test-user") self.assertEqual(comment.getOwner().getUserName(), "test-user") local_roles = comment.get_local_roles() - self.assertEqual(len(local_roles), 1) + self.assertEqual(len(local_roles), 2) userid, roles = local_roles[0] self.assertEqual(userid, 'test-user') self.assertEqual(len(roles), 1) From 9a4e3718fc8ae7e6f8f229058a27092b0d121a84 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Mon, 3 Mar 2014 15:12:16 +0100 Subject: [PATCH 197/254] added Delete comments permission to manage comments deletion --- CHANGES.rst | 5 +- plone/app/discussion/browser/comments.py | 11 +-- plone/app/discussion/browser/configure.zcml | 2 +- plone/app/discussion/browser/controlpanel.py | 2 - plone/app/discussion/browser/moderation.py | 11 +-- plone/app/discussion/interfaces.py | 11 --- plone/app/discussion/permissions.zcml | 4 + .../discussion/profiles/default/rolemap.xml | 9 ++- plone/app/discussion/testing.py | 10 +++ .../tests/functional_test_comments.txt | 76 ++++--------------- 10 files changed, 43 insertions(+), 98 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 4ac4976..181c1cf 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -21,6 +21,9 @@ Changelog - Make comments editable. [pjstevns, gyst] +- Provide 'Delete comments' permission to handle comments deletion + [cekk] + 2.3.2 (2014-04-05) ------------------ @@ -100,8 +103,6 @@ Changelog [toutpt] -======= ->>>>>>> rebased branch from master 2.2.10 (2013-09-24) ------------------- diff --git a/plone/app/discussion/browser/comments.py b/plone/app/discussion/browser/comments.py index 8993303..5376875 100644 --- a/plone/app/discussion/browser/comments.py +++ b/plone/app/discussion/browser/comments.py @@ -328,18 +328,9 @@ class CommentsViewlet(ViewletBase): """By default requires 'Review comments'. If 'delete own comments' is enabled, requires 'Edit comments'. """ - if self.is_delete_own_comment_allowed(): - permission = 'Edit comments' - else: - permission = 'Review comments' - return getSecurityManager().checkPermission(permission, + return getSecurityManager().checkPermission('Delete comments', aq_inner(reply)) - def is_delete_own_comment_allowed(self): - registry = queryUtility(IRegistry) - settings = registry.forInterface(IDiscussionSettings, check=False) - return settings.delete_own_comment_enabled - def is_discussion_allowed(self): context = aq_inner(self.context) return context.restrictedTraverse('@@conversation_view').enabled() diff --git a/plone/app/discussion/browser/configure.zcml b/plone/app/discussion/browser/configure.zcml index facb643..427395d 100644 --- a/plone/app/discussion/browser/configure.zcml +++ b/plone/app/discussion/browser/configure.zcml @@ -88,7 +88,7 @@ name="moderate-delete-comment" layer="..interfaces.IDiscussionLayer" class=".moderation.DeleteComment" - permission="zope2.DeleteObjects" + permission="plone.app.discussion.DeleteComments" /> diff --git a/plone/app/discussion/browser/controlpanel.py b/plone/app/discussion/browser/controlpanel.py index 84ded37..822ca2b 100644 --- a/plone/app/discussion/browser/controlpanel.py +++ b/plone/app/discussion/browser/controlpanel.py @@ -54,8 +54,6 @@ class DiscussionSettingsEditForm(controlpanel.RegistryEditForm): SingleCheckBoxFieldWidget self.fields['edit_comment_enabled'].widgetFactory = \ SingleCheckBoxFieldWidget - self.fields['delete_own_comment_enabled'].widgetFactory = \ - SingleCheckBoxFieldWidget self.fields['anonymous_comments'].widgetFactory = \ SingleCheckBoxFieldWidget self.fields['show_commenter_image'].widgetFactory = \ diff --git a/plone/app/discussion/browser/moderation.py b/plone/app/discussion/browser/moderation.py index ea92515..84748f7 100644 --- a/plone/app/discussion/browser/moderation.py +++ b/plone/app/discussion/browser/moderation.py @@ -117,18 +117,9 @@ class DeleteComment(BrowserView): """By default requires 'Review comments'. If 'delete own comments' is enabled, requires 'Edit comments'. """ - if self.is_delete_own_comment_allowed(): - permission = 'Edit comments' - else: - permission = 'Review comments' - return getSecurityManager().checkPermission(permission, + return getSecurityManager().checkPermission('Delete comments', aq_inner(reply)) - def is_delete_own_comment_allowed(self): - registry = queryUtility(IRegistry) - settings = registry.forInterface(IDiscussionSettings, check=False) - return settings.delete_own_comment_enabled - class PublishComment(BrowserView): """Publish a comment. diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index 5a6cc8d..a807580 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -254,17 +254,6 @@ class IDiscussionSettings(Interface): default=False, ) - delete_own_comment_enabled = schema.Bool( - title=_(u"label_delete_own_comment_enabled", - default="Allow users to delete their own comment threads"), - description=_(u"help_edit_comment_enabled", - default=u"If selected, users may delete their own " - "comments -> AND the whole reply thread below that " - "comment!"), - required=False, - default=False, - ) - text_transform = schema.Choice( title=_(u"label_text_transform", default="Comment text transform"), diff --git a/plone/app/discussion/permissions.zcml b/plone/app/discussion/permissions.zcml index dd71e63..97c6782 100644 --- a/plone/app/discussion/permissions.zcml +++ b/plone/app/discussion/permissions.zcml @@ -14,5 +14,9 @@ title="Edit comments" /> + diff --git a/plone/app/discussion/profiles/default/rolemap.xml b/plone/app/discussion/profiles/default/rolemap.xml index 8e8b019..83a67fc 100644 --- a/plone/app/discussion/profiles/default/rolemap.xml +++ b/plone/app/discussion/profiles/default/rolemap.xml @@ -3,15 +3,20 @@ - + - + + + + + + diff --git a/plone/app/discussion/testing.py b/plone/app/discussion/testing.py index e7a397d..90f08f9 100644 --- a/plone/app/discussion/testing.py +++ b/plone/app/discussion/testing.py @@ -34,6 +34,8 @@ class PloneAppDiscussion(PloneSandboxLayer): USER_WITH_FULLNAME_PASSWORD = 'secret' MANAGER_USER_NAME = 'manager' MANAGER_USER_PASSWORD = 'secret' + REVIEWER_NAME = 'reviewer' + REVIEWER_PASSWORD = 'secret' def setUpZope(self, app, configurationContext): # Load ZCML @@ -66,7 +68,15 @@ class PloneAppDiscussion(PloneSandboxLayer): ['Member'], [], ) + acl_users.userFolderAddUser( + self.REVIEWER_NAME, + self.REVIEWER_PASSWORD, + ['Member'], + [], + ) mtool = getToolByName(portal, 'portal_membership', None) + gtool = getToolByName(portal, 'portal_groups', None) + gtool.addPrincipalToGroup(self.REVIEWER_NAME, 'Reviewers') mtool.addMember('jim', 'Jim', ['Member'], []) mtool.getMemberById('jim').setMemberProperties( {"fullname": 'Jim Fult\xc3\xb8rn'}) diff --git a/plone/app/discussion/tests/functional_test_comments.txt b/plone/app/discussion/tests/functional_test_comments.txt index 9e7350c..c0d1159 100644 --- a/plone/app/discussion/tests/functional_test_comments.txt +++ b/plone/app/discussion/tests/functional_test_comments.txt @@ -32,6 +32,7 @@ you're not logged in:: >>> unprivileged_browser = Browser(app) >>> browser_member = Browser(app) >>> browser_user = Browser(app) + >>> browser_reviewer = Browser(app) Make sure we have a test user from the layer and it uses fancy characters: @@ -143,7 +144,6 @@ Post a comment as member ------------------------ Login as user 'jim'. - >>> browser_member.open(portal_url + '/login_form') >>> browser_member.getControl(name='__ac_name').value = 'jim' >>> browser_member.getControl(name='__ac_password').value = 'secret' @@ -320,8 +320,8 @@ But Anon can see the edited comment. True -Deleting existing comments | 'delete own comments' disabled ------------------------------------------------------------ +Deleting existing comments | 'Delete comments' permission +---------------------------------------------------------- Anonymous cannot delete comments @@ -329,7 +329,7 @@ Anonymous cannot delete comments >>> 'form.button.Delete' in unprivileged_browser.contents False -A member cannot delete his own comments, unless this is explicitly enabled (see later) +A member cannot delete his own comments if he can't review or he isn't a Site Administrator >>> browser_member.open(urldoc1) >>> 'form.button.Delete' in browser_member.contents @@ -360,7 +360,6 @@ The comment is still there >>> comment_id in unprivileged_browser.contents True - A Member cannot delete even his own comment by hitting the delete url directly. Extract the member comment id from the admin browser @@ -387,10 +386,17 @@ The comment is still there >>> 'Comment from Jim' in browser_member.contents True -Admin, who hase 'review comments' permission, can delete comments +Now login as user 'reviewer' - >>> browser.open(urldoc1) - >>> form = browser.getForm(name='delete', index=0) + >>> browser_reviewer.open(portal_url + '/login_form') + >>> browser_reviewer.getControl(name='__ac_name').value = 'reviewer' + >>> browser_reviewer.getControl(name='__ac_password').value = 'secret' + >>> browser_reviewer.getControl(name='submit').click() + +Admin and who have 'Delete comments' permission (reviewers for example), can delete comments + + >>> browser_reviewer.open(urldoc1) + >>> form = browser_reviewer.getForm(name='delete', index=0) >>> '@@moderate-delete-comment' in form.action True @@ -406,58 +412,8 @@ We'll just catch that and check the result later. Returning to the document we find the deleted comment is indeed gone - >>> browser.open(urldoc1) - >>> comment_id in browser.contents - False - - -Deleting existing comments | 'delete own comments' ENABLED ----------------------------------------------------------- - -Enable deletion of own comments - - >>> from zope.component import queryUtility - >>> from plone.registry.interfaces import IRegistry - >>> from plone.app.discussion.interfaces import IDiscussionSettings - >>> registry = queryUtility(IRegistry) - >>> settings = registry.forInterface(IDiscussionSettings) - >>> settings.delete_own_comment_enabled = True - - >>> import transaction - >>> transaction.commit() - -Anonymous still cannot delete comments - - >>> unprivileged_browser.open(urldoc1) - >>> 'form.button.Delete' in unprivileged_browser.contents - False - -A member can now delete his own comments - - >>> browser_member.open(urldoc1) - >>> 'form.button.Delete' in browser_member.contents - True - - >>> form = browser_member.getForm(name='delete', index=0) - >>> '@@moderate-delete-comment' in form.action - True - - >>> comment_id = form.action.split('/')[-2] - -Submitting the form runs into a testbrowser notFoundException. -We'll just catch that and check the result later. - - >>> try: - ... form.submit() - ... except: - ... pass - -Returning to the document we find the deleted comment is indeed gone - - >>> browser_member.open(urldoc1) - >>> comment_id in browser_member.contents - False - >>> 'Comment from Jim' in browser_member.contents + >>> browser_reviewer.open(urldoc1) + >>> comment_id in browser_reviewer.contents False From f67f12bd05cba8863af4cb8eb381bc53eaf97d05 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Mon, 3 Mar 2014 16:15:12 +0100 Subject: [PATCH 198/254] fixed upgrade step --- plone/app/discussion/configure.zcml | 6 +++--- plone/app/discussion/upgrades.py | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/plone/app/discussion/configure.zcml b/plone/app/discussion/configure.zcml index d1d2675..66c5296 100644 --- a/plone/app/discussion/configure.zcml +++ b/plone/app/discussion/configure.zcml @@ -55,11 +55,11 @@ /> diff --git a/plone/app/discussion/upgrades.py b/plone/app/discussion/upgrades.py index bf9df71..652e060 100644 --- a/plone/app/discussion/upgrades.py +++ b/plone/app/discussion/upgrades.py @@ -2,7 +2,13 @@ from zope.component import getUtility from plone.registry.interfaces import IRegistry from plone.app.discussion.interfaces import IDiscussionSettings +default_profile = 'profile-plone.app.discussion:default' + def update_registry(context): registry = getUtility(IRegistry) registry.registerInterface(IDiscussionSettings) + + +def update_rolemap(context): + context.runImportStepFromProfile(default_profile, 'rolemap') From e453e0050b3502c9639bfeb0e2d722d82e933f26 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Wed, 26 Mar 2014 18:07:28 +0100 Subject: [PATCH 199/254] fixed HISTORY and add delete test to test_comments_viewlet --- CHANGES.rst | 1 - .../discussion/tests/test_comments_viewlet.py | 60 ++++++++++++++++++- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 181c1cf..55ef5bf 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,7 +1,6 @@ Changelog ========= - 2.3.3 (unreleased) ------------------ diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index 449efee..d020cd6 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -202,15 +202,69 @@ class TestCommentForm(unittest.TestCase): for comment in comments: self.assertEqual(comment.text, u"foobar") - self.assertEqual(comment.creator, "test-user") + self.assertEqual(comment.creator, "test_user_1_") self.assertEqual(comment.getOwner().getUserName(), "test-user") local_roles = comment.get_local_roles() - self.assertEqual(len(local_roles), 2) + self.assertEqual(len(local_roles), 1) userid, roles = local_roles[0] - self.assertEqual(userid, 'test-user') + self.assertEqual(userid, 'test_user_1_') self.assertEqual(len(roles), 1) self.assertEqual(roles[0], 'Owner') + def test_delete_comment(self): + """Delete a comment as logged-in user. + """ + + # Allow discussion + self.portal.doc1.allow_discussion = True + self.viewlet = CommentsViewlet(self.context, self.request, None, None) + + def make_request(form={}): + request = TestRequest() + request.form.update(form) + alsoProvides(request, IFormLayer) + alsoProvides(request, IAttributeAnnotatable) + return request + + provideAdapter( + adapts=(Interface, IBrowserRequest), + provides=Interface, + factory=CommentForm, + name=u"comment-form" + ) + + # The form is submitted successfully, if the required text field is + # filled out + form_request = make_request(form={'form.widgets.text': u'bar'}) + + commentForm = getMultiAdapter( + (self.context, form_request), + name=u"comment-form" + ) + + commentForm.update() + data, errors = commentForm.extractData() # pylint: disable-msg=W0612 + self.assertEqual(len(errors), 0) + self.assertFalse(commentForm.handleComment(commentForm, "foo")) + + # Delete the last comment + conversation = IConversation(self.context) + comment = [x for x in conversation.getComments()][-1] + deleteView = getMultiAdapter( + (comment, self.request), + name=u"moderate-delete-comment" + ) + # try to delete last comment without "Delete comments" permission + setRoles(self.portal, TEST_USER_ID, ['Member']) + self.assertRaises(Unauthorized, comment.restrictedTraverse, "@@moderate-delete-comment") + deleteView() + self.assertEqual(1, len([x for x in conversation.getComments()])) + # try to delete last comment with "Delete comments" permission + setRoles(self.portal, TEST_USER_ID, ['Reviewer']) + deleteView() + self.assertEqual(0, len([x for x in conversation.getComments()])) + setRoles(self.portal, TEST_USER_ID, ['Manager']) + def test_add_anonymous_comment(self): self.portal.doc1.allow_discussion = True From 4f255a355d97583513565da602561a2360e4c861 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Wed, 26 Mar 2014 18:22:59 +0100 Subject: [PATCH 200/254] rebased CHANGES and tests --- plone/app/discussion/tests/test_comments_viewlet.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index d020cd6..0aff711 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -203,6 +203,7 @@ class TestCommentForm(unittest.TestCase): for comment in comments: self.assertEqual(comment.text, u"foobar") self.assertEqual(comment.creator, "test_user_1_") + self.assertEqual(comment.getOwner().getUserName(), "test-user") local_roles = comment.get_local_roles() self.assertEqual(len(local_roles), 1) From e9a4dcfc52a42dffeeea631b34ff38f9f7b6c94a Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Fri, 16 May 2014 17:39:57 +0200 Subject: [PATCH 201/254] relaunched i18ndude and fix italian translations --- CHANGES.rst | 2 + plone/app/discussion/i18n/plone-ca.po | 2 +- plone/app/discussion/i18n/plone-cs.po | 2 +- plone/app/discussion/i18n/plone-da.po | 2 +- plone/app/discussion/i18n/plone-de.po | 2 +- plone/app/discussion/i18n/plone-el.po | 2 +- plone/app/discussion/i18n/plone-es.po | 2 +- plone/app/discussion/i18n/plone-eu.po | 2 +- plone/app/discussion/i18n/plone-fr.po | 2 +- plone/app/discussion/i18n/plone-it.po | 2 +- plone/app/discussion/i18n/plone-ja.po | 2 +- plone/app/discussion/i18n/plone-nl.po | 2 +- plone/app/discussion/i18n/plone-no.po | 2 +- plone/app/discussion/i18n/plone-pt_BR.po | 2 +- plone/app/discussion/i18n/plone-sk.po | 2 +- plone/app/discussion/i18n/plone-uk.po | 2 +- plone/app/discussion/i18n/plone-zh_CN.po | 2 +- plone/app/discussion/i18n/plone-zh_TW.po | 2 +- plone/app/discussion/i18n/plone.pot | 2 +- .../af/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../ca/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../cs/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../da/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../de/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../es/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../eu/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../fi/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../fr/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../it/LC_MESSAGES/plone.app.discussion.po | 145 +++++++++++------- .../ja/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../nl/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../no/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../locales/plone.app.discussion.pot | 109 ++++++++----- .../pt/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../pt_BR/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../ro/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../sk/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../sv/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../uk/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../zh_CN/LC_MESSAGES/plone.app.discussion.po | 107 ++++++++----- .../zh_TW/LC_MESSAGES/plone.app.discussion.po | 109 ++++++++----- 41 files changed, 1601 insertions(+), 833 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 55ef5bf..566f0d4 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -23,6 +23,8 @@ Changelog - Provide 'Delete comments' permission to handle comments deletion [cekk] +- Fixed Italian translations [cekk] + 2.3.2 (2014-04-05) ------------------ diff --git a/plone/app/discussion/i18n/plone-ca.po b/plone/app/discussion/i18n/plone-ca.po index 67b48c0..cd8adc1 100644 --- a/plone/app/discussion/i18n/plone-ca.po +++ b/plone/app/discussion/i18n/plone-ca.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: Victor Fernandez de Alba \n" "Language-Team: LANGUAGE \n" diff --git a/plone/app/discussion/i18n/plone-cs.po b/plone/app/discussion/i18n/plone-cs.po index a515afc..358c58e 100644 --- a/plone/app/discussion/i18n/plone-cs.po +++ b/plone/app/discussion/i18n/plone-cs.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2010-11-03 14:51+0100\n" "Last-Translator: Radim Novotny \n" "Language-Team: DMS4U \n" diff --git a/plone/app/discussion/i18n/plone-da.po b/plone/app/discussion/i18n/plone-da.po index f50808f..2547543 100644 --- a/plone/app/discussion/i18n/plone-da.po +++ b/plone/app/discussion/i18n/plone-da.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Anton Stonor \n" "Language-Team: Anton Stonor \n" diff --git a/plone/app/discussion/i18n/plone-de.po b/plone/app/discussion/i18n/plone-de.po index 70e7184..28a446a 100644 --- a/plone/app/discussion/i18n/plone-de.po +++ b/plone/app/discussion/i18n/plone-de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2010-03-17 16:11+0100\n" "Last-Translator: Timo Stollenwerk \n" "Language-Team: Deutsch \n" diff --git a/plone/app/discussion/i18n/plone-el.po b/plone/app/discussion/i18n/plone-el.po index 10a3f51..75218cf 100644 --- a/plone/app/discussion/i18n/plone-el.po +++ b/plone/app/discussion/i18n/plone-el.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2010-02-23 10:26+0100\n" "Last-Translator: Yiorgis Gozadinos \n" "Language-Team: Greek \n" diff --git a/plone/app/discussion/i18n/plone-es.po b/plone/app/discussion/i18n/plone-es.po index 84c3e75..83918db 100644 --- a/plone/app/discussion/i18n/plone-es.po +++ b/plone/app/discussion/i18n/plone-es.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: Mikel Larreategi \n" diff --git a/plone/app/discussion/i18n/plone-eu.po b/plone/app/discussion/i18n/plone-eu.po index b3a1055..f5f59ec 100644 --- a/plone/app/discussion/i18n/plone-eu.po +++ b/plone/app/discussion/i18n/plone-eu.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: Mikel Larreategi \n" diff --git a/plone/app/discussion/i18n/plone-fr.po b/plone/app/discussion/i18n/plone-fr.po index 680f2bb..7bcdc3e 100644 --- a/plone/app/discussion/i18n/plone-fr.po +++ b/plone/app/discussion/i18n/plone-fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2010-08-06 19:23+0100\n" "Last-Translator: Vincent Fretin \n" "Language-Team: Vincent Fretin \n" diff --git a/plone/app/discussion/i18n/plone-it.po b/plone/app/discussion/i18n/plone-it.po index f62ea04..3a73214 100644 --- a/plone/app/discussion/i18n/plone-it.po +++ b/plone/app/discussion/i18n/plone-it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/plone/app/discussion/i18n/plone-ja.po b/plone/app/discussion/i18n/plone-ja.po index 0ecccdb..203e0d1 100644 --- a/plone/app/discussion/i18n/plone-ja.po +++ b/plone/app/discussion/i18n/plone-ja.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2011-04-18 13:13+0900\n" "Last-Translator: Takeshi Yamamoto \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/i18n/plone-nl.po b/plone/app/discussion/i18n/plone-nl.po index 5120025..8811833 100644 --- a/plone/app/discussion/i18n/plone-nl.po +++ b/plone/app/discussion/i18n/plone-nl.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2011-09-30 16:02+0100\n" "Last-Translator: NFG Net Facilities Group BV \n" "Language-Team: Nederlands \n" diff --git a/plone/app/discussion/i18n/plone-no.po b/plone/app/discussion/i18n/plone-no.po index 25acd02..dc914f0 100644 --- a/plone/app/discussion/i18n/plone-no.po +++ b/plone/app/discussion/i18n/plone-no.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/plone/app/discussion/i18n/plone-pt_BR.po b/plone/app/discussion/i18n/plone-pt_BR.po index 4c5b5c3..ad4906d 100644 --- a/plone/app/discussion/i18n/plone-pt_BR.po +++ b/plone/app/discussion/i18n/plone-pt_BR.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2011-04-14 17:38-0300\n" "Last-Translator: Andre Nogueira \n" "Language-Team: Plone i18n \n" diff --git a/plone/app/discussion/i18n/plone-sk.po b/plone/app/discussion/i18n/plone-sk.po index 2aeb820..19dc7ce 100644 --- a/plone/app/discussion/i18n/plone-sk.po +++ b/plone/app/discussion/i18n/plone-sk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2012-07-02 17:54+0100\n" "Last-Translator: Radim Novotny \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/i18n/plone-uk.po b/plone/app/discussion/i18n/plone-uk.po index 039aee2..7515c1d 100644 --- a/plone/app/discussion/i18n/plone-uk.po +++ b/plone/app/discussion/i18n/plone-uk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2013-04-12 14:55+0300\n" "Last-Translator: Roman Kozlovskyi \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/i18n/plone-zh_CN.po b/plone/app/discussion/i18n/plone-zh_CN.po index 8fa987f..62e313d 100644 --- a/plone/app/discussion/i18n/plone-zh_CN.po +++ b/plone/app/discussion/i18n/plone-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2011-08-19 12:23+0800\n" "Last-Translator: Jian Aijun \n" "Language-Team: plone \n" diff --git a/plone/app/discussion/i18n/plone-zh_TW.po b/plone/app/discussion/i18n/plone-zh_TW.po index 17e77c4..efb78ac 100644 --- a/plone/app/discussion/i18n/plone-zh_TW.po +++ b/plone/app/discussion/i18n/plone-zh_TW.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2010-08-07 23:11+0800\n" "Last-Translator: TsungWei Hu \n" "Language-Team: Taiwan Python User Group \n" diff --git a/plone/app/discussion/i18n/plone.pot b/plone/app/discussion/i18n/plone.pot index 885461c..03eb8b7 100644 --- a/plone/app/discussion/i18n/plone.pot +++ b/plone/app/discussion/i18n/plone.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Hanno Schlichting \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po index ba138ce..0770096 100644 --- a/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po @@ -33,7 +33,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "'n Opmerking is geplaas." @@ -45,20 +45,20 @@ msgstr "'n ID uniek tot hierdie gesprek" msgid "Add a comment" msgstr "Voeg 'n opmerking by" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Anonieme kommentaar" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Kanselleer" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Opmerking goedgekeur" @@ -74,7 +74,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Opmerking verwyder" @@ -86,7 +86,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Kommentator se Profielfoto" @@ -113,11 +113,11 @@ msgstr "" msgid "Disabled" msgstr "Uitgeskakel" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Kommentaar instellings" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "" @@ -125,7 +125,7 @@ msgstr "" msgid "Email" msgstr "E-pos" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Laat kommentare toe" @@ -137,7 +137,7 @@ msgstr "Id van dié opmerking waarop hierdie een antwoord" msgid "MIME type" msgstr "MIME-tipe" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "E-pos in kennis stelling vir die redaksie" @@ -161,7 +161,7 @@ msgstr "Plone Kommentare" msgid "Portal type" msgstr "Portaaltipe" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "" @@ -177,11 +177,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Gebruik e-pos in kennis stelling" @@ -208,6 +208,11 @@ msgstr "Skrap" msgid "bulkactions_publish" msgstr "Keur goed" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -228,12 +233,32 @@ msgstr "" msgid "comment_description_plain_text" msgstr "" +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 #, fuzzy msgid "comment_title" msgstr "${creator} op ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -270,22 +295,27 @@ msgid "help_anonymous_comments" msgstr "Indien geselekteer, sal anonieme besoekers opmerkings kan laat sonder om aan te meld. Die captcha-oplossing word aanbeveel indien hierdie opsie aangeskakel word, om gemorspos te voorkom." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Gebruik hierdie instelling om Captcha validasie vir kommentaar aan of af te skakel. Installeer plone.formwidget of plone.formwidget.captcha indien daar geen opsies beskikbaar is nie." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "Sommige besprekingsinstellings kom nie op hierdie bladsy voor nie.\n" "Om kommentaar vir 'n spesifieke inhoudstipe aan te skakel, gaan na die Tipes Konfigurasie, kies 'Comment' en stel die werksvloei na \"Comment Review Workflow\"." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -297,34 +327,34 @@ msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Indien geselekteer, sal die moderator in kennis gestel word wanneer 'n opmerking aandag verg." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Indien geselekteer, sal die profielfoto van 'n gebruiker langs sy opmerking vertoon." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Indien geselekteer, sal gebruikers kan kies om per e-pos van nuwe kommentaar in kennis gestel te word." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anoniem" @@ -334,7 +364,7 @@ msgid "label_anonymous_comments" msgstr "Skakel anonieme kommentaar aan" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -344,7 +374,7 @@ msgid "label_apply" msgstr "Pas toe" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -354,7 +384,7 @@ msgid "label_comment" msgstr "Opmerking" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "" @@ -363,6 +393,11 @@ msgstr "" msgid "label_delete" msgstr "Skrap" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -374,12 +409,12 @@ msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Skakel moderator e-pos in kennis stelling aan" @@ -389,12 +424,12 @@ msgid "label_publish" msgstr "Keur goed" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "sê:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Vertoon kommentaarleweraar se foto" @@ -409,23 +444,23 @@ msgid "label_subject" msgstr "Onderwerp" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Kommentaar tekstransformasie" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Skakel e-pos in kennis stelling aan vir gebruikers" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 #, fuzzy msgid "mail_notification_message" msgstr "'n Opmerking is op '${title}' gelewer: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po index 537bd7a..61dc606 100644 --- a/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Comentari afegit." @@ -26,20 +26,20 @@ msgstr "Un identificador exclusiu assignat al comentari per aquesta conversa" msgid "Add a comment" msgstr "Afegir un comentari" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Comentaris anònims" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Cancel·la" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Comentari aprovat." @@ -55,7 +55,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Comentari esborrat." @@ -67,7 +67,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Imatge de l'autor" @@ -94,11 +94,11 @@ msgstr "" msgid "Disabled" msgstr "Desactivat" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Configuració dels comentaris" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "" @@ -106,7 +106,7 @@ msgstr "" msgid "Email" msgstr "Correu electrònic" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Permetre comentaris" @@ -118,7 +118,7 @@ msgstr "Identificador únic del comentari en relació al comentari del qual és msgid "MIME type" msgstr "Tipus MIME" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Notificació al moderador per correu electrònic" @@ -142,7 +142,7 @@ msgstr "Plone Discussions" msgid "Portal type" msgstr "Tipus d'objecte" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "" @@ -158,11 +158,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Notificació a l'usuari via mail" @@ -189,6 +189,11 @@ msgstr "Esborra" msgid "bulkactions_publish" msgstr "Publica" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -209,12 +214,32 @@ msgstr "" msgid "comment_description_plain_text" msgstr "" +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 #, fuzzy msgid "comment_title" msgstr "${creator} sobre ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -251,20 +276,25 @@ msgid "help_anonymous_comments" msgstr "Si està seleccionada, els usuaris anònims podran afegir comentaris sense identificar-se. Es recomana la utilització de una eina de captcha per evitar comentaris spam si aquesta opció està activada." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Utilitzeu aquesta opció per activar o desactivar una eina de captcha pels comentaris. Instal·leu plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet o collective.z3cform.norobots si no teniu cap opció disponible." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "Algunes de les configuracions dels comentaris no estan en la element de configuració 'Comentaris' del panell de control de l'espai. Per activar els comentaris per un tipus de contingut específic, dirigiu-vos al element de configuració 'Tipus' i activeu la opció 'Permetre comentaris'. Per activar el circuit de treball (workflow) de moderació de comentaris, dirigiu-vos al element de configuració de 'Tipus', seleccioneu 'Comentari' i escolliu el 'Workflow de moderació de comentaris'." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -276,34 +306,34 @@ msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Si està seleccionada, es notificarà per correu electrònic al moderador els nous comentaris." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Si està seleccionada, es mostrarà el retrat (o imatge) que hagi configurat l'usuari en el seu perfil juntament amb el comentari." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Si està seleccionada, els usuaris poden escollir si volen ser notificats cada cop que s'afegeixi un nou comentari al contingut." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anònim" @@ -313,7 +343,7 @@ msgid "label_anonymous_comments" msgstr "Permetre comentaris anònims" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -323,7 +353,7 @@ msgid "label_apply" msgstr "Aplica" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -333,7 +363,7 @@ msgid "label_comment" msgstr "Comentari" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "" @@ -342,6 +372,11 @@ msgstr "" msgid "label_delete" msgstr "Esborra" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -353,12 +388,12 @@ msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Activa la notificació al moderador" @@ -368,12 +403,12 @@ msgid "label_publish" msgstr "Aprova" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "diu:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Mostra el retrat (o imatge) de l'autor" @@ -388,23 +423,23 @@ msgid "label_subject" msgstr "Tema" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Transformacions aplicades al text del comentari" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Activa les notificacions als usuaris" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 #, fuzzy msgid "mail_notification_message" msgstr "S'ha publicat un comentari sobre el contingut ${title} en aquesta adreça: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po index b32355b..2339a07 100644 --- a/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Komentář byl přidán." @@ -26,20 +26,20 @@ msgstr "Identifikátor komentáře v této konverzaci." msgid "Add a comment" msgstr "Přidat komentář" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Anonymní komentáře" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Storno" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Změny byly uloženy" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Komentář byl schválen." @@ -55,7 +55,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Komentář byl odebrán." @@ -67,7 +67,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Portét komentujícího" @@ -94,11 +94,11 @@ msgstr "" msgid "Disabled" msgstr "Zakázáno" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Nastavení komentářů" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Úpravy byly stornovány" @@ -106,7 +106,7 @@ msgstr "Úpravy byly stornovány" msgid "Email" msgstr "Email" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Povolit komentáře" @@ -118,7 +118,7 @@ msgstr "Id předchozího komentáře, na který je tento odpovědí" msgid "MIME type" msgstr "MIME typ" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Notifikace moderátorů emailem" @@ -142,7 +142,7 @@ msgstr "Komentáře" msgid "Portal type" msgstr "Typ položky" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Uložit" @@ -158,11 +158,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Notifikace emailem" @@ -189,6 +189,11 @@ msgstr "Odebrat" msgid "bulkactions_publish" msgstr "Schválit" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -209,12 +214,32 @@ msgstr "Komentáře jsou moderovány." msgid "comment_description_plain_text" msgstr "Pokud chcete přidat komentář, zadejte jej do formuláře níže. Nejsou povoleny žádné formátovací značky." +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 #, fuzzy msgid "comment_title" msgstr "${creator} k ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -251,23 +276,28 @@ msgid "help_anonymous_comments" msgstr "Je-li zaškrtnuto, nepřihlášení uživatelé mohou posílat komentáře. Doporučujeme použití Captcha, pokud povolíte tuto volbu." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Zde můžete povolit nebo zakázat Captcha pro komentáře. Pokud zde není žádná možnost k výběru, nainstalujte prosím balíček plone.formwidget.captcha nebo plone.formwidget.recaptcha, collective.akismet nebo collective.z3cform.norobots." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "Nekterá nastavení pro diskuse nejsou k dispozici v ovládacím panelu komentářů.\n" " Povolení komentářů pro konkrétní typ položek se provádí v ovládacím panelu Typy, kde zaškrtnete \"Povolit komentáře\".\n" " Pokud chcete povolit moderování komentářů, přejděte do ovládacích panelů Typy, vyberte typ položky \"Komentář\" a nastavte workflow na \"Schvalovací workflow pro komentáře\"." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -279,34 +309,34 @@ msgid "help_moderation_enabled" msgstr "Je-li zaškrtnuto, pakbudou komentáře moderované. Po zadání komentáře bude tento komentář ve stavu \"čeká na schválení\" a nebude viditelný nepřihlášeným návštěvníkům. Moderátor (uživatel, ktewrý má opravnění schvalovat komentáře) může takové komentáře schválit a tedy zviditelnit všem." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "Adresa, na kterou budou zasílány notifikační emaily moderátorlů" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Je-li zaškrtnuto, moderátor je upozorněn na komentáře, které vyžadují jeho zásah." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Je-li zaškrtnuto, je vedle komentáře zobrazen portrét autora komentáře." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "Zde můžete nastavit, zda mají být komentáře nějak upraveny. Je možné vybrat mezi Plain text (prostý, neupravený text) nebo \"Intelligent text\". Intelligent text konvertuje odkazy na aktivní linky a převádí text do HTML tak, jak je vidět na obrazovce (tedy se zachováním nových řádků a odsazení)." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Je-li zaškrtnuto, uživatelé se mohou rozhodnout zda si přejí být upozorněni na nové komentáře emailem." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anonym" @@ -316,7 +346,7 @@ msgid "label_anonymous_comments" msgstr "Povolit anonymní komentáře" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -326,7 +356,7 @@ msgid "label_apply" msgstr "Provést" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -336,7 +366,7 @@ msgid "label_comment" msgstr "Komentář" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "Komentáře byly zakázány." @@ -345,6 +375,11 @@ msgstr "Komentáře byly zakázány." msgid "label_delete" msgstr "Odebrat" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -356,12 +391,12 @@ msgid "label_moderation_enabled" msgstr "Povolit moderování komentářů" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Email adresa moderátora" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Povolit emailovou notifikaci moderátorů" @@ -371,12 +406,12 @@ msgid "label_publish" msgstr "Schválit" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "píše:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Zobrazit portrét komentujícího" @@ -391,17 +426,17 @@ msgid "label_subject" msgstr "Předmět" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Transformace textu" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Povolit notifikaci uživatelů emailem" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" "Na adrese ${link} byl přidán komentář k položce '${title}'}\n" @@ -411,7 +446,7 @@ msgstr "" "---" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "Na adrese ${link} byl vložen komentář k položce '${title}'\n" diff --git a/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po index c57e546..8035c72 100644 --- a/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone.app.discussion\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Der er oprettet en kommentar." @@ -26,20 +26,20 @@ msgstr "Et kommentar-id som er unikt for denne dialog" msgid "Add a comment" msgstr "Tilføj en kommentar" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Anonyme kommentarer" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Afbryd" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Ændringer gemt" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Kommentar godkendt." @@ -55,7 +55,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Kommentar slettet." @@ -67,7 +67,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Kommentar-billede" @@ -94,11 +94,11 @@ msgstr "Dato for den seneste, offentlige kommentar" msgid "Disabled" msgstr "Slået fra" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Indstilling for kommentarer" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Redigering blev afbrudt" @@ -106,7 +106,7 @@ msgstr "Redigering blev afbrudt" msgid "Email" msgstr "E-mail" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Slå kommentarer til" @@ -118,7 +118,7 @@ msgstr "Id'et på den kommentar, denne kommentar er et svar til" msgid "MIME type" msgstr "MIME-type" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Notificering af moderator" @@ -142,7 +142,7 @@ msgstr "Plone diskussioner" msgid "Portal type" msgstr "Portaltype" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Gem" @@ -158,11 +158,11 @@ msgstr "Gruppen af unikke kommentatorer (brugernavne) fra published_comments" msgid "Total number of public comments on this item" msgstr "Det samlede antal offentlige kommentarer til dette element" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "E-mail-notificering af brugere" @@ -189,6 +189,11 @@ msgstr "Slet" msgid "bulkactions_publish" msgstr "Godkend" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -209,12 +214,32 @@ msgstr "Kommentarer er modereret." msgid "comment_description_plain_text" msgstr "Du kan tilføje en kommentar ved at udfylde formularen nedenfor. Ren tekst-formattering." +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 #, fuzzy msgid "comment_title" msgstr "${creator} på ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -251,20 +276,25 @@ msgid "help_anonymous_comments" msgstr "Hvis du krydser af, kan anonyme brugere skrive kommentarer uden at være logget ind. I så fald er det en god ide at bruge CAPTCHA for at forhindre spam." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Her kan du slå CAPTCHA til og fra for kommentarer. Installer plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet eller collective.z3cform.norobots, hvis der ikke er nogen valgmuligheder nedenfor." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "Du kan justere kommentarindstillingerne nedenfor. Bemærk, at der også er indstillinger andre steder, som påvirker kommentarer. For at slå kommentarer til for en bestemt indholdstype, så klik \"Typer\" på Kontrolpanelet og afkryds \"Tillad kommentarer\" for typen. For at slå modereringsworkflow til kommentarer, så vælg \"Kommentar\" under \"Typer\" på Kontrolpanelet og vælg workflowet \"Godkendelses-workflow for kommentarer\"" +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -276,34 +306,34 @@ msgid "help_moderation_enabled" msgstr "Hvis du krydser af, vil kommentarer automatisk bliver sat i en \"Afventer\"-tilstand, hvor de er usynlige for offentligheden. En bruger med rettigheder til at moderere kommentarer kan godkende kommentarer og gøre dem synlige for offentligheden." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "Adresse på den person, som skal modtage moderator-notificeringer." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Hvis du krydser af, får en moderator besked, hvis en kommentarer skal vurderes." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Hvis du krydser af, bliver der vist et billede af brugeren ved siden af kommentaren." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "Vælg, hvordan kommentartekster skal vises. Du kan vælge mellem \"Plan text\", \"Markdown\" og \"Intelligent text\". Plain text gør ingenting. Markdown fortolker teksten efter Markdown-standarden. Intelligent text oversætter teksten til HTML og bibeholder indrykninger, linjeskift og oversætter emails og webadresser til klikbare links." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Hvis den er slået til, kan brugere få besked om nye kommentarer over email." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anonym" @@ -313,7 +343,7 @@ msgid "label_anonymous_comments" msgstr "Slå anonym kommentering til" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -323,7 +353,7 @@ msgid "label_apply" msgstr "Udfør" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "CAPTCHA" @@ -333,7 +363,7 @@ msgid "label_comment" msgstr "Kommentar" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "Kommentering er slået fra." @@ -342,6 +372,11 @@ msgstr "Kommentering er slået fra." msgid "label_delete" msgstr "Slet" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -353,12 +388,12 @@ msgid "label_moderation_enabled" msgstr "Slå kommentarmoderering til" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Email på moderator" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Slå moderatorer-notificering til" @@ -368,12 +403,12 @@ msgid "label_publish" msgstr "Godkend" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "siger:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Vis kommentator-billede" @@ -388,23 +423,23 @@ msgid "label_subject" msgstr "Emne" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Formattering af kommentar-tekst" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Slå bruger-notificering til" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 #, fuzzy msgid "mail_notification_message" msgstr "En kommentarer om '${title}' er blevet gemt her: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "En kommentar til '${title}' er blevet indsendt her: ${link}\n" diff --git a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po index 3ddff5c..37a228f 100644 --- a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Ein Kommentar wurde abgegeben." @@ -26,20 +26,20 @@ msgstr "Eine eindeutige ID des Kommentars" msgid "Add a comment" msgstr "Kommentar hinzufügen" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Anonyme Kommentare" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Abbrechen" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Änderungen gespeichert" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Kommentar zur Veröffentlichung freigegeben." @@ -55,7 +55,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Kommentar gelöscht" @@ -67,7 +67,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Porträt des Benutzers" @@ -94,11 +94,11 @@ msgstr "Datum des neuesten öffentlichen Kommentars" msgid "Disabled" msgstr "Ausgeschaltet" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Kommentierungseinstellungen" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Bearbeitung abgebrochen" @@ -106,7 +106,7 @@ msgstr "Bearbeitung abgebrochen" msgid "Email" msgstr "E-Mail" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Kommentare einschalten" @@ -118,7 +118,7 @@ msgstr "ID des Kommentars, auf den geantwortet wird." msgid "MIME type" msgstr "MIME-Typ" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Moderator E-Mail Benachrichtigung" @@ -142,7 +142,7 @@ msgstr "" msgid "Portal type" msgstr "Artikeltyp" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Speichern" @@ -158,11 +158,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "Summe der veröffentlichten Kommentare zu diesem Artikel" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "Transformation '%s' => '%s' ist nicht verfügbar." -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "E-Mail-Benachrichtigungen für Benutzer" @@ -189,6 +189,11 @@ msgstr "Löschen" msgid "bulkactions_publish" msgstr "Veröffentlichen" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -209,11 +214,31 @@ msgstr "Kommentare werden moderiert." msgid "comment_description_plain_text" msgstr "Sie können einen Kommentar abgeben, indem Sie das untenstehende Formular ausfüllen. Nur Text." +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 msgid "comment_title" msgstr "${author_name} zu ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -250,18 +275,18 @@ msgid "help_anonymous_comments" msgstr "Wenn Sie diese Einstellung aktivieren, können anonyme Benutzer Kommentare abgeben. Es ist empfehlenswert, dann auch Captchas zu aktivieren." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "Wenn Sie diese Einstellung aktivieren, müssen anonyme Benutzer ihre E-Mail-Adresse angeben." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 #, fuzzy msgid "help_captcha" msgstr "Wenn Sie diese Einstellung aktivieren, wird mit Hilfe der Captcha-Validierung überprüft, ob die Kommentare von einem echten Benutzer oder von einem automatisierten Skript stammen. Falls Sie die Option nicht einschalten können, fehlt evtl. ein benötigtes Programmmodul. Stellen Sie sicher, dass entweder plone.formwidget.captcha oder plone.formwidget.recaptcha installiert ist." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 #, fuzzy msgid "help_discussion_settings_editform" msgstr "" @@ -269,6 +294,11 @@ msgstr "" "\n" "Um die Moderation von Kommentaren zu aktivieren, wählen Sie den Artikeltyp 'Kommentar' aus und wählen Sie als neuen Arbeitsablauf 'Arbeitsablauf für moderierte Kommentare'." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 #, fuzzy @@ -281,34 +311,34 @@ msgid "help_moderation_enabled" msgstr "Falls ausgewählt werden Kommentare in einem für die Öffentlichkeit unsichtbaren Schwebezustand gehalten, bis sie ein Benutzer mit der 'Review comments' Berechtigung ('Reviewer' or 'Manager') genehmigt und damit für die Öffentlichkeit sichtbar macht. Wenn Sie einen angepassten Arbeitsablauf für Kommentare einstellen wollen, so geht das mit dem Menu unter Artikeltypen." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "E-Mail Adresse an welche die Moderatoren-Benachrichtigungen gesendet werden." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Falls ausgewählt erhält der Moderator eine E-Mail, wenn ein Kommentar Aufmerksamkeit braucht. Die E-Mail-Adresse des Moderators kann weiter unten angegeben werden." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Wenn Sie diese Einstellung aktivieren, wird das Porträt des kommentierenden Benutzers neben dem Kommentar angezeigt." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "Diese Einstellung wählen, wenn eine Transformation in irgend einer Art und Weise gewünscht ist. Sie können zwischen 'Plain text' und 'Intelligent text' wählen. 'Intelligent text' wandelt Plain Text in HTML um, dabei werden Zeilenumbrüche und Einrückungen beibehalten sowie Weblinks und E-Mail-Adressen in klickbare Links verwandelt." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Wenn Sie diese Einstellung auswählen, können Benutzer angeben, dass sie über neue Kommentare per E-Mail informiert werden möchten." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anonymer Benutzer" @@ -318,7 +348,7 @@ msgid "label_anonymous_comments" msgstr "Anonyme Kommentare" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "E-Mail Feld für anonyme Kommentare einschalten" @@ -328,7 +358,7 @@ msgid "label_apply" msgstr "Anwenden" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -338,7 +368,7 @@ msgid "label_comment" msgstr "Kommentar" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "Kommentare wurden abgeschaltet." @@ -347,6 +377,11 @@ msgstr "Kommentare wurden abgeschaltet." msgid "label_delete" msgstr "Löschen" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -358,12 +393,12 @@ msgid "label_moderation_enabled" msgstr "Moderation für Kommentare einschalten" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "E-Mail Adresse des Moderators" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Email-Benachrichtigungen für Moderatoren aktivieren" @@ -373,12 +408,12 @@ msgid "label_publish" msgstr "Veröffentlichen" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "sagt" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Zeige das Portrait des Kommentators" @@ -393,17 +428,17 @@ msgid "label_subject" msgstr "Betreff" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Text transformationen" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "E-Mail-Benachrichtigungen für Benutzer aktivieren" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" "Ein Kommentar zu '${title}' wurde hier abgegeben: ${link}\n" @@ -413,7 +448,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "Ein Kommentar zu '${title}' wurde hier abgegeben: ${link}\n" diff --git a/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po index 2bbc42d..0b72e35 100644 --- a/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po @@ -16,7 +16,7 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Is-Fallback-For: es-ar es-bo es-cl es-co es-cr es-do es-ec es-es es-sv es-gt es-hn es-mx es-ni es-pa es-py es-pe es-pr es-us es-uy es-ve\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Comentario añadido." @@ -28,20 +28,20 @@ msgstr "Un comentario de ID exclusivo para esta conversación" msgid "Add a comment" msgstr "Añadir un comentario" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Comentarios anónimos" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Cancelar" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Cambios guardados" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Comentario aprobado." @@ -57,7 +57,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Comentario eliminado." @@ -69,7 +69,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Imagen del autor" @@ -96,11 +96,11 @@ msgstr "" msgid "Disabled" msgstr "Desactivado" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Ajustes de discusión" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Edición cancelada" @@ -108,7 +108,7 @@ msgstr "Edición cancelada" msgid "Email" msgstr "Correo electrónico" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Permitir comentarios" @@ -120,7 +120,7 @@ msgstr "ID del comentario este comentario es en respuesta a" msgid "MIME type" msgstr "Tipo MIME" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Notificación al moderador por correo electrónico" @@ -144,7 +144,7 @@ msgstr "Plone Discussions" msgid "Portal type" msgstr "Tipo de objeto" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Guardar" @@ -160,11 +160,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Notificaciones de correo para usuarios" @@ -191,6 +191,11 @@ msgstr "Borrar" msgid "bulkactions_publish" msgstr "Aprobar" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -211,12 +216,32 @@ msgstr "Los comentarios son moderados." msgid "comment_description_plain_text" msgstr "Puede agregar un comentario llenando el sigueinte formulario. Formato de texto plano." +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 #, fuzzy msgid "comment_title" msgstr "${creator} sobre ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -253,23 +278,28 @@ msgid "help_anonymous_comments" msgstr "Si está seleccionado, los usuarios anónimos podrán añadir comentarios sin tener que iniciar una sesión. Recomendamos encarecidamente que utilice una solución Captcha para evitar el spam si esta opción está activada." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Utilice esta opción para activar o desactivar Captcha para los comentarios. Instale plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet o collective.z3cform.norobots si no tiene ninguna opción disponible." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "Algunos de los ajustes sobre los comentarios no están en el Panel de Control de Discusiones.\n" "Para activar comentarios para un tipo de objeto específico, vaya al Panel de Control de Tipos y elija 'Activar Comentarios'.\n" "Para activar el workflow de moderación de comentarios, vaya al Panel de Control de Tipos, elija 'Comentario' y elija el 'Workflow de Moderación de Comentarios'." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -281,34 +311,34 @@ msgid "help_moderation_enabled" msgstr "Si está seleccionado, los comentarios entraran en un estado 'Pendiente' en el cual ellos no son visibles para el público. Un usuario con el permiso 'Revisar comentarios' ('Revisor' o 'Administrador') puede aprobar los comentarios y hacerlos visibles al público. Si desea habilitar un workflow de comentarios diferente, puede hacerlo a través de la opción 'Configuración de Tipos' en el panel de control." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "La dirección de correo electrónico a la cual se enviarán las notificaciones de moderación." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Si está seleccionado, se notifica al moderador cuando un nuevo comentario requiere de su atención. La dirección de correo electrónico del moderador se puede encontrar en la opción 'Configuración de correo' del panel de control (Dirección del remitente del sitio)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Si está seleccionado, se mostrará una imagen del autor junto al comentario." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "Elija si el texto de los comentario será transformado de algún modo. Puede seleccionar entre 'Texto plano' y 'Texto inteligente'. 'Texto inteligente' convierte el texto plano en HTML, conservando los cambios de línea y la indentación, y transformando las direcciones web y de correo electrónico en vínculos." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Si está seleccionado, los usuarios pueden solicitar recibir avisos por correo cuando haya nuevos comentarios." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anónimo" @@ -318,7 +348,7 @@ msgid "label_anonymous_comments" msgstr "Permitir comentarios anónimos" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -328,7 +358,7 @@ msgid "label_apply" msgstr "Aplicar" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -338,7 +368,7 @@ msgid "label_comment" msgstr "Comentario" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "Los comentarios han sido inhabilitados." @@ -347,6 +377,11 @@ msgstr "Los comentarios han sido inhabilitados." msgid "label_delete" msgstr "Borrar" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -358,12 +393,12 @@ msgid "label_moderation_enabled" msgstr "Habilitar la moderación de comentarios" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Dirección de correo electrónico del moderador" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Activar notificación al moderador" @@ -373,12 +408,12 @@ msgid "label_publish" msgstr "Aprobar" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "dice:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Mostrar imagen del autor" @@ -393,17 +428,17 @@ msgid "label_subject" msgstr "Tema" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Transformaciones aplicadas al texto del comentario" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Activar notificación de correo a los usuarios" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" "Se ha agregado un comentario a ${title} aquí: ${link}\n" @@ -413,7 +448,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "Se ha agregado un comentario a '${title}' aquí: ${link}\n" diff --git a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po index dbf91e7..bad2b9c 100644 --- a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po @@ -15,7 +15,7 @@ msgstr "" "Domain: DOMAIN\n" "X-Poedit-Language: Basque\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Erantzun bat argitaratu da." @@ -27,20 +27,20 @@ msgstr "Eztabaida honetarako bakarra den erantzunaren id-a." msgid "Add a comment" msgstr "Erantzuna gehitu" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Erantzun anonimoak" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Utzi" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Aldaketak gordeta" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Erantzuna onartuta." @@ -56,7 +56,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Erantzuna ezabatuta." @@ -68,7 +68,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Erantzuna eman duenaren irudia." @@ -95,11 +95,11 @@ msgstr "Azken erantzunaren data" msgid "Disabled" msgstr "Desaktibatuta" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Eztabaidaren ezarpenak" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Edizioa utzita" @@ -107,7 +107,7 @@ msgstr "Edizioa utzita" msgid "Email" msgstr "E-posta" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Erantzunak aktibatu" @@ -119,7 +119,7 @@ msgstr "Erantzun honek erreferentzia egiten dion erantzunaren id-a" msgid "MIME type" msgstr "MIME mota" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Moderatzailea e-postaz abisatu" @@ -143,7 +143,7 @@ msgstr "Plone Eztabaidak" msgid "Portal type" msgstr "Elementu mota" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Gorde" @@ -159,11 +159,11 @@ msgstr "Erantzun-emaleen erabiltzaile izenak" msgid "Total number of public comments on this item" msgstr "Elementu honen erantzun publiko kopurua" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "'%s' => '%s' eraldaketa ez dago erabilgarri." -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "E-posta abisuak" @@ -190,6 +190,11 @@ msgstr "Ezabatu" msgid "bulkactions_publish" msgstr "Onartu" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -210,11 +215,31 @@ msgstr "Erantzunak moderatuta daude." msgid "comment_description_plain_text" msgstr "Erantzuna formulario hau betez utzi dezakezu. Formatua testu arruntarena da." +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 msgid "comment_title" msgstr "${content} - ${creator}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -251,23 +276,28 @@ msgid "help_anonymous_comments" msgstr "Aukeratuta badago, erabiltzaile anonimoek erantzunak gehitu ditzakete login egin gabe. Berariaz gomendatzen dizugu Captcha kontrolen bat aktibatzea anonimoen erantzunak baimentzen badituzu." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "Aukeratuta badago, erabiltzaile anonimoek eposta helbidea idatzi beharko dute" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Erabili aukera hau Captcha aktibatu edo desaktibatzeko. Instalatu plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet edo collective.z3cform.norobots aukerarik ez baldin badago." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "Erantzunei dagozkien ezarpen batzuk ez daude Eztabaiden Kontrol Panelean.\n" "Elementu-mota jakin bati erantzunak aktibatzeko, joan elementu-moten kontrol panelera, aukeratu elementua eta aktibatu 'Erantzunak Baimendu'.\n" "Erantzunen Moderazio Workflowa aktibatzeko, joan elementu-moten kontrol panelera, aukeratu 'Erantzuna' eta ezarri 'Erantzunen Moderazio Workflowa'." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -279,34 +309,34 @@ msgid "help_moderation_enabled" msgstr "Aukeratuta badago, erantzuna 'Zain' izeneko egoeran geldituko da eta ez da argitaratuko. 'Erantzunak errebisatu' baimena duten erabiltzaileek ('Zuzentzailea' edo 'Kudeatzailea') argitaratu ditzakete albisteak. Erantzunen worfklowa pertsonalizatu nahi baduzu, elementu-moten kontrol panelera joan zaitez." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "Moderatzailearen notifikazioak bidali behar diren helbidea." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Aukeratuta badago, moderatzaileari e-posta abisua helduko zaio erantzun bat gehitzean. Moderatzailearen e-posta atariaren E-postaren konfigurazioan dago (Atariaren 'Nork' helbidea)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Aukeratuta badago, erantzuna eman duenaren irudi bat agertuko da testuaren ondoan." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "Erabili aukera hau erantzunaren testua nolabait eraldatu behar bada. 'Testu arrunta' edo 'Testu argia'ren artean aukeratu dezakezu. 'Testu argia'-k testu arrunta HTML bihurtzen du lerro saltoak eta espazioak mantenduz, eta web helbideak eta e-postak klikagarri eginez." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Aukeratuta badago, erabiltzaileek euren erantzunen erantzunak e-postaz jasotzea aktibatu dezakete." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anonimoak" @@ -316,7 +346,7 @@ msgid "label_anonymous_comments" msgstr "Aktibatu erabiltzaile anonimoen erantzunak" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "Aktibatu anonimoentzat eposta eremua" @@ -326,7 +356,7 @@ msgid "label_apply" msgstr "Aplikatu" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -336,7 +366,7 @@ msgid "label_comment" msgstr "Erantzuna" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "Ezin da erantzunik gehitu." @@ -345,6 +375,11 @@ msgstr "Ezin da erantzunik gehitu." msgid "label_delete" msgstr "Ezabatu" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -356,12 +391,12 @@ msgid "label_moderation_enabled" msgstr "Erantzunen moderazioa aktibatu." #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Moderatzailearen e-posta helbidea" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Aktibatu moderatzaileari e-postaz abisatzea" @@ -371,12 +406,12 @@ msgid "label_publish" msgstr "Argitaratu" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "dio:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Erantzuna eman duenaren irudia erakutsi" @@ -391,17 +426,17 @@ msgid "label_subject" msgstr "Gaia" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Erantzunari aplikatu beharreko transformazioa" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Aktibatu erabiltzaileek e-postaz jakinaraztea" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" "Erantzuna berria:Izenburua: ${title} \n" @@ -411,7 +446,7 @@ msgstr "" "--" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "Erantzun berria:\n" diff --git a/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po index a16eff2..07e5c6c 100644 --- a/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po @@ -16,7 +16,7 @@ msgstr "" "X-Poedit-Language: Finnish\n" "X-Poedit-Country: FINLAND\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "" @@ -28,20 +28,20 @@ msgstr "Tämän keskustelun sisällä uniikki tunniste" msgid "Add a comment" msgstr "Lisää viesti" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Viestit tunnistamattomilta käyttäjiltä" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Peru" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Viesti hyväksytty." @@ -57,7 +57,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Viesti poistettu." @@ -69,7 +69,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Kirjoittajan kuva" @@ -96,11 +96,11 @@ msgstr "" msgid "Disabled" msgstr "Ei käytössä" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Kommentointi- ja keskustelutoimintojen asetukset" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "" @@ -108,7 +108,7 @@ msgstr "" msgid "Email" msgstr "Sähköposti" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Salli Kommentointi & Keskustelut" @@ -120,7 +120,7 @@ msgstr "Sen viestin tunniste johon tämä viesti vastaa" msgid "MIME type" msgstr "MIME-tyyppi" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Ilmoitukset sähköpostitse tarkistajille" @@ -144,7 +144,7 @@ msgstr "Kommentointi & Keskustelut (Plone Discussions)" msgid "Portal type" msgstr "Sisältötyyppi" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "" @@ -160,11 +160,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "" @@ -191,6 +191,11 @@ msgstr "Poista valitut" msgid "bulkactions_publish" msgstr "Hyväksy valitut" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -211,11 +216,31 @@ msgstr "" msgid "comment_description_plain_text" msgstr "" +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 msgid "comment_title" msgstr "" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -252,21 +277,26 @@ msgid "help_anonymous_comments" msgstr "Jos viestit tunnistamattomilta käyttäjiltä sallitaan, on erittäin suositeltavaa käyttää automaattisten roskapostittimien estintä (engl. captcha)." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 #, fuzzy msgid "help_captcha" msgstr "Roskaviestiautomaattien estimen (engl. captcha) käyttö. Jos mitään estintä ei ole valittavissa, järjestelmään ei ole asennettu mitään estintä. Soveltuvia estimiä ovat plone.formwidget.captcha ('Captcha') ja plone.formwidget.recaptcha ('ReCapthca')." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "Tarkista myös keskusteluun / kommentointiin liittyvät asetukset sisältötyyppien hallintapaneelissa ('Sisältötyypit')." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 #, fuzzy @@ -279,34 +309,34 @@ msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Tarkistajana toimivalle ylläpitäjälle ilmoitetaan toimenpiteitä edellyttävistä viesteistä." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Näytetäänkö kirjoittajan kuva viestin yhteydessä." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "" @@ -316,7 +346,7 @@ msgid "label_anonymous_comments" msgstr "Salli viestit tunnistamattomilta käyttäjiltä" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -326,7 +356,7 @@ msgid "label_apply" msgstr "toteuta" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Roskaviestien estin" @@ -336,7 +366,7 @@ msgid "label_comment" msgstr "Viesti" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "" @@ -345,6 +375,11 @@ msgstr "" msgid "label_delete" msgstr "Poista" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -356,12 +391,12 @@ msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Ilmoita viesteistä sähköpostitse ylläpitäjälle" @@ -371,12 +406,12 @@ msgid "label_publish" msgstr "Hyväksy" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Näytä kirjoittajan kuva" @@ -391,22 +426,22 @@ msgid "label_subject" msgstr "Aihe" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po index 8723fb3..727f7ad 100644 --- a/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Un commentaire a été posté." @@ -26,20 +26,20 @@ msgstr "Un id de commentaire unique pour cette conversation" msgid "Add a comment" msgstr "Ajouter un commentaire" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Commentaires anonymes" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Annuler" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Modifications enregistrées" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Commentaire approuvé." @@ -55,7 +55,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Commentaire supprimé." @@ -67,7 +67,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Portrait de l'utilisateur" @@ -94,11 +94,11 @@ msgstr "Date du dernier commentaire public" msgid "Disabled" msgstr "Désactivé" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Paramètres des discussions" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Édition annulée" @@ -106,7 +106,7 @@ msgstr "Édition annulée" msgid "Email" msgstr "Adresse courriel" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Activation des commentaires" @@ -118,7 +118,7 @@ msgstr "Id du commentaire dont ce commentaire répond" msgid "MIME type" msgstr "Type MIME" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Notification du modérateur par courriel" @@ -142,7 +142,7 @@ msgstr "Plone Discussions" msgid "Portal type" msgstr "Portal type" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Enregistrer" @@ -158,11 +158,11 @@ msgstr "L'ensemble des commentateurs uniques des commentaires publiés (identifi msgid "Total number of public comments on this item" msgstr "Nombre total de commentaires publics sur cet élément" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Notification des utilisateurs par courriel" @@ -189,6 +189,11 @@ msgstr "Supprimer" msgid "bulkactions_publish" msgstr "Approuver" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -209,11 +214,31 @@ msgstr "Les commentaires sont modérés." msgid "comment_description_plain_text" msgstr "Vous pouvez ajouter un commentaire en complétant le formulaire ci-dessous. Le format doit être plain text." +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 msgid "comment_title" msgstr "${author_name} sur ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -250,22 +275,27 @@ msgid "help_anonymous_comments" msgstr "Si activé, les utilisateurs anonymes peuvent poster des commentaires sans se connecter. Il est fortement recommandé d'utiliser un captcha pour prévenir du spam si cette option est activée." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "Si cette case est cochée, les utilisateurs anonymes devront donner leur email." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Utilisez cette option pour activer la validation par captcha pour les commentaires. Installez plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet ou collective.z3cform.norobots s'il n'y a aucune option de disponible." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "Certaines options liées aux discussions ne sont pas dans \"Paramètres des discussions\".\n" "Pour activer les commentaires pour un type de contenu spécifique, allez dans \"Paramètres des types\", choisissez \"Commentaire\" et sélectionnez le workflow \"Workflow de modération des commentaires\"." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -277,34 +307,34 @@ msgid "help_moderation_enabled" msgstr "Si cette case est cochée, les commentaires ajoutés seront mis 'en attente' et seront invisibles pour les visiteurs. Un utilisateur ayant la permission 'Review comments' (Modérateur ou Administrateur) peut approuver les commentaires pour les rendre visibles. Vous pouvez choisir un workflow spécifique pour les commentaires depuis le menu de configuration des types de contenu." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "Addresse à laquelle les notifications de modération seront envoyées." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Si activé, le modérateur est notifié si un commentaire requiert une attention particulière. Le courriel du modérateur est défini sur la page 'Envoi de courriels' de la configuration du site (Adresse d'expéditeur des courriels)." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Si activé, le portrait de l'utilisateur apparait à côté du commentaire." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "Choisissez si le texte des commentaires doit être éventuellement transformé. Vous pouvez choisir entre 'Plain text' et 'Intelligent text'. Ce dernier convertit le texte en HTML, en préservant notamment les retours chariots et l'indentation, et en transformant les url et les addresses courriel en liens cliquables." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Si vous cochez cette case, les utilisateurs pourront choisir d'être avertis par courriel des nouveaux commentaires." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anonyme" @@ -314,7 +344,7 @@ msgid "label_anonymous_comments" msgstr "Activer les commentaires anonymes" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "Activer le champ email pour les anonymes" @@ -324,7 +354,7 @@ msgid "label_apply" msgstr "Appliquer" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -334,7 +364,7 @@ msgid "label_comment" msgstr "Commentaire" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "Les commentaires ont été désactivés." @@ -343,6 +373,11 @@ msgstr "Les commentaires ont été désactivés." msgid "label_delete" msgstr "Supprimer" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -354,12 +389,12 @@ msgid "label_moderation_enabled" msgstr "Activer la modération des commentaires" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Addresse courriel du modérateur" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Activer la notification du modérateur par courriel" @@ -369,12 +404,12 @@ msgid "label_publish" msgstr "Approuver" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "a écrit :" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Afficher le portrait de l'utilisateur" @@ -389,17 +424,17 @@ msgid "label_subject" msgstr "Sujet" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Transformation du texte du commentaire" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Activer la notification par courriel des utilisateurs" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" "Un commentaire a été ajouté sur '${title}' à cette addresse : ${link}\n" @@ -409,7 +444,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "Un commentaire a été ajouté sur '${title}' à cette addresse : ${link}\n" diff --git a/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po index 8842760..354a7e0 100644 --- a/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: plone.app.discussion\n" "POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" "PO-Revision-Date: 2011-05-13 18:10+0100\n" -"Last-Translator: Giorgio Borelli \n" +"Last-Translator: Andrea Cecchi \n" "Language-Team: Plone i18n \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -18,7 +18,7 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Is-Fallback-For: it-it it-ch it-sm it-hr it-si\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Un commento è stato inserito." @@ -30,48 +30,48 @@ msgstr "Id univoco del commento per questa conversazione" msgid "Add a comment" msgstr "Aggiungi un commento" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Commenti Anonimi" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Annulla" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Modifiche salvate" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Commento approvato." #: ../contentrules.py:96 msgid "Comment author email" -msgstr "" +msgstr "Email dell'autore del commento" #: ../contentrules.py:85 msgid "Comment author full name" -msgstr "" +msgstr "Nome dell'autore del commento" #: ../contentrules.py:74 msgid "Comment author user name" -msgstr "" +msgstr "Username dell'autore del commento" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Commento eliminato." #: ../contentrules.py:52 msgid "Comment id" -msgstr "" +msgstr "Id commento" #: ../contentrules.py:63 msgid "Comment text" -msgstr "" +msgstr "Testo commento" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Immagine Commentatore" @@ -80,7 +80,7 @@ msgstr "Infrastruttura dei commenti per Plone" #: ../contentrules.py:51 msgid "Comments" -msgstr "" +msgstr "Commenti" #: ../interfaces.py:139 msgid "Conversation" @@ -92,17 +92,17 @@ msgstr "Data di creazione" #: ../interfaces.py:41 msgid "Date of the most recent public comment" -msgstr "" +msgstr "Data del commento pubblico più recente" #: ../vocabularies.py:44 msgid "Disabled" msgstr "Disabilitato" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Impostazioni dei commenti" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Modifiche annullate" @@ -110,7 +110,7 @@ msgstr "Modifiche annullate" msgid "Email" msgstr "E-mail" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Abilita commenti" @@ -122,7 +122,7 @@ msgstr "Id del commento a cui si risponde" msgid "MIME type" msgstr "MIME type" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Notifiche e-mail" @@ -146,7 +146,7 @@ msgstr "Supporto ai commenti Plone" msgid "Portal type" msgstr "Tipo di contenuto" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Salva" @@ -156,23 +156,23 @@ msgstr "L'insieme unico dei commentatori (username)" #: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" -msgstr "" +msgstr "La lista di commentatori unici (username) dei commenti pubblicati" #: ../interfaces.py:35 msgid "Total number of public comments on this item" -msgstr "" +msgstr "Numero totale di commenti pubblicati per questo contenuto" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." -msgstr "" +msgstr "Trasform '%s' => '%s' non disponibile." -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Notifiche utenti via e-mail" #: ../interfaces.py:176 msgid "Username of the commenter" -msgstr "" +msgstr "Username dell'autore del commento" #: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." @@ -193,16 +193,20 @@ msgstr "Elimina" msgid "bulkactions_publish" msgstr "Approva" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "Annulla" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 -#, fuzzy msgid "comment_description_intelligent_text" msgstr "Puoi aggiungere un commento compilando la form qui sotto. Utilizza testo semplice. Indirizzi web ed email saranno trasformati in collegamenti cliccabili." #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." #: ../browser/comments.py:51 msgid "comment_description_markdown" -msgstr "" +msgstr "Puoi aggiungere un commento compilando la form qui sotto. Utilizza testo semplice. Puoi utilizzare la sintassi Markdown per link ed immagini." #. Default: "Comments are moderated." #: ../browser/comments.py:63 @@ -211,15 +215,33 @@ msgstr "I commenti vengono moderati." #. Default: "You can add a comment by filling out the form below. Plain text formatting." #: ../browser/comments.py:46 -#, fuzzy msgid "comment_description_plain_text" msgstr "Puoi aggiungere un commento compilando la form sotto. Utilizza il testo semplice." +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "Modifica del commento annullata" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "Il commento è stato modificato" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 -#, fuzzy +#: ../comment.py:55 msgid "comment_title" -msgstr "${creator} su ${content}" +msgstr "${author_name} su ${content}" + +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "Modifica commento" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "Modifica commento" #. Default: "Action" #: ../browser/moderation.pt:85 @@ -257,23 +279,28 @@ msgid "help_anonymous_comments" msgstr "Se selezionato, gli utenti anonimi saranno in grado di inserire commenti senza autenticazione. E' altamente consigliato l'uso di captcha to prevenire spam se questa impostazione viene abilitata." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" -msgstr "" +msgstr "Se selezionato, gli utenti anonimi dovranno fornire la loro email." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Usa questa impostazione per abilitare o disabilitare la validazione tramite captcha. Se nessuna opzione di captcha è disponibile, installa plone.formwidget.captcha o plone.formwidget.recaptcha." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "Alcune impostazioni legate ai commenti non sono nel Pannello di controllo commenti.\n" "Per abilitare i commenti per uno specifico tipo di contenuto, vai al Pannello dei Tipi di Contenuto per il tipo specifico e scegli 'abilita moderazione'.\n" "Per abilitare il workflow per la moderazione dei commenti, vai al Pannello dei Tipi di Contenuto, scegli \"Comment\" e imposta il workflow \"Comment Review Workflow\"." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "Se selezionato, verrà abilitato il supporto alla modifica dei commenti da parte degli utenti che hanno il permesso 'Edit comments'." + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -285,34 +312,33 @@ msgid "help_moderation_enabled" msgstr "Se selezionato, i commenti verranno creati in stato 'In attesa' in cui sono non sono visibili pubblicamente. Un utento con il permesso 'Revisiona i commenti' ('Revisore' o 'Manager') possono approvare i commenti per renderli pubblici. Se si vuole abilitare un workflow personalizzato per i commenti, bisogna andare nel pannello di controllo dei tipi." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "Indirizzo a cui verranno spedite le notifiche per la moderazione." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 -#, fuzzy +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" -msgstr "Se selezionato il moderatore riceverà una notifica se il commento dovrà necessita della sua attenzione. L'indirizzo email del moderatore può essere impostato nel pannello di controllo nella sezione 'Posta' (Indirizzo 'mittente' del sito)" +msgstr "Se selezionato il moderatore riceverà una notifica se il commento necessiterà della sua attenzione. L'indirizzo email del moderatore può essere impostato nel campo sottostante." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Se selezionato, un'immagine dell'utente verrà mostrata a fianco dei commenti." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "Utilizzare questa impostazione per scegliere se il testo del commento deve essere trasformato in qualche modo. E' possibile scegliere tra 'Plain text' e 'Testo intelligente'. 'Testo intelligente' converte il testo in HTML dove le interruzioni di linea e le indentazioni vengono preservate, e gli indirizzi web o email vengono trasformati in collegamenti cliccabili." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Se selezionato, gli utenti possono scegliere di essere notificati ad ogni nuovo commenti via e-mail." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anonimo" @@ -322,9 +348,9 @@ msgid "label_anonymous_comments" msgstr "Abilita i commenti agli utenti anonimi" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" -msgstr "" +msgstr "Abilita campo email per utenti anonimi" #. Default: "Apply" #: ../browser/moderation.pt:71 @@ -332,7 +358,7 @@ msgid "label_apply" msgstr "Applica" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -342,7 +368,7 @@ msgid "label_comment" msgstr "Commento" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "I commenti sono stati disabilitati." @@ -351,6 +377,11 @@ msgstr "I commenti sono stati disabilitati." msgid "label_delete" msgstr "Elimina" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "Abilita la modifica dei commenti" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -362,12 +393,12 @@ msgid "label_moderation_enabled" msgstr "Abilita la moderazione dei commenti" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Indirizzo email del moderatore" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Abilita le notifiche ai moderatori" @@ -377,12 +408,12 @@ msgid "label_publish" msgstr "Approva" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr ":" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Visualizza le immagini dei commentatori" @@ -397,17 +428,17 @@ msgid "label_subject" msgstr "Oggetto" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Transformazioni testo del commento" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Abilita notifica via e-mail" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" "Un commento a '${title}' è stato inserito qui: ${link}\n" @@ -417,7 +448,7 @@ msgstr "" "---" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "Un commento su '${title}' è stato aggiunto qui: ${link}\n" diff --git a/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po index 3ea2f91..3f698d3 100644 --- a/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "コメントが投稿されました" @@ -26,20 +26,20 @@ msgstr "このカンバセーションにユニークなコメントID" msgid "Add a comment" msgstr "コメントを追加" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "無名コメント" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "取り消す" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "変更が保存されました" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "コメントが承認されました" @@ -55,7 +55,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "コメントが削除されました" @@ -67,7 +67,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "コメント者の画像" @@ -94,11 +94,11 @@ msgstr "" msgid "Disabled" msgstr "無効になりました" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "議論の設定" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "編集が取り消されました" @@ -106,7 +106,7 @@ msgstr "編集が取り消されました" msgid "Email" msgstr "メール" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "コメントを有効にする" @@ -118,7 +118,7 @@ msgstr "このコメントが回答する先であるコメントのID" msgid "MIME type" msgstr "MIMEタイプ" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "モデレータへのメール通知" @@ -142,7 +142,7 @@ msgstr "Plone 議論" msgid "Portal type" msgstr "ポータルタイプ" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "保存" @@ -158,11 +158,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "ユーザへのメール通知" @@ -189,6 +189,11 @@ msgstr "削除する" msgid "bulkactions_publish" msgstr "承認する" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -209,12 +214,32 @@ msgstr "コメントはモデレートされました" msgid "comment_description_plain_text" msgstr "下のフォームに書き込むことで、コメントを追加することができます。プレーンテキスト形式です。" +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 #, fuzzy msgid "comment_title" msgstr "${creator} が ${content} にコメント" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -251,23 +276,28 @@ msgid "help_anonymous_comments" msgstr "選ばれると、ログインせずに無名ユーザがコメントを投稿できるようになります。もしこの設定が有効にされるなら、キャプチャを使ってスパムを防ぐ解決策をとることをお勧めします。" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "コメントでのキャプチャ検査を有効にするか無効にするかを設定するのにこれを使います。もし選択できないようになっていたら、 plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet または collective.z3cform.norobots をインストールしてください。" #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "議論に関係するいくつかの設定は、議論コントロールパネルに置かれていません。\n" "特定のコンテンツタイプに対してコメントを有効にするには、タイプコントロールパネルに行ってそのコンテンツタイプを選び、「コメントを許す」を選びます。\n" "コメントに対してモデレーションワークフローを有効にするには、タイプコントロールパネルに行き、「コメント」を選び、ワークフローを「コメント審査ワークフロー」に設定します。" +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -279,34 +309,34 @@ msgid "help_moderation_enabled" msgstr "選ばれると、コメントは投稿されると一般公衆からは見えない「保留」状態になります。「コメントを審査(Review comments}」パーミッションを持つユーザ、つまり審査員あるいは管理者がコメントを一般に見えるように承認することができます。カスタムコメントワークフローを有効にしたいなら、タイプコントロールパネルに行く必要があります。" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "モデレータへの通知が送られる送付先アドレス" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "選ばれると、コメントが注意を要するものであるかどうか、モデレータは通知を受けるようになります。モデレータのメールアドレスはメール設定コントロールパネルの中のサイト「差出人」アドレスです。" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "選ばれると、コメントの隣にユーザの画像が見えるようになります。" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "コメントテキストがなんらかの形で変換されるべきかどうかを選ぶのに、この設定を使います。「プレーンテキスト」と「インテリジェントテキスト」の間で選べるようになります。「インテリジェントテキスト」はプレーンテキストをHTMLに変換します。改行とインデントは温存され、Webアドレスやメールアドレスはクリッカブルリンクになります。" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "選ばれると、新しいコメントをメールによって通知してもらうように、ユーザが選べるようになります。" #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "無名" @@ -316,7 +346,7 @@ msgid "label_anonymous_comments" msgstr "無名コメントを有効にする" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -326,7 +356,7 @@ msgid "label_apply" msgstr "適用" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "キャプチャ" @@ -336,7 +366,7 @@ msgid "label_comment" msgstr "コメント" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "コメント機能が無効になりました" @@ -345,6 +375,11 @@ msgstr "コメント機能が無効になりました" msgid "label_delete" msgstr "削除" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -356,12 +391,12 @@ msgid "label_moderation_enabled" msgstr "コメントのモデレーションを有効にする" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "モデレータのメールアドレス" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "モデレータへのメール通知を有効にする" @@ -371,12 +406,12 @@ msgid "label_publish" msgstr "承認" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "曰く:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "コメント者の画像を見せる" @@ -391,23 +426,23 @@ msgid "label_subject" msgstr "題目" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "コメントテキスト変換" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "ユーザへのメール通知を有効にする" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 #, fuzzy msgid "mail_notification_message" msgstr "'${title}' へのコメントが、ここに投稿されました: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po index efddc59..e18e853 100644 --- a/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po @@ -15,7 +15,7 @@ msgstr "" "Domain: plone.app.discussion\n" "Language: nl\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Commentaar is geplaatst" @@ -27,20 +27,20 @@ msgstr "Een unieke ID voor dit commentaar" msgid "Add a comment" msgstr "Voeg opmerking toe" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Anoniem commentaar" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Annuleren" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Wijzigingen opgeslagen" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Commentaar goedgekeurd" @@ -56,7 +56,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Commentaar verwijderd" @@ -68,7 +68,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Profielfoto commentator" @@ -95,11 +95,11 @@ msgstr "" msgid "Disabled" msgstr "Uitgeschakeld" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Discussie instellingen" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Bewerken geannulleerd." @@ -107,7 +107,7 @@ msgstr "Bewerken geannulleerd." msgid "Email" msgstr "E-mail" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Commentaar toestaan" @@ -119,7 +119,7 @@ msgstr "Id van commentaar waarop deze commentaar reageert" msgid "MIME type" msgstr "MIME-type" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "E-mail notificatie voor de redactie" @@ -143,7 +143,7 @@ msgstr "Plone Discussies" msgid "Portal type" msgstr "type" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Bewaren" @@ -159,11 +159,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Gebruker E-mail Notificatie" @@ -190,6 +190,11 @@ msgstr "Verwijderen" msgid "bulkactions_publish" msgstr "Publiceren" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -210,12 +215,32 @@ msgstr "Commentaren zijn gemodereerd." msgid "comment_description_plain_text" msgstr "U kunt commentaar toevoegen door onderstaand formulier in te vullen. Platte tekst formaat." +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 #, fuzzy msgid "comment_title" msgstr "${creator} over ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -252,20 +277,25 @@ msgid "help_anonymous_comments" msgstr "Indien geselecteerd, anonieme bezoekers kunnen commentaar achterlaten zonder in te loggen. Het is aanbevolen om de captcha-oplossing te gebruiken om spam te voorkomen als deze optie is ingeschakeld." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Indien geselecteerd, Captcha validatie wordt gebruikt voor het commentaar. Installeer plone.formwidget of plone.formwidget.recaptcha als er geen opties beschikbaar zijn." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "Sommige discussie instellingen staan niet op deze pagina. Om commentaar in te schakelen voor een specifiek content-type, ga naar het Typen instellingenscherm van het betreffende type en kies 'commentaar toestaan'. Om de moderatie-workflow in te schakelen, ga naar het Typen instellingenscherm en kies het type 'Comment' stel de 'Comment Review Workflow' in." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -277,34 +307,34 @@ msgid "help_moderation_enabled" msgstr "Indien geselecteerd, de moderator zal ingelicht worden als een commentaar aandacht nodig heeft." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "Emailadres van de moderator naar wie een notificatie zal worden gestuurd." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Indien geselecteerd, de moderator zal ingelicht worden als een commentaar aandacht nodig heeft." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Indien geselecteerd, de profielfoto van een gebruiker wordt naast het commentaar getoond." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "Gebruik deze instelling om ervoor te kiezen of de commentaar tekst getransformeerd moet worden. U kunt kiezen uit 'Platte tekst' en 'Intelligente tekst'. 'Intelligente tekst' zet platte tekst om in HTML waarbij nieuwe regels en inspringen worden gehandhaaft, en waarbij web en e-mail adressen in klikbare links worden omgezet." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Indien geselecteerd kunnen gebruikers ervoor kiezen per e-mail bericht te ontvangen van nieuwe commentaar." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anoniem" @@ -314,7 +344,7 @@ msgid "label_anonymous_comments" msgstr "Anoniem commentariëren inschakelen" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -324,7 +354,7 @@ msgid "label_apply" msgstr "Toepassen" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -334,7 +364,7 @@ msgid "label_comment" msgstr "Commentaar" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "Commentaar is uitgeschakeld" @@ -343,6 +373,11 @@ msgstr "Commentaar is uitgeschakeld" msgid "label_delete" msgstr "Verwijderen" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -354,12 +389,12 @@ msgid "label_moderation_enabled" msgstr "Moderatie is ingeschakeld" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Moderator emailadres" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Notificatie voor moderator inschakelen" @@ -369,12 +404,12 @@ msgid "label_publish" msgstr "Publiceren" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "zegt:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Toon portret commentator" @@ -389,22 +424,22 @@ msgid "label_subject" msgstr "Onderwerp" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Reactie tekst transformatie" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Gebruikers-notificatie ingeschakeld" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "Een commentaar op '${title}' is geplaatst: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "Commentaar op '${title}' is geplaatst: ${link}" diff --git a/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po index abdfb45..2066853 100644 --- a/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "" @@ -26,20 +26,20 @@ msgstr "En kommentar-id unik for denne kommentaren" msgid "Add a comment" msgstr "Legg til en kommentar" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Anonym kommentar" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Avbryt" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Kommentaren er godkjent" @@ -55,7 +55,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Kommentaren er slettet" @@ -67,7 +67,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Forfatterbilde" @@ -94,11 +94,11 @@ msgstr "" msgid "Disabled" msgstr "Slått av" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Innstillinger for kommentarer" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "" @@ -106,7 +106,7 @@ msgstr "" msgid "Email" msgstr "E-post" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Slå på kommentarer" @@ -118,7 +118,7 @@ msgstr "Id til kommentar som denne kommentaren er en kommentar til" msgid "MIME type" msgstr "MIME-type" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Varsling av moderator på epost" @@ -142,7 +142,7 @@ msgstr "" msgid "Portal type" msgstr "Portaltype" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "" @@ -158,11 +158,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "" @@ -189,6 +189,11 @@ msgstr "Slett" msgid "bulkactions_publish" msgstr "Godkjenn" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -209,11 +214,31 @@ msgstr "" msgid "comment_description_plain_text" msgstr "" +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 msgid "comment_title" msgstr "" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -250,24 +275,29 @@ msgid "help_anonymous_comments" msgstr "Dersom innstillingen er valgt kan anonyme brukere kommentere uten å logge inn. Det er anbefalt å bruke en captcha-løsning for å forhindre nettsøppel dersom denne innstillingen er valgt" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 #, fuzzy msgid "help_captcha" msgstr "Bruk denne innstillingen for å aktivere eller deaktivere captcha-validering av kommentarer. Installér plone.formwidget.captcha eller plone.formwidget.recaptcha dersom det mangler valg her." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 #, fuzzy msgid "help_discussion_settings_editform" msgstr "" "Noen innstillinger for kommentarer finnes utenfor kontrollpanelet for kommentarer. For å aktivere kommentarer for en spesifíkk innholdstype må man gå til kontrollpanelet for denne innholdstypen og velge 'aktiver moderering'.\n" "For å aktivere arbeidsflyten for moderering, må man gå til kontrollpanelet for innholdstyper og velge \"Kommentarer\" og stille inn arbeidsflyten til å vere \"Comment Review Workflow\"." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 #, fuzzy @@ -280,34 +310,34 @@ msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Dersom innstillingen er valgt vil moderatoren bli varslet når en kommentar er lagt til." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Dersom denne er valgt vil bildet av brukeren vise ved siden av kommentaren." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "" @@ -317,7 +347,7 @@ msgid "label_anonymous_comments" msgstr "" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -327,7 +357,7 @@ msgid "label_apply" msgstr "Bruk" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "" @@ -337,7 +367,7 @@ msgid "label_comment" msgstr "" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "" @@ -346,6 +376,11 @@ msgstr "" msgid "label_delete" msgstr "Slett" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -357,12 +392,12 @@ msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Slå på e-postvarsling av moderator" @@ -372,12 +407,12 @@ msgid "label_publish" msgstr "Godkjenn" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "" @@ -392,22 +427,22 @@ msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/plone.app.discussion.pot b/plone/app/discussion/locales/plone.app.discussion.pot index 7c14a87..8fa8488 100644 --- a/plone/app/discussion/locales/plone.app.discussion.pot +++ b/plone/app/discussion/locales/plone.app.discussion.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: 2014-05-16 13:47+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Hanno Schlichting \n" "Language-Team: Hanno Schlichting \n" @@ -18,7 +18,7 @@ msgstr "" msgid "" msgstr "" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "" @@ -30,20 +30,20 @@ msgstr "" msgid "Add a comment" msgstr "" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "" @@ -59,7 +59,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "" @@ -71,7 +71,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "" @@ -98,11 +98,11 @@ msgstr "" msgid "Disabled" msgstr "" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "" @@ -110,7 +110,7 @@ msgstr "" msgid "Email" msgstr "" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "" @@ -122,7 +122,7 @@ msgstr "" msgid "MIME type" msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "" @@ -146,7 +146,7 @@ msgstr "" msgid "Portal type" msgstr "" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "" @@ -162,11 +162,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "" @@ -193,6 +193,11 @@ msgstr "" msgid "bulkactions_publish" msgstr "" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -213,11 +218,31 @@ msgstr "" msgid "comment_description_plain_text" msgstr "" +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 msgid "comment_title" msgstr "" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -254,20 +279,25 @@ msgid "help_anonymous_comments" msgstr "" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "" #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -279,33 +309,33 @@ msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "" @@ -315,7 +345,7 @@ msgid "label_anonymous_comments" msgstr "" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -325,7 +355,7 @@ msgid "label_apply" msgstr "" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "" @@ -335,7 +365,7 @@ msgid "label_comment" msgstr "" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "" @@ -344,6 +374,11 @@ msgstr "" msgid "label_delete" msgstr "" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -355,12 +390,12 @@ msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "" @@ -370,12 +405,12 @@ msgid "label_publish" msgstr "" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "" @@ -390,22 +425,22 @@ msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po index a0cfd98..07cad35 100644 --- a/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po @@ -15,7 +15,7 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Poedit-Language: Português\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Foi adicionado um comentário." @@ -27,20 +27,20 @@ msgstr "Um id do comentário único para esta conversação." msgid "Add a comment" msgstr "Adicionar comentário" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Comentários Anónimos" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Cancelar" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Alterações guardadas" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Comentário aprovado" @@ -56,7 +56,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Comentário excluído." @@ -68,7 +68,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Imagem do comentador" @@ -95,11 +95,11 @@ msgstr "" msgid "Disabled" msgstr "Desativado" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Configurações da discussão" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Edição cancelada" @@ -107,7 +107,7 @@ msgstr "Edição cancelada" msgid "Email" msgstr "Email" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Permitir comentários" @@ -119,7 +119,7 @@ msgstr "ID do comentário para qual este comentário é resposta" msgid "MIME type" msgstr "MIME type" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Notificação de e-mail para o moderador" @@ -143,7 +143,7 @@ msgstr "Discussões Plone" msgid "Portal type" msgstr "Tipo de conteúdo" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Guardar" @@ -159,11 +159,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Notificar o utilizador por email" @@ -190,6 +190,11 @@ msgstr "Excluir" msgid "bulkactions_publish" msgstr "Publicar" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -210,12 +215,32 @@ msgstr "Os comentários são moderados" msgid "comment_description_plain_text" msgstr "Pode adicionar um comentário usando o formulário a seguir. Campo de texto simples." +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 #, fuzzy msgid "comment_title" msgstr "${creator} em ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -252,23 +277,28 @@ msgid "help_anonymous_comments" msgstr "Se selecionado, os utilizadores anonimos poderão adicionar comentários sem estar autenticados. É altamente recomendável a utilização de uma solução de captcha para evitar spam quando esta configuração está activa." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Utilize esta opção para ativar ou desativar o Captcha para os comentários. Instale plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet ou collective.z3cform.norobots caso não tenha nenhuma opção disponível." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "Algumas configurações relacionadas com os comentários não se encontram localizadas no Painel de Controle de Comentários.\n" "Para activar os comentários para um tipo de item específico, aceda à configuração de Tipos no Painel de Controle, encontre o tipo desejado e selecione \"Permitir comentários \".\n" "Para ativar o workflow de moderação de comentários, aceda à configuração de Tipos no Painel de Controle, escolha \"Comentário\" e selecione o workflow para \"Workflow de Revisão de Comentários\"." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -280,34 +310,34 @@ msgid "help_moderation_enabled" msgstr "Se selecionado, os comentários serão adicionados no estado \"Pendente\", que é invisível ao público. Utilizadores com permissão para 'Moderar Comentários' ('Gestor' ou 'Administrador') podem aprovar os comentários para torná-los visíveis ao público. Caso queira ativar um workflow de comentários personalizado, aceda à Configuração dos Tipos no Painel de Controle." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "Endereço para o qual as notificações do moderador serão enviadas." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Se selecionado, o moderador será avisado quando um comentário precisar de atenção. O endereço de e-mail do moderador pode ser encontrado nas configurações de e-mail no Painel de Controle (campo Endereço de 'Remetente' do site)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Se selecionado, uma imagem do usuário será exibida próxima ao comentário." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "Use esta configuração para escolher se o texto do comentário deve ser transformado. Você pode escolher entre 'texto puro' e 'texto inteligente'. 'Texto inteligente' converte texto simples em HTML, onde as quebras de linha e os recuos são preservados, e os endereços web e e-mail são transformados em links clicáveis." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Se selecionado, permite aos usuários solicitar o notificações por e-mail sempre que hover um novo comentário." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anónimo" @@ -317,7 +347,7 @@ msgid "label_anonymous_comments" msgstr "Permitir comentários anónimos." #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -327,7 +357,7 @@ msgid "label_apply" msgstr "Aplicar" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -337,7 +367,7 @@ msgid "label_comment" msgstr "Comentário" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "Os comentários foram desativados." @@ -346,6 +376,11 @@ msgstr "Os comentários foram desativados." msgid "label_delete" msgstr "Excluir" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -357,12 +392,12 @@ msgid "label_moderation_enabled" msgstr "Ativar moderação de comentários" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Endereço de e-mail do moderador" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Ativar notificação ao moderador" @@ -372,12 +407,12 @@ msgid "label_publish" msgstr "Aprovar" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "disse:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Exibir imagem do autor" @@ -392,23 +427,23 @@ msgid "label_subject" msgstr "Assunto" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Transformações aplicadas ao texto do comentário" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Activar notificação de utilizadores por email" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 #, fuzzy msgid "mail_notification_message" msgstr "Um comentário em '${title}' foi adicionado aqui: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "Um comentário sobre '${title}' foi adicionado aqui: ${link}\n" diff --git a/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po index ccbf498..0340943 100644 --- a/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po @@ -15,7 +15,7 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Poedit-Language: Português do Brasil\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Comentário adicionado." @@ -27,20 +27,20 @@ msgstr "Um comentário com ID exclusivo para esta conversação" msgid "Add a comment" msgstr "Adicionar comentário" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Comentários Anônimos" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Cancelar" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Alterações salvas" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Comentário aprovado" @@ -56,7 +56,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Comentário excluído." @@ -68,7 +68,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Imagedo autor" @@ -95,11 +95,11 @@ msgstr "Data do comentário, público, mais recente" msgid "Disabled" msgstr "Desativado" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Configurações da discussão" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Edição cancelada" @@ -107,7 +107,7 @@ msgstr "Edição cancelada" msgid "Email" msgstr "E-mail" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Permitir comentários" @@ -119,7 +119,7 @@ msgstr "ID do comentário para qual este comentário é resposta" msgid "MIME type" msgstr "MIME type" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Notificação de e-mail para o moderador" @@ -143,7 +143,7 @@ msgstr "Plone Discussions" msgid "Portal type" msgstr "Tipo de objeto" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Salvar" @@ -159,11 +159,11 @@ msgstr "O grupo de comentadoristas (nomes de usuários) com comentários publica msgid "Total number of public comments on this item" msgstr "Número total de comentários públicos neste item" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Notificação de e-mail para o usuário" @@ -190,6 +190,11 @@ msgstr "Excluir" msgid "bulkactions_publish" msgstr "Publicar" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -210,12 +215,32 @@ msgstr "Os comentários são moderados" msgid "comment_description_plain_text" msgstr "Você pode adicionar um comentário preenchendo o formulário a seguir. Campo de texto simples." +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 #, fuzzy msgid "comment_title" msgstr "${creator} em ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -252,23 +277,28 @@ msgid "help_anonymous_comments" msgstr "Se selecionado, usuários anonimos poderão adicionar comentários sem precisar de usuário e senha. É altamente recomendável a utilização de uma solução de captcha para evitar spam caso esta configuração esteja ativada." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "Caso selecionado, usuários anônimos devem informar um email." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Utilize esta opção para ativar ou desativar o Captcha para os comentários. Instale plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet ou collective.z3cform.norobots caso não tenha nenhuma opção disponível." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "Algumas configurações relacionadas a comentários não estão localizadas no Painel de Controle de Comentários.\n" "Para habilitar comentários para um tipo de item específico, vá até a configuração de Tipos no Painel de Controle, encontre o tipo desejado e selecione \"Permitir comentários \".\n" "Para ativar o workflow de moderação de comentários, vá até a configuração de Tipos no Painel de Controle, escolha \"Comentário\" e selecione o workflow para \"Workflow de Revisão de Comentários\"." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -280,34 +310,34 @@ msgid "help_moderation_enabled" msgstr "Caso selecionado, os comentários serão adicionados no estado \"Pendente\", que é invisível ao público. Usuários com permissão para 'Revisar Comentários' ('Revisor' ou 'Administrador') podem aprovar os comentários para torná-los visíveis ao público. Caso queira ativar um workflow de comentários personalizado, você deve ir até a Configuração dos Tipos no Painel de Controle." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "Endereço para o qual as notificações do moderador serão enviadas." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Se selecionado, o moderador será avisado quando um comentário precisar de atenção. O endereço de e-mail do moderador pode ser encontrado nas configurações de e-mail no Painel de Controle (campo Endereço de 'Remetente' do site)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Se selecionado, uma imagem do usuário será exibida próxima ao comentário." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "Use esta configuração para escolher se o texto do comentário deve ser transformado. Você pode escolher entre 'texto puro' e 'texto inteligente'. 'Texto inteligente' converte texto simples em HTML, onde as quebras de linha e os recuos são preservados, e os endereços web e e-mail são transformados em links clicáveis." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Se selecionado, permite aos usuários solicitar o recebimento de avisos por e-mail sempre que hover um novo comentário." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anônimo" @@ -317,7 +347,7 @@ msgid "label_anonymous_comments" msgstr "Permitir comentários anônimos." #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "Habilitar campo de email para usuários anônimos" @@ -327,7 +357,7 @@ msgid "label_apply" msgstr "Aplicar" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -337,7 +367,7 @@ msgid "label_comment" msgstr "Comentário" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "Comentários foram desativados." @@ -346,6 +376,11 @@ msgstr "Comentários foram desativados." msgid "label_delete" msgstr "Excluir" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -357,12 +392,12 @@ msgid "label_moderation_enabled" msgstr "Ativar moderação de comentários" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Endereço de e-mail do moderador" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Ativar notificação ao moderador" @@ -372,12 +407,12 @@ msgid "label_publish" msgstr "Aprovar" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "disse:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Exibir imagem do autor" @@ -392,23 +427,23 @@ msgid "label_subject" msgstr "Assunto" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Transformações aplicadas ao texto do comentário" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Ativar notificação de e-mail para os usuários" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 #, fuzzy msgid "mail_notification_message" msgstr "Um comentário em '${title}' foi adicionado aqui: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "Um comentário no conteúdo '${title}' foi adicionado em: ${link}\n" diff --git a/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po index 6adb09d..77541a6 100644 --- a/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po @@ -15,7 +15,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Un comentariu a fost postat." @@ -27,20 +27,20 @@ msgstr "Un id de comentariu unic pentru aceasta conversatie" msgid "Add a comment" msgstr "Adauga comentariu" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Comentarii de la anonimi" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Anuleaza" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Schimbari salvate" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Comentariul a fost aprobat." @@ -56,7 +56,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Comentariul a fost sters." @@ -68,7 +68,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Imaginea comentatorului" @@ -95,11 +95,11 @@ msgstr "" msgid "Disabled" msgstr "Dezactivat" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Setarile Discutiilor" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Editare anulata" @@ -107,7 +107,7 @@ msgstr "Editare anulata" msgid "Email" msgstr "Email" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Permite Comentarii" @@ -119,7 +119,7 @@ msgstr "Id-ul comentariului pentru care acest comentariu raspunde" msgid "MIME type" msgstr "Tip MIME" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Notificare Moderatorului prin Email" @@ -143,7 +143,7 @@ msgstr "Discutii Plone" msgid "Portal type" msgstr "Tip obiect" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Salveaza" @@ -159,11 +159,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Notificarea utilizatorului prin email" @@ -190,6 +190,11 @@ msgstr "Sterge" msgid "bulkactions_publish" msgstr "Aproba" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -210,12 +215,32 @@ msgstr "Comentariile sunt moderate." msgid "comment_description_plain_text" msgstr "Poti adauga un comentariu prin completarea formularului de mai jos. Format de text simplu doar." +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 #, fuzzy msgid "comment_title" msgstr "${creator} al ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -252,23 +277,28 @@ msgid "help_anonymous_comments" msgstr "Daca selectat, utilizatorii anonimi vor putea posta comentarii fara a fi autentificati. Este recomandat a se folosi o solutie captcha pentru a preveni spam-ul daca aceasta setare este activata." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Foloseste aceasta setare pentru a activa sau dezactiva validarea Captcha a comentariilor. Instaleaza plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet sau collective.z3cform.norobots daca nu este nici o optiune disponibila." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "Unele setari legate de discutii nu sunt localizate in Panoul de Discutii.\n" "Pentru a activa comentarii pentru un tip specific de obiect, dute la Panoul de Control al Tipurilor pentru acest obiect si selecteaza \"Permite comentarii\".\n" "Pentru a alege workflow-ul de moderare pentru comentarii, dute la Panoul de Control pentru Tipuri de obiect, alege \"Comentariu\" si seteaza workflow-ul la \"Workflow de moderare al Comentariilor\"." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -280,34 +310,34 @@ msgid "help_moderation_enabled" msgstr "Daca selectat, comentariile vor intra intr-o stare de 'Asteptare' in care ele sunt invizibile publicului. Un utilizator cu permisia 'Modereaza Comentarii' ('Moderator' sau 'Manager') poate aprova comentariile pentru a le face vizibile publicului. Daca doresti sa activezi un workflow de comentariu specific, trebuie sa mergi la panoul de control al obiectelor" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "Adresa de email la care notificarile de moderare vor fi trimise." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Daca selectat, moderatorul este notificat daca un comentariu are nevoie de atentie. Adresa de email al moderatorului poate fi gasita in panoul de control numit 'Setari mail' (Adresa 'De la' pentru Site)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Daca selectat, o imagine al utilizatorului este afisata langa comentariul sau." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "Foloseste aceasta setare pentru a alege daca textul comentariului ar trebui sa fie transformat intr-un fel. Poti alege intre 'Text simplu' si 'Text inteligent'. 'Text inteligent' transforma textul simplu in HTML unde indentarea si liniile sunt pastrate si adresele de email si web sunt transformate in link-uri." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Daca selectat, utilizatorii pot alege sa fie notificati de noi comentarii prin email." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anonimi" @@ -317,7 +347,7 @@ msgid "label_anonymous_comments" msgstr "Permite comentariile anonime" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -327,7 +357,7 @@ msgid "label_apply" msgstr "Aplica" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -337,7 +367,7 @@ msgid "label_comment" msgstr "Comentariu" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "Comentariile au fost dezactivate." @@ -346,6 +376,11 @@ msgstr "Comentariile au fost dezactivate." msgid "label_delete" msgstr "Sterge" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -357,12 +392,12 @@ msgid "label_moderation_enabled" msgstr "Activeaza moderarea comentariilor" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Adresa de email al moderatorului de comentarii" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Activeaza notificarea moderatorului de comentarii prin email" @@ -372,12 +407,12 @@ msgid "label_publish" msgstr "Aproba" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "zice:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Arata imaginea comentatorului" @@ -392,17 +427,17 @@ msgid "label_subject" msgstr "Subiect" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Transformarea textului comentariului" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Activeaza notificarea utilizatorului prin email" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" "Un comentariu pe '${title}' a fost postat aici: ${link}\n" @@ -412,7 +447,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "Un comentariu pe '${title}' a fost postat aici: ${link}\n" diff --git a/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po index 90e4e13..e8194d4 100644 --- a/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "" @@ -26,20 +26,20 @@ msgstr "" msgid "Add a comment" msgstr "" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "" @@ -55,7 +55,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "" @@ -67,7 +67,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "" @@ -94,11 +94,11 @@ msgstr "" msgid "Disabled" msgstr "" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "" @@ -106,7 +106,7 @@ msgstr "" msgid "Email" msgstr "" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "" @@ -118,7 +118,7 @@ msgstr "" msgid "MIME type" msgstr "" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "" @@ -142,7 +142,7 @@ msgstr "" msgid "Portal type" msgstr "" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "" @@ -158,11 +158,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "" @@ -189,6 +189,11 @@ msgstr "" msgid "bulkactions_publish" msgstr "" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -209,11 +214,31 @@ msgstr "" msgid "comment_description_plain_text" msgstr "" +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 msgid "comment_title" msgstr "" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -250,20 +275,25 @@ msgid "help_anonymous_comments" msgstr "" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "" #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -275,33 +305,33 @@ msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "" @@ -311,7 +341,7 @@ msgid "label_anonymous_comments" msgstr "" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -321,7 +351,7 @@ msgid "label_apply" msgstr "" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "" @@ -331,7 +361,7 @@ msgid "label_comment" msgstr "" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "" @@ -340,6 +370,11 @@ msgstr "" msgid "label_delete" msgstr "" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -351,12 +386,12 @@ msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "" @@ -366,12 +401,12 @@ msgid "label_publish" msgstr "" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "" @@ -386,22 +421,22 @@ msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po index 45537e2..9b918cc 100644 --- a/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po @@ -15,7 +15,7 @@ msgstr "" "Domain: DOMAIN\n" "X-Is-Fallback-For: sv-fi sv-se\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "En kommentar har postats." @@ -28,20 +28,20 @@ msgstr "En id unik för denna kommentar" msgid "Add a comment" msgstr "Lägg till en kommentar" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Anonym kommentar" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Avbryt" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Ändringar sparade" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Kommentaren har nu godkänts." @@ -57,7 +57,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Kommentaren har nu raderats." @@ -69,7 +69,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Porträtt av kommentatorn" @@ -96,11 +96,11 @@ msgstr "" msgid "Disabled" msgstr "Inaktiverad" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Inställningar för kommentarer" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Redigering avbruten" @@ -108,7 +108,7 @@ msgstr "Redigering avbruten" msgid "Email" msgstr "E-post" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Aktivera kommentarer" @@ -120,7 +120,7 @@ msgstr "Id för den kommentar som denna kommentar besvarar" msgid "MIME type" msgstr "MIME-type" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Varsling av moderator på epostAvisering till moderatorn med e-post" @@ -144,7 +144,7 @@ msgstr "Plone Discussions" msgid "Portal type" msgstr "Portaltyp" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Spara" @@ -160,11 +160,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Avisering till användare med e-post" @@ -191,6 +191,11 @@ msgstr "Radera" msgid "bulkactions_publish" msgstr "Godkänn" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -211,12 +216,32 @@ msgstr "Kommentaren visas när den godkänts av moderatorn." msgid "comment_description_plain_text" msgstr "Du kan lägga till en kommentar genom att fylla i fälten nedan." +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 #, fuzzy msgid "comment_title" msgstr "${creator} om ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -253,22 +278,27 @@ msgid "help_anonymous_comments" msgstr "Tillåt anonyma användare att kommentera utan att logga in. För att undvika skräppost, rekommenderas starkt att Captcha-validering aktiveras." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Aktivera captcha-validering av kommentarer. Om listrutan saknar alternativ: installera plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet eller collective.z3cform.norobots." # NOTE: "\n # does not work. #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "Vissa inställningar för kommentarer finns inte på denna kontrollpanel. — För att aktivera kommentarer för en viss innehållstyp, välj denna på kontrollpanelen \"Innehållstyper\" och markera rutan \"Tillåt kommentarer \". — För att aktivera ett arbetsflöde för moderation av kommentarer, välj \"Kommentar\" på kontrollpanelen \"Innehållstyper\" och sätt nytt arbetsflöde \"Comment Review Workflow\"." +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -280,35 +310,35 @@ msgid "help_moderation_enabled" msgstr "Nya kommentarer får arbetsflödesstatus \"Pending\", och blir inte publikt tillgängliga förrän de godkänns av en moderator. Moderatorn behöver behörigheten \"Review comments\", rollerna \"Reviewer\" och \"Manager\" har det som standard. — För att ge kommentarer ett anpassat arbetsflöde, använd kontrollpanelen \"Innehållstyper\"." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "E-postadress för aviseringar till moderatorn." # " The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" is FALSE! #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Avisera moderatorn med e-post när en ny kommentar behöver åtgärdas." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Visa ett porträtt av kommentatorn bredvid kommentaren." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "\"Plain text\": Endast radbrytningar bevaras. — \"Intelligent text\": Konvertering till HTML; radbrytningar och indrag bevaras, webbadresser och e-postadresser blir klickbara länkar." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Ge inloggade användare möjlighet att välja att bli aviserade med e-post om nya kommentarer." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Anonym" @@ -318,7 +348,7 @@ msgid "label_anonymous_comments" msgstr "Tillåt anonyma kommentarer" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -328,7 +358,7 @@ msgid "label_apply" msgstr "Verkställ" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Captcha" @@ -338,7 +368,7 @@ msgid "label_comment" msgstr "Kommentar" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "Kommentarsfunktionen har inaktiverats." @@ -347,6 +377,11 @@ msgstr "Kommentarsfunktionen har inaktiverats." msgid "label_delete" msgstr "Radera" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -358,12 +393,12 @@ msgid "label_moderation_enabled" msgstr "Aktivera moderation för kommentarer" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Moderatorns e-postadress" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Aktivera avisering med e-post till moderatorn" @@ -373,12 +408,12 @@ msgid "label_publish" msgstr "Godkänn" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "säger:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Visa porträtt av kommentatorn" @@ -393,17 +428,17 @@ msgid "label_subject" msgstr "Ämne" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Texttransformering för kommentarer" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Aktivera e-post-avisering till användare" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" "En kommentar till '${title}' har postats här: ${link}\n" @@ -413,7 +448,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "En kommentar till '${title}' har postats här: ${link}\n" diff --git a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po index e1e2425..2605b9a 100644 --- a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "Коментар додано." @@ -26,20 +26,20 @@ msgstr "Унікальний ідентифікатор коментаря дл msgid "Add a comment" msgstr "Додати коментар" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "Анонімне коментування" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Скасувати" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Зміни збережено" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Коментар опубліковано." @@ -55,7 +55,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Коментар знищено." @@ -67,7 +67,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "Зображення коментатора" @@ -94,11 +94,11 @@ msgstr "Дата останного публічного коментаря" msgid "Disabled" msgstr "Вимкнено" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "Налаштуванняя коментування" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "Редагування скасовано" @@ -106,7 +106,7 @@ msgstr "Редагування скасовано" msgid "Email" msgstr "Електронна адреса" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "Увімкнути можливість додавати коментарі" @@ -118,7 +118,7 @@ msgstr "Id коментаря, відповіддю на який - є цей к msgid "MIME type" msgstr "MIME-тип" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Сповіщення модератора електронною поштою" @@ -142,7 +142,7 @@ msgstr "Коментування в Plone" msgid "Portal type" msgstr "Портал тип" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "Зберегти" @@ -158,11 +158,11 @@ msgstr "Перелік коментаторів (імена користувач msgid "Total number of public comments on this item" msgstr "Загальна кількість публічних коментарів для даного елемента" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "Не доступне перетворення '%s' => '%s'." -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Сповіщення користувача електронною поштою" @@ -189,6 +189,11 @@ msgstr "Знищити" msgid "bulkactions_publish" msgstr "Опублікувати" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -209,11 +214,31 @@ msgstr "Коментарі модеруються." msgid "comment_description_plain_text" msgstr "Ви можете додати коментар, заповнивши наступну форму. Просте форматування тексту. " +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 msgid "comment_title" msgstr "${author_name} до ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -250,23 +275,28 @@ msgid "help_anonymous_comments" msgstr "Якщо вибрано - то анонімні користувачі зможуть додавати коментарі без входу в систему. Для таких випадків рекомендуєтсья використовувати капчу, щоб запобігти надсиланню спаму." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "Якщо вибрано, анонімний користувач повинен буде вказати свою електронну пошту." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "Використовуйте цей параметр, щоб увімкнути або вимкнути капчу для коментарів. Для цього спершу встановіть plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet або collective.z3cform.norobots." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "Не всі налаштування коментувань знаходяться на цій сторінці.\n" "Так, щоб увімкнути можливість коментування для певного типу вмісту, перейдіть в розділ налаштувань Типи, виберіть необхідний тип вмісту, та виберіть \"Дозволити додавати коментар\".\n" "To enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\".\"" +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -278,34 +308,34 @@ msgid "help_moderation_enabled" msgstr "Якщо вибрано, коментарі увійде в стан 'В очікуванні', у якому вони невидимі для громадськості. Користувач з правом 'Огляд коментарів' ('Рецензент' або 'Менеджер') може схвалити коментар, щоб зробити їх видимими для громадськості. Якщо ви хочете налаштувати робочий процес коментарів, ви повинні піти в панель керування типів." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "Адреса, за якою модератору будуть надсилатися повідомлення." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Якщо вибрано, модератор отримує повідомлення, якщо коментар вимагає уваги. Адресу електронної пошти модератора можна знайти в 'Пошта' панелі керування (Адреса 'Від')" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "Якщо вибрано, зображення коментатора буде відображатись поруч з коментарем." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "Виберіть як повинен бути перетворений текст коментаря. Ви можете вибрати між 'Звичайний текст' і 'Інтелектуальні тексту'. 'Інтелектуальний текст' перетворює текст в HTML, де рядки і відступи зберігаються, інтернет адреси та адреси електронної пошти перетворяться в активні посилання." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "Якщо вибрано, користувачі зможуть обрати можливість отримувати нотифікації про нові коментарі поштою." #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "Анонім" @@ -315,7 +345,7 @@ msgid "label_anonymous_comments" msgstr "Увімкнути можливість анонімного коментування" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "Увімкнути поле електронної адреси для аноніма" @@ -325,7 +355,7 @@ msgid "label_apply" msgstr "Застосувати" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "Капча" @@ -335,7 +365,7 @@ msgid "label_comment" msgstr "Коментар" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "Коментування вимкнено" @@ -344,6 +374,11 @@ msgstr "Коментування вимкнено" msgid "label_delete" msgstr "Знищити" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -355,12 +390,12 @@ msgid "label_moderation_enabled" msgstr "Увімкнути модерування коментарів" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "Електронна адреса модератора" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "Увімкнути сповіщення модератора" @@ -370,12 +405,12 @@ msgid "label_publish" msgstr "Опублікувати" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "каже:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "Показати зображення коментатора" @@ -390,17 +425,17 @@ msgid "label_subject" msgstr "Тема" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "Перетворення тексту коментаря" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "Увімкнути надcилання нотифікації користувачу через електронну адресу" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" "Коментар до '${title}' було додано тут: ${link}\n" @@ -410,7 +445,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "Коментар до '${title}' було додано тут: ${link}\n" diff --git a/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po index efdd404..beac55f 100644 --- a/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po @@ -16,7 +16,7 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: DOMAIN\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "一个评论已发布。" @@ -28,20 +28,20 @@ msgstr "此对话的评论 ID" msgid "Add a comment" msgstr "添加​​评论" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "匿名评论" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "取消" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "更改已保存" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "评论已批准。" @@ -57,7 +57,7 @@ msgstr "" msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "评论已删除。" @@ -69,7 +69,7 @@ msgstr "" msgid "Comment text" msgstr "" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "评论者头像" @@ -96,11 +96,11 @@ msgstr "" msgid "Disabled" msgstr "禁用" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "评论设置" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "编辑已取消" @@ -108,7 +108,7 @@ msgstr "编辑已取消" msgid "Email" msgstr "Email" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "启用评论" @@ -120,7 +120,7 @@ msgstr "针对回复评论ID" msgid "MIME type" msgstr "MIME 类型" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "Email 通知审核者" @@ -144,7 +144,7 @@ msgstr "Plone 评论" msgid "Portal type" msgstr "Portal 类型" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "保存" @@ -160,11 +160,11 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "Email 通知用户" @@ -191,6 +191,11 @@ msgstr "删除" msgid "bulkactions_publish" msgstr "批准" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -211,12 +216,32 @@ msgstr "评论将被审核。" msgid "comment_description_plain_text" msgstr "您可以通过填写以下表单发表评论,使用纯文本格式。" +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 #, fuzzy msgid "comment_title" msgstr "${creator} 在 ${content}" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -253,23 +278,28 @@ msgid "help_anonymous_comments" msgstr "如果选中,匿名用户可不登录的情况下发布评论。如果启用了此设置,强烈建议使用验证码,以防止垃圾评论。" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "设置启用或禁用评论验证码功能。如果没有任何可选项,可安装plone.formwidget.captcha,plone.formwidget.recaptcha,collective.akismet,或collective.z3cform.norobots。" #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "一些评论相关的设置并不位于 评论控制面板。\n" "要启用特定内容类型的评论,请到类型控制面板,选中这种类型的 \"允许评论\"。\n" "要启用评论审核工作流,请到类型控制面板,选择 \"评论\" 并将工作流设置为 \"评论审核工作流\"。" +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -281,34 +311,34 @@ msgid "help_moderation_enabled" msgstr "如果选中,评论将进入'待审核'状态,它们对用户是看不见的。'具有审核权限的用户('审核者'或'管理者')可以批准评论,使它们对用户可见。如果你要启用定制的评论工作流,你必须到类型控制面板。" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "审核通知发送地址。" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "如果选中,如评论需要注意,审核者将被通知。审核者的Email地址,可以在'邮件设置'控制面板(网站'发件人'地址)中找到。" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "如果选中,用户的头像显示在评论旁边。" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "使用此设置选择评论文本的转换方式,你可以选择'纯文本'和'智能文本。'智能文本'转换纯文本成HTML格式,其中换行和缩进保留,Web和Email地址都转换为可点击链接。" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "如果选中,用户可以选择通过Email通知新的评论。" #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "匿名" @@ -318,7 +348,7 @@ msgid "label_anonymous_comments" msgstr "启用匿名评论" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "" @@ -328,7 +358,7 @@ msgid "label_apply" msgstr "应用" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "验证码" @@ -338,7 +368,7 @@ msgid "label_comment" msgstr "评论" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "评论已被禁用。" @@ -347,6 +377,11 @@ msgstr "评论已被禁用。" msgid "label_delete" msgstr "删除" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -358,12 +393,12 @@ msgid "label_moderation_enabled" msgstr "启用评论审核" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "审核者Email地址" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "启用审核者Email通知" @@ -373,12 +408,12 @@ msgid "label_publish" msgstr "批准" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "说:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "显示评论者的头像" @@ -393,17 +428,17 @@ msgid "label_subject" msgstr "标题" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "评论文本转换" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "启用用户Email通知" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" "一条评论 '${title}' 已发布在: ${link}\n" @@ -413,7 +448,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "一条评论 '${title}' 已发布在: ${link}\n" diff --git a/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po index 032bd78..9061aea 100644 --- a/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-04-18 14:25+0000\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" "PO-Revision-Date: 2014-05-02 20:55+0800\n" "Last-Translator: TsungWei Hu \n" "Language-Team: Plone I18N \n" @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:348 +#: ../comment.py:357 msgid "A comment has been posted." msgstr "留言已張貼。" @@ -26,20 +26,20 @@ msgstr "留言的識別碼" msgid "Add a comment" msgstr "新增留言" -#: ../browser/controlpanel.py:66 +#: ../browser/controlpanel.py:75 msgid "Anonymous Comments" msgstr "匿名留言" #: ../browser/comments.py:274 -#: ../browser/controlpanel.py:84 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "取消" -#: ../browser/controlpanel.py:80 +#: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "變更已儲存" -#: ../browser/moderation.py:139 +#: ../browser/moderation.py:154 msgid "Comment approved." msgstr "留言已審核" @@ -55,7 +55,7 @@ msgstr "留言作者姓名" msgid "Comment author user name" msgstr "留言作者帳號" -#: ../browser/moderation.py:100 +#: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "留言已刪除" @@ -67,7 +67,7 @@ msgstr "留言識別碼" msgid "Comment text" msgstr "留言內文" -#: ../browser/controlpanel.py:67 +#: ../browser/controlpanel.py:76 msgid "Commenter Image" msgstr "留言者圖檔" @@ -94,11 +94,11 @@ msgstr "最新留言的日期" msgid "Disabled" msgstr "已停用" -#: ../browser/controlpanel.py:34 +#: ../browser/controlpanel.py:35 msgid "Discussion settings" msgstr "討論區設定" -#: ../browser/controlpanel.py:86 +#: ../browser/controlpanel.py:95 msgid "Edit cancelled" msgstr "取消編輯" @@ -106,7 +106,7 @@ msgstr "取消編輯" msgid "Email" msgstr "E-Mail" -#: ../browser/controlpanel.py:65 +#: ../browser/controlpanel.py:74 msgid "Enable Comments" msgstr "允許留言" @@ -118,7 +118,7 @@ msgstr "留言的識別碼" msgid "MIME type" msgstr "MIME-Type" -#: ../browser/controlpanel.py:69 +#: ../browser/controlpanel.py:78 msgid "Moderator Email Notification" msgstr "審核者的電子郵件通知" @@ -142,7 +142,7 @@ msgstr "Plone 討論區" msgid "Portal type" msgstr "網站型別" -#: ../browser/controlpanel.py:73 +#: ../browser/controlpanel.py:82 msgid "Save" msgstr "儲存" @@ -158,11 +158,11 @@ msgstr "留言的帳號列表" msgid "Total number of public comments on this item" msgstr "留言的數量統計" -#: ../comment.py:164 +#: ../comment.py:173 msgid "Transform '%s' => '%s' not available." msgstr "轉換 '%s' => '%s' 並不存在" -#: ../browser/controlpanel.py:71 +#: ../browser/controlpanel.py:80 msgid "User Email Notification" msgstr "新留言通知使用者" @@ -189,6 +189,11 @@ msgstr "刪除" msgid "bulkactions_publish" msgstr "審核" +#. Default: "Cancel" +#: ../browser/comment.py:97 +msgid "cancel_form_button" +msgstr "" + #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" @@ -209,11 +214,31 @@ msgstr "留言等待審核中" msgid "comment_description_plain_text" msgstr "填寫下列表單後,就可以新增留言。" +#. Default: "Edit comment cancelled" +#: ../browser/comment.py:101 +msgid "comment_edit_cancel_notification" +msgstr "" + +#. Default: "Comment was edited" +#: ../browser/comment.py:91 +msgid "comment_edit_notification" +msgstr "" + #. Default: "${author_name} on ${content}" -#: ../comment.py:54 +#: ../comment.py:55 msgid "comment_title" msgstr "${author_name} 在 ${content} 留言" +#. Default: "Edit comment" +#: ../browser/comment.py:70 +msgid "edit_comment_form_button" +msgstr "" + +#. Default: "Edit comment" +#: ../browser/comment.py:54 +msgid "edit_comment_form_title" +msgstr "" + #. Default: "Action" #: ../browser/moderation.pt:85 msgid "heading_action" @@ -250,23 +275,28 @@ msgid "help_anonymous_comments" msgstr "勾選的話,匿名使用者不必登入系統就能留言。建議使用 captcha 來避免垃圾留言。" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "勾選的話,匿名留言者必須填寫電郵信箱。" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:266 +#: ../interfaces.py:277 msgid "help_captcha" msgstr "設定留言是否啟用或停用 captcha 功能,如果還沒有這類模組選項的話,可安裝 plone.formwidget.captcha、plone.formwidget.recaptcha、collective.akismet 或 collective.z3cform.norobots。" #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" msgstr "" "某些討論區設定值並未在討論區控制面板找得到。\n" "想要指定某個內容型別的留言功能,請到型別控制面板,指定「允許留言」。\n" "想要指定留言的審核流程,請到型別控制面板,點選「留言」並指定工作流程為「留言審核流程」。" +#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#: ../interfaces.py:249 +msgid "help_edit_comment_enabled" +msgstr "" + #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" @@ -278,33 +308,33 @@ msgid "help_moderation_enabled" msgstr "勾選的話,留言會先變成待審狀態,直到通過審核後才會公開,想要客製化管理流程的話,必須到型別設定頁面。" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:307 +#: ../interfaces.py:318 msgid "help_moderator_email" msgstr "審核通知信的寄送地址。" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_moderator_notification_enabled" msgstr "勾選的話,有人留言時就會通知審核者。審核者的寄信地址可在下列欄位設定。" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:282 +#: ../interfaces.py:293 msgid "help_show_commenter_image" msgstr "勾選的話,使用者的圖檔會顯示在留言旁邊。" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:249 +#: ../interfaces.py:260 msgid "help_text_transform" msgstr "選擇留言的標註格式,選擇「排版文字」的話,會主動保留內容的換行和縮排,也會把網址變成可以點選的連結。" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:319 +#: ../interfaces.py:330 msgid "help_user_notification_enabled" msgstr "勾選的話,使用者可以收到新留言的通知信。" #. Default: "Anonymous" -#: ../browser/comments.pt:71 -#: ../comment.py:182 +#: ../browser/comments.pt:74 +#: ../comment.py:191 msgid "label_anonymous" msgstr "無名氏" @@ -314,7 +344,7 @@ msgid "label_anonymous_comments" msgstr "啟用匿名留言功能" #. Default: "Enable anonymous email field" -#: ../interfaces.py:328 +#: ../interfaces.py:339 msgid "label_anonymous_email_enabled" msgstr "啟用匿名留言的電郵欄位" @@ -324,7 +354,7 @@ msgid "label_apply" msgstr "更新" #. Default: "Captcha" -#: ../interfaces.py:264 +#: ../interfaces.py:275 msgid "label_captcha" msgstr "captcha" @@ -334,7 +364,7 @@ msgid "label_comment" msgstr "留言" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:130 +#: ../browser/comments.pt:148 msgid "label_commenting_disabled" msgstr "留言功能已停用。" @@ -343,6 +373,11 @@ msgstr "留言功能已停用。" msgid "label_delete" msgstr "刪除" +#. Default: "Enable editing of comments" +#: ../interfaces.py:247 +msgid "label_edit_comment_enabled" +msgstr "" + #. Default: "Globally enable comments" #: ../interfaces.py:200 msgid "label_globally_enabled" @@ -354,12 +389,12 @@ msgid "label_moderation_enabled" msgstr "啟用審核功能" #. Default: "Moderator Email Address" -#: ../interfaces.py:303 +#: ../interfaces.py:314 msgid "label_moderator_email" msgstr "審核者電郵地址" #. Default: "Enable moderator email notification" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_moderator_notification_enabled" msgstr "啟用通知審核者的功能" @@ -369,12 +404,12 @@ msgid "label_publish" msgstr "審核" #. Default: "says:" -#: ../browser/comments.pt:74 +#: ../browser/comments.pt:77 msgid "label_says" msgstr "留言:" #. Default: "Show commenter image" -#: ../interfaces.py:280 +#: ../interfaces.py:291 msgid "label_show_commenter_image" msgstr "顯示留言者圖檔" @@ -389,17 +424,17 @@ msgid "label_subject" msgstr "標題" #. Default: "Comment text transform" -#: ../interfaces.py:247 +#: ../interfaces.py:258 msgid "label_text_transform" msgstr "留言排版格式" #. Default: "Enable user email notification" -#: ../interfaces.py:315 +#: ../interfaces.py:326 msgid "label_user_notification_enabled" msgstr "啟用通知使用者的功能" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:58 +#: ../comment.py:59 msgid "mail_notification_message" msgstr "" "${title} 有新留言:${link}\n" @@ -409,7 +444,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:66 +#: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" "${title} 有新留言:${link}\n" From 002c81427ebd9256c335440757868e492a101652 Mon Sep 17 00:00:00 2001 From: Ammy2 Date: Wed, 25 Jun 2014 02:32:48 +0530 Subject: [PATCH 202/254] Id for textarea of reply form made unique --- plone/app/discussion/browser/javascripts/comments.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/plone/app/discussion/browser/javascripts/comments.js b/plone/app/discussion/browser/javascripts/comments.js index 81a8d64..6e58f32 100644 --- a/plone/app/discussion/browser/javascripts/comments.js +++ b/plone/app/discussion/browser/javascripts/comments.js @@ -35,8 +35,9 @@ */ reply_div.appendTo(comment_div).css("display", "none"); - /* Remove id="reply" attribute, since we use it to uniquely + /* Remove id="commenting" attribute, since we use it to uniquely define the main reply form. */ + // Still belongs to class="reply" reply_div.removeAttr("id"); /* Hide the reply button (only hide, because we may want to show it @@ -47,6 +48,13 @@ /* Fetch the reply form inside the reply div */ var reply_form = reply_div.find("form"); + /* Change the id of the textarea of the reply form + * To avoid conflict later between textareas with same id 'form-widgets-comment-text' while implementing a seperate instance of TinyMCE + * */ + reply_form.find('#formfield-form-widgets-comment-text').attr('id', 'formfield-form-widgets-new-textarea'+comment_id ); + reply_form.find('#form-widgets-comment-text').attr('id', 'form-widgets-new-textarea'+comment_id ); + + /* Populate the hidden 'in_reply_to' field with the correct comment id */ reply_form.find("input[name='form.widgets.in_reply_to']") From 0165f1b73c5a9c14e0ea1923fccef861b25084ca Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Mon, 11 Aug 2014 14:09:48 +0200 Subject: [PATCH 203/254] Update tag for id=content element to article instead of a simple div. --- plone/app/discussion/browser/controlpanel.pt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plone/app/discussion/browser/controlpanel.pt b/plone/app/discussion/browser/controlpanel.pt index 0018049..0ccb3e1 100644 --- a/plone/app/discussion/browser/controlpanel.pt +++ b/plone/app/discussion/browser/controlpanel.pt @@ -14,7 +14,7 @@ -
      @@ -99,6 +99,6 @@
      - + From 45f58edd061bca9c9c5f2290e7908273665239d5 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Mon, 11 Aug 2014 14:11:18 +0200 Subject: [PATCH 204/254] Revert "Update tag for id=content element to article instead of a simple div." This reverts commit 0165f1b73c5a9c14e0ea1923fccef861b25084ca. --- plone/app/discussion/browser/controlpanel.pt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plone/app/discussion/browser/controlpanel.pt b/plone/app/discussion/browser/controlpanel.pt index 0ccb3e1..0018049 100644 --- a/plone/app/discussion/browser/controlpanel.pt +++ b/plone/app/discussion/browser/controlpanel.pt @@ -14,7 +14,7 @@ -
      @@ -99,6 +99,6 @@ -
      + From 2ba35bb0d41e8a1a4854a831bc545fff20d7fe6f Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Sun, 17 Aug 2014 04:54:12 +0200 Subject: [PATCH 205/254] merge fixed --- plone/app/discussion/browser/comments.pt | 3 --- 1 file changed, 3 deletions(-) diff --git a/plone/app/discussion/browser/comments.pt b/plone/app/discussion/browser/comments.pt index fa2c6b2..ceb50de 100644 --- a/plone/app/discussion/browser/comments.pt +++ b/plone/app/discussion/browser/comments.pt @@ -89,7 +89,6 @@ From fa127ad85cb3015dbbc38f48903e1734495a618f Mon Sep 17 00:00:00 2001 From: Gil Forcada Date: Sat, 23 Aug 2014 00:31:28 +0200 Subject: [PATCH 206/254] Whitespaces cleanup --- buildout.cfg | 8 ++++---- docs/README.txt | 2 +- jenkins.cfg | 6 +++--- plone/app/discussion/browser/comments.pt | 2 +- plone/app/discussion/browser/javascripts/comments.js | 2 +- .../locales/af/LC_MESSAGES/plone.app.discussion.po | 8 ++++---- .../locales/it/LC_MESSAGES/plone.app.discussion.po | 2 +- plone/app/discussion/tests/functional_test_comments.txt | 2 +- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/buildout.cfg b/buildout.cfg index 2d918f7..c893dfe 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -43,19 +43,19 @@ recipe = collective.recipe.template output = ${buildout:bin-directory}/update_translations input = inline: #!/usr/bin/env bash - + DOMAIN="plone.app.discussion" BASE_PATH=${buildout:directory}/plone/app/discussion I18NDUDE=${buildout:bin-directory}/i18ndude - + $I18NDUDE rebuild-pot --pot $BASE_PATH/locales/$DOMAIN.pot --create "$DOMAIN" $BASE_PATH* $I18NDUDE rebuild-pot --pot $BASE_PATH/i18n/plone.pot --create "plone" $BASE_PATH/profiles/ for LANG in `find $BASE_PATH/locales -maxdepth 1 -mindepth 1 -type d \ - | sed -e "s/.*locales\/\(.*\)$/\1/"`; do + | sed -e "s/.*locales\/\(.*\)$/\1/"`; do $I18NDUDE sync --pot $BASE_PATH/locales/$DOMAIN.pot $BASE_PATH/locales/de/LC_MESSAGES/$DOMAIN.po msgfmt --no-hash -o $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.mo $BASE_PATH/locales/$LANG/LC_MESSAGES/$DOMAIN.po - + $I18NDUDE sync --pot $BASE_PATH/i18n/plone.pot $BASE_PATH/i18n/plone-$LANG.po msgfmt --no-hash -o $BASE_PATH/i18n/plone-$LANG.mo $BASE_PATH/i18n/plone-$LANG.po done diff --git a/docs/README.txt b/docs/README.txt index e07e9b4..58475f7 100644 --- a/docs/README.txt +++ b/docs/README.txt @@ -1,2 +1,2 @@ -For developers documentation on plone.app.discussion, see +For developers documentation on plone.app.discussion, see http://packages.python.org/plone.app.discussion. \ No newline at end of file diff --git a/jenkins.cfg b/jenkins.cfg index 209b2f4..f5b0907 100644 --- a/jenkins.cfg +++ b/jenkins.cfg @@ -5,11 +5,11 @@ extends = https://raw.github.com/plone/buildout.jenkins/master/jenkins-code-analysis.cfg jenkins-test-eggs = plone.app.discussion [test] jenkins-test-directories = plone/app/discussion -parts += +parts += flake8 code-analysis extensions = mr.developer -auto-checkout = +auto-checkout = plone.recipe.codeanalysis collective.xmltestreport @@ -22,7 +22,7 @@ entry-points = flake8=flake8.main:main recipe = plone.recipe.codeanalysis [sources] -plone.recipe.codeanalysis = git git://github.com/tisto/plone.recipe.codeanalysis.git pushurl=git@github.com:tisto/plone.recipe.codeanalysis.git +plone.recipe.codeanalysis = git git://github.com/tisto/plone.recipe.codeanalysis.git pushurl=git@github.com:tisto/plone.recipe.codeanalysis.git collective.xmltestreport = git git://github.com/collective/collective.xmltestreport.git [versions] diff --git a/plone/app/discussion/browser/comments.pt b/plone/app/discussion/browser/comments.pt index 0348f33..979b8bf 100644 --- a/plone/app/discussion/browser/comments.pt +++ b/plone/app/discussion/browser/comments.pt @@ -114,7 +114,7 @@ /> - +
      , 2010. -# +# # Some tips for new translators: # ------------------------------ # login: aanmeld, meld aan @@ -7,16 +7,16 @@ # subscribe: inteken, teken in # unsubscribe: uitteken, teken uit # subscribers: intekenaars -# +# # Sommige mense verkies die hoflikheidsvorm "u" bo "jy/jou", en anders om. # Ons probeer dus maar om sover moontlik in die passiewe vorm te skryf. # Bv. # - "Attach your file" -> "Heg die lêer aan" # - "Afterwards you can attach your files" -> "Agterna kan lêers aangeheg -# +# # An updateable list of Afrikaans computer terms can be found here: # https://wiki.ubuntu.com/AfrikaansTranslators/VertalerWoordeboek -# +# msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" diff --git a/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po index 354a7e0..eb08564 100644 --- a/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po @@ -1,6 +1,6 @@ # Translation of plone.app.discussion.pot to Italian # Luca Fabbri , 2010 -# +# msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" diff --git a/plone/app/discussion/tests/functional_test_comments.txt b/plone/app/discussion/tests/functional_test_comments.txt index c0d1159..9712635 100644 --- a/plone/app/discussion/tests/functional_test_comments.txt +++ b/plone/app/discussion/tests/functional_test_comments.txt @@ -406,7 +406,7 @@ Submitting the form runs into a testbrowser notFoundException. We'll just catch that and check the result later. >>> try: - ... form.submit() + ... form.submit() ... except: ... pass From a94b3249a9f38f24fe76248810bcd22371aa0a02 Mon Sep 17 00:00:00 2001 From: Thomas Desvenain Date: Fri, 5 Sep 2014 11:11:54 +0200 Subject: [PATCH 207/254] fixed can_delete called from parent --- plone/app/discussion/browser/moderation.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/plone/app/discussion/browser/moderation.py b/plone/app/discussion/browser/moderation.py index 93f0b97..21aef4a 100644 --- a/plone/app/discussion/browser/moderation.py +++ b/plone/app/discussion/browser/moderation.py @@ -132,18 +132,19 @@ class DeleteOwnComment(DeleteComment): * Owner role directly assigned on the comment object """ - def could_delete(self): + def could_delete(self, comment=None): """returns true if the comment could be deleted if it had no replies.""" sm = getSecurityManager() - context = aq_inner(self.context) + comment = comment or aq_inner(self.context) userid = sm.getUser().getId() return (sm.checkPermission('Delete own comments', - context) - and 'Owner' in context.get_local_roles_for_userid(userid)) + comment) + and 'Owner' in comment.get_local_roles_for_userid(userid)) - def can_delete(self): - return (len(IReplies(aq_inner(self.context))) == 0 - and self.could_delete()) + def can_delete(self, comment=None): + comment = comment or self.context + return (len(IReplies(aq_inner(comment))) == 0 + and self.could_delete(comment=comment)) def __call__(self): if self.can_delete(): From 80a9dea1d87d9b42bdd586bcc9fca753ee0fbf16 Mon Sep 17 00:00:00 2001 From: Vincent Fretin Date: Sat, 20 Sep 2014 14:08:50 +0200 Subject: [PATCH 208/254] no extra debug for plone.app.robotframework --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a912d59..2c32684 100644 --- a/setup.py +++ b/setup.py @@ -56,7 +56,7 @@ setup(name='plone.app.discussion', 'plone.contentrules', 'plone.app.contentrules', 'plone.app.contenttypes[test]', - 'plone.app.robotframework[ride,reload,debug]', + 'plone.app.robotframework[ride,reload]', ] }, entry_points=""" From ee28528f556a1e44dc7f65a5c5715ba6e2510718 Mon Sep 17 00:00:00 2001 From: Vincent Fretin Date: Sat, 20 Sep 2014 14:14:19 +0200 Subject: [PATCH 209/254] Don't use session at all for content rules, set the event in the request to be able to access comment attributes. This fixes 'InvalidObjectReference: A new object is reachable from multiple databases.' if comment contains a RichTextValue which contains a RawValueHolder (persistent object). --- plone/app/discussion/contentrules.py | 22 ++++++++----------- plone/app/discussion/events.py | 14 ++++-------- .../app/discussion/tests/test_contentrules.py | 8 ------- 3 files changed, 13 insertions(+), 31 deletions(-) diff --git a/plone/app/discussion/contentrules.py b/plone/app/discussion/contentrules.py index 4f2b58e..dfa00fc 100644 --- a/plone/app/discussion/contentrules.py +++ b/plone/app/discussion/contentrules.py @@ -28,22 +28,18 @@ class CommentSubstitution(BaseSubstitution): """ def __init__(self, context, **kwargs): super(CommentSubstitution, self).__init__(context, **kwargs) - self._session = None @property - def session(self): - """ User session + def event(self): + """ event that triggered the content rule """ - if self._session is None: - sdm = getattr(self.context, 'session_data_manager', None) - self._session = sdm.getSessionData(create=False) if sdm else {} - return self._session + return self.context.REQUEST.get('event') @property def comment(self): """ Get changed inline comment """ - return self.session.get('comment', {}) + return self.event.comment class Id(CommentSubstitution): """ Comment id string substitution @@ -54,7 +50,7 @@ class Id(CommentSubstitution): def safe_call(self): """ Safe call """ - return self.comment.get('comment_id', u'') + return getattr(self.comment, 'comment_id', u'') class Text(CommentSubstitution): """ Comment text @@ -65,7 +61,7 @@ class Text(CommentSubstitution): def safe_call(self): """ Safe call """ - return self.comment.get('text', u'') + return getattr(self.comment, 'text', u'') class AuthorUserName(CommentSubstitution): """ Comment author user name string substitution @@ -76,7 +72,7 @@ class AuthorUserName(CommentSubstitution): def safe_call(self): """ Safe call """ - return self.comment.get('author_username', u'') + return getattr(self.comment, 'author_username', u'') class AuthorFullName(CommentSubstitution): """ Comment author full name string substitution @@ -87,7 +83,7 @@ class AuthorFullName(CommentSubstitution): def safe_call(self): """ Safe call """ - return self.comment.get('author_name', u'') + return getattr(self.comment, 'author_name', u'') class AuthorEmail(CommentSubstitution): """ Comment author email string substitution @@ -98,4 +94,4 @@ class AuthorEmail(CommentSubstitution): def safe_call(self): """ Safe call """ - return self.comment.get('author_email', u'') + return getattr(self.comment, 'author_email', u'') diff --git a/plone/app/discussion/events.py b/plone/app/discussion/events.py index 30d49a1..804077a 100644 --- a/plone/app/discussion/events.py +++ b/plone/app/discussion/events.py @@ -19,16 +19,10 @@ class DiscussionEvent(object): for key, value in kwargs.items(): setattr(self, key, value) - # Add comment on session to easily define content-rules dynamic strings - sdm = getattr(context, 'session_data_manager', None) - session = sdm.getSessionData(create=True) if sdm else None - - if session: - sessionComment = dict( - (field, getattr(comment, field, None)) for field in IComment - if not field.startswith('_') - ) - session.set('comment', sessionComment) + # Add event to the request to be able to access comment attributes + # in content-rules dynamic strings + request = context.REQUEST + request.set('event', self) class CommentAddedEvent(DiscussionEvent): """ Event to be triggered when a Comment is added diff --git a/plone/app/discussion/tests/test_contentrules.py b/plone/app/discussion/tests/test_contentrules.py index 16618e2..a9e9bf1 100644 --- a/plone/app/discussion/tests/test_contentrules.py +++ b/plone/app/discussion/tests/test_contentrules.py @@ -1,9 +1,7 @@ # -*- coding: utf-8 -*- import unittest2 as unittest -from Testing import ZopeTestCase as ztc from zope.component import createObject, getAdapter -from zope.event import notify from plone.app.testing import TEST_USER_ID, setRoles from plone.contentrules.rule.interfaces import IRuleEventType @@ -25,9 +23,6 @@ class CommentContentRulesTest(unittest.TestCase): layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING def setUp(self): - # Setup session manager - ztc.utils.setupCoreSessions(self.layer['app']) - # Setup sandbox self.portal = self.layer['portal'] self.request = self.layer['request'] @@ -94,9 +89,6 @@ class ReplyContentRulesTest(unittest.TestCase): layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING def setUp(self): - # Setup session manager - ztc.utils.setupCoreSessions(self.layer['app']) - # Setup sandbox self.portal = self.layer['portal'] self.request = self.layer['request'] From 42d12200a78fb637e928777abeee3d6513028714 Mon Sep 17 00:00:00 2001 From: Vincent Fretin Date: Sat, 20 Sep 2014 14:14:19 +0200 Subject: [PATCH 210/254] Don't use session at all for content rules, set the event in the request to be able to access comment attributes. This fixes 'InvalidObjectReference: A new object is reachable from multiple databases.' if comment contains a RichTextValue which contains a RawValueHolder (persistent object). --- plone/app/discussion/contentrules.py | 22 ++++++++----------- plone/app/discussion/events.py | 14 ++++-------- .../app/discussion/tests/test_contentrules.py | 8 ------- 3 files changed, 13 insertions(+), 31 deletions(-) diff --git a/plone/app/discussion/contentrules.py b/plone/app/discussion/contentrules.py index 4f2b58e..dfa00fc 100644 --- a/plone/app/discussion/contentrules.py +++ b/plone/app/discussion/contentrules.py @@ -28,22 +28,18 @@ class CommentSubstitution(BaseSubstitution): """ def __init__(self, context, **kwargs): super(CommentSubstitution, self).__init__(context, **kwargs) - self._session = None @property - def session(self): - """ User session + def event(self): + """ event that triggered the content rule """ - if self._session is None: - sdm = getattr(self.context, 'session_data_manager', None) - self._session = sdm.getSessionData(create=False) if sdm else {} - return self._session + return self.context.REQUEST.get('event') @property def comment(self): """ Get changed inline comment """ - return self.session.get('comment', {}) + return self.event.comment class Id(CommentSubstitution): """ Comment id string substitution @@ -54,7 +50,7 @@ class Id(CommentSubstitution): def safe_call(self): """ Safe call """ - return self.comment.get('comment_id', u'') + return getattr(self.comment, 'comment_id', u'') class Text(CommentSubstitution): """ Comment text @@ -65,7 +61,7 @@ class Text(CommentSubstitution): def safe_call(self): """ Safe call """ - return self.comment.get('text', u'') + return getattr(self.comment, 'text', u'') class AuthorUserName(CommentSubstitution): """ Comment author user name string substitution @@ -76,7 +72,7 @@ class AuthorUserName(CommentSubstitution): def safe_call(self): """ Safe call """ - return self.comment.get('author_username', u'') + return getattr(self.comment, 'author_username', u'') class AuthorFullName(CommentSubstitution): """ Comment author full name string substitution @@ -87,7 +83,7 @@ class AuthorFullName(CommentSubstitution): def safe_call(self): """ Safe call """ - return self.comment.get('author_name', u'') + return getattr(self.comment, 'author_name', u'') class AuthorEmail(CommentSubstitution): """ Comment author email string substitution @@ -98,4 +94,4 @@ class AuthorEmail(CommentSubstitution): def safe_call(self): """ Safe call """ - return self.comment.get('author_email', u'') + return getattr(self.comment, 'author_email', u'') diff --git a/plone/app/discussion/events.py b/plone/app/discussion/events.py index 30d49a1..804077a 100644 --- a/plone/app/discussion/events.py +++ b/plone/app/discussion/events.py @@ -19,16 +19,10 @@ class DiscussionEvent(object): for key, value in kwargs.items(): setattr(self, key, value) - # Add comment on session to easily define content-rules dynamic strings - sdm = getattr(context, 'session_data_manager', None) - session = sdm.getSessionData(create=True) if sdm else None - - if session: - sessionComment = dict( - (field, getattr(comment, field, None)) for field in IComment - if not field.startswith('_') - ) - session.set('comment', sessionComment) + # Add event to the request to be able to access comment attributes + # in content-rules dynamic strings + request = context.REQUEST + request.set('event', self) class CommentAddedEvent(DiscussionEvent): """ Event to be triggered when a Comment is added diff --git a/plone/app/discussion/tests/test_contentrules.py b/plone/app/discussion/tests/test_contentrules.py index 16618e2..a9e9bf1 100644 --- a/plone/app/discussion/tests/test_contentrules.py +++ b/plone/app/discussion/tests/test_contentrules.py @@ -1,9 +1,7 @@ # -*- coding: utf-8 -*- import unittest2 as unittest -from Testing import ZopeTestCase as ztc from zope.component import createObject, getAdapter -from zope.event import notify from plone.app.testing import TEST_USER_ID, setRoles from plone.contentrules.rule.interfaces import IRuleEventType @@ -25,9 +23,6 @@ class CommentContentRulesTest(unittest.TestCase): layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING def setUp(self): - # Setup session manager - ztc.utils.setupCoreSessions(self.layer['app']) - # Setup sandbox self.portal = self.layer['portal'] self.request = self.layer['request'] @@ -94,9 +89,6 @@ class ReplyContentRulesTest(unittest.TestCase): layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING def setUp(self): - # Setup session manager - ztc.utils.setupCoreSessions(self.layer['app']) - # Setup sandbox self.portal = self.layer['portal'] self.request = self.layer['request'] From 2a8082cfa7d37c8c247f1a105b7e027cde5e0940 Mon Sep 17 00:00:00 2001 From: Vincent Fretin Date: Sat, 20 Sep 2014 16:02:48 +0200 Subject: [PATCH 211/254] add delete_own_comment_enabled option in control panel --- plone/app/discussion/browser/comments.pt | 3 ++- plone/app/discussion/browser/comments.py | 10 ++++++++-- plone/app/discussion/browser/controlpanel.py | 5 +++++ .../discussion/browser/javascripts/controlpanel.js | 2 ++ plone/app/discussion/browser/moderation.py | 8 ++++---- plone/app/discussion/configure.zcml | 8 ++++---- plone/app/discussion/interfaces.py | 13 ++++++++++++- plone/app/discussion/profiles/default/registry.xml | 1 + plone/app/discussion/tests/test_controlpanel.py | 8 ++++---- 9 files changed, 42 insertions(+), 16 deletions(-) diff --git a/plone/app/discussion/browser/comments.pt b/plone/app/discussion/browser/comments.pt index ceb50de..8e69b15 100644 --- a/plone/app/discussion/browser/comments.pt +++ b/plone/app/discussion/browser/comments.pt @@ -2,6 +2,7 @@ isDiscussionAllowed view/is_discussion_allowed; isAnonymousDiscussionAllowed view/anonymous_discussion_allowed; isEditCommentAllowed view/edit_comment_allowed; + isDeleteOwnCommentAllowed view/delete_own_comment_allowed; isAnon view/is_anonymous; canReview view/can_review; replies python:view.get_replies(canReview); @@ -90,7 +91,7 @@ action="" method="post" class="commentactionsform" - tal:condition="python: not canDelete and view.could_delete_own(reply)" + tal:condition="python:not canDelete and isDeleteOwnCommentAllowed and view.could_delete_own(reply)" tal:attributes="action string:${reply/absolute_url}/@@delete-own-comment; style python:view.can_delete_own(reply) and 'display: inline' or 'display: none'"> False + False diff --git a/plone/app/discussion/tests/test_controlpanel.py b/plone/app/discussion/tests/test_controlpanel.py index 8a2ba47..d672167 100644 --- a/plone/app/discussion/tests/test_controlpanel.py +++ b/plone/app/discussion/tests/test_controlpanel.py @@ -89,12 +89,12 @@ class RegistryTest(unittest.TestCase): 'IDiscussionSettings.edit_comment_enabled'], False) - def test_edit_comment_enabled(self): - # Check edit_comment_enabled record - self.assertTrue('edit_comment_enabled' in IDiscussionSettings) + def test_delete_own_comment_enabled(self): + # Check delete_own_comment_enabled record + self.assertTrue('delete_own_comment_enabled' in IDiscussionSettings) self.assertEqual( self.registry['plone.app.discussion.interfaces.' + - 'IDiscussionSettings.edit_comment_enabled'], + 'IDiscussionSettings.delete_own_comment_enabled'], False) def test_text_transform(self): From acacc8281a4c87149bb00550533c29a02ecc8296 Mon Sep 17 00:00:00 2001 From: Vincent Fretin Date: Sat, 20 Sep 2014 16:21:55 +0200 Subject: [PATCH 212/254] add a test for delete-own-comment view --- .../discussion/tests/test_comments_viewlet.py | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index 0aff711..6619b1a 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -26,7 +26,7 @@ from Products.CMFCore.utils import getToolByName from Products.CMFPlone.tests import dummy -from plone.app.testing import TEST_USER_ID, setRoles +from plone.app.testing import TEST_USER_ID, TEST_USER_NAME, setRoles from plone.app.testing import logout from plone.app.testing import login @@ -266,6 +266,60 @@ class TestCommentForm(unittest.TestCase): self.assertEqual(0, len([x for x in conversation.getComments()])) setRoles(self.portal, TEST_USER_ID, ['Manager']) + def test_delete_own_comment(self): + """Delete own comment as logged-in user. + """ + + # Allow discussion + self.portal.doc1.allow_discussion = True + self.viewlet = CommentsViewlet(self.context, self.request, None, None) + + def make_request(form={}): + request = TestRequest() + request.form.update(form) + alsoProvides(request, IFormLayer) + alsoProvides(request, IAttributeAnnotatable) + return request + + provideAdapter( + adapts=(Interface, IBrowserRequest), + provides=Interface, + factory=CommentForm, + name=u"comment-form" + ) + + # The form is submitted successfully, if the required text field is + # filled out + form_request = make_request(form={'form.widgets.text': u'bar'}) + + commentForm = getMultiAdapter( + (self.context, form_request), + name=u"comment-form" + ) + + commentForm.update() + data, errors = commentForm.extractData() # pylint: disable-msg=W0612 + self.assertEqual(len(errors), 0) + self.assertFalse(commentForm.handleComment(commentForm, "foo")) + + # Delete the last comment + conversation = IConversation(self.context) + comment = [x for x in conversation.getComments()][-1] + deleteView = getMultiAdapter( + (comment, self.request), + name=u"delete-own-comment" + ) + # try to delete last comment with johndoe + setRoles(self.portal, 'johndoe', ['Member']) + login(self.portal, 'johndoe') + self.assertRaises(Unauthorized, comment.restrictedTraverse, "@@delete-own-comment") + self.assertEqual(1, len([x for x in conversation.getComments()])) + # try to delete last comment with the same user that created it + login(self.portal, TEST_USER_NAME) + setRoles(self.portal, TEST_USER_ID, ['Member']) + deleteView() + self.assertEqual(0, len([x for x in conversation.getComments()])) + def test_add_anonymous_comment(self): self.portal.doc1.allow_discussion = True From 838f22972675f3d5187a1103184f09c43852819a Mon Sep 17 00:00:00 2001 From: Vincent Fretin Date: Thu, 9 Oct 2014 11:41:00 +0200 Subject: [PATCH 213/254] Don't execute createReplyForm js if there is no in_reply_to button. --- CHANGES.rst | 3 +++ plone/app/discussion/browser/javascripts/comments.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 566f0d4..a4fa16f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog 2.3.3 (unreleased) ------------------ +- Don't execute createReplyForm js if there is no in_reply_to button. + [vincentfretin] + - Register events as Content Rules Event Types if plone.contentrules is present [avoinea] diff --git a/plone/app/discussion/browser/javascripts/comments.js b/plone/app/discussion/browser/javascripts/comments.js index a6bd91f..1e67674 100644 --- a/plone/app/discussion/browser/javascripts/comments.js +++ b/plone/app/discussion/browser/javascripts/comments.js @@ -106,7 +106,7 @@ var post_comment_div = $("#commenting"); var in_reply_to_field = post_comment_div.find("input[name='form.widgets.in_reply_to']"); - if (in_reply_to_field.val() !== "") { + if (in_reply_to_field.length !== 0 && in_reply_to_field.val() !== "") { var current_reply_id = "#" + in_reply_to_field.val(); var current_reply_to_div = $(".discussion").find(current_reply_id); $.createReplyForm(current_reply_to_div); From 06b20b8f81c5e6c379ca111d42b6feec9027c2bd Mon Sep 17 00:00:00 2001 From: Vincent Fretin Date: Thu, 9 Oct 2014 11:41:00 +0200 Subject: [PATCH 214/254] merge fix from master (Don't execute createReplyForm js if there is no in_reply_to button) --- CHANGES.rst | 3 +++ plone/app/discussion/browser/javascripts/comments.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 86bcb2c..295f1d4 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -8,6 +8,9 @@ Changelog there are no replies yet. [gaudenz] +- Don't execute createReplyForm js if there is no in_reply_to button. + [vincentfretin] + - Register events as Content Rules Event Types if plone.contentrules is present [avoinea] diff --git a/plone/app/discussion/browser/javascripts/comments.js b/plone/app/discussion/browser/javascripts/comments.js index 3060a3d..7b492c7 100644 --- a/plone/app/discussion/browser/javascripts/comments.js +++ b/plone/app/discussion/browser/javascripts/comments.js @@ -106,7 +106,7 @@ var post_comment_div = $("#commenting"); var in_reply_to_field = post_comment_div.find("input[name='form.widgets.in_reply_to']"); - if (in_reply_to_field.val() !== "") { + if (in_reply_to_field.length !== 0 && in_reply_to_field.val() !== "") { var current_reply_id = "#" + in_reply_to_field.val(); var current_reply_to_div = $(".discussion").find(current_reply_id); $.createReplyForm(current_reply_to_div); From 30c88842c0c9a05ee7fc92156c3bfe82edea84f0 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Mon, 11 Aug 2014 14:22:08 +0200 Subject: [PATCH 215/254] Reapplied on correct branch. Revert "Revert "Update tag for id=content element to article instead of a simple div."" This reverts commit 45f58edd061bca9c9c5f2290e7908273665239d5. --- plone/app/discussion/browser/controlpanel.pt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plone/app/discussion/browser/controlpanel.pt b/plone/app/discussion/browser/controlpanel.pt index 0018049..0ccb3e1 100644 --- a/plone/app/discussion/browser/controlpanel.pt +++ b/plone/app/discussion/browser/controlpanel.pt @@ -14,7 +14,7 @@ -
      @@ -99,6 +99,6 @@
      - + From 75b8c136404d8cb4826c610cd503943f42bfd821 Mon Sep 17 00:00:00 2001 From: esteele Date: Thu, 23 Oct 2014 21:36:21 -0400 Subject: [PATCH 216/254] Preparing release 2.3.3 --- CHANGES.rst | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index a4fa16f..5ecce36 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,7 +1,7 @@ Changelog ========= -2.3.3 (unreleased) +2.3.3 (2014-10-23) ------------------ - Don't execute createReplyForm js if there is no in_reply_to button. diff --git a/setup.py b/setup.py index a912d59..4617758 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import find_packages from setuptools import setup -version = '2.3.3.dev0' +version = '2.3.3' install_requires = [ 'setuptools', From ba28439d947c0f89a782cacc121e0b2735bd28e7 Mon Sep 17 00:00:00 2001 From: esteele Date: Thu, 23 Oct 2014 21:37:49 -0400 Subject: [PATCH 217/254] Back to development: 2.3.4 --- CHANGES.rst | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 5ecce36..c8e1285 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,12 @@ Changelog ========= +2.3.4 (unreleased) +------------------ + +- Nothing changed yet. + + 2.3.3 (2014-10-23) ------------------ diff --git a/setup.py b/setup.py index 4617758..f47ef94 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import find_packages from setuptools import setup -version = '2.3.3' +version = '2.3.4.dev0' install_requires = [ 'setuptools', From 19026439ddc00209d2580c4b7bdbfd91435e63b8 Mon Sep 17 00:00:00 2001 From: Gil Forcada Date: Wed, 3 Dec 2014 12:03:26 +0100 Subject: [PATCH 218/254] Use spaces please --- plone/app/discussion/profiles/default/rolemap.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plone/app/discussion/profiles/default/rolemap.xml b/plone/app/discussion/profiles/default/rolemap.xml index 83a67fc..8fc9ed6 100644 --- a/plone/app/discussion/profiles/default/rolemap.xml +++ b/plone/app/discussion/profiles/default/rolemap.xml @@ -3,12 +3,12 @@ - + - + From 744b5b6380b012a5d32c326e2f8b8589ba2cca5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Toss=20Molon?= Date: Fri, 5 Dec 2014 17:38:04 -0200 Subject: [PATCH 219/254] Updated pt-br translation --- CHANGES.rst | 2 +- .../pt_BR/LC_MESSAGES/plone.app.discussion.po | 43 +++++++++---------- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index c8e1285..64f6396 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,7 @@ Changelog 2.3.4 (unreleased) ------------------ -- Nothing changed yet. +- Updated portuguese pt-br translation [jtmolon] 2.3.3 (2014-10-23) diff --git a/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po index 0340943..be8a3c0 100644 --- a/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" "POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" -"PO-Revision-Date: 2013-04-06 14:49+0200\n" -"Last-Translator: Andre Nogueira \n" +"PO-Revision-Date: 2014-12-05 17:36+0200\n" +"Last-Translator: Joao Molon \n" "Language-Team: Plone i18n \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -46,15 +46,15 @@ msgstr "Comentário aprovado" #: ../contentrules.py:96 msgid "Comment author email" -msgstr "" +msgstr "Email do autor do comentário" #: ../contentrules.py:85 msgid "Comment author full name" -msgstr "" +msgstr "Nome completo do autor do comentário" #: ../contentrules.py:74 msgid "Comment author user name" -msgstr "" +msgstr "Nome de usuário do autor do comentário" #: ../browser/moderation.py:108 msgid "Comment deleted." @@ -62,22 +62,22 @@ msgstr "Comentário excluído." #: ../contentrules.py:52 msgid "Comment id" -msgstr "" +msgstr "Id do comentário" #: ../contentrules.py:63 msgid "Comment text" -msgstr "" +msgstr "Texto do comentário" #: ../browser/controlpanel.py:76 msgid "Commenter Image" -msgstr "Imagedo autor" +msgstr "Imagem do autor" msgid "Commenting infrastructure for Plone" msgstr "Infraestrutura de comentários para o Plone" #: ../contentrules.py:51 msgid "Comments" -msgstr "" +msgstr "Comentários" #: ../interfaces.py:139 msgid "Conversation" @@ -161,7 +161,7 @@ msgstr "Número total de comentários públicos neste item" #: ../comment.py:173 msgid "Transform '%s' => '%s' not available." -msgstr "" +msgstr "Transformação '%s' => '%s' não disponível" #: ../browser/controlpanel.py:80 msgid "User Email Notification" @@ -193,7 +193,7 @@ msgstr "Publicar" #. Default: "Cancel" #: ../browser/comment.py:97 msgid "cancel_form_button" -msgstr "" +msgstr "Cancelar" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 @@ -218,28 +218,27 @@ msgstr "Você pode adicionar um comentário preenchendo o formulário a seguir. #. Default: "Edit comment cancelled" #: ../browser/comment.py:101 msgid "comment_edit_cancel_notification" -msgstr "" +msgstr "Edição do comentário cancelada" #. Default: "Comment was edited" #: ../browser/comment.py:91 msgid "comment_edit_notification" -msgstr "" +msgstr "Comentário foi editado" #. Default: "${author_name} on ${content}" #: ../comment.py:55 -#, fuzzy msgid "comment_title" -msgstr "${creator} em ${content}" +msgstr "${author_name} em ${content}" #. Default: "Edit comment" #: ../browser/comment.py:70 msgid "edit_comment_form_button" -msgstr "" +msgstr "Editar comentário" #. Default: "Edit comment" #: ../browser/comment.py:54 msgid "edit_comment_form_title" -msgstr "" +msgstr "Editar cometário" #. Default: "Action" #: ../browser/moderation.pt:85 @@ -297,7 +296,7 @@ msgstr "" #. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" -msgstr "" +msgstr "Caso selecionado, permite a edição e remoção de comentários por usuários com a permissão 'Editar comentários'" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 @@ -316,9 +315,8 @@ msgstr "Endereço para o qual as notificações do moderador serão enviadas." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." #: ../interfaces.py:304 -#, fuzzy msgid "help_moderator_notification_enabled" -msgstr "Se selecionado, o moderador será avisado quando um comentário precisar de atenção. O endereço de e-mail do moderador pode ser encontrado nas configurações de e-mail no Painel de Controle (campo Endereço de 'Remetente' do site)" +msgstr "Se selecionado, o moderador será avisado quando um comentário precisar de atenção. O endereço de e-mail do moderador pode ser definido abaixo." #. Default: "If selected, an image of the user is shown next to the comment." #: ../interfaces.py:293 @@ -379,7 +377,7 @@ msgstr "Excluir" #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" -msgstr "" +msgstr "Habilitar edição de comentários" #. Default: "Globally enable comments" #: ../interfaces.py:200 @@ -438,9 +436,8 @@ msgstr "Ativar notificação de e-mail para os usuários" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" #: ../comment.py:59 -#, fuzzy msgid "mail_notification_message" -msgstr "Um comentário em '${title}' foi adicionado aqui: ${link}" +msgstr "Um comentário em '${title}' foi adicionado aqui: ${link}\n\n---\n{text}\n---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" #: ../comment.py:67 From 2a130ffeb1acef5a7a2b4e6008e906ea9e3c375b Mon Sep 17 00:00:00 2001 From: Roberto Diaz Date: Thu, 11 Dec 2014 16:26:28 +0100 Subject: [PATCH 220/254] Updated CATALAN .po file --- .../ca/LC_MESSAGES/plone.app.discussion.po | 165 ++++++++++++------ 1 file changed, 107 insertions(+), 58 deletions(-) diff --git a/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po index 61dc606..328296f 100644 --- a/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po @@ -2,13 +2,13 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" "POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" -"PO-Revision-Date: 2010-11-17 16:52+0100\n" -"Last-Translator: Victor Fernandez de Alba \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2014-12-11 16:07+0100\n" +"Last-Translator: Roberto Diaz \n" +"Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0\n" +"Plural-Forms: nplurals=1; plural=0;\n" "Language-Code: ca\n" "Language-Name: Catalan\n" "Preferred-Encodings: utf-8 latin1\n" @@ -30,42 +30,41 @@ msgstr "Afegir un comentari" msgid "Anonymous Comments" msgstr "Comentaris anònims" -#: ../browser/comments.py:274 -#: ../browser/controlpanel.py:93 +#: ../browser/comments.py:274 ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Cancel·la" #: ../browser/controlpanel.py:89 msgid "Changes saved" -msgstr "" +msgstr "Canvis desats" #: ../browser/moderation.py:154 msgid "Comment approved." msgstr "Comentari aprovat." -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" -msgstr "" +msgstr "Correu electrònic de l'autor del comentari" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" -msgstr "" +msgstr "Nom complet de l'autor del comentari" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" -msgstr "" +msgstr "Nom d'usuari de l'autor del comentari " #: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Comentari esborrat." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" -msgstr "" +msgstr "Identificador del comentari" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" -msgstr "" +msgstr "Text del comentari" #: ../browser/controlpanel.py:76 msgid "Commenter Image" @@ -74,9 +73,9 @@ msgstr "Imatge de l'autor" msgid "Commenting infrastructure for Plone" msgstr "Infraestructura de comentaris per Plone" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" -msgstr "" +msgstr "Comentaris" #: ../interfaces.py:139 msgid "Conversation" @@ -88,7 +87,7 @@ msgstr "Data de creació" #: ../interfaces.py:41 msgid "Date of the most recent public comment" -msgstr "" +msgstr "Data de l'últim comentari públic" #: ../vocabularies.py:44 msgid "Disabled" @@ -100,7 +99,7 @@ msgstr "Configuració dels comentaris" #: ../browser/controlpanel.py:95 msgid "Edit cancelled" -msgstr "" +msgstr "Edició cancel·lada" #: ../interfaces.py:156 msgid "Email" @@ -134,7 +133,7 @@ msgstr "Nom" msgid "Notify me of new comments via email." msgstr "Notifica'm de la creació de nous comentaris via correu electrònic." -#: ./plone.app.discussion/plone/app/discussion/configure.zcml +#: plone.app.discussion/plone/app/discussion/configure.zcml msgid "Plone Discussions" msgstr "Plone Discussions" @@ -144,7 +143,7 @@ msgstr "Tipus d'objecte" #: ../browser/controlpanel.py:82 msgid "Save" -msgstr "" +msgstr "Desa" #: ../interfaces.py:46 msgid "The set of unique commentators (usernames)" @@ -152,15 +151,15 @@ msgstr "Llistat d'usuaris que han comentat (noms d'usuari)" #: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" -msgstr "" +msgstr "El conjunt de comentaristes únics (noms d'usuari) de comentaris publicats" #: ../interfaces.py:35 msgid "Total number of public comments on this item" -msgstr "" +msgstr "Nombre total de comentaris públics sobre aquest article" #: ../comment.py:173 msgid "Transform '%s' => '%s' not available." -msgstr "" +msgstr "Transformació de '%s' => '%s' no disponible." #: ../browser/controlpanel.py:80 msgid "User Email Notification" @@ -168,7 +167,7 @@ msgstr "Notificació a l'usuari via mail" #: ../interfaces.py:176 msgid "Username of the commenter" -msgstr "" +msgstr "Nom d'usuari del comentarista" #: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." @@ -192,53 +191,52 @@ msgstr "Publica" #. Default: "Cancel" #: ../browser/comment.py:97 msgid "cancel_form_button" -msgstr "" +msgstr "Cancel·la" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 msgid "comment_description_intelligent_text" -msgstr "" +msgstr "Podeu afegir un comentari omplint el següent formulari. Format text pla. Les adreces web y correus electrònics es converteixen a enllaços." #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." #: ../browser/comments.py:51 msgid "comment_description_markdown" -msgstr "" +msgstr "Podeu afegir un comentari omplint el següent formulari. Format text pla. Podeu utilitzar la sintaxi de Markdown per als enllaços i les imatges." #. Default: "Comments are moderated." #: ../browser/comments.py:63 msgid "comment_description_moderation_enabled" -msgstr "" +msgstr "Comentaris estàn moderats" #. Default: "You can add a comment by filling out the form below. Plain text formatting." #: ../browser/comments.py:46 msgid "comment_description_plain_text" -msgstr "" +msgstr "Podeu afegir un comentari en el següent formulari. Format text pla." #. Default: "Edit comment cancelled" #: ../browser/comment.py:101 msgid "comment_edit_cancel_notification" -msgstr "" +msgstr "Edició del comentari cancel·lada" #. Default: "Comment was edited" #: ../browser/comment.py:91 msgid "comment_edit_notification" -msgstr "" +msgstr "S'ha editat el comentari" #. Default: "${author_name} on ${content}" #: ../comment.py:55 -#, fuzzy msgid "comment_title" msgstr "${creator} sobre ${content}" #. Default: "Edit comment" #: ../browser/comment.py:70 msgid "edit_comment_form_button" -msgstr "" +msgstr "Editar comentari" #. Default: "Edit comment" #: ../browser/comment.py:54 msgid "edit_comment_form_title" -msgstr "" +msgstr "Editar commentari" #. Default: "Action" #: ../browser/moderation.pt:85 @@ -273,67 +271,102 @@ msgstr "Moderar comentaris" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." #: ../interfaces.py:216 msgid "help_anonymous_comments" -msgstr "Si està seleccionada, els usuaris anònims podran afegir comentaris sense identificar-se. Es recomana la utilització de una eina de captcha per evitar comentaris spam si aquesta opció està activada." +msgstr "" +"Si està seleccionada, els usuaris anònims podran afegir comentaris sense " +"identificar-se. Es recomana la utilització de una eina de captcha per evitar " +"comentaris spam si aquesta opció està activada." #. Default: "If selected, anonymous user will have to give their email." #: ../interfaces.py:341 msgid "help_anonymous_email_enabled" msgstr "" +"Si se selecciona, el usuari anònim haurà de donar la seva adreça de correu " +"electrònic." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." #: ../interfaces.py:277 msgid "help_captcha" -msgstr "Utilitzeu aquesta opció per activar o desactivar una eina de captcha pels comentaris. Instal·leu plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet o collective.z3cform.norobots si no teniu cap opció disponible." +msgstr "" +"Utilitzeu aquesta opció per activar o desactivar una eina de captcha pels " +"comentaris. Instal·leu plone.formwidget.captcha, plone.formwidget.recaptcha, " +"collective.akismet o collective.z3cform.norobots si no teniu cap opció " +"disponible." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." #: ../browser/controlpanel.py:36 msgid "help_discussion_settings_editform" -msgstr "Algunes de les configuracions dels comentaris no estan en la element de configuració 'Comentaris' del panell de control de l'espai. Per activar els comentaris per un tipus de contingut específic, dirigiu-vos al element de configuració 'Tipus' i activeu la opció 'Permetre comentaris'. Per activar el circuit de treball (workflow) de moderació de comentaris, dirigiu-vos al element de configuració de 'Tipus', seleccioneu 'Comentari' i escolliu el 'Workflow de moderació de comentaris'." +msgstr "" +"Algunes de les configuracions dels comentaris no estan en la element de " +"configuració 'Comentaris' del panell de control de l'espai. Per activar els " +"comentaris per un tipus de contingut específic, dirigiu-vos al element de " +"configuració 'Tipus' i activeu la opció 'Permetre comentaris'. Per activar " +"el circuit de treball (workflow) de moderació de comentaris, dirigiu-vos al " +"element de configuració de 'Tipus', seleccioneu 'Comentari' i escolliu el " +"'Workflow de moderació de comentaris'." #. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" +"Si es selecciona, dóna suport a l'edició i eliminació dels comentaris " +"dels usuaris amb el permís 'Edita comentaris'" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" -msgstr "Si està seleccionada, es permet que els usuaris puguin afegir comentaris a l'espai. De tota manera, teniu que activar els comentaris per a cada tipus de contingut específicament abans de que pogueu afegir comentaris." +msgstr "" +"Si està seleccionada, es permet que els usuaris puguin afegir comentaris a " +"l'espai. De tota manera, teniu que activar els comentaris per a cada tipus " +"de contingut específicament abans de que pogueu afegir comentaris." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." #: ../interfaces.py:232 msgid "help_moderation_enabled" msgstr "" +"Si està seleccionat, els comentaris entraran en un estat \"pendent\" en què " +"són invisibles per al públic. Un usuari amb permís 'Review " +"comments' ('Reviewer' o 'Manager') pot aprovar comentaris perquè siguin " +"visibles per al públic. Si desitja habilitar un comentari personalitzada de " +"flux de treball, vostè ha d'anar al panell de control de tipus." #. Default: "Address to which moderator notifications will be sent." #: ../interfaces.py:318 msgid "help_moderator_email" -msgstr "" +msgstr "Adreça a la qual s'enviaran les notificacions de moderador." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." #: ../interfaces.py:304 -#, fuzzy msgid "help_moderator_notification_enabled" -msgstr "Si està seleccionada, es notificarà per correu electrònic al moderador els nous comentaris." +msgstr "" +"Si està seleccionada, es notificarà per correu electrònic al moderador, dels " +"nous comentaris." #. Default: "If selected, an image of the user is shown next to the comment." #: ../interfaces.py:293 msgid "help_show_commenter_image" -msgstr "Si està seleccionada, es mostrarà el retrat (o imatge) que hagi configurat l'usuari en el seu perfil juntament amb el comentari." +msgstr "" +"Si està seleccionada, es mostrarà el retrat (o imatge) que hagi configurat " +"l'usuari en el seu perfil juntament amb el comentari." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." #: ../interfaces.py:260 msgid "help_text_transform" msgstr "" +"Utilitzeu aquesta opció per escollir si el text del comentari ha de " +"transformar-se. Pot escollir entre 'Text sense format' i 'text " +"intel·ligent'. 'Text intel·ligent' converteix el text sense format en HTML " +"on els salts de línia i sangria es conserven, i les adreces web i de correu " +"electrònic es converteixen en enllaços." #. Default: "If selected, users can choose to be notified of new comments by email." #: ../interfaces.py:330 msgid "help_user_notification_enabled" -msgstr "Si està seleccionada, els usuaris poden escollir si volen ser notificats cada cop que s'afegeixi un nou comentari al contingut." +msgstr "" +"Si està seleccionada, els usuaris poden escollir si volen ser notificats " +"cada cop que s'afegeixi un nou comentari al contingut." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:74 ../comment.py:191 msgid "label_anonymous" msgstr "Anònim" @@ -345,7 +378,7 @@ msgstr "Permetre comentaris anònims" #. Default: "Enable anonymous email field" #: ../interfaces.py:339 msgid "label_anonymous_email_enabled" -msgstr "" +msgstr "Habilitar correu electrònic anònim" #. Default: "Apply" #: ../browser/moderation.pt:71 @@ -365,7 +398,7 @@ msgstr "Comentari" #. Default: "Commenting has been disabled." #: ../browser/comments.pt:148 msgid "label_commenting_disabled" -msgstr "" +msgstr "Els comentaris s'han desactivat" #. Default: "Delete" #: ../browser/moderation.pt:130 @@ -375,7 +408,7 @@ msgstr "Esborra" #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" -msgstr "" +msgstr "Activa l'edició de comentaris" #. Default: "Globally enable comments" #: ../interfaces.py:200 @@ -385,12 +418,12 @@ msgstr "Activa els comentaris de forma global" #. Default: "Enable comment moderation" #: ../interfaces.py:228 msgid "label_moderation_enabled" -msgstr "" +msgstr "Habilitar moderació de comentaris" #. Default: "Moderator Email Address" #: ../interfaces.py:314 msgid "label_moderator_email" -msgstr "" +msgstr "Correu electrònic del moderador" #. Default: "Enable moderator email notification" #: ../interfaces.py:302 @@ -434,24 +467,41 @@ msgstr "Activa les notificacions als usuaris" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" #: ../comment.py:59 -#, fuzzy msgid "mail_notification_message" -msgstr "S'ha publicat un comentari sobre el contingut ${title} en aquesta adreça: ${link}" +msgstr "" +"S'ha publicat un comentari sobre el contingut ${title} en aquesta adreça: " +"${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" #: ../comment.py:67 msgid "mail_notification_message_moderator" msgstr "" +"\"Un comentari sobre '${title}' s'ha publicat aquí: ${link}\n" +"\n" +"---\n" +"${text}\n" +"---\n" +"\n" +"Aprovar comentari:\n" +"${link_approve}\n" +"\n" +"Borrar comentari:\n" +"${link_delete}\n" +"\"" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 msgid "message_enable_comment_workflow" -msgstr "Activa el 'Workflow de moderació de comentaris' per al tipus de contingut 'Comentari'" +msgstr "" +"Activa el 'Workflow de moderació de comentaris' per al tipus de contingut " +"'Comentari'" #. Default: "Moderation workflow is disabled. You have to ${enable_comment_workflow} before you can moderate comments here." #: ../browser/moderation.pt:33 msgid "message_moderation_disabled" -msgstr "La moderació està desactivada. Teniu que ${enable_comment_workflow} abans de moderar els comentaris." +msgstr "" +"La moderació està desactivada. Teniu que ${enable_comment_workflow} abans de " +"moderar els comentaris." #. Default: "No comments to moderate." #: ../browser/moderation.pt:43 @@ -462,4 +512,3 @@ msgstr "No hi han comentaris per moderar." #: ../browser/moderation.pt:64 msgid "title_bulkactions" msgstr "Accions en bloc" - From 609e9f61aa7d8a56eb6c588193b2c19a20d44fe4 Mon Sep 17 00:00:00 2001 From: Roberto Diaz Date: Thu, 11 Dec 2014 16:26:45 +0100 Subject: [PATCH 221/254] Updated SPANISH .po file --- .../es/LC_MESSAGES/plone.app.discussion.po | 69 +++++++++---------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po index 0b72e35..a9f8497 100644 --- a/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po @@ -3,9 +3,9 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" "POT-Creation-Date: YEAR-MO-DA HO:MI +ZONE\n" -"PO-Revision-Date: 2011-12-14 15:33-0600\n" -"Last-Translator: Héctor Velarde \n" -"Language-Team: es \n" +"PO-Revision-Date: 2014-12-11 16:07+0100\n" +"Last-Translator: Roberto Diaz \n" +"Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -45,29 +45,29 @@ msgstr "Cambios guardados" msgid "Comment approved." msgstr "Comentario aprobado." -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" -msgstr "" +msgstr "Correo electrónico del autor del comentario" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" -msgstr "" +msgstr "Nombre completo del autor del comentario" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" -msgstr "" +msgstr "Nombre de usuario del autor del comentario" #: ../browser/moderation.py:108 msgid "Comment deleted." msgstr "Comentario eliminado." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" -msgstr "" +msgstr "ID del comentario" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" -msgstr "" +msgstr "Texto del comentario" #: ../browser/controlpanel.py:76 msgid "Commenter Image" @@ -76,9 +76,9 @@ msgstr "Imagen del autor" msgid "Commenting infrastructure for Plone" msgstr "Infraestructura de comentarios para Plone" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" -msgstr "" +msgstr "Comentarios" #: ../interfaces.py:139 msgid "Conversation" @@ -90,7 +90,7 @@ msgstr "Fecha de creación" #: ../interfaces.py:41 msgid "Date of the most recent public comment" -msgstr "" +msgstr "Fecha del comentario publico más reciente" #: ../vocabularies.py:44 msgid "Disabled" @@ -154,15 +154,15 @@ msgstr "Listado de usuarios que han comentado (nombres de usuario)" #: ../interfaces.py:51 msgid "The set of unique commentators (usernames) of published_comments" -msgstr "" +msgstr "El conjunto de comentaristas únicos (nombres de usuario) de published_comments" #: ../interfaces.py:35 msgid "Total number of public comments on this item" -msgstr "" +msgstr "Total de comentarios públicos en este artículo" #: ../comment.py:173 msgid "Transform '%s' => '%s' not available." -msgstr "" +msgstr "Transformada '%s' => '%s' no disponible." #: ../browser/controlpanel.py:80 msgid "User Email Notification" @@ -170,7 +170,7 @@ msgstr "Notificaciones de correo para usuarios" #: ../interfaces.py:176 msgid "Username of the commenter" -msgstr "" +msgstr "Nombre de usuario del comentarista" #: ../browser/comments.py:267 msgid "Your comment awaits moderator approval." @@ -194,7 +194,7 @@ msgstr "Aprobar" #. Default: "Cancel" #: ../browser/comment.py:97 msgid "cancel_form_button" -msgstr "" +msgstr "Cancelar" #. Default: "You can add a comment by filling out the form below. Plain text formatting. Web and email addresses are transformed into clickable links." #: ../browser/comments.py:57 @@ -204,7 +204,7 @@ msgstr "Puede agregar un comentario llenando el siguiente formulario. Formato de #. Default: "You can add a comment by filling out the form below. Plain text formatting. You can use the Markdown syntax for links and images." #: ../browser/comments.py:51 msgid "comment_description_markdown" -msgstr "" +msgstr "Puede añadir un comentario rellenando el siguiente formulario. Formato texto plano. Puede utilizar la sintaxis de Markdown de enlaces e imágenes." #. Default: "Comments are moderated." #: ../browser/comments.py:63 @@ -214,33 +214,32 @@ msgstr "Los comentarios son moderados." #. Default: "You can add a comment by filling out the form below. Plain text formatting." #: ../browser/comments.py:46 msgid "comment_description_plain_text" -msgstr "Puede agregar un comentario llenando el sigueinte formulario. Formato de texto plano." +msgstr "Puede agregar un comentario llenando el siguiente formulario. Formato de texto plano." #. Default: "Edit comment cancelled" #: ../browser/comment.py:101 msgid "comment_edit_cancel_notification" -msgstr "" +msgstr "Se ha cancelado la edición del comentario" #. Default: "Comment was edited" #: ../browser/comment.py:91 msgid "comment_edit_notification" -msgstr "" +msgstr "Se ha editado el comentario" #. Default: "${author_name} on ${content}" #: ../comment.py:55 -#, fuzzy msgid "comment_title" -msgstr "${creator} sobre ${content}" +msgstr "${author_name} sobre ${content}" #. Default: "Edit comment" #: ../browser/comment.py:70 msgid "edit_comment_form_button" -msgstr "" +msgstr "Editar comentario" #. Default: "Edit comment" #: ../browser/comment.py:54 msgid "edit_comment_form_title" -msgstr "" +msgstr "Editar comentario" #. Default: "Action" #: ../browser/moderation.pt:85 @@ -280,7 +279,7 @@ msgstr "Si está seleccionado, los usuarios anónimos podrán añadir comentario #. Default: "If selected, anonymous user will have to give their email." #: ../interfaces.py:341 msgid "help_anonymous_email_enabled" -msgstr "" +msgstr "Si se selecciona, el usuario anónimo tendrá que proporcionar su correo electrónico." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." #: ../interfaces.py:277 @@ -299,6 +298,8 @@ msgstr "" #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" +"Si se selecciona, permite la edición y eliminación de comentarios " +"a los usuarios con el permiso 'Edita comentarios'" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 @@ -317,7 +318,6 @@ msgstr "La dirección de correo electrónico a la cual se enviarán las notifica #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." #: ../interfaces.py:304 -#, fuzzy msgid "help_moderator_notification_enabled" msgstr "Si está seleccionado, se notifica al moderador cuando un nuevo comentario requiere de su atención. La dirección de correo electrónico del moderador se puede encontrar en la opción 'Configuración de correo' del panel de control (Dirección del remitente del sitio)" @@ -350,7 +350,7 @@ msgstr "Permitir comentarios anónimos" #. Default: "Enable anonymous email field" #: ../interfaces.py:339 msgid "label_anonymous_email_enabled" -msgstr "" +msgstr "Habilitar campo email de anónimos" #. Default: "Apply" #: ../browser/moderation.pt:71 @@ -380,7 +380,7 @@ msgstr "Borrar" #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" -msgstr "" +msgstr "Activar la edición de comentarios" #. Default: "Globally enable comments" #: ../interfaces.py:200 @@ -481,5 +481,4 @@ msgstr "No hay nada para moderar." #. Default: "Bulk Actions" #: ../browser/moderation.pt:64 msgid "title_bulkactions" -msgstr "Acciones conjuntas" - +msgstr "Acciones conjuntas" \ No newline at end of file From e11471a44ebf88ea268f154e006b3f6d7a2cb6d8 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Sat, 13 Dec 2014 09:34:09 +0100 Subject: [PATCH 222/254] Fix README.rst styles. --- CHANGES.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 64f6396..a08c1a0 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,8 @@ Changelog 2.3.4 (unreleased) ------------------ -- Updated portuguese pt-br translation [jtmolon] +- Updated portuguese pt-br translation. + [jtmolon] 2.3.3 (2014-10-23) @@ -200,6 +201,7 @@ Changelog - Updated Ukrainian translation [kroman0] + 2.2.3 (2013-01-13) ------------------ @@ -207,6 +209,7 @@ Changelog the email field on comment add form when anonymous. [toutpt] + 2.2.2 (2012-11-16) ------------------ @@ -218,8 +221,8 @@ Changelog 2.2.1 (2012-11-16) ------------------ -- Make conversation view not break when comment-id cannot be converted to long. - Fixes #13327 +- Make conversation view not break when comment-id cannot be converted to + long. This fixes #13327 [khink] - fix insufficient privileges when trying to view From 785bc7b890d077889cf2afe262fbe325bdf29122 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Sat, 13 Dec 2014 16:20:08 +0100 Subject: [PATCH 223/254] Read mail settings from new (Plone 5) registry. --- CHANGES.rst | 3 +++ plone/app/discussion/browser/controlpanel.py | 19 ++++++++----------- plone/app/discussion/comment.py | 18 ++++++++++-------- .../discussion/tests/test_notifications.py | 19 ++++++++++++++----- 4 files changed, 35 insertions(+), 24 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index a08c1a0..bc2ece8 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -7,6 +7,9 @@ Changelog - Updated portuguese pt-br translation. [jtmolon] +- Read mail settings from new (Plone 5) registry. + [timo] + 2.3.3 (2014-10-23) ------------------ diff --git a/plone/app/discussion/browser/controlpanel.py b/plone/app/discussion/browser/controlpanel.py index 822ca2b..d90d8f1 100644 --- a/plone/app/discussion/browser/controlpanel.py +++ b/plone/app/discussion/browser/controlpanel.py @@ -1,10 +1,8 @@ # -*- coding: utf-8 -*- - -from Acquisition import aq_base, aq_inner - +from zope.component import getUtility from Products.CMFCore.utils import getToolByName - from Products.CMFCore.interfaces._content import IDiscussionResponse +from Products.CMFPlone.interfaces.controlpanel import IMailSchema from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile @@ -152,12 +150,11 @@ class DiscussionSettingsControlPanel(controlpanel.ControlPanelFormWrapper): def mailhost_warning(self): """Returns true if mailhost is not configured properly. """ - # Copied from plone.app.controlpanel/plone/app/controlpanel/overview.py - mailhost = getToolByName(aq_inner(self.context), 'MailHost', None) - if mailhost is None: - return True - mailhost = getattr(aq_base(mailhost), 'smtp_host', None) - email = getattr(aq_inner(self.context), 'email_from_address', None) + # Copied from Products.CMFPlone/controlpanel/browser/overview.py + registry = getUtility(IRegistry) + mail_settings = registry.forInterface(IMailSchema, prefix='plone') + mailhost = mail_settings.smtp_host + email = mail_settings.email_from_address if mailhost and email: return False return True @@ -177,7 +174,7 @@ class DiscussionSettingsControlPanel(controlpanel.ControlPanelFormWrapper): def unmigrated_comments_warning(self): """Returns true if site contains unmigrated comments. """ - catalog = getToolByName(aq_inner(self.context), 'portal_catalog', None) + catalog = getToolByName(self.context, 'portal_catalog', None) count_comments_old = catalog.searchResults( object_provides=IDiscussionResponse.__identifier__) if count_comments_old: diff --git a/plone/app/discussion/comment.py b/plone/app/discussion/comment.py index 193f30e..fb9c30e 100644 --- a/plone/app/discussion/comment.py +++ b/plone/app/discussion/comment.py @@ -9,6 +9,7 @@ from datetime import datetime from smtplib import SMTPException from zope.annotation.interfaces import IAnnotatable +from zope.component import getUtility from zope.event import notify from zope.component.factory import Factory @@ -31,8 +32,6 @@ from Products.CMFPlone.utils import safe_unicode from OFS.Traversable import Traversable -from plone.registry.interfaces import IRegistry - from plone.app.discussion.events import CommentAddedEvent from plone.app.discussion.events import CommentRemovedEvent from plone.app.discussion.events import ReplyAddedEvent @@ -43,8 +42,11 @@ from plone.app.discussion.interfaces import IComment from plone.app.discussion.interfaces import IConversation from plone.app.discussion.interfaces import IDiscussionSettings +from plone.registry.interfaces import IRegistry + from Products.CMFCore.CMFCatalogAware import CatalogAware from Products.CMFCore.CMFCatalogAware import WorkflowAware +from Products.CMFPlone.interfaces.controlpanel import IMailSchema from OFS.role import RoleManager from AccessControl import ClassSecurityInfo @@ -329,9 +331,9 @@ def notify_user(obj, event): # Get informations that are necessary to send an email mail_host = getToolByName(obj, 'MailHost') - portal_url = getToolByName(obj, 'portal_url') - portal = portal_url.getPortalObject() - sender = portal.getProperty('email_from_address') + registry = getUtility(IRegistry) + mail_settings = registry.forInterface(IMailSchema, prefix='plone') + sender = mail_settings.email_from_address # Check if a sender address is available if not sender: @@ -403,9 +405,9 @@ def notify_moderator(obj, event): # Get informations that are necessary to send an email mail_host = getToolByName(obj, 'MailHost') - portal_url = getToolByName(obj, 'portal_url') - portal = portal_url.getPortalObject() - sender = portal.getProperty('email_from_address') + registry = getUtility(IRegistry) + mail_settings = registry.forInterface(IMailSchema, prefix='plone') + sender = mail_settings.email_from_address if settings.moderator_email: mto = settings.moderator_email diff --git a/plone/app/discussion/tests/test_notifications.py b/plone/app/discussion/tests/test_notifications.py index ab5c764..3b87f9b 100644 --- a/plone/app/discussion/tests/test_notifications.py +++ b/plone/app/discussion/tests/test_notifications.py @@ -7,11 +7,13 @@ from Acquisition import aq_base from zope.component import createObject from zope.component import getSiteManager from zope.component import queryUtility +from zope.component import getUtility from plone.app.testing import TEST_USER_ID, setRoles from Products.MailHost.interfaces import IMailHost from Products.CMFPlone.tests.utils import MockMailHost +from Products.CMFPlone.interfaces import IMailSchema from plone.registry.interfaces import IRegistry @@ -34,7 +36,9 @@ class TestUserNotificationUnit(unittest.TestCase): sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # We need to fake a valid mail setup - self.portal.email_from_address = "portal@plone.test" + registry = getUtility(IRegistry) + mail_settings = registry.forInterface(IMailSchema, prefix='plone') + mail_settings.email_from_address = "portal@plone.test" self.mailhost = self.portal.MailHost # Enable user notification setting registry = queryUtility(IRegistry) @@ -122,7 +126,9 @@ class TestUserNotificationUnit(unittest.TestCase): def test_do_not_notify_user_when_no_sender_is_available(self): # Set sender mail address to none and make sure no email is send to # the moderator. - self.portal.email_from_address = None + registry = getUtility(IRegistry) + mail_settings = registry.forInterface(IMailSchema, prefix='plone') + mail_settings.email_from_address = None comment = createObject('plone.Comment') comment.text = 'Comment text' comment.user_notification = True @@ -132,7 +138,6 @@ class TestUserNotificationUnit(unittest.TestCase): comment.text = 'Comment text' self.conversation.addComment(comment) - self.assertEqual(len(self.mailhost.messages), 0) def test_notify_only_once(self): @@ -172,7 +177,9 @@ class TestModeratorNotificationUnit(unittest.TestCase): sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # We need to fake a valid mail setup - self.portal.email_from_address = "portal@plone.test" + registry = getUtility(IRegistry) + mail_settings = registry.forInterface(IMailSchema, prefix='plone') + mail_settings.email_from_address = "portal@plone.test" self.mailhost = self.portal.MailHost # Enable comment moderation self.portal.portal_types['Document'].allow_discussion = True @@ -255,7 +262,9 @@ class TestModeratorNotificationUnit(unittest.TestCase): def test_do_not_notify_moderator_when_no_sender_is_available(self): # Set sender mail address to nonw and make sure no email is send to the # moderator. - self.portal.email_from_address = None + registry = getUtility(IRegistry) + mail_settings = registry.forInterface(IMailSchema, prefix='plone') + mail_settings.email_from_address = None comment = createObject('plone.Comment') comment.text = 'Comment text' From 07076e157bb9a2061eef01b9b7a0f5fbf3694e0c Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 29 Jan 2015 19:32:43 +0100 Subject: [PATCH 224/254] Fix buildout. --- bootstrap.py => bootstrap-buildout.py | 75 +++++++++++++++++---------- buildout.cfg | 31 ++++++----- 2 files changed, 62 insertions(+), 44 deletions(-) rename bootstrap.py => bootstrap-buildout.py (72%) diff --git a/bootstrap.py b/bootstrap-buildout.py similarity index 72% rename from bootstrap.py rename to bootstrap-buildout.py index 1b28969..a629566 100644 --- a/bootstrap.py +++ b/bootstrap-buildout.py @@ -35,7 +35,7 @@ Bootstraps a buildout-based project. Simply run this script in a directory containing a buildout.cfg, using the Python that you want bin/buildout to use. -Note that by using --find-links to point to local resources, you can keep +Note that by using --find-links to point to local resources, you can keep this script from going over the network. ''' @@ -56,6 +56,11 @@ parser.add_option("-c", "--config-file", "file to be used.")) parser.add_option("-f", "--find-links", help=("Specify a URL to search for buildout releases")) +parser.add_option("--allow-site-packages", + action="store_true", default=False, + help=("Let bootstrap.py use existing site packages")) +parser.add_option("--setuptools-version", + help="use a specific setuptools version") options, args = parser.parse_args() @@ -63,32 +68,42 @@ options, args = parser.parse_args() ###################################################################### # load/install setuptools -to_reload = False try: - import pkg_resources - import setuptools + if options.allow_site_packages: + import setuptools + import pkg_resources + from urllib.request import urlopen except ImportError: - ez = {} + from urllib2 import urlopen - try: - from urllib.request import urlopen - except ImportError: - from urllib2 import urlopen +ez = {} +exec(urlopen('https://bootstrap.pypa.io/ez_setup.py').read(), ez) - # XXX use a more permanent ez_setup.py URL when available. - exec(urlopen('https://bitbucket.org/pypa/setuptools/raw/0.7.2/ez_setup.py' - ).read(), ez) - setup_args = dict(to_dir=tmpeggs, download_delay=0) - ez['use_setuptools'](**setup_args) +if not options.allow_site_packages: + # ez_setup imports site, which adds site packages + # this will remove them from the path to ensure that incompatible versions + # of setuptools are not in the path + import site + # inside a virtualenv, there is no 'getsitepackages'. + # We can't remove these reliably + if hasattr(site, 'getsitepackages'): + for sitepackage_path in site.getsitepackages(): + sys.path[:] = [x for x in sys.path if sitepackage_path not in x] - if to_reload: - reload(pkg_resources) - import pkg_resources - # This does not (always?) update the default working set. We will - # do it. - for path in sys.path: - if path not in pkg_resources.working_set.entries: - pkg_resources.working_set.add_entry(path) +setup_args = dict(to_dir=tmpeggs, download_delay=0) + +if options.setuptools_version is not None: + setup_args['version'] = options.setuptools_version + +ez['use_setuptools'](**setup_args) +import setuptools +import pkg_resources + +# This does not (always?) update the default working set. We will +# do it. +for path in sys.path: + if path not in pkg_resources.working_set.entries: + pkg_resources.working_set.add_entry(path) ###################################################################### # Install buildout @@ -119,10 +134,15 @@ if version is None and not options.accept_buildout_test_releases: _final_parts = '*final-', '*final' def _final_version(parsed_version): - for part in parsed_version: - if (part[:1] == '*') and (part not in _final_parts): - return False - return True + try: + return not parsed_version.is_prerelease + except AttributeError: + # Older setuptools + for part in parsed_version: + if (part[:1] == '*') and (part not in _final_parts): + return False + return True + index = setuptools.package_index.PackageIndex( search_path=[setuptools_path]) if find_links: @@ -149,8 +169,7 @@ cmd.append(requirement) import subprocess if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=setuptools_path)) != 0: raise Exception( - "Failed to execute command:\n%s", - repr(cmd)[1:-1]) + "Failed to execute command:\n%s" % repr(cmd)[1:-1]) ###################################################################### # Import and run buildout diff --git a/buildout.cfg b/buildout.cfg index c893dfe..fac6771 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -1,14 +1,19 @@ [buildout] -extends = https://raw.github.com/collective/buildout.plonetest/master/test-4.3.x.cfg -package-name = plone.app.discussion -package-extras = [test] -parts += +extends = http://dist.plone.org/release/4.3.4/versions.cfg +parts = + instance mkrelease pocompile code-analysis i18ndude update_translations +[instance] +recipe = plone.recipe.zope2instance +http-address = 8080 +user = admin:admin +eggs = Plone + [mkrelease] recipe = zc.recipe.egg eggs = jarn.mkrelease @@ -22,17 +27,6 @@ recipe = plone.recipe.codeanalysis directory = ${buildout:directory}/plone/app/discussion flake8-max-complexity = 50 -[versions] -plone.app.discussion = -zope.interface = 4.0.5 -plone.app.portlets = 2.5a1 -plone.dexterity = 2.2.1 -plone.app.querystring = 1.1.0 -plone.app.jquery = 1.8.3 -plone.app.testing = 4.2.4 -plone.app.vocabularies = 2.1.14 - - [i18ndude] recipe = zc.recipe.egg eggs = @@ -59,4 +53,9 @@ input = inline: $I18NDUDE sync --pot $BASE_PATH/i18n/plone.pot $BASE_PATH/i18n/plone-$LANG.po msgfmt --no-hash -o $BASE_PATH/i18n/plone-$LANG.mo $BASE_PATH/i18n/plone-$LANG.po done -mode = 755 \ No newline at end of file +mode = 755 + +[versions] +zope.interface = 4.0.5 +zc.buildout = 2.3.1 +setuptools = 8.0.4 From fd4203b9407bffee56167d1f682a45d6a29a6ce2 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 29 Jan 2015 19:34:30 +0100 Subject: [PATCH 225/254] Add travis configuration. --- .travis.yml | 19 +++++++++++++++++++ travis.cfg | 21 +++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 .travis.yml create mode 100644 travis.cfg diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..959dcf3 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,19 @@ +language: python +python: "2.7" +sudo: false +cache: + directories: + - eggs +before_install: + - pip install http://effbot.org/downloads/Imaging-1.1.7.tar.gz +install: + - mkdir -p buildout-cache/eggs + - mkdir -p buildout-cache/downloads + - python bootstrap-buildout.py --setuptools-version=8.3 -c travis.cfg + - bin/buildout -N -t 3 -c travis.cfg +script: + - bin/code-analysis + - bin/test-coverage +after_success: + - pip install -q coveralls + - coveralls diff --git a/travis.cfg b/travis.cfg new file mode 100644 index 0000000..d77bda1 --- /dev/null +++ b/travis.cfg @@ -0,0 +1,21 @@ +[buildout] +extends = buildout.cfg +parts += + download + install + code-analysis +eggs-directory = buildout-cache/eggs +download-cache = buildout-cache/downloads + +[download] +recipe = hexagonit.recipe.download +url = https://launchpad.net/plone/4.3/4.3.4/+download/Plone-4.3.4-UnifiedInstaller.tgz + +[install] +recipe = collective.recipe.cmd +on_install = true +cmds = tar jxvf ${download:location}/Plone-4.3.4-UnifiedInstaller/packages/buildout-cache.tar.bz2 1>/dev/null + +[code-analysis] +recipe = plone.recipe.codeanalysis +return-status-codes = True From 52de2e809a3fafafe1d18a169de9b617fb5c34b7 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 29 Jan 2015 19:35:11 +0100 Subject: [PATCH 226/254] Delete jenkins.cfg. --- jenkins.cfg | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 jenkins.cfg diff --git a/jenkins.cfg b/jenkins.cfg deleted file mode 100644 index f5b0907..0000000 --- a/jenkins.cfg +++ /dev/null @@ -1,32 +0,0 @@ -[buildout] -extends = - https://raw.github.com/collective/buildout.plonetest/master/plone-4.3.x.cfg - https://raw.github.com/plone/buildout.jenkins/master/jenkins.cfg - https://raw.github.com/plone/buildout.jenkins/master/jenkins-code-analysis.cfg -jenkins-test-eggs = plone.app.discussion [test] -jenkins-test-directories = plone/app/discussion -parts += - flake8 - code-analysis -extensions = mr.developer -auto-checkout = - plone.recipe.codeanalysis - collective.xmltestreport - -[flake8] -recipe = zc.recipe.egg -eggs = flake8 -entry-points = flake8=flake8.main:main - -[code-analysis] -recipe = plone.recipe.codeanalysis - -[sources] -plone.recipe.codeanalysis = git git://github.com/tisto/plone.recipe.codeanalysis.git pushurl=git@github.com:tisto/plone.recipe.codeanalysis.git -collective.xmltestreport = git git://github.com/collective/collective.xmltestreport.git - -[versions] -plone.app.discussion = -zope.interface = 3.6.1 -zc.buildout = 2.1.0 -zc.recipe.egg = 2.0.0 From 0591f9ad2d95159414c7e305930df169f6b09b45 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 29 Jan 2015 20:29:53 +0100 Subject: [PATCH 227/254] Fix buildout. --- buildout.cfg | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/buildout.cfg b/buildout.cfg index fac6771..b9a690e 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -2,11 +2,15 @@ extends = http://dist.plone.org/release/4.3.4/versions.cfg parts = instance + test + coverage + test-coverage mkrelease pocompile code-analysis i18ndude update_translations +develop = . [instance] recipe = plone.recipe.zope2instance @@ -14,6 +18,28 @@ http-address = 8080 user = admin:admin eggs = Plone + +[test] +recipe = zc.recipe.testrunner +eggs = plone.app.discussion [test] +defaults = ['-s', 'plone.app.discussion', '--auto-color', '--auto-progress'] + +[coverage] +recipe = zc.recipe.egg +eggs = coverage + +[test-coverage] +recipe = collective.recipe.template +input = inline: + #!/bin/bash + ${buildout:directory}/bin/coverage run --source=${buildout:directory}/src/plone/app/discussion bin/test + ${buildout:directory}/bin/coverage html + ${buildout:directory}/bin/coverage report -m --fail-under=100 + # Fail (exit status 1) if coverage returns exit status 2 (this happens + # when test coverage is below 100%. +output = ${buildout:directory}/bin/test-coverage +mode = 755 + [mkrelease] recipe = zc.recipe.egg eggs = jarn.mkrelease @@ -56,6 +82,7 @@ input = inline: mode = 755 [versions] +plone.app.discussion = zope.interface = 4.0.5 zc.buildout = 2.3.1 setuptools = 8.0.4 From 1b67cc75968944b4f8e5a1eb9f5ba7704456f317 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 29 Jan 2015 21:24:26 +0100 Subject: [PATCH 228/254] Next release needs to be a major version because of an API change and upgrade step. --- CHANGES.rst | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 5e03573..482a299 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,7 +1,7 @@ Changelog ========= -2.3.4 (unreleased) +2.4.0 (unreleased) ------------------ - Add permission to allow comment authors to delete their own comments if diff --git a/setup.py b/setup.py index 494515e..abc69e9 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import find_packages from setuptools import setup -version = '2.3.4.dev0' +version = '2.4.0.dev0' install_requires = [ 'setuptools', From 4f1491bea89ca1f23d5001bbc6cc1c90037d9f80 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Thu, 29 Jan 2015 21:25:38 +0100 Subject: [PATCH 229/254] Let's use travis for static code analysis only. --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 959dcf3..70f96b4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,7 @@ install: - bin/buildout -N -t 3 -c travis.cfg script: - bin/code-analysis - - bin/test-coverage -after_success: - - pip install -q coveralls - - coveralls +# - bin/test-coverage +#after_success: +# - pip install -q coveralls +# - coveralls From ad3953f7942129e79cefbe792cfdc3fc4eca0d08 Mon Sep 17 00:00:00 2001 From: vangheem Date: Tue, 10 Feb 2015 16:21:17 -0600 Subject: [PATCH 230/254] use requirejs if available --- CHANGES.rst | 3 +++ .../app/discussion/browser/javascripts/comments.js | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 437ae9a..b0bbbb8 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog 2.4.0 (unreleased) ------------------ +- use requirejs if available + [vangheem] + - Rename @@discussion-settings to @@discussion-controlpanel [maartenkling] diff --git a/plone/app/discussion/browser/javascripts/comments.js b/plone/app/discussion/browser/javascripts/comments.js index 927c00d..4b2ea30 100644 --- a/plone/app/discussion/browser/javascripts/comments.js +++ b/plone/app/discussion/browser/javascripts/comments.js @@ -3,7 +3,17 @@ * jQuery functions for the plone.app.discussion comment viewlet and form. * ******************************************************************************/ -(function ($) { + +if(require === undefined){ + require = function(reqs, torun){ + 'use strict'; + return torun(window.jQuery); + } +} + +require([ + 'jquery' +], function ($) { // This unnamed function allows us to use $ inside of a block of code // without permanently overwriting $. // http://docs.jquery.com/Using_jQuery_with_Other_Libraries @@ -249,4 +259,4 @@ //#JSCOVERAGE_ENDIF -}(jQuery)); +}); From c49c9707ecec3ef7cc518a6a86d485a87eb1d5b9 Mon Sep 17 00:00:00 2001 From: vangheem Date: Tue, 10 Feb 2015 16:41:00 -0600 Subject: [PATCH 231/254] more js improvements --- plone/app/discussion/browser/controlpanel.pt | 15 +- .../browser/javascripts/comments.js | 137 +++++++++--------- .../browser/javascripts/controlpanel.js | 49 ++++--- .../browser/javascripts/moderation.js | 33 +++-- 4 files changed, 122 insertions(+), 112 deletions(-) diff --git a/plone/app/discussion/browser/controlpanel.pt b/plone/app/discussion/browser/controlpanel.pt index 0ccb3e1..4d84e7e 100644 --- a/plone/app/discussion/browser/controlpanel.pt +++ b/plone/app/discussion/browser/controlpanel.pt @@ -6,22 +6,12 @@ metal:use-macro="here/prefs_main_template/macros/master" i18n:domain="plone"> - - - - -
      - - +
      @@ -99,6 +89,9 @@
      +
      diff --git a/plone/app/discussion/browser/javascripts/comments.js b/plone/app/discussion/browser/javascripts/comments.js index 4b2ea30..0b56d51 100644 --- a/plone/app/discussion/browser/javascripts/comments.js +++ b/plone/app/discussion/browser/javascripts/comments.js @@ -3,17 +3,20 @@ * jQuery functions for the plone.app.discussion comment viewlet and form. * ******************************************************************************/ +/* global require */ if(require === undefined){ - require = function(reqs, torun){ + require = function(reqs, torun){ // jshint ignore:line 'use strict'; return torun(window.jQuery); - } + }; } -require([ +require([ // jshint ignore:line 'jquery' ], function ($) { + 'use strict'; + // This unnamed function allows us to use $ inside of a block of code // without permanently overwriting $. // http://docs.jquery.com/Using_jQuery_with_Other_Libraries @@ -24,39 +27,39 @@ require([ **************************************************************************/ $.createReplyForm = function (comment_div) { - var comment_id = comment_div.attr("id"); + var comment_id = comment_div.attr('id'); - var reply_button = comment_div.find(".reply-to-comment-button"); + var reply_button = comment_div.find('.reply-to-comment-button'); /* Clone the reply div at the end of the page template that contains * the regular comment form. */ - var reply_div = $("#commenting").clone(true); + var reply_div = $('#commenting').clone(true); /* Remove the ReCaptcha JS code before appending the form. If not * removed, this causes problems */ - reply_div.find("#formfield-form-widgets-captcha") - .find("script") + reply_div.find('#formfield-form-widgets-captcha') + .find('script') .remove(); /* Insert the cloned comment form right after the reply button of the * current comment. */ - reply_div.appendTo(comment_div).css("display", "none"); + reply_div.appendTo(comment_div).css('display', 'none'); - /* Remove id="commenting" attribute, since we use it to uniquely define + /* Remove id='commenting' attribute, since we use it to uniquely define the main reply form. */ - // Still belongs to class="reply" - reply_div.removeAttr("id"); + // Still belongs to class='reply' + reply_div.removeAttr('id'); /* Hide the reply button (only hide, because we may want to show it * again if the user hits the cancel button). */ - $(reply_button).css("display", "none"); + $(reply_button).css('display', 'none'); /* Fetch the reply form inside the reply div */ - var reply_form = reply_div.find("form"); + var reply_form = reply_div.find('form'); /* Change the id of the textarea of the reply form * To avoid conflict later between textareas with same id 'form-widgets-comment-text' while implementing a seperate instance of TinyMCE @@ -67,23 +70,23 @@ require([ /* Populate the hidden 'in_reply_to' field with the correct comment id */ - reply_form.find("input[name='form.widgets.in_reply_to']") + reply_form.find('input[name="form.widgets.in_reply_to"]') .val(comment_id); /* Add a remove-reply-to-comment Javascript function to remove the form */ - var cancel_reply_button = reply_div.find(".cancelreplytocomment"); - cancel_reply_button.attr("id", comment_id); + var cancel_reply_button = reply_div.find('.cancelreplytocomment'); + cancel_reply_button.attr('id', comment_id); /* Show the cancel buttons. */ - reply_form.find("input[name='form.buttons.cancel']") - .css("display", "inline"); + reply_form.find('input[name="form.buttons.cancel"]') + .css('display', 'inline'); /* Show the reply layer with a slide down effect */ - reply_div.slideDown("slow"); + reply_div.slideDown('slow'); /* Show the cancel button in the reply-to-comment form */ - cancel_reply_button.css("display", "inline"); + cancel_reply_button.css('display', 'inline'); }; @@ -92,10 +95,10 @@ require([ * to the function. **************************************************************************/ $.clearForm = function (form_div) { - form_div.find(".error").removeClass("error"); - form_div.find(".fieldErrorBox").remove(); - form_div.find("input[type='text']").attr("value", ""); - form_div.find("textarea").attr("value", ""); + form_div.find('.error').removeClass('error'); + form_div.find('.fieldErrorBox').remove(); + form_div.find('input[type="text"]').attr('value', ''); + form_div.find('textarea').attr('value', ''); /* XXX: Clean all additional form extender fields. */ }; @@ -110,50 +113,50 @@ require([ /********************************************************************** * If the user has hit the reply button of a reply-to-comment form - * (form was submitted with a value for the "in_reply_to" field in the + * (form was submitted with a value for the 'in_reply_to' field in the * request), create a reply-to-comment form right under this comment. **********************************************************************/ - var post_comment_div = $("#commenting"); + var post_comment_div = $('#commenting'); var in_reply_to_field = - post_comment_div.find("input[name='form.widgets.in_reply_to']"); - if (in_reply_to_field.length !== 0 && in_reply_to_field.val() !== "") { - var current_reply_id = "#" + in_reply_to_field.val(); - var current_reply_to_div = $(".discussion").find(current_reply_id); + post_comment_div.find('input[name="form.widgets.in_reply_to"]'); + if (in_reply_to_field.length !== 0 && in_reply_to_field.val() !== '') { + var current_reply_id = '#' + in_reply_to_field.val(); + var current_reply_to_div = $('.discussion').find(current_reply_id); $.createReplyForm(current_reply_to_div); $.clearForm(post_comment_div); } /********************************************************************** - * If the user hits the "reply" button of an existing comment, create a + * If the user hits the 'reply' button of an existing comment, create a * reply form right beneath this comment. **********************************************************************/ - $(".reply-to-comment-button").bind("click", function (e) { - var comment_div = $(this).parents().filter(".comment"); + $('.reply-to-comment-button').bind('click', function (e) { // jshint ignore:line + var comment_div = $(this).parents().filter('.comment'); $.createReplyForm(comment_div); $.clearForm(comment_div); }); /********************************************************************** - * If the user hits the "clear" button of an open reply-to-comment form, - * remove the form and show the "reply" button again. + * If the user hits the 'clear' button of an open reply-to-comment form, + * remove the form and show the 'reply' button again. **********************************************************************/ - $("#commenting #form-buttons-cancel").bind("click", function (e) { + $('#commenting #form-buttons-cancel').bind('click', function (e) { e.preventDefault(); var reply_to_comment_button = $(this). parents(). - filter(".comment"). - find(".reply-to-comment-button"); + filter('.comment'). + find('.reply-to-comment-button'); /* Find the reply-to-comment form and hide and remove it again. */ - $.reply_to_comment_form = $(this).parents().filter(".reply"); - $.reply_to_comment_form.slideUp("slow", function () { + $.reply_to_comment_form = $(this).parents().filter('.reply'); + $.reply_to_comment_form.slideUp('slow', function () { $(this).remove(); }); /* Show the reply-to-comment button again. */ - reply_to_comment_button.css("display", "inline"); + reply_to_comment_button.css('display', 'inline'); }); @@ -161,22 +164,22 @@ require([ /********************************************************************** * Publish a single comment. **********************************************************************/ - $("input[name='form.button.PublishComment']").on('click', function () { + $('input[name="form.button.PublishComment"]').on('click', function () { var trigger = this; - var form = $(this).parents("form"); + var form = $(this).parents('form'); var data = $(form).serialize(); - var form_url = $(form).attr("action"); + var form_url = $(form).attr('action'); $.ajax({ - type: "GET", + type: 'GET', url: form_url, data: data, context: trigger, - success: function (msg) { + success: function (msg) { // jshint ignore:line // remove button (trigger object can't be directly removed) - form.find("input[name='form.button.PublishComment']").remove(); - form.parents(".state-pending").toggleClass('state-pending').toggleClass('state-published'); + form.find('input[name="form.button.PublishComment"]').remove(); + form.parents('.state-pending').toggleClass('state-pending').toggleClass('state-published'); }, - error: function (msg) { + error: function (msg) { // jshint ignore:line return true; } }); @@ -186,35 +189,35 @@ require([ /********************************************************************** * Edit a comment **********************************************************************/ - $("form[name='edit']").prepOverlay({ - cssclass: 'overlay-edit-comment', - width: '60%', + $('form[name="edit"]').prepOverlay({ + cssclass: 'overlay-edit-comment', + width: '60%', subtype: 'ajax', filter: '#content>*' - }) + }); /********************************************************************** * Delete a comment and its answers. **********************************************************************/ - $("input[name='form.button.DeleteComment']").on('click', function () { + $('input[name="form.button.DeleteComment"]').on('click', function () { var trigger = this; - var form = $(this).parents("form"); + var form = $(this).parents('form'); var data = $(form).serialize(); - var form_url = $(form).attr("action"); + var form_url = $(form).attr('action'); $.ajax({ type: 'POST', url: form_url, data: data, - context: $(trigger).parents(".comment"), - success: function (data) { + context: $(trigger).parents('.comment'), + success: function (data) { // jshint ignore:line var comment = $(this); var clss = comment.attr('class'); // remove replies var treelevel = parseInt(clss[clss.indexOf('replyTreeLevel') + 'replyTreeLevel'.length], 10); // selector for all the following elements of lower level - var selector = ".replyTreeLevel" + treelevel; + var selector = '.replyTreeLevel' + treelevel; for (var i = 0; i < treelevel; i++) { - selector += ", .replyTreeLevel" + i; + selector += ', .replyTreeLevel' + i; } comment.nextUntil(selector).each(function () { $(this).fadeOut('fast', function () { @@ -229,7 +232,7 @@ require([ $(this).remove(); }); }, - error: function (req, error) { + error: function (req, error) { // jshint ignore:line return true; } }); @@ -241,10 +244,10 @@ require([ * By default, hide the reply and the cancel button for the regular add * comment form. **********************************************************************/ - $(".reply").find("input[name='form.buttons.reply']") - .css("display", "none"); - $(".reply").find("input[name='form.buttons.cancel']") - .css("display", "none"); + $('.reply').find('input[name="form.buttons.reply"]') + .css('display', 'none'); + $('.reply').find('input[name="form.buttons.cancel"]') + .css('display', 'none'); /********************************************************************** @@ -252,7 +255,7 @@ require([ * Otherwise hide it, since the reply functions only work with JS * enabled. **********************************************************************/ - $(".reply-to-comment-button").css("display" , "inline"); + $('.reply-to-comment-button').css('display' , 'inline'); }); diff --git a/plone/app/discussion/browser/javascripts/controlpanel.js b/plone/app/discussion/browser/javascripts/controlpanel.js index 9d242ce..b4742a0 100644 --- a/plone/app/discussion/browser/javascripts/controlpanel.js +++ b/plone/app/discussion/browser/javascripts/controlpanel.js @@ -3,7 +3,19 @@ * jQuery functions for the plone.app.discussion comment viewlet and form. * ******************************************************************************/ -(function ($) { +/* global require */ + +if(require === undefined){ + require = function(reqs, torun){ // jshint ignore:line + 'use strict'; + return torun(window.jQuery); + }; +} + +require([ // jshint ignore:line + 'jquery' +], function ($) { + 'use strict'; // This unnamed function allows us to use $ inside of a block of code // without permanently overwriting $. // http://docs.jquery.com/Using_jQuery_with_Other_Libraries @@ -12,7 +24,7 @@ $.disableSettings = function (settings) { $.each(settings, function (intIndex, setting) { setting.addClass('unclickable'); - var setting_field = $(setting).find("input,select"); + var setting_field = $(setting).find('input,select'); setting_field.attr('disabled', 'disabled'); }); }; @@ -21,7 +33,7 @@ $.enableSettings = function (settings) { $.each(settings, function (intIndex, setting) { setting.removeClass('unclickable'); - var setting_field = $(setting).find("input,select"); + var setting_field = $(setting).find('input,select'); setting_field.removeAttr('disabled'); }); }; @@ -29,11 +41,9 @@ /* Update settings */ $.updateSettings = function () { - var globally_enabled = $("#content").hasClass("globally_enabled"); - var anonymous_comments = $("#content").hasClass("anonymous_comments"); - var moderation_enabled = $("#content").hasClass("moderation_enabled"); - var moderation_custom = $("#content").hasClass("moderation_custom"); - var invalid_mail_setup = $("#content").hasClass("invalid_mail_setup"); + var globally_enabled = $('#content').hasClass('globally_enabled'); + var moderation_custom = $('#content').hasClass('moderation_custom'); + var invalid_mail_setup = $('#content').hasClass('invalid_mail_setup'); /* If commenting is globally disabled, disable all settings. */ if (globally_enabled === true) { @@ -104,17 +114,14 @@ $.updateSettings(); // Set #content class and update settings afterwards - $("input,select").on("change", function (e) { - var id = $(this).attr("id"); - if (id === "form-widgets-globally_enabled-0") { - if ($(this).attr("checked")) { - $("#content").addClass("globally_enabled"); - } - else { - $("#content").removeClass("globally_enabled"); - } - $.updateSettings(); + $('#form-widgets-globally_enabled-0').on('change', function(){ + if (this.checked) { + $('#content').addClass('globally_enabled'); } + else { + $('#content').removeClass('globally_enabled'); + } + $.updateSettings(); }); /********************************************************************** @@ -122,12 +129,12 @@ * submitting the form. Otherwise the z3c.form will raise errors on * the required attributes. **********************************************************************/ - $("form#DiscussionSettingsEditForm").bind("submit", function (e) { - $(this).find("input,select").removeAttr('disabled'); + $('form#DiscussionSettingsEditForm').bind('submit', function () { + $(this).find('input,select').removeAttr('disabled'); }); }); //#JSCOVERAGE_ENDIF -}(jQuery)); +}); diff --git a/plone/app/discussion/browser/javascripts/moderation.js b/plone/app/discussion/browser/javascripts/moderation.js index 320477d..98b1341 100644 --- a/plone/app/discussion/browser/javascripts/moderation.js +++ b/plone/app/discussion/browser/javascripts/moderation.js @@ -3,8 +3,20 @@ * jQuery functions for the plone.app.discussion bulk moderation. * ******************************************************************************/ +/* global require, alert */ +/* jshint quotmark: false */ -(function ($) { +if(require === undefined){ + require = function(reqs, torun){ // jshint ignore:line + 'use strict'; + return torun(window.jQuery); + }; +} + +require([ // jshint ignore:line + 'jquery' +], function ($) { + 'use strict'; // This unnamed function allows us to use $ inside of a block of code // without permanently overwriting $. // http://docs.jquery.com/Using_jQuery_with_Other_Libraries @@ -22,16 +34,13 @@ **********************************************************************/ $("input[name='form.button.Delete']").click(function (e) { e.preventDefault(); - var button = $(this); var row = $(this).parent().parent(); - var form = $(row).parents("form"); var path = $(row).find("[name='selected_obj_paths:list']").attr("value"); var target = path + "/@@moderate-delete-comment"; - var comment_id = $(this).attr("id"); $.ajax({ type: "GET", url: target, - success: function (msg) { + success: function (msg) { // jshint ignore:line // fade out row $(row).fadeOut("normal", function () { $(this).remove(); @@ -42,7 +51,7 @@ location.reload(); } }, - error: function (msg) { + error: function (msg) { // jshint ignore:line alert("Error sending AJAX request:" + target); } }); @@ -54,15 +63,13 @@ **********************************************************************/ $("input[name='form.button.Publish']").click(function (e) { e.preventDefault(); - var button = $(this); var row = $(this).parent().parent(); - var form = $(row).parents("form"); var path = $(row).find("[name='selected_obj_paths:list']").attr("value"); var target = path + "/@@moderate-publish-comment"; $.ajax({ type: "GET", url: target, - success: function (msg) { + success: function (msg) { // jshint ignore:line // fade out row $(row).fadeOut("normal", function () { $(this).remove(); @@ -73,7 +80,7 @@ location.reload(); } }, - error: function (msg) { + error: function (msg) { // jshint ignore:line alert("Error sending AJAX request:" + target); } }); @@ -98,7 +105,7 @@ alert("You haven't selected any comment for this bulk action." + "Please select at least one comment."); } else { - $.post(target, params, function (data) { + $.post(target, params, function (data) { // jshint ignore:line valArray.each(function () { /* Remove all selected lines. */ var row = $(this).parent().parent(); @@ -151,7 +158,7 @@ // show full text td.replaceWith("" + data + ""); }, - error: function (msg) { + error: function (msg) { // jshint ignore:line alert("Error getting full comment text:" + target); } }); @@ -161,4 +168,4 @@ //#JSCOVERAGE_ENDIF -}(jQuery)); +}); From 4949b26584a12becca86b373ea9c0eb515fd3042 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 11 Feb 2015 17:21:34 +0100 Subject: [PATCH 232/254] Add newline at the end of the file. --- README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/README.rst b/README.rst index 3b5b627..4d1062d 100644 --- a/README.rst +++ b/README.rst @@ -144,3 +144,4 @@ Many thanks to: - Hanno Schlichting (for making p.a.d work with Zope 2.12) - Alan Hoey (for providing fixes) - Maik Roeder (for providing and setting up a buildbot) + From bd0637e0b27dcf71e4c8e873c3c3a8dfc538020f Mon Sep 17 00:00:00 2001 From: vangheem Date: Wed, 11 Feb 2015 16:30:03 -0600 Subject: [PATCH 233/254] fix window load event to use --- plone/app/discussion/browser/javascripts/controlpanel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plone/app/discussion/browser/javascripts/controlpanel.js b/plone/app/discussion/browser/javascripts/controlpanel.js index b4742a0..da479f8 100644 --- a/plone/app/discussion/browser/javascripts/controlpanel.js +++ b/plone/app/discussion/browser/javascripts/controlpanel.js @@ -108,7 +108,7 @@ require([ // jshint ignore:line * Window Load Function: Executes when complete page is fully loaded, * including all frames, **************************************************************************/ - $(window).load(function () { + $(document).ready(function () { // Update settings on page load $.updateSettings(); From 9e0bd9713acd080367187b5d4ac130f6e1d2e5e4 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Fri, 13 Feb 2015 14:57:30 +0100 Subject: [PATCH 234/254] Trigger jenkins. --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index abc69e9..e1b9862 100644 --- a/setup.py +++ b/setup.py @@ -64,3 +64,4 @@ setup(name='plone.app.discussion', target = plone """, ) + From 13c013b15b14f14b2a577b007ede8a14054b14a5 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Fri, 13 Feb 2015 15:04:29 +0100 Subject: [PATCH 235/254] Trigger jenkins again. --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index deac03d..9155b60 100644 --- a/setup.cfg +++ b/setup.cfg @@ -5,3 +5,4 @@ all_files = 1 [upload_sphinx] upload-dir = docs/html + From a55020939e2a3ab304bfda45216995fcea19e74b Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Fri, 13 Feb 2015 15:07:35 +0100 Subject: [PATCH 236/254] Revert "Trigger jenkins again." This reverts commit 13c013b15b14f14b2a577b007ede8a14054b14a5. --- setup.cfg | 1 - 1 file changed, 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index 9155b60..deac03d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -5,4 +5,3 @@ all_files = 1 [upload_sphinx] upload-dir = docs/html - From aa71b5f0adc37f502e1d6d2cee1166eea87cc407 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Fri, 13 Feb 2015 15:10:59 +0100 Subject: [PATCH 237/254] Revert "Revert "Trigger jenkins again."" This reverts commit a55020939e2a3ab304bfda45216995fcea19e74b. --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index deac03d..9155b60 100644 --- a/setup.cfg +++ b/setup.cfg @@ -5,3 +5,4 @@ all_files = 1 [upload_sphinx] upload-dir = docs/html + From b4c1d9e42d50fa5528fa07dbd5696cd1db9180a2 Mon Sep 17 00:00:00 2001 From: Gil Forcada Date: Mon, 16 Feb 2015 10:22:09 +0100 Subject: [PATCH 238/254] Sort imports As per the styleguide --- plone/app/discussion/conversation.py | 64 ++++++++++++---------------- 1 file changed, 27 insertions(+), 37 deletions(-) diff --git a/plone/app/discussion/conversation.py b/plone/app/discussion/conversation.py index ba27c0f..540bf97 100644 --- a/plone/app/discussion/conversation.py +++ b/plone/app/discussion/conversation.py @@ -9,46 +9,36 @@ manipulate the same data structures, but provide an API for finding and manipulating the comments directly in reply to a particular comment or at the top level of the conversation. """ +from AccessControl.SpecialUsers import nobody as user_nobody +from Acquisition import aq_base +from Acquisition import aq_inner +from Acquisition import aq_parent +from Acquisition import Explicit +from BTrees.LLBTree import LLSet +from BTrees.LOBTree import LOBTree +from BTrees.OIBTree import OIBTree +from OFS.event import ObjectWillBeAddedEvent +from OFS.event import ObjectWillBeRemovedEvent +from OFS.Traversable import Traversable +from Products.CMFPlone.interfaces import IHideFromBreadcrumbs +from persistent import Persistent +from plone.app.discussion.comment import Comment +from plone.app.discussion.interfaces import IConversation +from plone.app.discussion.interfaces import IReplies +from zope.annotation.interfaces import IAnnotatable +from zope.annotation.interfaces import IAnnotations +from zope.component import adapter +from zope.component import adapts +from zope.container.contained import ContainerModifiedEvent +from zope.event import notify +from zope.interface import implementer +from zope.interface import implements +from zope.lifecycleevent import ObjectAddedEvent +from zope.lifecycleevent import ObjectCreatedEvent +from zope.lifecycleevent import ObjectRemovedEvent import time -from persistent import Persistent - -from zope.interface import implements, implementer -from zope.component import adapts -from zope.component import adapter - -from zope.annotation.interfaces import IAnnotations, IAnnotatable - -from zope.event import notify - -from Acquisition import aq_base, aq_inner, aq_parent -from Acquisition import Explicit - -from OFS.Traversable import Traversable - -from OFS.event import ObjectWillBeAddedEvent -from OFS.event import ObjectWillBeRemovedEvent - -from zope.container.contained import ContainerModifiedEvent - -from zope.lifecycleevent import ObjectCreatedEvent - -from zope.lifecycleevent import ObjectAddedEvent -from zope.lifecycleevent import ObjectRemovedEvent - -from BTrees.OIBTree import OIBTree - -from BTrees.LOBTree import LOBTree -from BTrees.LLBTree import LLSet - -from Products.CMFPlone.interfaces import IHideFromBreadcrumbs - -from plone.app.discussion.interfaces import IConversation -from plone.app.discussion.interfaces import IReplies -from plone.app.discussion.comment import Comment - -from AccessControl.SpecialUsers import nobody as user_nobody ANNOTATION_KEY = 'plone.app.discussion:conversation' From 535af3aaceedbf99b52fbe737b341cb22d813dbf Mon Sep 17 00:00:00 2001 From: Gil Forcada Date: Fri, 5 Dec 2014 02:09:46 +0100 Subject: [PATCH 239/254] Count acquisition wrapped comments If the View permission is not set directly on the workflow, but instead is left to be acquired, total_comments will always return 0. --- plone/app/discussion/conversation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plone/app/discussion/conversation.py b/plone/app/discussion/conversation.py index 540bf97..e73546a 100644 --- a/plone/app/discussion/conversation.py +++ b/plone/app/discussion/conversation.py @@ -80,7 +80,7 @@ class Conversation(Traversable, Persistent, Explicit): @property def total_comments(self): public_comments = [ - x for x in self._comments.values() + x for x in self.values() if user_nobody.has_permission('View', x) ] return len(public_comments) From d5b5b1c2cd269f1cfa27fb47df8fd44d18a6c4ef Mon Sep 17 00:00:00 2001 From: Gil Forcada Date: Mon, 16 Feb 2015 10:07:02 +0100 Subject: [PATCH 240/254] Fix total_comments indexer "@property removes Acquisition wrappers from 'self'. I don't remember why exactly (some implementation detail of Acquisition), but it's a fact of life." Quote from @davisagli on https://github.com/plone/plone.app.discussion/pull/58 In short: removing the @property from total_comments fix the problem. --- plone/app/discussion/catalog.py | 2 +- plone/app/discussion/conversation.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/plone/app/discussion/catalog.py b/plone/app/discussion/catalog.py index 12382df..5034928 100644 --- a/plone/app/discussion/catalog.py +++ b/plone/app/discussion/catalog.py @@ -33,7 +33,7 @@ def total_comments(object): if object.meta_type != 'Discussion Item': try: conversation = IConversation(object) - return conversation.total_comments + return conversation.total_comments() except TypeError: # pragma: no cover # The item is contentish but nobody # implemented an adapter for it diff --git a/plone/app/discussion/conversation.py b/plone/app/discussion/conversation.py index e73546a..01d3182 100644 --- a/plone/app/discussion/conversation.py +++ b/plone/app/discussion/conversation.py @@ -77,7 +77,6 @@ class Conversation(Traversable, Persistent, Explicit): parent = aq_inner(self.__parent__) return parent.restrictedTraverse('@@conversation_view').enabled() - @property def total_comments(self): public_comments = [ x for x in self.values() From 4ea41aba434c59ef40bcffbd5262f13013dc5d9d Mon Sep 17 00:00:00 2001 From: Gil Forcada Date: Mon, 16 Feb 2015 16:35:43 +0100 Subject: [PATCH 241/254] Fix tests --- plone/app/discussion/tests/test_comment.py | 2 +- .../app/discussion/tests/test_conversation.py | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/plone/app/discussion/tests/test_comment.py b/plone/app/discussion/tests/test_comment.py index 5277f5f..467680b 100644 --- a/plone/app/discussion/tests/test_comment.py +++ b/plone/app/discussion/tests/test_comment.py @@ -433,7 +433,7 @@ class RepliesTest(unittest.TestCase): self.assertEqual(len(replies), 0) # Make sure the first comment is still in the conversation - self.assertEqual(conversation.total_comments, 1) + self.assertEqual(conversation.total_comments(), 1) def test_traversal(self): # Create a nested structure of comment replies and check the traversal diff --git a/plone/app/discussion/tests/test_conversation.py b/plone/app/discussion/tests/test_conversation.py index 8400b05..b990a54 100644 --- a/plone/app/discussion/tests/test_conversation.py +++ b/plone/app/discussion/tests/test_conversation.py @@ -78,7 +78,7 @@ class ConversationTest(unittest.TestCase): self.assertEqual(new_id, comment.comment_id) self.assertEqual(len(list(conversation.getComments())), 1) self.assertEqual(len(tuple(conversation.getThreads())), 1) - self.assertEqual(conversation.total_comments, 1) + self.assertEqual(conversation.total_comments(), 1) self.assertTrue( conversation.last_comment_date - datetime.utcnow() < timedelta(seconds=1) @@ -91,7 +91,7 @@ class ConversationTest(unittest.TestCase): comment.author_username = "nobody" conversation.addComment(comment) comment.manage_permission("View", roles=tuple()) - self.assertEqual(0, conversation.total_comments) + self.assertEqual(0, conversation.total_comments()) self.assertEqual(None, conversation.last_comment_date) self.assertEqual(["nobody"], list(conversation.commentators)) self.assertEqual([], list(conversation.public_commentators)) @@ -112,7 +112,7 @@ class ConversationTest(unittest.TestCase): # make sure the comment has been added self.assertEqual(len(list(conversation.getComments())), 1) self.assertEqual(len(tuple(conversation.getThreads())), 1) - self.assertEqual(conversation.total_comments, 1) + self.assertEqual(conversation.total_comments(), 1) # delete the comment we just created del conversation[new_id] @@ -120,7 +120,7 @@ class ConversationTest(unittest.TestCase): # make sure there is no comment left in the conversation self.assertEqual(len(list(conversation.getComments())), 0) self.assertEqual(len(tuple(conversation.getThreads())), 0) - self.assertEqual(conversation.total_comments, 0) + self.assertEqual(conversation.total_comments(), 0) def test_delete_recursive(self): # Create a conversation. In this case we doesn't assign it to an @@ -195,7 +195,7 @@ class ConversationTest(unittest.TestCase): # Make sure the comment has been deleted as well self.assertEqual(len(list(conversation.getComments())), 0) self.assertEqual(len(tuple(conversation.getThreads())), 0) - self.assertEqual(conversation.total_comments, 0) + self.assertEqual(conversation.total_comments(), 0) def test_comments_enabled_on_doc_in_subfolder(self): typetool = self.portal.portal_types @@ -422,7 +422,7 @@ class ConversationTest(unittest.TestCase): conversation.addComment(comment2) conversation.addComment(comment3) - self.assertEqual(conversation.total_comments, 3) + self.assertEqual(conversation.total_comments(), 3) def test_commentators(self): # add and remove a few comments to make sure the commentators @@ -432,7 +432,7 @@ class ConversationTest(unittest.TestCase): # object, as we just want to check the Conversation object API. conversation = IConversation(self.portal.doc1) - self.assertEqual(conversation.total_comments, 0) + self.assertEqual(conversation.total_comments(), 0) # Add a four comments from three different users # Note: in real life, we always create @@ -459,7 +459,7 @@ class ConversationTest(unittest.TestCase): new_comment4_id = conversation.addComment(comment4) # check if all commentators are in the commentators list - self.assertEqual(conversation.total_comments, 4) + self.assertEqual(conversation.total_comments(), 4) self.assertTrue('Jim' in conversation.commentators) self.assertTrue('Joe' in conversation.commentators) self.assertTrue('Jack' in conversation.commentators) @@ -472,7 +472,7 @@ class ConversationTest(unittest.TestCase): self.assertTrue('Jim' in conversation.commentators) self.assertTrue('Joe' in conversation.commentators) self.assertTrue('Jack' in conversation.commentators) - self.assertEqual(conversation.total_comments, 3) + self.assertEqual(conversation.total_comments(), 3) # remove the second comment from Jack del conversation[new_comment4_id] @@ -481,7 +481,7 @@ class ConversationTest(unittest.TestCase): self.assertTrue('Jim' in conversation.commentators) self.assertTrue('Joe' in conversation.commentators) self.assertFalse('Jack' in conversation.commentators) - self.assertEqual(conversation.total_comments, 2) + self.assertEqual(conversation.total_comments(), 2) def test_last_comment_date(self): # add and remove some comments and check if last_comment_date @@ -868,7 +868,7 @@ class RepliesTest(unittest.TestCase): # check that replies only contain the direct comments # and no comments deeper than 1 - self.assertEqual(conversation.total_comments, 6) + self.assertEqual(conversation.total_comments(), 6) self.assertEqual(len(replies), 2) self.assertEqual(len(replies_to_comment1), 2) self.assertEqual(len(replies_to_comment1_1), 1) From 2a423095abee2b6d3e73b280a84500a591c9b8e7 Mon Sep 17 00:00:00 2001 From: Gil Forcada Date: Wed, 25 Feb 2015 21:45:54 +0100 Subject: [PATCH 242/254] Add note on CHANGES.rst --- CHANGES.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index b0bbbb8..5b8ca9f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,6 +20,10 @@ Changelog - Read mail settings from new (Plone 5) registry. [timo] +- Remove @property from Conversation.total_comments as @property and + Acquisition don't play well together. + [gforcada] + 2.3.3 (2014-10-23) ------------------ From b8dd283e4d74f2049c33b0ab466a694bb2bc4578 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Fri, 27 Feb 2015 13:47:30 +0100 Subject: [PATCH 243/254] Jenkins test 2. --- README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/README.rst b/README.rst index 4d1062d..352ae6b 100644 --- a/README.rst +++ b/README.rst @@ -1,6 +1,7 @@ Introduction ============ + plone.app.discussion replaces the old commenting system in Plone 4.1 and is also available as an add-on product for Plone 3 and 4. It was initially developed as part of the Google Summer of Code 2009 by Timo Stollenwerk (student) and Martin From ea99af48a2cfcd747d547a45de6d1fa39f2b6adc Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Fri, 27 Feb 2015 13:55:47 +0100 Subject: [PATCH 244/254] Jenkins test 3. --- README.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/README.rst b/README.rst index 352ae6b..4d1062d 100644 --- a/README.rst +++ b/README.rst @@ -1,7 +1,6 @@ Introduction ============ - plone.app.discussion replaces the old commenting system in Plone 4.1 and is also available as an add-on product for Plone 3 and 4. It was initially developed as part of the Google Summer of Code 2009 by Timo Stollenwerk (student) and Martin From 8d72da071fb4aaf363a56dc2c10d223e76eacef5 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Fri, 27 Feb 2015 15:15:03 +0100 Subject: [PATCH 245/254] Revert "Jenkins test 3." This reverts commit ea99af48a2cfcd747d547a45de6d1fa39f2b6adc. --- README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/README.rst b/README.rst index 4d1062d..352ae6b 100644 --- a/README.rst +++ b/README.rst @@ -1,6 +1,7 @@ Introduction ============ + plone.app.discussion replaces the old commenting system in Plone 4.1 and is also available as an add-on product for Plone 3 and 4. It was initially developed as part of the Google Summer of Code 2009 by Timo Stollenwerk (student) and Martin From 8690461ffb27c76754bb26aa3f5f38924581eb93 Mon Sep 17 00:00:00 2001 From: David Glick Date: Mon, 9 Mar 2015 21:51:45 -0700 Subject: [PATCH 246/254] create doc1 in the text fixture rather than in setup for each test --- plone/app/discussion/testing.py | 22 ++++++++++++------- .../tests/functional_test_comments.txt | 3 +-- plone/app/discussion/tests/test_catalog.py | 11 ---------- plone/app/discussion/tests/test_comment.py | 10 --------- .../discussion/tests/test_comments_viewlet.py | 4 ---- .../app/discussion/tests/test_contentrules.py | 12 ++-------- .../app/discussion/tests/test_conversation.py | 8 +------ plone/app/discussion/tests/test_events.py | 14 ++---------- plone/app/discussion/tests/test_indexers.py | 12 ---------- .../discussion/tests/test_moderation_view.py | 4 ---- .../discussion/tests/test_notifications.py | 4 ---- plone/app/discussion/tests/test_workflow.py | 3 --- 12 files changed, 20 insertions(+), 87 deletions(-) diff --git a/plone/app/discussion/testing.py b/plone/app/discussion/testing.py index 90f08f9..496a1a5 100644 --- a/plone/app/discussion/testing.py +++ b/plone/app/discussion/testing.py @@ -1,16 +1,14 @@ -from Products.CMFCore.utils import getToolByName - from plone.app.contenttypes.testing import PLONE_APP_CONTENTTYPES_FIXTURE from plone.app.discussion.interfaces import IDiscussionSettings from plone.app.robotframework.testing import REMOTE_LIBRARY_ROBOT_TESTING -from plone.app.testing import IntegrationTesting -from plone.app.testing import FunctionalTesting -from plone.app.testing import PloneSandboxLayer from plone.app.testing import applyProfile - -from plone.testing import z2 +from plone.app.testing import FunctionalTesting +from plone.app.testing import IntegrationTesting +from plone.app.testing import PloneSandboxLayer +from plone.app.testing import setRoles +from plone.app.testing import TEST_USER_ID from plone.registry.interfaces import IRegistry - +from Products.CMFCore.utils import getToolByName from zope.component import queryUtility from zope.configuration import xmlconfig @@ -88,6 +86,14 @@ class PloneAppDiscussion(PloneSandboxLayer): [], ) + # Add a document + setRoles(portal, TEST_USER_ID, ['Manager']) + portal.invokeFactory( + id='doc1', + title='Document 1', + type_name='Document' + ) + class PloneAppDiscussionRobot(PloneAppDiscussion): diff --git a/plone/app/discussion/tests/functional_test_comments.txt b/plone/app/discussion/tests/functional_test_comments.txt index 82c2051..b90f479 100644 --- a/plone/app/discussion/tests/functional_test_comments.txt +++ b/plone/app/discussion/tests/functional_test_comments.txt @@ -56,8 +56,7 @@ Enable commenting. Create a public page with comments allowed. - >>> browser.open(portal_url) - >>> browser.getLink(id='document').click() + >>> browser.open(portal['doc1'].absolute_url() + '/edit') >>> browser.getControl(name='form.widgets.IDublinCore.title').value = "Doc1" >>> browser.getControl(name='form.widgets.IAllowDiscussion.allow_discussion:list').value = ['True'] >>> browser.getControl('Save').click() diff --git a/plone/app/discussion/tests/test_catalog.py b/plone/app/discussion/tests/test_catalog.py index 9003648..c468242 100644 --- a/plone/app/discussion/tests/test_catalog.py +++ b/plone/app/discussion/tests/test_catalog.py @@ -63,11 +63,6 @@ class ConversationCatalogTest(unittest.TestCase): def setUp(self): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory( - id='doc1', - Title='Document 1', - type_name='Document' - ) self.catalog = getToolByName(self.portal, 'portal_catalog') conversation = IConversation(self.portal.doc1) comment1 = createObject('plone.Comment') @@ -260,9 +255,6 @@ class CommentCatalogTest(unittest.TestCase): def setUp(self): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory(id='doc1', - title='Document 1', - type_name='Document') self.catalog = getToolByName(self.portal, 'portal_catalog') conversation = IConversation(self.portal.doc1) @@ -540,9 +532,6 @@ class NoConversationCatalogTest(unittest.TestCase): def setUp(self): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory(id='doc1', - Title='Document 1', - type_name='Document') self.catalog = getToolByName(self.portal, 'portal_catalog') diff --git a/plone/app/discussion/tests/test_comment.py b/plone/app/discussion/tests/test_comment.py index 467680b..af97864 100644 --- a/plone/app/discussion/tests/test_comment.py +++ b/plone/app/discussion/tests/test_comment.py @@ -34,11 +34,6 @@ class CommentTest(unittest.TestCase): self.request = self.layer['request'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory( - id='doc1', - title='Document 1', - type_name='Document' - ) self.catalog = getToolByName(self.portal, 'portal_catalog') self.document_brain = self.catalog.searchResults( portal_type='Document')[0] @@ -360,11 +355,6 @@ class RepliesTest(unittest.TestCase): def setUp(self): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory( - id='doc1', - title='Document 1', - type_name='Document' - ) def test_add_comment(self): # Add comments to a CommentReplies adapter diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index 6619b1a..146b773 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -59,8 +59,6 @@ class TestCommentForm(unittest.TestCase): interfaces.IDiscussionLayer, ) - typetool = self.portal.portal_types - typetool.constructContent('Document', self.portal, 'doc1') wftool = getToolByName(self.portal, "portal_workflow") wftool.doActionFor(self.portal.doc1, action='publish') self.portal.doc1.allow_discussion = True @@ -464,8 +462,6 @@ class TestCommentsViewlet(unittest.TestCase): self.workflowTool = getToolByName(self.portal, 'portal_workflow') self.workflowTool.setDefaultChain('one_state_workflow') - typetool = self.portal.portal_types - typetool.constructContent('Document', self.portal, 'doc1') self.membershipTool = getToolByName(self.folder, 'portal_membership') self.memberdata = self.portal.portal_memberdata context = getattr(self.portal, 'doc1') diff --git a/plone/app/discussion/tests/test_contentrules.py b/plone/app/discussion/tests/test_contentrules.py index a9e9bf1..54001cd 100644 --- a/plone/app/discussion/tests/test_contentrules.py +++ b/plone/app/discussion/tests/test_contentrules.py @@ -35,12 +35,8 @@ class CommentContentRulesTest(unittest.TestCase): }) setRoles(self.portal, TEST_USER_ID, ['Manager']) - name = self.portal.invokeFactory( - id='doc1', - title='Document 1', - type_name='Document') - self.document = self.portal[name] + self.document = self.portal['doc1'] comment = createObject('plone.Comment') comment.text = "This is a comment" @@ -93,12 +89,8 @@ class ReplyContentRulesTest(unittest.TestCase): self.portal = self.layer['portal'] self.request = self.layer['request'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - name = self.portal.invokeFactory( - id='doc1', - title='Document 1', - type_name='Document') - self.document = self.portal[name] + self.document = self.portal['doc1'] conversation = IConversation(self.document) replies = IReplies(conversation) diff --git a/plone/app/discussion/tests/test_conversation.py b/plone/app/discussion/tests/test_conversation.py index b990a54..cd9480f 100644 --- a/plone/app/discussion/tests/test_conversation.py +++ b/plone/app/discussion/tests/test_conversation.py @@ -42,9 +42,7 @@ class ConversationTest(unittest.TestCase): interface.alsoProvides( self.portal.REQUEST, interfaces.IDiscussionLayer) - typetool = self.portal.portal_types - typetool.constructContent('Document', self.portal, 'doc1') - self.typetool = typetool + self.typetool = self.portal.portal_types self.portal_discussion = getToolByName( self.portal, 'portal_discussion', @@ -685,8 +683,6 @@ class ConversationEnabledForDexterityTypesTest(unittest.TestCase): interfaces.IDiscussionLayer ) - typetool = self.portal.portal_types - typetool.constructContent('Document', self.portal, 'doc1') if DEXTERITY: interface.alsoProvides( self.portal.doc1, @@ -750,8 +746,6 @@ class RepliesTest(unittest.TestCase): def setUp(self): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - typetool = self.portal.portal_types - typetool.constructContent('Document', self.portal, 'doc1') def test_add_comment(self): # Add comments to a ConversationReplies adapter diff --git a/plone/app/discussion/tests/test_events.py b/plone/app/discussion/tests/test_events.py index 11ab4c9..840bc3a 100644 --- a/plone/app/discussion/tests/test_events.py +++ b/plone/app/discussion/tests/test_events.py @@ -50,12 +50,7 @@ class CommentEventsTest(unittest.TestCase): self.registry = EventsRegistry setRoles(self.portal, TEST_USER_ID, ['Manager']) - name = self.portal.invokeFactory( - id='doc1', - title='Document 1', - type_name='Document') - - self.document = self.portal[name] + self.document = self.portal['doc1'] # # Subscribers @@ -107,12 +102,7 @@ class RepliesEventsTest(unittest.TestCase): self.registry = EventsRegistry setRoles(self.portal, TEST_USER_ID, ['Manager']) - name = self.portal.invokeFactory( - id='doc1', - title='Document 1', - type_name='Document') - - self.document = self.portal[name] + self.document = self.portal['doc1'] # # Subscribers diff --git a/plone/app/discussion/tests/test_indexers.py b/plone/app/discussion/tests/test_indexers.py index 23721f0..650db38 100644 --- a/plone/app/discussion/tests/test_indexers.py +++ b/plone/app/discussion/tests/test_indexers.py @@ -40,12 +40,6 @@ class ConversationIndexersTest(unittest.TestCase): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory( - id='doc1', - title='Document 1', - type_name='Document' - ) - # Create a conversation. conversation = IConversation(self.portal.doc1) @@ -121,12 +115,6 @@ class CommentIndexersTest(unittest.TestCase): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - self.portal.invokeFactory( - id='doc1', - title='Document 1', - type_name='Document' - ) - # Create a conversation. In this case we doesn't assign it to an # object, as we just want to check the Conversation object API. conversation = IConversation(self.portal.doc1) diff --git a/plone/app/discussion/tests/test_moderation_view.py b/plone/app/discussion/tests/test_moderation_view.py index c533190..5fd1735 100644 --- a/plone/app/discussion/tests/test_moderation_view.py +++ b/plone/app/discussion/tests/test_moderation_view.py @@ -24,8 +24,6 @@ class ModerationViewTest(unittest.TestCase): self.portal = self.layer['portal'] self.request = self.layer['request'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - typetool = self.portal.portal_types - typetool.constructContent('Document', self.portal, 'doc1') self.portal_discussion = getToolByName(self.portal, 'portal_discussion', None) @@ -66,8 +64,6 @@ class ModerationBulkActionsViewTest(unittest.TestCase): self.portal = self.layer['portal'] self.request = self.layer['request'] setRoles(self.portal, TEST_USER_ID, ['Manager']) - typetool = self.portal.portal_types - typetool.constructContent('Document', self.portal, 'doc1') self.wf = getToolByName(self.portal, 'portal_workflow', None) diff --git a/plone/app/discussion/tests/test_notifications.py b/plone/app/discussion/tests/test_notifications.py index 3b87f9b..7a548b1 100644 --- a/plone/app/discussion/tests/test_notifications.py +++ b/plone/app/discussion/tests/test_notifications.py @@ -44,8 +44,6 @@ class TestUserNotificationUnit(unittest.TestCase): registry = queryUtility(IRegistry) registry['plone.app.discussion.interfaces.IDiscussionSettings' + '.user_notification_enabled'] = True - # Create test content - self.portal.invokeFactory('Document', 'doc1') # Archetypes content types store data as utf-8 encoded strings # The missing u in front of a string is therefor not missing self.portal.doc1.title = 'Kölle Alaaf' # What is "Fasching"? @@ -193,8 +191,6 @@ class TestModeratorNotificationUnit(unittest.TestCase): 'plone.app.discussion.interfaces.IDiscussionSettings.' + 'moderator_notification_enabled' ] = True - # Create test content - self.portal.invokeFactory('Document', 'doc1') # Archetypes content types store data as utf-8 encoded strings # The missing u in front of a string is therefor not missing self.portal.doc1.title = 'Kölle Alaaf' # What is "Fasching"? diff --git a/plone/app/discussion/tests/test_workflow.py b/plone/app/discussion/tests/test_workflow.py index c8cf216..a82316b 100644 --- a/plone/app/discussion/tests/test_workflow.py +++ b/plone/app/discussion/tests/test_workflow.py @@ -187,9 +187,6 @@ class CommentReviewWorkflowTest(unittest.TestCase): ('Discussion Item',), ('comment_review_workflow',)) - # Create a Document - self.portal.invokeFactory('Document', 'doc1') - # Create a conversation for this Document conversation = IConversation(self.portal.doc1) From 7ea789770baa09de1f893393c0f6068904609061 Mon Sep 17 00:00:00 2001 From: esteele Date: Thu, 12 Mar 2015 10:21:21 -0400 Subject: [PATCH 247/254] Preparing release 2.4.0 --- CHANGES.rst | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 5b8ca9f..0dd4621 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,7 +1,7 @@ Changelog ========= -2.4.0 (unreleased) +2.4.0 (2015-03-12) ------------------ - use requirejs if available diff --git a/setup.py b/setup.py index e1b9862..5f2ad4d 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import find_packages from setuptools import setup -version = '2.4.0.dev0' +version = '2.4.0' install_requires = [ 'setuptools', From f7b4eb982dbbe88a67fff9616d59a383b3507c88 Mon Sep 17 00:00:00 2001 From: esteele Date: Thu, 12 Mar 2015 10:22:07 -0400 Subject: [PATCH 248/254] Back to development: 2.4.1 --- CHANGES.rst | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 0dd4621..df32ab1 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,12 @@ Changelog ========= +2.4.1 (unreleased) +------------------ + +- Nothing changed yet. + + 2.4.0 (2015-03-12) ------------------ diff --git a/setup.py b/setup.py index 5f2ad4d..df8502f 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import find_packages from setuptools import setup -version = '2.4.0' +version = '2.4.1.dev0' install_requires = [ 'setuptools', From 285dbcd918a6aac4a557198ceb060ae5055c02d4 Mon Sep 17 00:00:00 2001 From: "David\\ Beitey" Date: Mon, 23 Mar 2015 18:05:39 +1000 Subject: [PATCH 249/254] i18n for ICaptcha interface field --- CHANGES.rst | 3 +- plone/app/discussion/i18n/plone-ca.po | 2 +- plone/app/discussion/i18n/plone-cs.po | 2 +- plone/app/discussion/i18n/plone-da.po | 2 +- plone/app/discussion/i18n/plone-de.po | 2 +- plone/app/discussion/i18n/plone-el.po | 2 +- plone/app/discussion/i18n/plone-es.po | 2 +- plone/app/discussion/i18n/plone-eu.po | 2 +- plone/app/discussion/i18n/plone-fr.po | 2 +- plone/app/discussion/i18n/plone-it.po | 2 +- plone/app/discussion/i18n/plone-ja.po | 2 +- plone/app/discussion/i18n/plone-nl.po | 2 +- plone/app/discussion/i18n/plone-no.po | 2 +- plone/app/discussion/i18n/plone-pt_BR.po | 2 +- plone/app/discussion/i18n/plone-sk.po | 2 +- plone/app/discussion/i18n/plone-uk.po | 2 +- plone/app/discussion/i18n/plone-zh_CN.po | 2 +- plone/app/discussion/i18n/plone-zh_TW.po | 2 +- plone/app/discussion/i18n/plone.pot | 2 +- plone/app/discussion/interfaces.py | 2 +- .../af/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../ca/LC_MESSAGES/plone.app.discussion.po | 147 ++++++++---------- .../cs/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../da/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../de/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../es/LC_MESSAGES/plone.app.discussion.po | 82 ++++++---- .../eu/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../fi/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../fr/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../it/LC_MESSAGES/plone.app.discussion.po | 87 ++++++----- .../ja/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../nl/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../no/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../locales/plone.app.discussion.pot | 88 ++++++----- .../pt/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../pt_BR/LC_MESSAGES/plone.app.discussion.po | 94 ++++++----- .../ro/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../sk/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../sv/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../uk/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../zh_CN/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- .../zh_TW/LC_MESSAGES/plone.app.discussion.po | 86 +++++----- 42 files changed, 1139 insertions(+), 862 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index df32ab1..ae9f5e8 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,8 @@ Changelog 2.4.1 (unreleased) ------------------ -- Nothing changed yet. +- i18n for ICaptcha interface. + [davidjb] 2.4.0 (2015-03-12) diff --git a/plone/app/discussion/i18n/plone-ca.po b/plone/app/discussion/i18n/plone-ca.po index cd8adc1..ba2b97e 100644 --- a/plone/app/discussion/i18n/plone-ca.po +++ b/plone/app/discussion/i18n/plone-ca.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: Victor Fernandez de Alba \n" "Language-Team: LANGUAGE \n" diff --git a/plone/app/discussion/i18n/plone-cs.po b/plone/app/discussion/i18n/plone-cs.po index 358c58e..7187d35 100644 --- a/plone/app/discussion/i18n/plone-cs.po +++ b/plone/app/discussion/i18n/plone-cs.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2010-11-03 14:51+0100\n" "Last-Translator: Radim Novotny \n" "Language-Team: DMS4U \n" diff --git a/plone/app/discussion/i18n/plone-da.po b/plone/app/discussion/i18n/plone-da.po index 2547543..0c1c3bb 100644 --- a/plone/app/discussion/i18n/plone-da.po +++ b/plone/app/discussion/i18n/plone-da.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Anton Stonor \n" "Language-Team: Anton Stonor \n" diff --git a/plone/app/discussion/i18n/plone-de.po b/plone/app/discussion/i18n/plone-de.po index 28a446a..5470fa2 100644 --- a/plone/app/discussion/i18n/plone-de.po +++ b/plone/app/discussion/i18n/plone-de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2010-03-17 16:11+0100\n" "Last-Translator: Timo Stollenwerk \n" "Language-Team: Deutsch \n" diff --git a/plone/app/discussion/i18n/plone-el.po b/plone/app/discussion/i18n/plone-el.po index 75218cf..5c895bd 100644 --- a/plone/app/discussion/i18n/plone-el.po +++ b/plone/app/discussion/i18n/plone-el.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2010-02-23 10:26+0100\n" "Last-Translator: Yiorgis Gozadinos \n" "Language-Team: Greek \n" diff --git a/plone/app/discussion/i18n/plone-es.po b/plone/app/discussion/i18n/plone-es.po index 83918db..3ff5c0d 100644 --- a/plone/app/discussion/i18n/plone-es.po +++ b/plone/app/discussion/i18n/plone-es.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: Mikel Larreategi \n" diff --git a/plone/app/discussion/i18n/plone-eu.po b/plone/app/discussion/i18n/plone-eu.po index f5f59ec..692a595 100644 --- a/plone/app/discussion/i18n/plone-eu.po +++ b/plone/app/discussion/i18n/plone-eu.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Mikel Larreategi \n" "Language-Team: Mikel Larreategi \n" diff --git a/plone/app/discussion/i18n/plone-fr.po b/plone/app/discussion/i18n/plone-fr.po index 7bcdc3e..a5a9d9b 100644 --- a/plone/app/discussion/i18n/plone-fr.po +++ b/plone/app/discussion/i18n/plone-fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2010-08-06 19:23+0100\n" "Last-Translator: Vincent Fretin \n" "Language-Team: Vincent Fretin \n" diff --git a/plone/app/discussion/i18n/plone-it.po b/plone/app/discussion/i18n/plone-it.po index 3a73214..fa238d5 100644 --- a/plone/app/discussion/i18n/plone-it.po +++ b/plone/app/discussion/i18n/plone-it.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/plone/app/discussion/i18n/plone-ja.po b/plone/app/discussion/i18n/plone-ja.po index 203e0d1..bbcc71c 100644 --- a/plone/app/discussion/i18n/plone-ja.po +++ b/plone/app/discussion/i18n/plone-ja.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2011-04-18 13:13+0900\n" "Last-Translator: Takeshi Yamamoto \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/i18n/plone-nl.po b/plone/app/discussion/i18n/plone-nl.po index 8811833..3a6e347 100644 --- a/plone/app/discussion/i18n/plone-nl.po +++ b/plone/app/discussion/i18n/plone-nl.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2011-09-30 16:02+0100\n" "Last-Translator: NFG Net Facilities Group BV \n" "Language-Team: Nederlands \n" diff --git a/plone/app/discussion/i18n/plone-no.po b/plone/app/discussion/i18n/plone-no.po index dc914f0..cb98b76 100644 --- a/plone/app/discussion/i18n/plone-no.po +++ b/plone/app/discussion/i18n/plone-no.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/plone/app/discussion/i18n/plone-pt_BR.po b/plone/app/discussion/i18n/plone-pt_BR.po index ad4906d..42e78cf 100644 --- a/plone/app/discussion/i18n/plone-pt_BR.po +++ b/plone/app/discussion/i18n/plone-pt_BR.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2011-04-14 17:38-0300\n" "Last-Translator: Andre Nogueira \n" "Language-Team: Plone i18n \n" diff --git a/plone/app/discussion/i18n/plone-sk.po b/plone/app/discussion/i18n/plone-sk.po index 19dc7ce..0ab5a61 100644 --- a/plone/app/discussion/i18n/plone-sk.po +++ b/plone/app/discussion/i18n/plone-sk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2012-07-02 17:54+0100\n" "Last-Translator: Radim Novotny \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/i18n/plone-uk.po b/plone/app/discussion/i18n/plone-uk.po index 7515c1d..06e8fe8 100644 --- a/plone/app/discussion/i18n/plone-uk.po +++ b/plone/app/discussion/i18n/plone-uk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2013-04-12 14:55+0300\n" "Last-Translator: Roman Kozlovskyi \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/i18n/plone-zh_CN.po b/plone/app/discussion/i18n/plone-zh_CN.po index 62e313d..d8a01ad 100644 --- a/plone/app/discussion/i18n/plone-zh_CN.po +++ b/plone/app/discussion/i18n/plone-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2011-08-19 12:23+0800\n" "Last-Translator: Jian Aijun \n" "Language-Team: plone \n" diff --git a/plone/app/discussion/i18n/plone-zh_TW.po b/plone/app/discussion/i18n/plone-zh_TW.po index efb78ac..5841f1c 100644 --- a/plone/app/discussion/i18n/plone-zh_TW.po +++ b/plone/app/discussion/i18n/plone-zh_TW.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2010-08-07 23:11+0800\n" "Last-Translator: TsungWei Hu \n" "Language-Team: Taiwan Python User Group \n" diff --git a/plone/app/discussion/i18n/plone.pot b/plone/app/discussion/i18n/plone.pot index 03eb8b7..c910901 100644 --- a/plone/app/discussion/i18n/plone.pot +++ b/plone/app/discussion/i18n/plone.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Hanno Schlichting \n" "Language-Team: Hanno Schlichting \n" diff --git a/plone/app/discussion/interfaces.py b/plone/app/discussion/interfaces.py index c0328b3..75c70ff 100644 --- a/plone/app/discussion/interfaces.py +++ b/plone/app/discussion/interfaces.py @@ -181,7 +181,7 @@ class IComment(Interface): class ICaptcha(Interface): """Captcha/ReCaptcha text field to extend the existing comment form. """ - captcha = schema.TextLine(title=u"Captcha", + captcha = schema.TextLine(title=_(u"Captcha"), required=False) diff --git a/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po index 989d1bf..b547052 100644 --- a/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/af/LC_MESSAGES/plone.app.discussion.po @@ -33,7 +33,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "'n Opmerking is geplaas." @@ -49,40 +49,44 @@ msgstr "Voeg 'n opmerking by" msgid "Anonymous Comments" msgstr "Anonieme kommentaar" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Kanselleer" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Opmerking goedgekeur" -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Opmerking verwyder" -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -93,7 +97,7 @@ msgstr "Kommentator se Profielfoto" msgid "Commenting infrastructure for Plone" msgstr "Kommentaarinfrastruktuur vir Plone" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -113,7 +117,7 @@ msgstr "" msgid "Disabled" msgstr "Uitgeskakel" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Kommentaar instellings" @@ -177,7 +181,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -189,7 +193,7 @@ msgstr "Gebruik e-pos in kennis stelling" msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Die opmerking sal geplaas word sodra dit goedgekeur is." @@ -244,7 +248,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 #, fuzzy msgid "comment_title" msgstr "${creator} op ${content}" @@ -295,23 +299,28 @@ msgid "help_anonymous_comments" msgstr "Indien geselekteer, sal anonieme besoekers opmerkings kan laat sonder om aan te meld. Die captcha-oplossing word aanbeveel indien hierdie opsie aangeskakel word, om gemorspos te voorkom." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Gebruik hierdie instelling om Captcha validasie vir kommentaar aan of af te skakel. Installeer plone.formwidget of plone.formwidget.captcha indien daar geen opsies beskikbaar is nie." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "Sommige besprekingsinstellings kom nie op hierdie bladsy voor nie.\n" "Om kommentaar vir 'n spesifieke inhoudstipe aan te skakel, gaan na die Tipes Konfigurasie, kies 'Comment' en stel die werksvloei na \"Comment Review Workflow\"." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -327,34 +336,34 @@ msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Indien geselekteer, sal die moderator in kennis gestel word wanneer 'n opmerking aandag verg." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Indien geselekteer, sal die profielfoto van 'n gebruiker langs sy opmerking vertoon." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Indien geselekteer, sal gebruikers kan kies om per e-pos van nuwe kommentaar in kennis gestel te word." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anoniem" @@ -364,7 +373,7 @@ msgid "label_anonymous_comments" msgstr "Skakel anonieme kommentaar aan" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -374,7 +383,7 @@ msgid "label_apply" msgstr "Pas toe" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -384,7 +393,7 @@ msgid "label_comment" msgstr "Opmerking" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "" @@ -393,6 +402,11 @@ msgstr "" msgid "label_delete" msgstr "Skrap" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -409,12 +423,12 @@ msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Skakel moderator e-pos in kennis stelling aan" @@ -424,12 +438,12 @@ msgid "label_publish" msgstr "Keur goed" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "sê:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Vertoon kommentaarleweraar se foto" @@ -444,23 +458,23 @@ msgid "label_subject" msgstr "Onderwerp" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Kommentaar tekstransformasie" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Skakel e-pos in kennis stelling aan vir gebruikers" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 #, fuzzy msgid "mail_notification_message" msgstr "'n Opmerking is op '${title}' gelewer: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po index 328296f..8811a27 100644 --- a/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ca/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Comentari afegit." @@ -30,15 +30,20 @@ msgstr "Afegir un comentari" msgid "Anonymous Comments" msgstr "Comentaris anònims" -#: ../browser/comments.py:274 ../browser/controlpanel.py:93 +#: ../browser/comments.py:275 +#: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Cancel·la" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Canvis desats" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Comentari aprovat." @@ -54,7 +59,7 @@ msgstr "Nom complet de l'autor del comentari" msgid "Comment author user name" msgstr "Nom d'usuari de l'autor del comentari " -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Comentari esborrat." @@ -93,7 +98,7 @@ msgstr "Data de l'últim comentari públic" msgid "Disabled" msgstr "Desactivat" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Configuració dels comentaris" @@ -133,7 +138,7 @@ msgstr "Nom" msgid "Notify me of new comments via email." msgstr "Notifica'm de la creació de nous comentaris via correu electrònic." -#: plone.app.discussion/plone/app/discussion/configure.zcml +#: ./plone.app.discussion/plone/app/discussion/configure.zcml msgid "Plone Discussions" msgstr "Plone Discussions" @@ -157,7 +162,7 @@ msgstr "El conjunt de comentaristes únics (noms d'usuari) de comentaris publica msgid "Total number of public comments on this item" msgstr "Nombre total de comentaris públics sobre aquest article" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "Transformació de '%s' => '%s' no disponible." @@ -169,7 +174,7 @@ msgstr "Notificació a l'usuari via mail" msgid "Username of the commenter" msgstr "Nom d'usuari del comentarista" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "El vostre comentari està pendent d'aprovació per part del moderador de l'espai" @@ -224,7 +229,7 @@ msgid "comment_edit_notification" msgstr "S'ha editat el comentari" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "${creator} sobre ${content}" @@ -271,102 +276,72 @@ msgstr "Moderar comentaris" #. Default: "If selected, anonymous users are able to post comments without loggin in. It is highly recommended to use a captcha solution to prevent spam if this setting is enabled." #: ../interfaces.py:216 msgid "help_anonymous_comments" -msgstr "" -"Si està seleccionada, els usuaris anònims podran afegir comentaris sense " -"identificar-se. Es recomana la utilització de una eina de captcha per evitar " -"comentaris spam si aquesta opció està activada." +msgstr "Si està seleccionada, els usuaris anònims podran afegir comentaris sense identificar-se. Es recomana la utilització de una eina de captcha per evitar comentaris spam si aquesta opció està activada." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" -msgstr "" -"Si se selecciona, el usuari anònim haurà de donar la seva adreça de correu " -"electrònic." +msgstr "Si se selecciona, el usuari anònim haurà de donar la seva adreça de correu electrònic." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" +msgstr "Utilitzeu aquesta opció per activar o desactivar una eina de captcha pels comentaris. Instal·leu plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet o collective.z3cform.norobots si no teniu cap opció disponible." + +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" msgstr "" -"Utilitzeu aquesta opció per activar o desactivar una eina de captcha pels " -"comentaris. Instal·leu plone.formwidget.captcha, plone.formwidget.recaptcha, " -"collective.akismet o collective.z3cform.norobots si no teniu cap opció " -"disponible." #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" -msgstr "" -"Algunes de les configuracions dels comentaris no estan en la element de " -"configuració 'Comentaris' del panell de control de l'espai. Per activar els " -"comentaris per un tipus de contingut específic, dirigiu-vos al element de " -"configuració 'Tipus' i activeu la opció 'Permetre comentaris'. Per activar " -"el circuit de treball (workflow) de moderació de comentaris, dirigiu-vos al " -"element de configuració de 'Tipus', seleccioneu 'Comentari' i escolliu el " -"'Workflow de moderació de comentaris'." +msgstr "Algunes de les configuracions dels comentaris no estan en la element de configuració 'Comentaris' del panell de control de l'espai. Per activar els comentaris per un tipus de contingut específic, dirigiu-vos al element de configuració 'Tipus' i activeu la opció 'Permetre comentaris'. Per activar el circuit de treball (workflow) de moderació de comentaris, dirigiu-vos al element de configuració de 'Tipus', seleccioneu 'Comentari' i escolliu el 'Workflow de moderació de comentaris'." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 +#, fuzzy msgid "help_edit_comment_enabled" -msgstr "" -"Si es selecciona, dóna suport a l'edició i eliminació dels comentaris " -"dels usuaris amb el permís 'Edita comentaris'" +msgstr "Si es selecciona, dóna suport a l'edició i eliminació dels comentaris dels usuaris amb el permís 'Edita comentaris'" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 msgid "help_globally_enabled" -msgstr "" -"Si està seleccionada, es permet que els usuaris puguin afegir comentaris a " -"l'espai. De tota manera, teniu que activar els comentaris per a cada tipus " -"de contingut específicament abans de que pogueu afegir comentaris." +msgstr "Si està seleccionada, es permet que els usuaris puguin afegir comentaris a l'espai. De tota manera, teniu que activar els comentaris per a cada tipus de contingut específicament abans de que pogueu afegir comentaris." #. Default: "If selected, comments will enter a 'Pending' state in which they are invisible to the public. A user with the 'Review comments' permission ('Reviewer' or 'Manager') can approve comments to make them visible to the public. If you want to enable a custom comment workflow, you have to go to the types control panel." #: ../interfaces.py:232 msgid "help_moderation_enabled" -msgstr "" -"Si està seleccionat, els comentaris entraran en un estat \"pendent\" en què " -"són invisibles per al públic. Un usuari amb permís 'Review " -"comments' ('Reviewer' o 'Manager') pot aprovar comentaris perquè siguin " -"visibles per al públic. Si desitja habilitar un comentari personalitzada de " -"flux de treball, vostè ha d'anar al panell de control de tipus." +msgstr "Si està seleccionat, els comentaris entraran en un estat \"pendent\" en què són invisibles per al públic. Un usuari amb permís 'Review comments' ('Reviewer' o 'Manager') pot aprovar comentaris perquè siguin visibles per al públic. Si desitja habilitar un comentari personalitzada de flux de treball, vostè ha d'anar al panell de control de tipus." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "Adreça a la qual s'enviaran les notificacions de moderador." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 msgid "help_moderator_notification_enabled" -msgstr "" -"Si està seleccionada, es notificarà per correu electrònic al moderador, dels " -"nous comentaris." +msgstr "Si està seleccionada, es notificarà per correu electrònic al moderador, dels nous comentaris." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" -msgstr "" -"Si està seleccionada, es mostrarà el retrat (o imatge) que hagi configurat " -"l'usuari en el seu perfil juntament amb el comentari." +msgstr "Si està seleccionada, es mostrarà el retrat (o imatge) que hagi configurat l'usuari en el seu perfil juntament amb el comentari." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" -msgstr "" -"Utilitzeu aquesta opció per escollir si el text del comentari ha de " -"transformar-se. Pot escollir entre 'Text sense format' i 'text " -"intel·ligent'. 'Text intel·ligent' converteix el text sense format en HTML " -"on els salts de línia i sangria es conserven, i les adreces web i de correu " -"electrònic es converteixen en enllaços." +msgstr "Utilitzeu aquesta opció per escollir si el text del comentari ha de transformar-se. Pot escollir entre 'Text sense format' i 'text intel·ligent'. 'Text intel·ligent' converteix el text sense format en HTML on els salts de línia i sangria es conserven, i les adreces web i de correu electrònic es converteixen en enllaços." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" -msgstr "" -"Si està seleccionada, els usuaris poden escollir si volen ser notificats " -"cada cop que s'afegeixi un nou comentari al contingut." +msgstr "Si està seleccionada, els usuaris poden escollir si volen ser notificats cada cop que s'afegeixi un nou comentari al contingut." #. Default: "Anonymous" -#: ../browser/comments.pt:74 ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anònim" @@ -376,7 +351,7 @@ msgid "label_anonymous_comments" msgstr "Permetre comentaris anònims" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "Habilitar correu electrònic anònim" @@ -386,7 +361,7 @@ msgid "label_apply" msgstr "Aplica" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -396,7 +371,7 @@ msgid "label_comment" msgstr "Comentari" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Els comentaris s'han desactivat" @@ -405,6 +380,11 @@ msgstr "Els comentaris s'han desactivat" msgid "label_delete" msgstr "Esborra" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -421,12 +401,12 @@ msgid "label_moderation_enabled" msgstr "Habilitar moderació de comentaris" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Correu electrònic del moderador" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Activa la notificació al moderador" @@ -436,12 +416,12 @@ msgid "label_publish" msgstr "Aprova" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "diu:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Mostra el retrat (o imatge) de l'autor" @@ -456,24 +436,22 @@ msgid "label_subject" msgstr "Tema" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Transformacions aplicades al text del comentari" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Activa les notificacions als usuaris" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" -msgstr "" -"S'ha publicat un comentari sobre el contingut ${title} en aquesta adreça: " -"${link}" +msgstr "S'ha publicat un comentari sobre el contingut ${title} en aquesta adreça: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "\"Un comentari sobre '${title}' s'ha publicat aquí: ${link}\n" @@ -492,16 +470,12 @@ msgstr "" #. Default: "enable the 'Comment Review Workflow' for the Comment content type" #: ../browser/moderation.pt:33 msgid "message_enable_comment_workflow" -msgstr "" -"Activa el 'Workflow de moderació de comentaris' per al tipus de contingut " -"'Comentari'" +msgstr "Activa el 'Workflow de moderació de comentaris' per al tipus de contingut 'Comentari'" #. Default: "Moderation workflow is disabled. You have to ${enable_comment_workflow} before you can moderate comments here." #: ../browser/moderation.pt:33 msgid "message_moderation_disabled" -msgstr "" -"La moderació està desactivada. Teniu que ${enable_comment_workflow} abans de " -"moderar els comentaris." +msgstr "La moderació està desactivada. Teniu que ${enable_comment_workflow} abans de moderar els comentaris." #. Default: "No comments to moderate." #: ../browser/moderation.pt:43 @@ -512,3 +486,4 @@ msgstr "No hi han comentaris per moderar." #: ../browser/moderation.pt:64 msgid "title_bulkactions" msgstr "Accions en bloc" + diff --git a/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po index 2339a07..b56910f 100644 --- a/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/cs/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Komentář byl přidán." @@ -30,40 +30,44 @@ msgstr "Přidat komentář" msgid "Anonymous Comments" msgstr "Anonymní komentáře" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Storno" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Změny byly uloženy" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Komentář byl schválen." -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Komentář byl odebrán." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -74,7 +78,7 @@ msgstr "Portét komentujícího" msgid "Commenting infrastructure for Plone" msgstr "Komentářový systém pro Plone" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -94,7 +98,7 @@ msgstr "" msgid "Disabled" msgstr "Zakázáno" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Nastavení komentářů" @@ -158,7 +162,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -170,7 +174,7 @@ msgstr "Notifikace emailem" msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Váš komentář čeká na schválení." @@ -225,7 +229,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 #, fuzzy msgid "comment_title" msgstr "${creator} k ${content}" @@ -276,24 +280,29 @@ msgid "help_anonymous_comments" msgstr "Je-li zaškrtnuto, nepřihlášení uživatelé mohou posílat komentáře. Doporučujeme použití Captcha, pokud povolíte tuto volbu." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Zde můžete povolit nebo zakázat Captcha pro komentáře. Pokud zde není žádná možnost k výběru, nainstalujte prosím balíček plone.formwidget.captcha nebo plone.formwidget.recaptcha, collective.akismet nebo collective.z3cform.norobots." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "Nekterá nastavení pro diskuse nejsou k dispozici v ovládacím panelu komentářů.\n" " Povolení komentářů pro konkrétní typ položek se provádí v ovládacím panelu Typy, kde zaškrtnete \"Povolit komentáře\".\n" " Pokud chcete povolit moderování komentářů, přejděte do ovládacích panelů Typy, vyberte typ položky \"Komentář\" a nastavte workflow na \"Schvalovací workflow pro komentáře\"." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -309,34 +318,34 @@ msgid "help_moderation_enabled" msgstr "Je-li zaškrtnuto, pakbudou komentáře moderované. Po zadání komentáře bude tento komentář ve stavu \"čeká na schválení\" a nebude viditelný nepřihlášeným návštěvníkům. Moderátor (uživatel, ktewrý má opravnění schvalovat komentáře) může takové komentáře schválit a tedy zviditelnit všem." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "Adresa, na kterou budou zasílány notifikační emaily moderátorlů" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Je-li zaškrtnuto, moderátor je upozorněn na komentáře, které vyžadují jeho zásah." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Je-li zaškrtnuto, je vedle komentáře zobrazen portrét autora komentáře." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "Zde můžete nastavit, zda mají být komentáře nějak upraveny. Je možné vybrat mezi Plain text (prostý, neupravený text) nebo \"Intelligent text\". Intelligent text konvertuje odkazy na aktivní linky a převádí text do HTML tak, jak je vidět na obrazovce (tedy se zachováním nových řádků a odsazení)." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Je-li zaškrtnuto, uživatelé se mohou rozhodnout zda si přejí být upozorněni na nové komentáře emailem." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anonym" @@ -346,7 +355,7 @@ msgid "label_anonymous_comments" msgstr "Povolit anonymní komentáře" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -356,7 +365,7 @@ msgid "label_apply" msgstr "Provést" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -366,7 +375,7 @@ msgid "label_comment" msgstr "Komentář" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Komentáře byly zakázány." @@ -375,6 +384,11 @@ msgstr "Komentáře byly zakázány." msgid "label_delete" msgstr "Odebrat" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -391,12 +405,12 @@ msgid "label_moderation_enabled" msgstr "Povolit moderování komentářů" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Email adresa moderátora" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Povolit emailovou notifikaci moderátorů" @@ -406,12 +420,12 @@ msgid "label_publish" msgstr "Schválit" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "píše:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Zobrazit portrét komentujícího" @@ -426,17 +440,17 @@ msgid "label_subject" msgstr "Předmět" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Transformace textu" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Povolit notifikaci uživatelů emailem" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" "Na adrese ${link} byl přidán komentář k položce '${title}'}\n" @@ -446,7 +460,7 @@ msgstr "" "---" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "Na adrese ${link} byl vložen komentář k položce '${title}'\n" diff --git a/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po index 8035c72..4dfe6b8 100644 --- a/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/da/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: plone.app.discussion\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Der er oprettet en kommentar." @@ -30,40 +30,44 @@ msgstr "Tilføj en kommentar" msgid "Anonymous Comments" msgstr "Anonyme kommentarer" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Afbryd" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Ændringer gemt" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Kommentar godkendt." -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Kommentar slettet." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -74,7 +78,7 @@ msgstr "Kommentar-billede" msgid "Commenting infrastructure for Plone" msgstr "Kommentar-funktionalitet til Plone" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -94,7 +98,7 @@ msgstr "Dato for den seneste, offentlige kommentar" msgid "Disabled" msgstr "Slået fra" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Indstilling for kommentarer" @@ -158,7 +162,7 @@ msgstr "Gruppen af unikke kommentatorer (brugernavne) fra published_comments" msgid "Total number of public comments on this item" msgstr "Det samlede antal offentlige kommentarer til dette element" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -170,7 +174,7 @@ msgstr "E-mail-notificering af brugere" msgid "Username of the commenter" msgstr "Kommentatorens brugernavn" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Din kommentar venter på godkendelse." @@ -225,7 +229,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 #, fuzzy msgid "comment_title" msgstr "${creator} på ${content}" @@ -276,21 +280,26 @@ msgid "help_anonymous_comments" msgstr "Hvis du krydser af, kan anonyme brugere skrive kommentarer uden at være logget ind. I så fald er det en god ide at bruge CAPTCHA for at forhindre spam." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Her kan du slå CAPTCHA til og fra for kommentarer. Installer plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet eller collective.z3cform.norobots, hvis der ikke er nogen valgmuligheder nedenfor." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "Du kan justere kommentarindstillingerne nedenfor. Bemærk, at der også er indstillinger andre steder, som påvirker kommentarer. For at slå kommentarer til for en bestemt indholdstype, så klik \"Typer\" på Kontrolpanelet og afkryds \"Tillad kommentarer\" for typen. For at slå modereringsworkflow til kommentarer, så vælg \"Kommentar\" under \"Typer\" på Kontrolpanelet og vælg workflowet \"Godkendelses-workflow for kommentarer\"" -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -306,34 +315,34 @@ msgid "help_moderation_enabled" msgstr "Hvis du krydser af, vil kommentarer automatisk bliver sat i en \"Afventer\"-tilstand, hvor de er usynlige for offentligheden. En bruger med rettigheder til at moderere kommentarer kan godkende kommentarer og gøre dem synlige for offentligheden." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "Adresse på den person, som skal modtage moderator-notificeringer." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Hvis du krydser af, får en moderator besked, hvis en kommentarer skal vurderes." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Hvis du krydser af, bliver der vist et billede af brugeren ved siden af kommentaren." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "Vælg, hvordan kommentartekster skal vises. Du kan vælge mellem \"Plan text\", \"Markdown\" og \"Intelligent text\". Plain text gør ingenting. Markdown fortolker teksten efter Markdown-standarden. Intelligent text oversætter teksten til HTML og bibeholder indrykninger, linjeskift og oversætter emails og webadresser til klikbare links." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Hvis den er slået til, kan brugere få besked om nye kommentarer over email." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anonym" @@ -343,7 +352,7 @@ msgid "label_anonymous_comments" msgstr "Slå anonym kommentering til" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -353,7 +362,7 @@ msgid "label_apply" msgstr "Udfør" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "CAPTCHA" @@ -363,7 +372,7 @@ msgid "label_comment" msgstr "Kommentar" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Kommentering er slået fra." @@ -372,6 +381,11 @@ msgstr "Kommentering er slået fra." msgid "label_delete" msgstr "Slet" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -388,12 +402,12 @@ msgid "label_moderation_enabled" msgstr "Slå kommentarmoderering til" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Email på moderator" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Slå moderatorer-notificering til" @@ -403,12 +417,12 @@ msgid "label_publish" msgstr "Godkend" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "siger:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Vis kommentator-billede" @@ -423,23 +437,23 @@ msgid "label_subject" msgstr "Emne" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Formattering af kommentar-tekst" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Slå bruger-notificering til" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 #, fuzzy msgid "mail_notification_message" msgstr "En kommentarer om '${title}' er blevet gemt her: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "En kommentar til '${title}' er blevet indsendt her: ${link}\n" diff --git a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po index 37a228f..041929f 100644 --- a/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/de/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Ein Kommentar wurde abgegeben." @@ -30,40 +30,44 @@ msgstr "Kommentar hinzufügen" msgid "Anonymous Comments" msgstr "Anonyme Kommentare" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Abbrechen" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Änderungen gespeichert" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Kommentar zur Veröffentlichung freigegeben." -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Kommentar gelöscht" -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -74,7 +78,7 @@ msgstr "Porträt des Benutzers" msgid "Commenting infrastructure for Plone" msgstr "" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -94,7 +98,7 @@ msgstr "Datum des neuesten öffentlichen Kommentars" msgid "Disabled" msgstr "Ausgeschaltet" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Kommentierungseinstellungen" @@ -158,7 +162,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "Summe der veröffentlichten Kommentare zu diesem Artikel" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "Transformation '%s' => '%s' ist nicht verfügbar." @@ -170,7 +174,7 @@ msgstr "E-Mail-Benachrichtigungen für Benutzer" msgid "Username of the commenter" msgstr "Benutzername des Kommentierenden" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Ihr Kommentar muss noch vom Moderator freigegeben werden." @@ -225,7 +229,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "${author_name} zu ${content}" @@ -275,18 +279,23 @@ msgid "help_anonymous_comments" msgstr "Wenn Sie diese Einstellung aktivieren, können anonyme Benutzer Kommentare abgeben. Es ist empfehlenswert, dann auch Captchas zu aktivieren." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "Wenn Sie diese Einstellung aktivieren, müssen anonyme Benutzer ihre E-Mail-Adresse angeben." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 #, fuzzy msgid "help_captcha" msgstr "Wenn Sie diese Einstellung aktivieren, wird mit Hilfe der Captcha-Validierung überprüft, ob die Kommentare von einem echten Benutzer oder von einem automatisierten Skript stammen. Falls Sie die Option nicht einschalten können, fehlt evtl. ein benötigtes Programmmodul. Stellen Sie sicher, dass entweder plone.formwidget.captcha oder plone.formwidget.recaptcha installiert ist." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 #, fuzzy msgid "help_discussion_settings_editform" msgstr "" @@ -294,7 +303,7 @@ msgstr "" "\n" "Um die Moderation von Kommentaren zu aktivieren, wählen Sie den Artikeltyp 'Kommentar' aus und wählen Sie als neuen Arbeitsablauf 'Arbeitsablauf für moderierte Kommentare'." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -311,34 +320,34 @@ msgid "help_moderation_enabled" msgstr "Falls ausgewählt werden Kommentare in einem für die Öffentlichkeit unsichtbaren Schwebezustand gehalten, bis sie ein Benutzer mit der 'Review comments' Berechtigung ('Reviewer' or 'Manager') genehmigt und damit für die Öffentlichkeit sichtbar macht. Wenn Sie einen angepassten Arbeitsablauf für Kommentare einstellen wollen, so geht das mit dem Menu unter Artikeltypen." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "E-Mail Adresse an welche die Moderatoren-Benachrichtigungen gesendet werden." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Falls ausgewählt erhält der Moderator eine E-Mail, wenn ein Kommentar Aufmerksamkeit braucht. Die E-Mail-Adresse des Moderators kann weiter unten angegeben werden." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Wenn Sie diese Einstellung aktivieren, wird das Porträt des kommentierenden Benutzers neben dem Kommentar angezeigt." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "Diese Einstellung wählen, wenn eine Transformation in irgend einer Art und Weise gewünscht ist. Sie können zwischen 'Plain text' und 'Intelligent text' wählen. 'Intelligent text' wandelt Plain Text in HTML um, dabei werden Zeilenumbrüche und Einrückungen beibehalten sowie Weblinks und E-Mail-Adressen in klickbare Links verwandelt." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Wenn Sie diese Einstellung auswählen, können Benutzer angeben, dass sie über neue Kommentare per E-Mail informiert werden möchten." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anonymer Benutzer" @@ -348,7 +357,7 @@ msgid "label_anonymous_comments" msgstr "Anonyme Kommentare" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "E-Mail Feld für anonyme Kommentare einschalten" @@ -358,7 +367,7 @@ msgid "label_apply" msgstr "Anwenden" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -368,7 +377,7 @@ msgid "label_comment" msgstr "Kommentar" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Kommentare wurden abgeschaltet." @@ -377,6 +386,11 @@ msgstr "Kommentare wurden abgeschaltet." msgid "label_delete" msgstr "Löschen" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -393,12 +407,12 @@ msgid "label_moderation_enabled" msgstr "Moderation für Kommentare einschalten" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "E-Mail Adresse des Moderators" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Email-Benachrichtigungen für Moderatoren aktivieren" @@ -408,12 +422,12 @@ msgid "label_publish" msgstr "Veröffentlichen" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "sagt" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Zeige das Portrait des Kommentators" @@ -428,17 +442,17 @@ msgid "label_subject" msgstr "Betreff" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Text transformationen" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "E-Mail-Benachrichtigungen für Benutzer aktivieren" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" "Ein Kommentar zu '${title}' wurde hier abgegeben: ${link}\n" @@ -448,7 +462,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "Ein Kommentar zu '${title}' wurde hier abgegeben: ${link}\n" diff --git a/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po index a9f8497..0ba58f7 100644 --- a/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/es/LC_MESSAGES/plone.app.discussion.po @@ -16,7 +16,7 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Is-Fallback-For: es-ar es-bo es-cl es-co es-cr es-do es-ec es-es es-sv es-gt es-hn es-mx es-ni es-pa es-py es-pe es-pr es-us es-uy es-ve\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Comentario añadido." @@ -32,16 +32,20 @@ msgstr "Añadir un comentario" msgid "Anonymous Comments" msgstr "Comentarios anónimos" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Cancelar" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Cambios guardados" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Comentario aprobado." @@ -57,7 +61,7 @@ msgstr "Nombre completo del autor del comentario" msgid "Comment author user name" msgstr "Nombre de usuario del autor del comentario" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Comentario eliminado." @@ -96,7 +100,7 @@ msgstr "Fecha del comentario publico más reciente" msgid "Disabled" msgstr "Desactivado" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Ajustes de discusión" @@ -160,7 +164,7 @@ msgstr "El conjunto de comentaristas únicos (nombres de usuario) de published_c msgid "Total number of public comments on this item" msgstr "Total de comentarios públicos en este artículo" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "Transformada '%s' => '%s' no disponible." @@ -172,7 +176,7 @@ msgstr "Notificaciones de correo para usuarios" msgid "Username of the commenter" msgstr "Nombre de usuario del comentarista" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Su comentario está pendiente de aprobación por el moderador." @@ -227,7 +231,7 @@ msgid "comment_edit_notification" msgstr "Se ha editado el comentario" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "${author_name} sobre ${content}" @@ -277,29 +281,33 @@ msgid "help_anonymous_comments" msgstr "Si está seleccionado, los usuarios anónimos podrán añadir comentarios sin tener que iniciar una sesión. Recomendamos encarecidamente que utilice una solución Captcha para evitar el spam si esta opción está activada." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "Si se selecciona, el usuario anónimo tendrá que proporcionar su correo electrónico." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Utilice esta opción para activar o desactivar Captcha para los comentarios. Instale plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet o collective.z3cform.norobots si no tiene ninguna opción disponible." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "Algunos de los ajustes sobre los comentarios no están en el Panel de Control de Discusiones.\n" "Para activar comentarios para un tipo de objeto específico, vaya al Panel de Control de Tipos y elija 'Activar Comentarios'.\n" "Para activar el workflow de moderación de comentarios, vaya al Panel de Control de Tipos, elija 'Comentario' y elija el 'Workflow de Moderación de Comentarios'." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 +#, fuzzy msgid "help_edit_comment_enabled" -msgstr "" -"Si se selecciona, permite la edición y eliminación de comentarios " -"a los usuarios con el permiso 'Edita comentarios'" +msgstr "Si se selecciona, permite la edición y eliminación de comentarios a los usuarios con el permiso 'Edita comentarios'" #. Default: "If selected, users are able to post comments on the site. Though, you have to enable comments for specific content types, folders or content objects before users will be able to post comments." #: ../interfaces.py:202 @@ -312,33 +320,33 @@ msgid "help_moderation_enabled" msgstr "Si está seleccionado, los comentarios entraran en un estado 'Pendiente' en el cual ellos no son visibles para el público. Un usuario con el permiso 'Revisar comentarios' ('Revisor' o 'Administrador') puede aprobar los comentarios y hacerlos visibles al público. Si desea habilitar un workflow de comentarios diferente, puede hacerlo a través de la opción 'Configuración de Tipos' en el panel de control." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "La dirección de correo electrónico a la cual se enviarán las notificaciones de moderación." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 msgid "help_moderator_notification_enabled" msgstr "Si está seleccionado, se notifica al moderador cuando un nuevo comentario requiere de su atención. La dirección de correo electrónico del moderador se puede encontrar en la opción 'Configuración de correo' del panel de control (Dirección del remitente del sitio)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Si está seleccionado, se mostrará una imagen del autor junto al comentario." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "Elija si el texto de los comentario será transformado de algún modo. Puede seleccionar entre 'Texto plano' y 'Texto inteligente'. 'Texto inteligente' convierte el texto plano en HTML, conservando los cambios de línea y la indentación, y transformando las direcciones web y de correo electrónico en vínculos." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Si está seleccionado, los usuarios pueden solicitar recibir avisos por correo cuando haya nuevos comentarios." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anónimo" @@ -348,7 +356,7 @@ msgid "label_anonymous_comments" msgstr "Permitir comentarios anónimos" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "Habilitar campo email de anónimos" @@ -358,7 +366,7 @@ msgid "label_apply" msgstr "Aplicar" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -368,7 +376,7 @@ msgid "label_comment" msgstr "Comentario" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Los comentarios han sido inhabilitados." @@ -377,6 +385,11 @@ msgstr "Los comentarios han sido inhabilitados." msgid "label_delete" msgstr "Borrar" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -393,12 +406,12 @@ msgid "label_moderation_enabled" msgstr "Habilitar la moderación de comentarios" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Dirección de correo electrónico del moderador" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Activar notificación al moderador" @@ -408,12 +421,12 @@ msgid "label_publish" msgstr "Aprobar" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "dice:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Mostrar imagen del autor" @@ -428,17 +441,17 @@ msgid "label_subject" msgstr "Tema" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Transformaciones aplicadas al texto del comentario" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Activar notificación de correo a los usuarios" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" "Se ha agregado un comentario a ${title} aquí: ${link}\n" @@ -448,7 +461,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "Se ha agregado un comentario a '${title}' aquí: ${link}\n" @@ -481,4 +494,5 @@ msgstr "No hay nada para moderar." #. Default: "Bulk Actions" #: ../browser/moderation.pt:64 msgid "title_bulkactions" -msgstr "Acciones conjuntas" \ No newline at end of file +msgstr "Acciones conjuntas" + diff --git a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po index bad2b9c..a078d11 100644 --- a/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/eu/LC_MESSAGES/plone.app.discussion.po @@ -15,7 +15,7 @@ msgstr "" "Domain: DOMAIN\n" "X-Poedit-Language: Basque\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Erantzun bat argitaratu da." @@ -31,40 +31,44 @@ msgstr "Erantzuna gehitu" msgid "Anonymous Comments" msgstr "Erantzun anonimoak" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Utzi" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Aldaketak gordeta" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Erantzuna onartuta." -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Erantzuna ezabatuta." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -75,7 +79,7 @@ msgstr "Erantzuna eman duenaren irudia." msgid "Commenting infrastructure for Plone" msgstr "Ploneren Erantzunen Azpiegitura" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -95,7 +99,7 @@ msgstr "Azken erantzunaren data" msgid "Disabled" msgstr "Desaktibatuta" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Eztabaidaren ezarpenak" @@ -159,7 +163,7 @@ msgstr "Erantzun-emaleen erabiltzaile izenak" msgid "Total number of public comments on this item" msgstr "Elementu honen erantzun publiko kopurua" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "'%s' => '%s' eraldaketa ez dago erabilgarri." @@ -171,7 +175,7 @@ msgstr "E-posta abisuak" msgid "Username of the commenter" msgstr "Erantzuna utzi duenaren erabiltzaile-izena" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Zure erantzuna moderazio kolan dago." @@ -226,7 +230,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "${content} - ${creator}" @@ -276,24 +280,29 @@ msgid "help_anonymous_comments" msgstr "Aukeratuta badago, erabiltzaile anonimoek erantzunak gehitu ditzakete login egin gabe. Berariaz gomendatzen dizugu Captcha kontrolen bat aktibatzea anonimoen erantzunak baimentzen badituzu." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "Aukeratuta badago, erabiltzaile anonimoek eposta helbidea idatzi beharko dute" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Erabili aukera hau Captcha aktibatu edo desaktibatzeko. Instalatu plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet edo collective.z3cform.norobots aukerarik ez baldin badago." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "Erantzunei dagozkien ezarpen batzuk ez daude Eztabaiden Kontrol Panelean.\n" "Elementu-mota jakin bati erantzunak aktibatzeko, joan elementu-moten kontrol panelera, aukeratu elementua eta aktibatu 'Erantzunak Baimendu'.\n" "Erantzunen Moderazio Workflowa aktibatzeko, joan elementu-moten kontrol panelera, aukeratu 'Erantzuna' eta ezarri 'Erantzunen Moderazio Workflowa'." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -309,34 +318,34 @@ msgid "help_moderation_enabled" msgstr "Aukeratuta badago, erantzuna 'Zain' izeneko egoeran geldituko da eta ez da argitaratuko. 'Erantzunak errebisatu' baimena duten erabiltzaileek ('Zuzentzailea' edo 'Kudeatzailea') argitaratu ditzakete albisteak. Erantzunen worfklowa pertsonalizatu nahi baduzu, elementu-moten kontrol panelera joan zaitez." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "Moderatzailearen notifikazioak bidali behar diren helbidea." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Aukeratuta badago, moderatzaileari e-posta abisua helduko zaio erantzun bat gehitzean. Moderatzailearen e-posta atariaren E-postaren konfigurazioan dago (Atariaren 'Nork' helbidea)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Aukeratuta badago, erantzuna eman duenaren irudi bat agertuko da testuaren ondoan." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "Erabili aukera hau erantzunaren testua nolabait eraldatu behar bada. 'Testu arrunta' edo 'Testu argia'ren artean aukeratu dezakezu. 'Testu argia'-k testu arrunta HTML bihurtzen du lerro saltoak eta espazioak mantenduz, eta web helbideak eta e-postak klikagarri eginez." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Aukeratuta badago, erabiltzaileek euren erantzunen erantzunak e-postaz jasotzea aktibatu dezakete." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anonimoak" @@ -346,7 +355,7 @@ msgid "label_anonymous_comments" msgstr "Aktibatu erabiltzaile anonimoen erantzunak" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "Aktibatu anonimoentzat eposta eremua" @@ -356,7 +365,7 @@ msgid "label_apply" msgstr "Aplikatu" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -366,7 +375,7 @@ msgid "label_comment" msgstr "Erantzuna" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Ezin da erantzunik gehitu." @@ -375,6 +384,11 @@ msgstr "Ezin da erantzunik gehitu." msgid "label_delete" msgstr "Ezabatu" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -391,12 +405,12 @@ msgid "label_moderation_enabled" msgstr "Erantzunen moderazioa aktibatu." #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Moderatzailearen e-posta helbidea" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Aktibatu moderatzaileari e-postaz abisatzea" @@ -406,12 +420,12 @@ msgid "label_publish" msgstr "Argitaratu" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "dio:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Erantzuna eman duenaren irudia erakutsi" @@ -426,17 +440,17 @@ msgid "label_subject" msgstr "Gaia" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Erantzunari aplikatu beharreko transformazioa" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Aktibatu erabiltzaileek e-postaz jakinaraztea" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" "Erantzuna berria:Izenburua: ${title} \n" @@ -446,7 +460,7 @@ msgstr "" "--" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "Erantzun berria:\n" diff --git a/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po index 07e5c6c..f6cd314 100644 --- a/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/fi/LC_MESSAGES/plone.app.discussion.po @@ -16,7 +16,7 @@ msgstr "" "X-Poedit-Language: Finnish\n" "X-Poedit-Country: FINLAND\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "" @@ -32,40 +32,44 @@ msgstr "Lisää viesti" msgid "Anonymous Comments" msgstr "Viestit tunnistamattomilta käyttäjiltä" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Peru" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Viesti hyväksytty." -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Viesti poistettu." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -76,7 +80,7 @@ msgstr "Kirjoittajan kuva" msgid "Commenting infrastructure for Plone" msgstr "Plone:n kommentointi- ja keskustelutoiminnot" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -96,7 +100,7 @@ msgstr "" msgid "Disabled" msgstr "Ei käytössä" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Kommentointi- ja keskustelutoimintojen asetukset" @@ -160,7 +164,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -172,7 +176,7 @@ msgstr "" msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Viestisi on vastaanotettu. Se tulee näkyviin heti kun ylläpito on hyväksynyt sen julkaistavaksi." @@ -227,7 +231,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "" @@ -277,22 +281,27 @@ msgid "help_anonymous_comments" msgstr "Jos viestit tunnistamattomilta käyttäjiltä sallitaan, on erittäin suositeltavaa käyttää automaattisten roskapostittimien estintä (engl. captcha)." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 #, fuzzy msgid "help_captcha" msgstr "Roskaviestiautomaattien estimen (engl. captcha) käyttö. Jos mitään estintä ei ole valittavissa, järjestelmään ei ole asennettu mitään estintä. Soveltuvia estimiä ovat plone.formwidget.captcha ('Captcha') ja plone.formwidget.recaptcha ('ReCapthca')." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "Tarkista myös keskusteluun / kommentointiin liittyvät asetukset sisältötyyppien hallintapaneelissa ('Sisältötyypit')." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -309,34 +318,34 @@ msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Tarkistajana toimivalle ylläpitäjälle ilmoitetaan toimenpiteitä edellyttävistä viesteistä." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Näytetäänkö kirjoittajan kuva viestin yhteydessä." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "" @@ -346,7 +355,7 @@ msgid "label_anonymous_comments" msgstr "Salli viestit tunnistamattomilta käyttäjiltä" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -356,7 +365,7 @@ msgid "label_apply" msgstr "toteuta" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Roskaviestien estin" @@ -366,7 +375,7 @@ msgid "label_comment" msgstr "Viesti" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "" @@ -375,6 +384,11 @@ msgstr "" msgid "label_delete" msgstr "Poista" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -391,12 +405,12 @@ msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Ilmoita viesteistä sähköpostitse ylläpitäjälle" @@ -406,12 +420,12 @@ msgid "label_publish" msgstr "Hyväksy" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Näytä kirjoittajan kuva" @@ -426,22 +440,22 @@ msgid "label_subject" msgstr "Aihe" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po index 727f7ad..ca29768 100644 --- a/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/fr/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Un commentaire a été posté." @@ -30,40 +30,44 @@ msgstr "Ajouter un commentaire" msgid "Anonymous Comments" msgstr "Commentaires anonymes" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Annuler" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Modifications enregistrées" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Commentaire approuvé." -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Commentaire supprimé." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -74,7 +78,7 @@ msgstr "Portrait de l'utilisateur" msgid "Commenting infrastructure for Plone" msgstr "Infrastructure pour déposer des commentaires." -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -94,7 +98,7 @@ msgstr "Date du dernier commentaire public" msgid "Disabled" msgstr "Désactivé" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Paramètres des discussions" @@ -158,7 +162,7 @@ msgstr "L'ensemble des commentateurs uniques des commentaires publiés (identifi msgid "Total number of public comments on this item" msgstr "Nombre total de commentaires publics sur cet élément" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -170,7 +174,7 @@ msgstr "Notification des utilisateurs par courriel" msgid "Username of the commenter" msgstr "Identifiant de l'auteur du commentaire" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Votre commentaire attend d'être modéré." @@ -225,7 +229,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "${author_name} sur ${content}" @@ -275,23 +279,28 @@ msgid "help_anonymous_comments" msgstr "Si activé, les utilisateurs anonymes peuvent poster des commentaires sans se connecter. Il est fortement recommandé d'utiliser un captcha pour prévenir du spam si cette option est activée." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "Si cette case est cochée, les utilisateurs anonymes devront donner leur email." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Utilisez cette option pour activer la validation par captcha pour les commentaires. Installez plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet ou collective.z3cform.norobots s'il n'y a aucune option de disponible." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "Certaines options liées aux discussions ne sont pas dans \"Paramètres des discussions\".\n" "Pour activer les commentaires pour un type de contenu spécifique, allez dans \"Paramètres des types\", choisissez \"Commentaire\" et sélectionnez le workflow \"Workflow de modération des commentaires\"." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -307,34 +316,34 @@ msgid "help_moderation_enabled" msgstr "Si cette case est cochée, les commentaires ajoutés seront mis 'en attente' et seront invisibles pour les visiteurs. Un utilisateur ayant la permission 'Review comments' (Modérateur ou Administrateur) peut approuver les commentaires pour les rendre visibles. Vous pouvez choisir un workflow spécifique pour les commentaires depuis le menu de configuration des types de contenu." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "Addresse à laquelle les notifications de modération seront envoyées." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Si activé, le modérateur est notifié si un commentaire requiert une attention particulière. Le courriel du modérateur est défini sur la page 'Envoi de courriels' de la configuration du site (Adresse d'expéditeur des courriels)." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Si activé, le portrait de l'utilisateur apparait à côté du commentaire." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "Choisissez si le texte des commentaires doit être éventuellement transformé. Vous pouvez choisir entre 'Plain text' et 'Intelligent text'. Ce dernier convertit le texte en HTML, en préservant notamment les retours chariots et l'indentation, et en transformant les url et les addresses courriel en liens cliquables." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Si vous cochez cette case, les utilisateurs pourront choisir d'être avertis par courriel des nouveaux commentaires." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anonyme" @@ -344,7 +353,7 @@ msgid "label_anonymous_comments" msgstr "Activer les commentaires anonymes" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "Activer le champ email pour les anonymes" @@ -354,7 +363,7 @@ msgid "label_apply" msgstr "Appliquer" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -364,7 +373,7 @@ msgid "label_comment" msgstr "Commentaire" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Les commentaires ont été désactivés." @@ -373,6 +382,11 @@ msgstr "Les commentaires ont été désactivés." msgid "label_delete" msgstr "Supprimer" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -389,12 +403,12 @@ msgid "label_moderation_enabled" msgstr "Activer la modération des commentaires" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Addresse courriel du modérateur" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Activer la notification du modérateur par courriel" @@ -404,12 +418,12 @@ msgid "label_publish" msgstr "Approuver" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "a écrit :" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Afficher le portrait de l'utilisateur" @@ -424,17 +438,17 @@ msgid "label_subject" msgstr "Sujet" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Transformation du texte du commentaire" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Activer la notification par courriel des utilisateurs" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" "Un commentaire a été ajouté sur '${title}' à cette addresse : ${link}\n" @@ -444,7 +458,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "Un commentaire a été ajouté sur '${title}' à cette addresse : ${link}\n" diff --git a/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po index eb08564..addc226 100644 --- a/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/it/LC_MESSAGES/plone.app.discussion.po @@ -18,7 +18,7 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Is-Fallback-For: it-it it-ch it-sm it-hr it-si\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Un commento è stato inserito." @@ -34,40 +34,44 @@ msgstr "Aggiungi un commento" msgid "Anonymous Comments" msgstr "Commenti Anonimi" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Annulla" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Modifiche salvate" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Commento approvato." -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "Email dell'autore del commento" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "Nome dell'autore del commento" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "Username dell'autore del commento" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Commento eliminato." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "Id commento" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "Testo commento" @@ -78,7 +82,7 @@ msgstr "Immagine Commentatore" msgid "Commenting infrastructure for Plone" msgstr "Infrastruttura dei commenti per Plone" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "Commenti" @@ -98,7 +102,7 @@ msgstr "Data del commento pubblico più recente" msgid "Disabled" msgstr "Disabilitato" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Impostazioni dei commenti" @@ -162,7 +166,7 @@ msgstr "La lista di commentatori unici (username) dei commenti pubblicati" msgid "Total number of public comments on this item" msgstr "Numero totale di commenti pubblicati per questo contenuto" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "Trasform '%s' => '%s' non disponibile." @@ -174,7 +178,7 @@ msgstr "Notifiche utenti via e-mail" msgid "Username of the commenter" msgstr "Username dell'autore del commento" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Il tuo commento è in attesa di approvazione" @@ -229,7 +233,7 @@ msgid "comment_edit_notification" msgstr "Il commento è stato modificato" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "${author_name} su ${content}" @@ -279,25 +283,31 @@ msgid "help_anonymous_comments" msgstr "Se selezionato, gli utenti anonimi saranno in grado di inserire commenti senza autenticazione. E' altamente consigliato l'uso di captcha to prevenire spam se questa impostazione viene abilitata." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "Se selezionato, gli utenti anonimi dovranno fornire la loro email." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Usa questa impostazione per abilitare o disabilitare la validazione tramite captcha. Se nessuna opzione di captcha è disponibile, installa plone.formwidget.captcha o plone.formwidget.recaptcha." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "Alcune impostazioni legate ai commenti non sono nel Pannello di controllo commenti.\n" "Per abilitare i commenti per uno specifico tipo di contenuto, vai al Pannello dei Tipi di Contenuto per il tipo specifico e scegli 'abilita moderazione'.\n" "Per abilitare il workflow per la moderazione dei commenti, vai al Pannello dei Tipi di Contenuto, scegli \"Comment\" e imposta il workflow \"Comment Review Workflow\"." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 +#, fuzzy msgid "help_edit_comment_enabled" msgstr "Se selezionato, verrà abilitato il supporto alla modifica dei commenti da parte degli utenti che hanno il permesso 'Edit comments'." @@ -312,33 +322,33 @@ msgid "help_moderation_enabled" msgstr "Se selezionato, i commenti verranno creati in stato 'In attesa' in cui sono non sono visibili pubblicamente. Un utento con il permesso 'Revisiona i commenti' ('Revisore' o 'Manager') possono approvare i commenti per renderli pubblici. Se si vuole abilitare un workflow personalizzato per i commenti, bisogna andare nel pannello di controllo dei tipi." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "Indirizzo a cui verranno spedite le notifiche per la moderazione." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 msgid "help_moderator_notification_enabled" msgstr "Se selezionato il moderatore riceverà una notifica se il commento necessiterà della sua attenzione. L'indirizzo email del moderatore può essere impostato nel campo sottostante." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Se selezionato, un'immagine dell'utente verrà mostrata a fianco dei commenti." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "Utilizzare questa impostazione per scegliere se il testo del commento deve essere trasformato in qualche modo. E' possibile scegliere tra 'Plain text' e 'Testo intelligente'. 'Testo intelligente' converte il testo in HTML dove le interruzioni di linea e le indentazioni vengono preservate, e gli indirizzi web o email vengono trasformati in collegamenti cliccabili." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Se selezionato, gli utenti possono scegliere di essere notificati ad ogni nuovo commenti via e-mail." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anonimo" @@ -348,7 +358,7 @@ msgid "label_anonymous_comments" msgstr "Abilita i commenti agli utenti anonimi" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "Abilita campo email per utenti anonimi" @@ -358,7 +368,7 @@ msgid "label_apply" msgstr "Applica" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -368,7 +378,7 @@ msgid "label_comment" msgstr "Commento" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "I commenti sono stati disabilitati." @@ -377,6 +387,11 @@ msgstr "I commenti sono stati disabilitati." msgid "label_delete" msgstr "Elimina" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -393,12 +408,12 @@ msgid "label_moderation_enabled" msgstr "Abilita la moderazione dei commenti" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Indirizzo email del moderatore" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Abilita le notifiche ai moderatori" @@ -408,12 +423,12 @@ msgid "label_publish" msgstr "Approva" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr ":" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Visualizza le immagini dei commentatori" @@ -428,17 +443,17 @@ msgid "label_subject" msgstr "Oggetto" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Transformazioni testo del commento" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Abilita notifica via e-mail" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" "Un commento a '${title}' è stato inserito qui: ${link}\n" @@ -448,7 +463,7 @@ msgstr "" "---" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "Un commento su '${title}' è stato aggiunto qui: ${link}\n" diff --git a/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po index 3f698d3..5537c95 100644 --- a/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ja/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "コメントが投稿されました" @@ -30,40 +30,44 @@ msgstr "コメントを追加" msgid "Anonymous Comments" msgstr "無名コメント" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "取り消す" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "変更が保存されました" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "コメントが承認されました" -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "コメントが削除されました" -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -74,7 +78,7 @@ msgstr "コメント者の画像" msgid "Commenting infrastructure for Plone" msgstr "Ploneのコメント基盤" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -94,7 +98,7 @@ msgstr "" msgid "Disabled" msgstr "無効になりました" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "議論の設定" @@ -158,7 +162,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -170,7 +174,7 @@ msgstr "ユーザへのメール通知" msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "コメントは司会の承認を待ちます" @@ -225,7 +229,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 #, fuzzy msgid "comment_title" msgstr "${creator} が ${content} にコメント" @@ -276,24 +280,29 @@ msgid "help_anonymous_comments" msgstr "選ばれると、ログインせずに無名ユーザがコメントを投稿できるようになります。もしこの設定が有効にされるなら、キャプチャを使ってスパムを防ぐ解決策をとることをお勧めします。" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "コメントでのキャプチャ検査を有効にするか無効にするかを設定するのにこれを使います。もし選択できないようになっていたら、 plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet または collective.z3cform.norobots をインストールしてください。" +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "議論に関係するいくつかの設定は、議論コントロールパネルに置かれていません。\n" "特定のコンテンツタイプに対してコメントを有効にするには、タイプコントロールパネルに行ってそのコンテンツタイプを選び、「コメントを許す」を選びます。\n" "コメントに対してモデレーションワークフローを有効にするには、タイプコントロールパネルに行き、「コメント」を選び、ワークフローを「コメント審査ワークフロー」に設定します。" -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -309,34 +318,34 @@ msgid "help_moderation_enabled" msgstr "選ばれると、コメントは投稿されると一般公衆からは見えない「保留」状態になります。「コメントを審査(Review comments}」パーミッションを持つユーザ、つまり審査員あるいは管理者がコメントを一般に見えるように承認することができます。カスタムコメントワークフローを有効にしたいなら、タイプコントロールパネルに行く必要があります。" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "モデレータへの通知が送られる送付先アドレス" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "選ばれると、コメントが注意を要するものであるかどうか、モデレータは通知を受けるようになります。モデレータのメールアドレスはメール設定コントロールパネルの中のサイト「差出人」アドレスです。" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "選ばれると、コメントの隣にユーザの画像が見えるようになります。" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "コメントテキストがなんらかの形で変換されるべきかどうかを選ぶのに、この設定を使います。「プレーンテキスト」と「インテリジェントテキスト」の間で選べるようになります。「インテリジェントテキスト」はプレーンテキストをHTMLに変換します。改行とインデントは温存され、Webアドレスやメールアドレスはクリッカブルリンクになります。" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "選ばれると、新しいコメントをメールによって通知してもらうように、ユーザが選べるようになります。" #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "無名" @@ -346,7 +355,7 @@ msgid "label_anonymous_comments" msgstr "無名コメントを有効にする" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -356,7 +365,7 @@ msgid "label_apply" msgstr "適用" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "キャプチャ" @@ -366,7 +375,7 @@ msgid "label_comment" msgstr "コメント" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "コメント機能が無効になりました" @@ -375,6 +384,11 @@ msgstr "コメント機能が無効になりました" msgid "label_delete" msgstr "削除" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -391,12 +405,12 @@ msgid "label_moderation_enabled" msgstr "コメントのモデレーションを有効にする" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "モデレータのメールアドレス" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "モデレータへのメール通知を有効にする" @@ -406,12 +420,12 @@ msgid "label_publish" msgstr "承認" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "曰く:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "コメント者の画像を見せる" @@ -426,23 +440,23 @@ msgid "label_subject" msgstr "題目" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "コメントテキスト変換" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "ユーザへのメール通知を有効にする" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 #, fuzzy msgid "mail_notification_message" msgstr "'${title}' へのコメントが、ここに投稿されました: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po index e18e853..f91aa4a 100644 --- a/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/nl/LC_MESSAGES/plone.app.discussion.po @@ -15,7 +15,7 @@ msgstr "" "Domain: plone.app.discussion\n" "Language: nl\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Commentaar is geplaatst" @@ -31,40 +31,44 @@ msgstr "Voeg opmerking toe" msgid "Anonymous Comments" msgstr "Anoniem commentaar" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Annuleren" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Wijzigingen opgeslagen" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Commentaar goedgekeurd" -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Commentaar verwijderd" -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -75,7 +79,7 @@ msgstr "Profielfoto commentator" msgid "Commenting infrastructure for Plone" msgstr "Reactie infrastructuur voor Plone" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -95,7 +99,7 @@ msgstr "" msgid "Disabled" msgstr "Uitgeschakeld" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Discussie instellingen" @@ -159,7 +163,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -171,7 +175,7 @@ msgstr "Gebruker E-mail Notificatie" msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Je commentaar zal geplaatst worden na goedkeuring." @@ -226,7 +230,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 #, fuzzy msgid "comment_title" msgstr "${creator} over ${content}" @@ -277,21 +281,26 @@ msgid "help_anonymous_comments" msgstr "Indien geselecteerd, anonieme bezoekers kunnen commentaar achterlaten zonder in te loggen. Het is aanbevolen om de captcha-oplossing te gebruiken om spam te voorkomen als deze optie is ingeschakeld." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Indien geselecteerd, Captcha validatie wordt gebruikt voor het commentaar. Installeer plone.formwidget of plone.formwidget.recaptcha als er geen opties beschikbaar zijn." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "Sommige discussie instellingen staan niet op deze pagina. Om commentaar in te schakelen voor een specifiek content-type, ga naar het Typen instellingenscherm van het betreffende type en kies 'commentaar toestaan'. Om de moderatie-workflow in te schakelen, ga naar het Typen instellingenscherm en kies het type 'Comment' stel de 'Comment Review Workflow' in." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -307,34 +316,34 @@ msgid "help_moderation_enabled" msgstr "Indien geselecteerd, de moderator zal ingelicht worden als een commentaar aandacht nodig heeft." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "Emailadres van de moderator naar wie een notificatie zal worden gestuurd." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Indien geselecteerd, de moderator zal ingelicht worden als een commentaar aandacht nodig heeft." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Indien geselecteerd, de profielfoto van een gebruiker wordt naast het commentaar getoond." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "Gebruik deze instelling om ervoor te kiezen of de commentaar tekst getransformeerd moet worden. U kunt kiezen uit 'Platte tekst' en 'Intelligente tekst'. 'Intelligente tekst' zet platte tekst om in HTML waarbij nieuwe regels en inspringen worden gehandhaaft, en waarbij web en e-mail adressen in klikbare links worden omgezet." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Indien geselecteerd kunnen gebruikers ervoor kiezen per e-mail bericht te ontvangen van nieuwe commentaar." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anoniem" @@ -344,7 +353,7 @@ msgid "label_anonymous_comments" msgstr "Anoniem commentariëren inschakelen" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -354,7 +363,7 @@ msgid "label_apply" msgstr "Toepassen" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -364,7 +373,7 @@ msgid "label_comment" msgstr "Commentaar" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Commentaar is uitgeschakeld" @@ -373,6 +382,11 @@ msgstr "Commentaar is uitgeschakeld" msgid "label_delete" msgstr "Verwijderen" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -389,12 +403,12 @@ msgid "label_moderation_enabled" msgstr "Moderatie is ingeschakeld" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Moderator emailadres" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Notificatie voor moderator inschakelen" @@ -404,12 +418,12 @@ msgid "label_publish" msgstr "Publiceren" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "zegt:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Toon portret commentator" @@ -424,22 +438,22 @@ msgid "label_subject" msgstr "Onderwerp" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Reactie tekst transformatie" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Gebruikers-notificatie ingeschakeld" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "Een commentaar op '${title}' is geplaatst: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "Commentaar op '${title}' is geplaatst: ${link}" diff --git a/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po index 2066853..8d99fde 100644 --- a/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/no/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "" @@ -30,40 +30,44 @@ msgstr "Legg til en kommentar" msgid "Anonymous Comments" msgstr "Anonym kommentar" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Avbryt" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Kommentaren er godkjent" -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Kommentaren er slettet" -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -74,7 +78,7 @@ msgstr "Forfatterbilde" msgid "Commenting infrastructure for Plone" msgstr "" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -94,7 +98,7 @@ msgstr "" msgid "Disabled" msgstr "Slått av" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Innstillinger for kommentarer" @@ -158,7 +162,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -170,7 +174,7 @@ msgstr "" msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Kommentaren venter på godkjenning av moderator." @@ -225,7 +229,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "" @@ -275,25 +279,30 @@ msgid "help_anonymous_comments" msgstr "Dersom innstillingen er valgt kan anonyme brukere kommentere uten å logge inn. Det er anbefalt å bruke en captcha-løsning for å forhindre nettsøppel dersom denne innstillingen er valgt" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 #, fuzzy msgid "help_captcha" msgstr "Bruk denne innstillingen for å aktivere eller deaktivere captcha-validering av kommentarer. Installér plone.formwidget.captcha eller plone.formwidget.recaptcha dersom det mangler valg her." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 #, fuzzy msgid "help_discussion_settings_editform" msgstr "" "Noen innstillinger for kommentarer finnes utenfor kontrollpanelet for kommentarer. For å aktivere kommentarer for en spesifíkk innholdstype må man gå til kontrollpanelet for denne innholdstypen og velge 'aktiver moderering'.\n" "For å aktivere arbeidsflyten for moderering, må man gå til kontrollpanelet for innholdstyper og velge \"Kommentarer\" og stille inn arbeidsflyten til å vere \"Comment Review Workflow\"." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -310,34 +319,34 @@ msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Dersom innstillingen er valgt vil moderatoren bli varslet når en kommentar er lagt til." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Dersom denne er valgt vil bildet av brukeren vise ved siden av kommentaren." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "" @@ -347,7 +356,7 @@ msgid "label_anonymous_comments" msgstr "" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -357,7 +366,7 @@ msgid "label_apply" msgstr "Bruk" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "" @@ -367,7 +376,7 @@ msgid "label_comment" msgstr "" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "" @@ -376,6 +385,11 @@ msgstr "" msgid "label_delete" msgstr "Slett" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -392,12 +406,12 @@ msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Slå på e-postvarsling av moderator" @@ -407,12 +421,12 @@ msgid "label_publish" msgstr "Godkjenn" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "" @@ -427,22 +441,22 @@ msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/plone.app.discussion.pot b/plone/app/discussion/locales/plone.app.discussion.pot index 8fa8488..1ec30d6 100644 --- a/plone/app/discussion/locales/plone.app.discussion.pot +++ b/plone/app/discussion/locales/plone.app.discussion.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: plone.app.discussion\n" -"POT-Creation-Date: 2014-05-16 13:47+0000\n" +"POT-Creation-Date: 2015-03-23 08:03+0000\n" "PO-Revision-Date: 2010-01-28 15:00+0000\n" "Last-Translator: Hanno Schlichting \n" "Language-Team: Hanno Schlichting \n" @@ -18,7 +18,7 @@ msgstr "" msgid "" msgstr "" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "" @@ -34,40 +34,44 @@ msgstr "" msgid "Anonymous Comments" msgstr "" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "" -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "" -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -78,7 +82,7 @@ msgstr "" msgid "Commenting infrastructure for Plone" msgstr "" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -98,7 +102,7 @@ msgstr "" msgid "Disabled" msgstr "" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "" @@ -162,7 +166,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -174,7 +178,7 @@ msgstr "" msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "" @@ -229,7 +233,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "" @@ -279,21 +283,26 @@ msgid "help_anonymous_comments" msgstr "" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "" +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -309,33 +318,33 @@ msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 msgid "help_moderator_notification_enabled" msgstr "" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "" @@ -345,7 +354,7 @@ msgid "label_anonymous_comments" msgstr "" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -355,7 +364,7 @@ msgid "label_apply" msgstr "" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "" @@ -365,7 +374,7 @@ msgid "label_comment" msgstr "" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "" @@ -374,6 +383,11 @@ msgstr "" msgid "label_delete" msgstr "" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -390,12 +404,12 @@ msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "" @@ -405,12 +419,12 @@ msgid "label_publish" msgstr "" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "" @@ -425,22 +439,22 @@ msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po index 07cad35..a8de4dd 100644 --- a/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/pt/LC_MESSAGES/plone.app.discussion.po @@ -15,7 +15,7 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Poedit-Language: Português\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Foi adicionado um comentário." @@ -31,40 +31,44 @@ msgstr "Adicionar comentário" msgid "Anonymous Comments" msgstr "Comentários Anónimos" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Cancelar" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Alterações guardadas" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Comentário aprovado" -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Comentário excluído." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -75,7 +79,7 @@ msgstr "Imagem do comentador" msgid "Commenting infrastructure for Plone" msgstr "Infraestrutura de comentários para o Plone" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -95,7 +99,7 @@ msgstr "" msgid "Disabled" msgstr "Desativado" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Configurações da discussão" @@ -159,7 +163,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -171,7 +175,7 @@ msgstr "Notificar o utilizador por email" msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Seu comentário encontra-se pendente e aguarda a aprovação do moderador." @@ -226,7 +230,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 #, fuzzy msgid "comment_title" msgstr "${creator} em ${content}" @@ -277,24 +281,29 @@ msgid "help_anonymous_comments" msgstr "Se selecionado, os utilizadores anonimos poderão adicionar comentários sem estar autenticados. É altamente recomendável a utilização de uma solução de captcha para evitar spam quando esta configuração está activa." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Utilize esta opção para ativar ou desativar o Captcha para os comentários. Instale plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet ou collective.z3cform.norobots caso não tenha nenhuma opção disponível." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "Algumas configurações relacionadas com os comentários não se encontram localizadas no Painel de Controle de Comentários.\n" "Para activar os comentários para um tipo de item específico, aceda à configuração de Tipos no Painel de Controle, encontre o tipo desejado e selecione \"Permitir comentários \".\n" "Para ativar o workflow de moderação de comentários, aceda à configuração de Tipos no Painel de Controle, escolha \"Comentário\" e selecione o workflow para \"Workflow de Revisão de Comentários\"." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -310,34 +319,34 @@ msgid "help_moderation_enabled" msgstr "Se selecionado, os comentários serão adicionados no estado \"Pendente\", que é invisível ao público. Utilizadores com permissão para 'Moderar Comentários' ('Gestor' ou 'Administrador') podem aprovar os comentários para torná-los visíveis ao público. Caso queira ativar um workflow de comentários personalizado, aceda à Configuração dos Tipos no Painel de Controle." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "Endereço para o qual as notificações do moderador serão enviadas." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Se selecionado, o moderador será avisado quando um comentário precisar de atenção. O endereço de e-mail do moderador pode ser encontrado nas configurações de e-mail no Painel de Controle (campo Endereço de 'Remetente' do site)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Se selecionado, uma imagem do usuário será exibida próxima ao comentário." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "Use esta configuração para escolher se o texto do comentário deve ser transformado. Você pode escolher entre 'texto puro' e 'texto inteligente'. 'Texto inteligente' converte texto simples em HTML, onde as quebras de linha e os recuos são preservados, e os endereços web e e-mail são transformados em links clicáveis." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Se selecionado, permite aos usuários solicitar o notificações por e-mail sempre que hover um novo comentário." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anónimo" @@ -347,7 +356,7 @@ msgid "label_anonymous_comments" msgstr "Permitir comentários anónimos." #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -357,7 +366,7 @@ msgid "label_apply" msgstr "Aplicar" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -367,7 +376,7 @@ msgid "label_comment" msgstr "Comentário" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Os comentários foram desativados." @@ -376,6 +385,11 @@ msgstr "Os comentários foram desativados." msgid "label_delete" msgstr "Excluir" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -392,12 +406,12 @@ msgid "label_moderation_enabled" msgstr "Ativar moderação de comentários" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Endereço de e-mail do moderador" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Ativar notificação ao moderador" @@ -407,12 +421,12 @@ msgid "label_publish" msgstr "Aprovar" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "disse:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Exibir imagem do autor" @@ -427,23 +441,23 @@ msgid "label_subject" msgstr "Assunto" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Transformações aplicadas ao texto do comentário" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Activar notificação de utilizadores por email" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 #, fuzzy msgid "mail_notification_message" msgstr "Um comentário em '${title}' foi adicionado aqui: ${link}" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "Um comentário sobre '${title}' foi adicionado aqui: ${link}\n" diff --git a/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po index be8a3c0..5a2c3e7 100644 --- a/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/pt_BR/LC_MESSAGES/plone.app.discussion.po @@ -15,7 +15,7 @@ msgstr "" "Domain: plone.app.discussion\n" "X-Poedit-Language: Português do Brasil\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Comentário adicionado." @@ -31,40 +31,44 @@ msgstr "Adicionar comentário" msgid "Anonymous Comments" msgstr "Comentários Anônimos" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Cancelar" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Alterações salvas" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Comentário aprovado" -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "Email do autor do comentário" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "Nome completo do autor do comentário" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "Nome de usuário do autor do comentário" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Comentário excluído." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "Id do comentário" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "Texto do comentário" @@ -75,7 +79,7 @@ msgstr "Imagem do autor" msgid "Commenting infrastructure for Plone" msgstr "Infraestrutura de comentários para o Plone" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "Comentários" @@ -95,7 +99,7 @@ msgstr "Data do comentário, público, mais recente" msgid "Disabled" msgstr "Desativado" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Configurações da discussão" @@ -159,7 +163,7 @@ msgstr "O grupo de comentadoristas (nomes de usuários) com comentários publica msgid "Total number of public comments on this item" msgstr "Número total de comentários públicos neste item" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "Transformação '%s' => '%s' não disponível" @@ -171,7 +175,7 @@ msgstr "Notificação de e-mail para o usuário" msgid "Username of the commenter" msgstr "Nome de usuário do comentarista" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Seu comentário está pendente e aguarda a aprovação do moderador." @@ -226,7 +230,7 @@ msgid "comment_edit_notification" msgstr "Comentário foi editado" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "${author_name} em ${content}" @@ -276,25 +280,31 @@ msgid "help_anonymous_comments" msgstr "Se selecionado, usuários anonimos poderão adicionar comentários sem precisar de usuário e senha. É altamente recomendável a utilização de uma solução de captcha para evitar spam caso esta configuração esteja ativada." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "Caso selecionado, usuários anônimos devem informar um email." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Utilize esta opção para ativar ou desativar o Captcha para os comentários. Instale plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet ou collective.z3cform.norobots caso não tenha nenhuma opção disponível." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "Algumas configurações relacionadas a comentários não estão localizadas no Painel de Controle de Comentários.\n" "Para habilitar comentários para um tipo de item específico, vá até a configuração de Tipos no Painel de Controle, encontre o tipo desejado e selecione \"Permitir comentários \".\n" "Para ativar o workflow de moderação de comentários, vá até a configuração de Tipos no Painel de Controle, escolha \"Comentário\" e selecione o workflow para \"Workflow de Revisão de Comentários\"." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 +#, fuzzy msgid "help_edit_comment_enabled" msgstr "Caso selecionado, permite a edição e remoção de comentários por usuários com a permissão 'Editar comentários'" @@ -309,33 +319,33 @@ msgid "help_moderation_enabled" msgstr "Caso selecionado, os comentários serão adicionados no estado \"Pendente\", que é invisível ao público. Usuários com permissão para 'Revisar Comentários' ('Revisor' ou 'Administrador') podem aprovar os comentários para torná-los visíveis ao público. Caso queira ativar um workflow de comentários personalizado, você deve ir até a Configuração dos Tipos no Painel de Controle." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "Endereço para o qual as notificações do moderador serão enviadas." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 msgid "help_moderator_notification_enabled" msgstr "Se selecionado, o moderador será avisado quando um comentário precisar de atenção. O endereço de e-mail do moderador pode ser definido abaixo." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Se selecionado, uma imagem do usuário será exibida próxima ao comentário." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "Use esta configuração para escolher se o texto do comentário deve ser transformado. Você pode escolher entre 'texto puro' e 'texto inteligente'. 'Texto inteligente' converte texto simples em HTML, onde as quebras de linha e os recuos são preservados, e os endereços web e e-mail são transformados em links clicáveis." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Se selecionado, permite aos usuários solicitar o recebimento de avisos por e-mail sempre que hover um novo comentário." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anônimo" @@ -345,7 +355,7 @@ msgid "label_anonymous_comments" msgstr "Permitir comentários anônimos." #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "Habilitar campo de email para usuários anônimos" @@ -355,7 +365,7 @@ msgid "label_apply" msgstr "Aplicar" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -365,7 +375,7 @@ msgid "label_comment" msgstr "Comentário" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Comentários foram desativados." @@ -374,6 +384,11 @@ msgstr "Comentários foram desativados." msgid "label_delete" msgstr "Excluir" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -390,12 +405,12 @@ msgid "label_moderation_enabled" msgstr "Ativar moderação de comentários" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Endereço de e-mail do moderador" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Ativar notificação ao moderador" @@ -405,12 +420,12 @@ msgid "label_publish" msgstr "Aprovar" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "disse:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Exibir imagem do autor" @@ -425,22 +440,27 @@ msgid "label_subject" msgstr "Assunto" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Transformações aplicadas ao texto do comentário" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Ativar notificação de e-mail para os usuários" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" -msgstr "Um comentário em '${title}' foi adicionado aqui: ${link}\n\n---\n{text}\n---\n" +msgstr "" +"Um comentário em '${title}' foi adicionado aqui: ${link}\n" +"\n" +"---\n" +"{text}\n" +"---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "Um comentário no conteúdo '${title}' foi adicionado em: ${link}\n" diff --git a/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po index 77541a6..6c7ba90 100644 --- a/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/ro/LC_MESSAGES/plone.app.discussion.po @@ -15,7 +15,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Un comentariu a fost postat." @@ -31,40 +31,44 @@ msgstr "Adauga comentariu" msgid "Anonymous Comments" msgstr "Comentarii de la anonimi" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Anuleaza" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Schimbari salvate" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Comentariul a fost aprobat." -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Comentariul a fost sters." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -75,7 +79,7 @@ msgstr "Imaginea comentatorului" msgid "Commenting infrastructure for Plone" msgstr "Infrastructura de comentarii pentru Plone" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -95,7 +99,7 @@ msgstr "" msgid "Disabled" msgstr "Dezactivat" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Setarile Discutiilor" @@ -159,7 +163,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -171,7 +175,7 @@ msgstr "Notificarea utilizatorului prin email" msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Comentariul tau asteapta sa fie moderat." @@ -226,7 +230,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 #, fuzzy msgid "comment_title" msgstr "${creator} al ${content}" @@ -277,24 +281,29 @@ msgid "help_anonymous_comments" msgstr "Daca selectat, utilizatorii anonimi vor putea posta comentarii fara a fi autentificati. Este recomandat a se folosi o solutie captcha pentru a preveni spam-ul daca aceasta setare este activata." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Foloseste aceasta setare pentru a activa sau dezactiva validarea Captcha a comentariilor. Instaleaza plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet sau collective.z3cform.norobots daca nu este nici o optiune disponibila." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "Unele setari legate de discutii nu sunt localizate in Panoul de Discutii.\n" "Pentru a activa comentarii pentru un tip specific de obiect, dute la Panoul de Control al Tipurilor pentru acest obiect si selecteaza \"Permite comentarii\".\n" "Pentru a alege workflow-ul de moderare pentru comentarii, dute la Panoul de Control pentru Tipuri de obiect, alege \"Comentariu\" si seteaza workflow-ul la \"Workflow de moderare al Comentariilor\"." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -310,34 +319,34 @@ msgid "help_moderation_enabled" msgstr "Daca selectat, comentariile vor intra intr-o stare de 'Asteptare' in care ele sunt invizibile publicului. Un utilizator cu permisia 'Modereaza Comentarii' ('Moderator' sau 'Manager') poate aprova comentariile pentru a le face vizibile publicului. Daca doresti sa activezi un workflow de comentariu specific, trebuie sa mergi la panoul de control al obiectelor" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "Adresa de email la care notificarile de moderare vor fi trimise." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Daca selectat, moderatorul este notificat daca un comentariu are nevoie de atentie. Adresa de email al moderatorului poate fi gasita in panoul de control numit 'Setari mail' (Adresa 'De la' pentru Site)" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Daca selectat, o imagine al utilizatorului este afisata langa comentariul sau." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "Foloseste aceasta setare pentru a alege daca textul comentariului ar trebui sa fie transformat intr-un fel. Poti alege intre 'Text simplu' si 'Text inteligent'. 'Text inteligent' transforma textul simplu in HTML unde indentarea si liniile sunt pastrate si adresele de email si web sunt transformate in link-uri." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Daca selectat, utilizatorii pot alege sa fie notificati de noi comentarii prin email." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anonimi" @@ -347,7 +356,7 @@ msgid "label_anonymous_comments" msgstr "Permite comentariile anonime" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -357,7 +366,7 @@ msgid "label_apply" msgstr "Aplica" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -367,7 +376,7 @@ msgid "label_comment" msgstr "Comentariu" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Comentariile au fost dezactivate." @@ -376,6 +385,11 @@ msgstr "Comentariile au fost dezactivate." msgid "label_delete" msgstr "Sterge" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -392,12 +406,12 @@ msgid "label_moderation_enabled" msgstr "Activeaza moderarea comentariilor" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Adresa de email al moderatorului de comentarii" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Activeaza notificarea moderatorului de comentarii prin email" @@ -407,12 +421,12 @@ msgid "label_publish" msgstr "Aproba" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "zice:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Arata imaginea comentatorului" @@ -427,17 +441,17 @@ msgid "label_subject" msgstr "Subiect" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Transformarea textului comentariului" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Activeaza notificarea utilizatorului prin email" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" "Un comentariu pe '${title}' a fost postat aici: ${link}\n" @@ -447,7 +461,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "Un comentariu pe '${title}' a fost postat aici: ${link}\n" diff --git a/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po index e8194d4..7add01d 100644 --- a/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/sk/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "" @@ -30,40 +30,44 @@ msgstr "" msgid "Anonymous Comments" msgstr "" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "" -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "" -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -74,7 +78,7 @@ msgstr "" msgid "Commenting infrastructure for Plone" msgstr "" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -94,7 +98,7 @@ msgstr "" msgid "Disabled" msgstr "" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "" @@ -158,7 +162,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -170,7 +174,7 @@ msgstr "" msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "" @@ -225,7 +229,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "" @@ -275,21 +279,26 @@ msgid "help_anonymous_comments" msgstr "" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "" +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -305,33 +314,33 @@ msgid "help_moderation_enabled" msgstr "" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 msgid "help_moderator_notification_enabled" msgstr "" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "" #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "" @@ -341,7 +350,7 @@ msgid "label_anonymous_comments" msgstr "" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -351,7 +360,7 @@ msgid "label_apply" msgstr "" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "" @@ -361,7 +370,7 @@ msgid "label_comment" msgstr "" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "" @@ -370,6 +379,11 @@ msgstr "" msgid "label_delete" msgstr "" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -386,12 +400,12 @@ msgid "label_moderation_enabled" msgstr "" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "" @@ -401,12 +415,12 @@ msgid "label_publish" msgstr "" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "" @@ -421,22 +435,22 @@ msgid "label_subject" msgstr "" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" diff --git a/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po index 9b918cc..2fb9e51 100644 --- a/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/sv/LC_MESSAGES/plone.app.discussion.po @@ -15,7 +15,7 @@ msgstr "" "Domain: DOMAIN\n" "X-Is-Fallback-For: sv-fi sv-se\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "En kommentar har postats." @@ -32,40 +32,44 @@ msgstr "Lägg till en kommentar" msgid "Anonymous Comments" msgstr "Anonym kommentar" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Avbryt" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Ändringar sparade" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Kommentaren har nu godkänts." -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Kommentaren har nu raderats." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -76,7 +80,7 @@ msgstr "Porträtt av kommentatorn" msgid "Commenting infrastructure for Plone" msgstr "Infrastruktur för kommentarer i Plone" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -96,7 +100,7 @@ msgstr "" msgid "Disabled" msgstr "Inaktiverad" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Inställningar för kommentarer" @@ -160,7 +164,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -172,7 +176,7 @@ msgstr "Avisering till användare med e-post" msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Din kommentar inväntar moderatorns godkännande." @@ -227,7 +231,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 #, fuzzy msgid "comment_title" msgstr "${creator} om ${content}" @@ -278,23 +282,28 @@ msgid "help_anonymous_comments" msgstr "Tillåt anonyma användare att kommentera utan att logga in. För att undvika skräppost, rekommenderas starkt att Captcha-validering aktiveras." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Aktivera captcha-validering av kommentarer. Om listrutan saknar alternativ: installera plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet eller collective.z3cform.norobots." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + # NOTE: "\n # does not work. #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "Vissa inställningar för kommentarer finns inte på denna kontrollpanel. — För att aktivera kommentarer för en viss innehållstyp, välj denna på kontrollpanelen \"Innehållstyper\" och markera rutan \"Tillåt kommentarer \". — För att aktivera ett arbetsflöde för moderation av kommentarer, välj \"Kommentar\" på kontrollpanelen \"Innehållstyper\" och sätt nytt arbetsflöde \"Comment Review Workflow\"." -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -310,35 +319,35 @@ msgid "help_moderation_enabled" msgstr "Nya kommentarer får arbetsflödesstatus \"Pending\", och blir inte publikt tillgängliga förrän de godkänns av en moderator. Moderatorn behöver behörigheten \"Review comments\", rollerna \"Reviewer\" och \"Manager\" har det som standard. — För att ge kommentarer ett anpassat arbetsflöde, använd kontrollpanelen \"Innehållstyper\"." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "E-postadress för aviseringar till moderatorn." # " The moderator email address can be found in the 'Mail settings' control panel (Site 'From' address)" is FALSE! #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Avisera moderatorn med e-post när en ny kommentar behöver åtgärdas." #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Visa ett porträtt av kommentatorn bredvid kommentaren." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "\"Plain text\": Endast radbrytningar bevaras. — \"Intelligent text\": Konvertering till HTML; radbrytningar och indrag bevaras, webbadresser och e-postadresser blir klickbara länkar." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Ge inloggade användare möjlighet att välja att bli aviserade med e-post om nya kommentarer." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Anonym" @@ -348,7 +357,7 @@ msgid "label_anonymous_comments" msgstr "Tillåt anonyma kommentarer" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -358,7 +367,7 @@ msgid "label_apply" msgstr "Verkställ" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Captcha" @@ -368,7 +377,7 @@ msgid "label_comment" msgstr "Kommentar" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Kommentarsfunktionen har inaktiverats." @@ -377,6 +386,11 @@ msgstr "Kommentarsfunktionen har inaktiverats." msgid "label_delete" msgstr "Radera" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -393,12 +407,12 @@ msgid "label_moderation_enabled" msgstr "Aktivera moderation för kommentarer" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Moderatorns e-postadress" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Aktivera avisering med e-post till moderatorn" @@ -408,12 +422,12 @@ msgid "label_publish" msgstr "Godkänn" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "säger:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Visa porträtt av kommentatorn" @@ -428,17 +442,17 @@ msgid "label_subject" msgstr "Ämne" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Texttransformering för kommentarer" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Aktivera e-post-avisering till användare" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" "En kommentar till '${title}' har postats här: ${link}\n" @@ -448,7 +462,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "En kommentar till '${title}' har postats här: ${link}\n" diff --git a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po index 2605b9a..1583fbc 100644 --- a/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/uk/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "Коментар додано." @@ -30,40 +30,44 @@ msgstr "Додати коментар" msgid "Anonymous Comments" msgstr "Анонімне коментування" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "Скасувати" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "Зміни збережено" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "Коментар опубліковано." -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "Коментар знищено." -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -74,7 +78,7 @@ msgstr "Зображення коментатора" msgid "Commenting infrastructure for Plone" msgstr "Інфраструктура коментування в Plone" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -94,7 +98,7 @@ msgstr "Дата останного публічного коментаря" msgid "Disabled" msgstr "Вимкнено" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "Налаштуванняя коментування" @@ -158,7 +162,7 @@ msgstr "Перелік коментаторів (імена користувач msgid "Total number of public comments on this item" msgstr "Загальна кількість публічних коментарів для даного елемента" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "Не доступне перетворення '%s' => '%s'." @@ -170,7 +174,7 @@ msgstr "Сповіщення користувача електронною по msgid "Username of the commenter" msgstr "Ім'я автора коментаря" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "Ваш коментар очікує затвердження модератором." @@ -225,7 +229,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "${author_name} до ${content}" @@ -275,24 +279,29 @@ msgid "help_anonymous_comments" msgstr "Якщо вибрано - то анонімні користувачі зможуть додавати коментарі без входу в систему. Для таких випадків рекомендуєтсья використовувати капчу, щоб запобігти надсиланню спаму." #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "Якщо вибрано, анонімний користувач повинен буде вказати свою електронну пошту." #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "Використовуйте цей параметр, щоб увімкнути або вимкнути капчу для коментарів. Для цього спершу встановіть plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet або collective.z3cform.norobots." +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "Не всі налаштування коментувань знаходяться на цій сторінці.\n" "Так, щоб увімкнути можливість коментування для певного типу вмісту, перейдіть в розділ налаштувань Типи, виберіть необхідний тип вмісту, та виберіть \"Дозволити додавати коментар\".\n" "To enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\".\"" -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -308,34 +317,34 @@ msgid "help_moderation_enabled" msgstr "Якщо вибрано, коментарі увійде в стан 'В очікуванні', у якому вони невидимі для громадськості. Користувач з правом 'Огляд коментарів' ('Рецензент' або 'Менеджер') може схвалити коментар, щоб зробити їх видимими для громадськості. Якщо ви хочете налаштувати робочий процес коментарів, ви повинні піти в панель керування типів." #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "Адреса, за якою модератору будуть надсилатися повідомлення." #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "Якщо вибрано, модератор отримує повідомлення, якщо коментар вимагає уваги. Адресу електронної пошти модератора можна знайти в 'Пошта' панелі керування (Адреса 'Від')" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "Якщо вибрано, зображення коментатора буде відображатись поруч з коментарем." #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "Виберіть як повинен бути перетворений текст коментаря. Ви можете вибрати між 'Звичайний текст' і 'Інтелектуальні тексту'. 'Інтелектуальний текст' перетворює текст в HTML, де рядки і відступи зберігаються, інтернет адреси та адреси електронної пошти перетворяться в активні посилання." #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "Якщо вибрано, користувачі зможуть обрати можливість отримувати нотифікації про нові коментарі поштою." #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "Анонім" @@ -345,7 +354,7 @@ msgid "label_anonymous_comments" msgstr "Увімкнути можливість анонімного коментування" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "Увімкнути поле електронної адреси для аноніма" @@ -355,7 +364,7 @@ msgid "label_apply" msgstr "Застосувати" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "Капча" @@ -365,7 +374,7 @@ msgid "label_comment" msgstr "Коментар" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "Коментування вимкнено" @@ -374,6 +383,11 @@ msgstr "Коментування вимкнено" msgid "label_delete" msgstr "Знищити" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -390,12 +404,12 @@ msgid "label_moderation_enabled" msgstr "Увімкнути модерування коментарів" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "Електронна адреса модератора" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "Увімкнути сповіщення модератора" @@ -405,12 +419,12 @@ msgid "label_publish" msgstr "Опублікувати" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "каже:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "Показати зображення коментатора" @@ -425,17 +439,17 @@ msgid "label_subject" msgstr "Тема" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "Перетворення тексту коментаря" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "Увімкнути надcилання нотифікації користувачу через електронну адресу" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" "Коментар до '${title}' було додано тут: ${link}\n" @@ -445,7 +459,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "Коментар до '${title}' було додано тут: ${link}\n" diff --git a/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po index beac55f..1808667 100644 --- a/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/zh_CN/LC_MESSAGES/plone.app.discussion.po @@ -16,7 +16,7 @@ msgstr "" "Preferred-Encodings: utf-8\n" "Domain: DOMAIN\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "一个评论已发布。" @@ -32,40 +32,44 @@ msgstr "添加​​评论" msgid "Anonymous Comments" msgstr "匿名评论" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "取消" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "更改已保存" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "评论已批准。" -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "评论已删除。" -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "" @@ -76,7 +80,7 @@ msgstr "评论者头像" msgid "Commenting infrastructure for Plone" msgstr "Plone 的评论功能" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "" @@ -96,7 +100,7 @@ msgstr "" msgid "Disabled" msgstr "禁用" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "评论设置" @@ -160,7 +164,7 @@ msgstr "" msgid "Total number of public comments on this item" msgstr "" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "" @@ -172,7 +176,7 @@ msgstr "Email 通知用户" msgid "Username of the commenter" msgstr "" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "您的评论正等待审核者的批准。" @@ -227,7 +231,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 #, fuzzy msgid "comment_title" msgstr "${creator} 在 ${content}" @@ -278,24 +282,29 @@ msgid "help_anonymous_comments" msgstr "如果选中,匿名用户可不登录的情况下发布评论。如果启用了此设置,强烈建议使用验证码,以防止垃圾评论。" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "设置启用或禁用评论验证码功能。如果没有任何可选项,可安装plone.formwidget.captcha,plone.formwidget.recaptcha,collective.akismet,或collective.z3cform.norobots。" +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "一些评论相关的设置并不位于 评论控制面板。\n" "要启用特定内容类型的评论,请到类型控制面板,选中这种类型的 \"允许评论\"。\n" "要启用评论审核工作流,请到类型控制面板,选择 \"评论\" 并将工作流设置为 \"评论审核工作流\"。" -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -311,34 +320,34 @@ msgid "help_moderation_enabled" msgstr "如果选中,评论将进入'待审核'状态,它们对用户是看不见的。'具有审核权限的用户('审核者'或'管理者')可以批准评论,使它们对用户可见。如果你要启用定制的评论工作流,你必须到类型控制面板。" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "审核通知发送地址。" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 #, fuzzy msgid "help_moderator_notification_enabled" msgstr "如果选中,如评论需要注意,审核者将被通知。审核者的Email地址,可以在'邮件设置'控制面板(网站'发件人'地址)中找到。" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "如果选中,用户的头像显示在评论旁边。" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "使用此设置选择评论文本的转换方式,你可以选择'纯文本'和'智能文本。'智能文本'转换纯文本成HTML格式,其中换行和缩进保留,Web和Email地址都转换为可点击链接。" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "如果选中,用户可以选择通过Email通知新的评论。" #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "匿名" @@ -348,7 +357,7 @@ msgid "label_anonymous_comments" msgstr "启用匿名评论" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "" @@ -358,7 +367,7 @@ msgid "label_apply" msgstr "应用" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "验证码" @@ -368,7 +377,7 @@ msgid "label_comment" msgstr "评论" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "评论已被禁用。" @@ -377,6 +386,11 @@ msgstr "评论已被禁用。" msgid "label_delete" msgstr "删除" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -393,12 +407,12 @@ msgid "label_moderation_enabled" msgstr "启用评论审核" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "审核者Email地址" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "启用审核者Email通知" @@ -408,12 +422,12 @@ msgid "label_publish" msgstr "批准" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "说:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "显示评论者的头像" @@ -428,17 +442,17 @@ msgid "label_subject" msgstr "标题" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "评论文本转换" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "启用用户Email通知" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" "一条评论 '${title}' 已发布在: ${link}\n" @@ -448,7 +462,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "一条评论 '${title}' 已发布在: ${link}\n" diff --git a/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po b/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po index 9061aea..22dc489 100644 --- a/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po +++ b/plone/app/discussion/locales/zh_TW/LC_MESSAGES/plone.app.discussion.po @@ -14,7 +14,7 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: plone.app.discussion\n" -#: ../comment.py:357 +#: ../comment.py:359 msgid "A comment has been posted." msgstr "留言已張貼。" @@ -30,40 +30,44 @@ msgstr "新增留言" msgid "Anonymous Comments" msgstr "匿名留言" -#: ../browser/comments.py:274 +#: ../browser/comments.py:275 #: ../browser/controlpanel.py:93 msgid "Cancel" msgstr "取消" +#: ../interfaces.py:184 +msgid "Captcha" +msgstr "" + #: ../browser/controlpanel.py:89 msgid "Changes saved" msgstr "變更已儲存" -#: ../browser/moderation.py:154 +#: ../browser/moderation.py:186 msgid "Comment approved." msgstr "留言已審核" -#: ../contentrules.py:96 +#: ../contentrules.py:92 msgid "Comment author email" msgstr "留言作者電郵" -#: ../contentrules.py:85 +#: ../contentrules.py:81 msgid "Comment author full name" msgstr "留言作者姓名" -#: ../contentrules.py:74 +#: ../contentrules.py:70 msgid "Comment author user name" msgstr "留言作者帳號" -#: ../browser/moderation.py:108 +#: ../browser/moderation.py:111 msgid "Comment deleted." msgstr "留言已刪除" -#: ../contentrules.py:52 +#: ../contentrules.py:48 msgid "Comment id" msgstr "留言識別碼" -#: ../contentrules.py:63 +#: ../contentrules.py:59 msgid "Comment text" msgstr "留言內文" @@ -74,7 +78,7 @@ msgstr "留言者圖檔" msgid "Commenting infrastructure for Plone" msgstr "Plone 的留言功能" -#: ../contentrules.py:51 +#: ../contentrules.py:47 msgid "Comments" msgstr "留言" @@ -94,7 +98,7 @@ msgstr "最新留言的日期" msgid "Disabled" msgstr "已停用" -#: ../browser/controlpanel.py:35 +#: ../browser/controlpanel.py:33 msgid "Discussion settings" msgstr "討論區設定" @@ -158,7 +162,7 @@ msgstr "留言的帳號列表" msgid "Total number of public comments on this item" msgstr "留言的數量統計" -#: ../comment.py:173 +#: ../comment.py:175 msgid "Transform '%s' => '%s' not available." msgstr "轉換 '%s' => '%s' 並不存在" @@ -170,7 +174,7 @@ msgstr "新留言通知使用者" msgid "Username of the commenter" msgstr "留言者的帳號" -#: ../browser/comments.py:267 +#: ../browser/comments.py:268 msgid "Your comment awaits moderator approval." msgstr "你的留言等待審核中。" @@ -225,7 +229,7 @@ msgid "comment_edit_notification" msgstr "" #. Default: "${author_name} on ${content}" -#: ../comment.py:55 +#: ../comment.py:57 msgid "comment_title" msgstr "${author_name} 在 ${content} 留言" @@ -275,24 +279,29 @@ msgid "help_anonymous_comments" msgstr "勾選的話,匿名使用者不必登入系統就能留言。建議使用 captcha 來避免垃圾留言。" #. Default: "If selected, anonymous user will have to give their email." -#: ../interfaces.py:341 +#: ../interfaces.py:352 msgid "help_anonymous_email_enabled" msgstr "勾選的話,匿名留言者必須填寫電郵信箱。" #. Default: "Use this setting to enable or disable Captcha validation for comments. Install plone.formwidget.captcha, plone.formwidget.recaptcha, collective.akismet, or collective.z3cform.norobots if there are no options available." -#: ../interfaces.py:277 +#: ../interfaces.py:288 msgid "help_captcha" msgstr "設定留言是否啟用或停用 captcha 功能,如果還沒有這類模組選項的話,可安裝 plone.formwidget.captcha、plone.formwidget.recaptcha、collective.akismet 或 collective.z3cform.norobots。" +#. Default: "If selected, supports deleting of own comments for users with the 'Delete own comments' permission." +#: ../interfaces.py:260 +msgid "help_delete_own_comment_enabled" +msgstr "" + #. Default: "Some discussion related settings are not located in the Discussion Control Panel.\nTo enable comments for a specific content type, go to the Types Control Panel of this type and choose \"Allow comments\".\nTo enable the moderation workflow for comments, go to the Types Control Panel, choose \"Comment\" and set workflow to \"Comment Review Workflow\"." -#: ../browser/controlpanel.py:36 +#: ../browser/controlpanel.py:34 msgid "help_discussion_settings_editform" msgstr "" "某些討論區設定值並未在討論區控制面板找得到。\n" "想要指定某個內容型別的留言功能,請到型別控制面板,指定「允許留言」。\n" "想要指定留言的審核流程,請到型別控制面板,點選「留言」並指定工作流程為「留言審核流程」。" -#. Default: "If selected, supports editing and deletion of comments for users with the 'Edit comments' permission." +#. Default: "If selected, supports editing of comments for users with the 'Edit comments' permission." #: ../interfaces.py:249 msgid "help_edit_comment_enabled" msgstr "" @@ -308,33 +317,33 @@ msgid "help_moderation_enabled" msgstr "勾選的話,留言會先變成待審狀態,直到通過審核後才會公開,想要客製化管理流程的話,必須到型別設定頁面。" #. Default: "Address to which moderator notifications will be sent." -#: ../interfaces.py:318 +#: ../interfaces.py:329 msgid "help_moderator_email" msgstr "審核通知信的寄送地址。" #. Default: "If selected, the moderator is notified if a comment needs attention. The moderator email address can be set below." -#: ../interfaces.py:304 +#: ../interfaces.py:315 msgid "help_moderator_notification_enabled" msgstr "勾選的話,有人留言時就會通知審核者。審核者的寄信地址可在下列欄位設定。" #. Default: "If selected, an image of the user is shown next to the comment." -#: ../interfaces.py:293 +#: ../interfaces.py:304 msgid "help_show_commenter_image" msgstr "勾選的話,使用者的圖檔會顯示在留言旁邊。" #. Default: "Use this setting to choose if the comment text should be transformed in any way. You can choose between 'Plain text' and 'Intelligent text'. 'Intelligent text' converts plain text into HTML where line breaks and indentation is preserved, and web and email addresses are made into clickable links." -#: ../interfaces.py:260 +#: ../interfaces.py:271 msgid "help_text_transform" msgstr "選擇留言的標註格式,選擇「排版文字」的話,會主動保留內容的換行和縮排,也會把網址變成可以點選的連結。" #. Default: "If selected, users can choose to be notified of new comments by email." -#: ../interfaces.py:330 +#: ../interfaces.py:341 msgid "help_user_notification_enabled" msgstr "勾選的話,使用者可以收到新留言的通知信。" #. Default: "Anonymous" -#: ../browser/comments.pt:74 -#: ../comment.py:191 +#: ../browser/comments.pt:75 +#: ../comment.py:193 msgid "label_anonymous" msgstr "無名氏" @@ -344,7 +353,7 @@ msgid "label_anonymous_comments" msgstr "啟用匿名留言功能" #. Default: "Enable anonymous email field" -#: ../interfaces.py:339 +#: ../interfaces.py:350 msgid "label_anonymous_email_enabled" msgstr "啟用匿名留言的電郵欄位" @@ -354,7 +363,7 @@ msgid "label_apply" msgstr "更新" #. Default: "Captcha" -#: ../interfaces.py:275 +#: ../interfaces.py:286 msgid "label_captcha" msgstr "captcha" @@ -364,7 +373,7 @@ msgid "label_comment" msgstr "留言" #. Default: "Commenting has been disabled." -#: ../browser/comments.pt:148 +#: ../browser/comments.pt:163 msgid "label_commenting_disabled" msgstr "留言功能已停用。" @@ -373,6 +382,11 @@ msgstr "留言功能已停用。" msgid "label_delete" msgstr "刪除" +#. Default: "Enable deleting own comments" +#: ../interfaces.py:258 +msgid "label_delete_own_comment_enabled" +msgstr "" + #. Default: "Enable editing of comments" #: ../interfaces.py:247 msgid "label_edit_comment_enabled" @@ -389,12 +403,12 @@ msgid "label_moderation_enabled" msgstr "啟用審核功能" #. Default: "Moderator Email Address" -#: ../interfaces.py:314 +#: ../interfaces.py:325 msgid "label_moderator_email" msgstr "審核者電郵地址" #. Default: "Enable moderator email notification" -#: ../interfaces.py:302 +#: ../interfaces.py:313 msgid "label_moderator_notification_enabled" msgstr "啟用通知審核者的功能" @@ -404,12 +418,12 @@ msgid "label_publish" msgstr "審核" #. Default: "says:" -#: ../browser/comments.pt:77 +#: ../browser/comments.pt:78 msgid "label_says" msgstr "留言:" #. Default: "Show commenter image" -#: ../interfaces.py:291 +#: ../interfaces.py:302 msgid "label_show_commenter_image" msgstr "顯示留言者圖檔" @@ -424,17 +438,17 @@ msgid "label_subject" msgstr "標題" #. Default: "Comment text transform" -#: ../interfaces.py:258 +#: ../interfaces.py:269 msgid "label_text_transform" msgstr "留言排版格式" #. Default: "Enable user email notification" -#: ../interfaces.py:326 +#: ../interfaces.py:337 msgid "label_user_notification_enabled" msgstr "啟用通知使用者的功能" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n" -#: ../comment.py:59 +#: ../comment.py:61 msgid "mail_notification_message" msgstr "" "${title} 有新留言:${link}\n" @@ -444,7 +458,7 @@ msgstr "" "---\n" #. Default: "A comment on '${title}' has been posted here: ${link}\n\n---\n${text}\n---\n\nApprove comment:\n${link_approve}\n\nDelete comment:\n${link_delete}\n" -#: ../comment.py:67 +#: ../comment.py:69 msgid "mail_notification_message_moderator" msgstr "" "${title} 有新留言:${link}\n" From 9cc97f8f954fffe4d91b669071a594572988da7e Mon Sep 17 00:00:00 2001 From: esteele Date: Thu, 26 Mar 2015 15:49:17 -0400 Subject: [PATCH 250/254] Preparing release 2.4.1 --- CHANGES.rst | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index ae9f5e8..e3dc206 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,7 +1,7 @@ Changelog ========= -2.4.1 (unreleased) +2.4.1 (2015-03-26) ------------------ - i18n for ICaptcha interface. diff --git a/setup.py b/setup.py index df8502f..e5bdd7b 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import find_packages from setuptools import setup -version = '2.4.1.dev0' +version = '2.4.1' install_requires = [ 'setuptools', From 4f03f173e7d779d4f77c276ea43e3792d74459b6 Mon Sep 17 00:00:00 2001 From: esteele Date: Thu, 26 Mar 2015 15:50:55 -0400 Subject: [PATCH 251/254] Back to development: 2.4.2 --- CHANGES.rst | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index e3dc206..75ba92a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,12 @@ Changelog ========= +2.4.2 (unreleased) +------------------ + +- Nothing changed yet. + + 2.4.1 (2015-03-26) ------------------ diff --git a/setup.py b/setup.py index e5bdd7b..61d8431 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import find_packages from setuptools import setup -version = '2.4.1' +version = '2.4.2.dev0' install_requires = [ 'setuptools', From b550683868ec6bd9d829bd23060b88bebc411cad Mon Sep 17 00:00:00 2001 From: Gil Forcada Date: Sun, 5 Apr 2015 00:39:08 +0200 Subject: [PATCH 252/254] Trigger jenkins --- setup.cfg | 1 - 1 file changed, 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index 9155b60..deac03d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -5,4 +5,3 @@ all_files = 1 [upload_sphinx] upload-dir = docs/html - From b4cc3b0f54c093b613b4edfe9c8c55bc1ea36a07 Mon Sep 17 00:00:00 2001 From: Gil Forcada Date: Sun, 5 Apr 2015 00:42:00 +0200 Subject: [PATCH 253/254] Revert "Trigger jenkins" This reverts commit b550683868ec6bd9d829bd23060b88bebc411cad. --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index deac03d..9155b60 100644 --- a/setup.cfg +++ b/setup.cfg @@ -5,3 +5,4 @@ all_files = 1 [upload_sphinx] upload-dir = docs/html + From 8843d8d8046b6b8b9ae53cfa9b405833e275b1a5 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Mon, 27 Apr 2015 15:01:13 +0200 Subject: [PATCH 254/254] Remove merge leftover. --- CHANGES.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 75ba92a..b635899 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -127,7 +127,6 @@ Changelog - Put defaultUser.png instead of old defaultUser.gif [bsuttor] ->>>>>>> master - Remove bbb directory. bbb was never really implemented. [timo]