Merge default dev-dc
authorDamien Correia
Fri, 05 Oct 2018 10:44:32 +0200
branchdev-dc
changeset 999 f50be61c93a6
parent 935 8a7ec586dce1 (current diff)
parent 995 a219e2e20779 (diff)
child 1000 02a2b18d0ff7
Merge default
src/pyams_content/component/paragraph/portlet/zmi/templates/preview.pt
--- a/.hgtags	Thu Sep 06 18:10:04 2018 +0200
+++ b/.hgtags	Fri Oct 05 10:44:32 2018 +0200
@@ -21,3 +21,8 @@
 fc8fe2dede6309db4a8cfc5b53eb894cca2f6970 0.1.15
 9cc7207c1399658ef821a1ecdde86df0b5a1298d 0.1.15.1
 f687b90488819f2dba88ed44a254d7cba1f8c652 0.1.16
+20c85661ff35eb595a82ab829eede53544455678 0.1.18
+27c643fea2b4149a23f5e424087fa22a84901497 0.1.18.1
+a9bcf47e975416f509bcd7b695b34313b8b28e8c 0.1.18.2
+5e51b05a38facaea6a20bb35fb42996755bbbe46 0.1.19
+33e3a44c50b353b7c6543e8a2594766fc1ca98d2 0.1.19.1
--- a/buildout.cfg	Thu Sep 06 18:10:04 2018 +0200
+++ b/buildout.cfg	Fri Oct 05 10:44:32 2018 +0200
@@ -86,4 +86,4 @@
 eggs = pyams_content [test]
 
 [versions]
-pyams_content = 0.1.17
+pyams_content = 0.1.20
--- a/docs/HISTORY.txt	Thu Sep 06 18:10:04 2018 +0200
+++ b/docs/HISTORY.txt	Fri Oct 05 10:44:32 2018 +0200
@@ -1,6 +1,35 @@
 History
 =======
 
+0.1.19
+------
+ - added "topic" shared content
+ - added description and notepad attributes to sites, folders and blogs
+ - added common base interface for all illustrations targets
+ - added shared content's title portlet
+ - updated gallery interfaces and properties
+
+0.1.18.2
+--------
+ - check for broken objects while iterating over visible paragraphs
+
+0.1.18.1
+--------
+ - remove broken objects from catalog when reindexing
+
+0.1.18
+------
+ - better PEP 8 conformance
+ - many many ZMI updates
+
+0.1.17
+------
+ - clear catalog and reindex all objects in "pyams_index" script
+ - updated forms templates
+ - updated advanced search engine to search over tags, themes and collections
+ - added "header" attribute to shared contents (replacing "Header" paragraph), and
+   added static attribute to disable header on selected shared contents
+
 0.1.16
 ------
  - use iterators in all dashboards
--- a/setup.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/setup.py	Fri Oct 05 10:44:32 2018 +0200
@@ -14,7 +14,9 @@
 This module contains pyams_content package
 """
 import os
-from setuptools import setup, find_packages
+
+from setuptools import find_packages, setup
+
 
 DOCS = os.path.join(os.path.dirname(__file__),
                     'docs')
@@ -22,7 +24,7 @@
 README = os.path.join(DOCS, 'README.txt')
 HISTORY = os.path.join(DOCS, 'HISTORY.txt')
 
-version = '0.1.17'
+version = '0.1.20'
 long_description = open(README).read() + '\n\n' + open(HISTORY).read()
 
 tests_require = []
--- a/src/pyams_content.egg-info/PKG-INFO	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content.egg-info/PKG-INFO	Fri Oct 05 10:44:32 2018 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pyams-content
-Version: 0.1.16
+Version: 0.1.19.1
 Summary: PyAMS base content interfaces and classes
 Home-page: http://hg.ztfy.org/pyams/pyams_content
 Author: Thierry Florac
@@ -73,6 +73,35 @@
         History
         =======
         
+        0.1.19
+        ------
+         - added "topic" shared content
+         - added description and notepad attributes to sites, folders and blogs
+         - added common base interface for all illustrations targets
+         - added shared content's title portlet
+         - updated gallery interfaces and properties
+        
+        0.1.18.2
+        --------
+         - check for broken objects while iterating over visible paragraphs
+        
+        0.1.18.1
+        --------
+         - remove broken objects from catalog when reindexing
+        
+        0.1.18
+        ------
+         - better PEP 8 conformance
+         - many many ZMI updates
+        
+        0.1.17
+        ------
+         - clear catalog and reindex all objects in "pyams_index" script
+         - updated forms templates
+         - updated advanced search engine to search over tags, themes and collections
+         - added "header" attribute to shared contents (replacing "Header" paragraph), and
+           added static attribute to disable header on selected shared contents
+        
         0.1.16
         ------
          - use iterators in all dashboards
--- a/src/pyams_content.egg-info/SOURCES.txt	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content.egg-info/SOURCES.txt	Fri Oct 05 10:44:32 2018 +0200
@@ -37,6 +37,7 @@
 src/pyams_content/component/gallery/zmi/interfaces.py
 src/pyams_content/component/gallery/zmi/paragraph.py
 src/pyams_content/component/gallery/zmi/templates/gallery-media-thumbnail.pt
+src/pyams_content/component/gallery/zmi/templates/gallery-media.pt
 src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt
 src/pyams_content/component/illustration/__init__.py
 src/pyams_content/component/illustration/paragraph.py
@@ -48,12 +49,14 @@
 src/pyams_content/component/illustration/zmi/templates/illustration-thumbnail.pt
 src/pyams_content/component/illustration/zmi/templates/paragraph-illustration-icon.pt
 src/pyams_content/component/keynumber/__init__.py
+src/pyams_content/component/keynumber/paragraph.py
 src/pyams_content/component/keynumber/interfaces/__init__.py
 src/pyams_content/component/keynumber/portlet/__init__.py
 src/pyams_content/component/keynumber/portlet/interfaces/__init__.py
 src/pyams_content/component/keynumber/portlet/zmi/__init__.py
 src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt
 src/pyams_content/component/keynumber/zmi/__init__.py
+src/pyams_content/component/keynumber/zmi/paragraph.py
 src/pyams_content/component/links/__init__.py
 src/pyams_content/component/links/interfaces/__init__.py
 src/pyams_content/component/links/zmi/__init__.py
@@ -66,7 +69,6 @@
 src/pyams_content/component/paragraph/frame.py
 src/pyams_content/component/paragraph/header.py
 src/pyams_content/component/paragraph/html.py
-src/pyams_content/component/paragraph/keynumber.py
 src/pyams_content/component/paragraph/keypoint.py
 src/pyams_content/component/paragraph/map.py
 src/pyams_content/component/paragraph/milestone.py
@@ -79,13 +81,17 @@
 src/pyams_content/component/paragraph/interfaces/frame.py
 src/pyams_content/component/paragraph/interfaces/header.py
 src/pyams_content/component/paragraph/interfaces/html.py
-src/pyams_content/component/paragraph/interfaces/keynumber.py
 src/pyams_content/component/paragraph/interfaces/keypoint.py
 src/pyams_content/component/paragraph/interfaces/map.py
 src/pyams_content/component/paragraph/interfaces/milestone.py
 src/pyams_content/component/paragraph/interfaces/pictogram.py
 src/pyams_content/component/paragraph/interfaces/verbatim.py
 src/pyams_content/component/paragraph/interfaces/video.py
+src/pyams_content/component/paragraph/portlet/__init__.py
+src/pyams_content/component/paragraph/portlet/interfaces/__init__.py
+src/pyams_content/component/paragraph/portlet/zmi/__init__.py
+src/pyams_content/component/paragraph/portlet/zmi/templates/container-preview.pt
+src/pyams_content/component/paragraph/portlet/zmi/templates/navigation-preview.pt
 src/pyams_content/component/paragraph/zmi/__init__.py
 src/pyams_content/component/paragraph/zmi/audio.py
 src/pyams_content/component/paragraph/zmi/contact.py
@@ -94,7 +100,6 @@
 src/pyams_content/component/paragraph/zmi/header.py
 src/pyams_content/component/paragraph/zmi/html.py
 src/pyams_content/component/paragraph/zmi/interfaces.py
-src/pyams_content/component/paragraph/zmi/keynumber.py
 src/pyams_content/component/paragraph/zmi/keypoint.py
 src/pyams_content/component/paragraph/zmi/map.py
 src/pyams_content/component/paragraph/zmi/milestone.py
@@ -240,11 +245,15 @@
 src/pyams_content/shared/common/interfaces/types.py
 src/pyams_content/shared/common/interfaces/zmi.py
 src/pyams_content/shared/common/portlet/__init__.py
-src/pyams_content/shared/common/portlet/content/__init__.py
-src/pyams_content/shared/common/portlet/content/interfaces/__init__.py
-src/pyams_content/shared/common/portlet/content/skin/__init__.py
-src/pyams_content/shared/common/portlet/content/zmi/__init__.py
-src/pyams_content/shared/common/portlet/content/zmi/preview.pt
+src/pyams_content/shared/common/portlet/head.py
+src/pyams_content/shared/common/portlet/title.py
+src/pyams_content/shared/common/portlet/interfaces/__init__.py
+src/pyams_content/shared/common/portlet/skin/__init__.py
+src/pyams_content/shared/common/portlet/zmi/__init__.py
+src/pyams_content/shared/common/portlet/zmi/head.py
+src/pyams_content/shared/common/portlet/zmi/title.py
+src/pyams_content/shared/common/portlet/zmi/templates/head-preview.pt
+src/pyams_content/shared/common/portlet/zmi/templates/title-preview.pt
 src/pyams_content/shared/common/skin/__init__.py
 src/pyams_content/shared/common/skin/oid.py
 src/pyams_content/shared/common/skin/opengraph.py
@@ -327,6 +336,8 @@
 src/pyams_content/shared/site/link.py
 src/pyams_content/shared/site/manager.py
 src/pyams_content/shared/site/interfaces/__init__.py
+src/pyams_content/shared/site/skin/__init__.py
+src/pyams_content/shared/site/skin/breadcrumb.py
 src/pyams_content/shared/site/zmi/__init__.py
 src/pyams_content/shared/site/zmi/container.py
 src/pyams_content/shared/site/zmi/folder.py
@@ -335,6 +346,10 @@
 src/pyams_content/shared/site/zmi/widget/__init__.py
 src/pyams_content/shared/site/zmi/widget/interfaces.py
 src/pyams_content/shared/site/zmi/widget/templates/folders-input.pt
+src/pyams_content/shared/topic/__init__.py
+src/pyams_content/shared/topic/manager.py
+src/pyams_content/shared/topic/interfaces/__init__.py
+src/pyams_content/shared/topic/zmi/__init__.py
 src/pyams_content/shared/view/__init__.py
 src/pyams_content/shared/view/manager.py
 src/pyams_content/shared/view/merge.py
--- a/src/pyams_content/component/association/zmi/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/association/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -181,8 +181,10 @@
     return switch_element_visibility(request, IAssociationContainer)
 
 
-@adapter_config(name='pictogram', context=(IAssociationContainerTarget, IPyAMSLayer, AssociationsTable), provides=IColumn)
-@adapter_config(name='pictogram', context=(IAssociationContainer, IPyAMSLayer, AssociationsTable), provides=IColumn)
+@adapter_config(name='pictogram', context=(IAssociationContainerTarget, IPyAMSLayer, AssociationsTable), 
+                provides=IColumn)
+@adapter_config(name='pictogram', context=(IAssociationContainer, IPyAMSLayer, AssociationsTable), 
+                provides=IColumn)
 class AssociationsTablePictogramColumn(ImageColumn):
     """Associations table pictogram column"""
 
@@ -197,8 +199,10 @@
         return self.request.localizer.translate(item.icon_hint)
 
 
-@adapter_config(name='name', context=(IAssociationContainerTarget, IPyAMSLayer, AssociationsTable), provides=IColumn)
-@adapter_config(name='name', context=(IAssociationContainer, IPyAMSLayer, AssociationsTable), provides=IColumn)
+@adapter_config(name='name', context=(IAssociationContainerTarget, IPyAMSLayer, AssociationsTable), 
+                provides=IColumn)
+@adapter_config(name='name', context=(IAssociationContainer, IPyAMSLayer, AssociationsTable), 
+                provides=IColumn)
 class AssociationsTablePublicNameColumn(NameColumn):
     """Associations table name column"""
 
@@ -215,8 +219,10 @@
         return title
 
 
-@adapter_config(name='inner_name', context=(IAssociationContainerTarget, IPyAMSLayer, AssociationsTable), provides=IColumn)
-@adapter_config(name='inner_name', context=(IAssociationContainer, IPyAMSLayer, AssociationsTable), provides=IColumn)
+@adapter_config(name='inner_name', context=(IAssociationContainerTarget, IPyAMSLayer, AssociationsTable), 
+                provides=IColumn)
+@adapter_config(name='inner_name', context=(IAssociationContainer, IPyAMSLayer, AssociationsTable), 
+                provides=IColumn)
 class AssociationsTableInnerNameColumn(I18nColumn, GetAttrColumn):
     """Associations table inner name column"""
 
@@ -231,8 +237,10 @@
             return '--'
 
 
-@adapter_config(name='size', context=(IAssociationContainerTarget, IPyAMSLayer, AssociationsTable), provides=IColumn)
-@adapter_config(name='size', context=(IAssociationContainer, IPyAMSLayer, AssociationsTable), provides=IColumn)
+@adapter_config(name='size', context=(IAssociationContainerTarget, IPyAMSLayer, AssociationsTable), 
+                provides=IColumn)
+@adapter_config(name='size', context=(IAssociationContainer, IPyAMSLayer, AssociationsTable), 
+                provides=IColumn)
 class AssociationsTableSizeColumn(I18nColumn, GetAttrColumn):
     """Associations table size column"""
 
@@ -247,8 +255,10 @@
             return '--'
 
 
-@adapter_config(name='trash', context=(IAssociationContainerTarget, IPyAMSLayer, AssociationsTable), provides=IColumn)
-@adapter_config(name='trash', context=(IAssociationContainer, IPyAMSLayer, AssociationsTable), provides=IColumn)
+@adapter_config(name='trash', context=(IAssociationContainerTarget, IPyAMSLayer, AssociationsTable), 
+                provides=IColumn)
+@adapter_config(name='trash', context=(IAssociationContainer, IPyAMSLayer, AssociationsTable), 
+                provides=IColumn)
 class AssociationsTableTrashColumn(ProtectedFormObjectMixin, TrashColumn):
     """Associations table trash column"""
 
--- a/src/pyams_content/component/gallery/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/gallery/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,52 +12,44 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
+from pyramid.events import subscriber
+from pyramid.threadlocal import get_current_registry
+from zope.interface import implementer
+from zope.lifecycleevent import ObjectModifiedEvent
+from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent
+from zope.location import locate
+from zope.location.interfaces import ISublocations
+from zope.schema.fieldproperty import FieldProperty
+from zope.traversing.interfaces import ITraversable
 
-# import interfaces
-from pyams_content.component.gallery.interfaces import IBaseGallery, IGallery, IGalleryTarget, \
-    GALLERY_CONTAINER_KEY, GALLERY_RENDERERS
+from pyams_catalog.utils import index_object
+from pyams_content import _
+from pyams_content.component.gallery.interfaces import GALLERY_CONTAINER_KEY, GALLERY_RENDERERS, IBaseGallery, IGallery, \
+    IGalleryFile, IGalleryTarget
 from pyams_content.component.paragraph import IBaseParagraph
+from pyams_content.features.checker import BaseContentChecker
 from pyams_content.features.checker.interfaces import IContentChecker
+from pyams_content.features.renderer import RenderedContentMixin, RenderersVocabulary
 from pyams_content.shared.common.interfaces import IWfSharedContent
 from pyams_form.interfaces.form import IFormContextPermissionChecker
 from pyams_i18n.interfaces import II18n
-from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent
-from zope.location.interfaces import ISublocations
-from zope.traversing.interfaces import ITraversable
-
-# import packages
-from pyams_catalog.utils import index_object
-from pyams_content.features.checker import BaseContentChecker
-from pyams_content.features.renderer import RenderedContentMixin, RenderersVocabulary
-from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
+from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter
+from pyams_utils.container import BTreeOrderedContainer
 from pyams_utils.factory import factory_config
-from pyams_utils.container import BTreeOrderedContainer
 from pyams_utils.traversing import get_parent
 from pyams_utils.vocabulary import vocabulary_config
-from pyramid.events import subscriber
-from pyramid.threadlocal import get_current_registry
-from zope.interface import implementer
-from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
-from zope.location import locate
-from zope.schema.fieldproperty import FieldProperty
-
-from pyams_content import _
 
 
 #
 # Galleries container
 #
 
-@implementer(IGallery)
+@implementer(IBaseGallery)
 @factory_config(provided=IBaseGallery)
-class Gallery(RenderedContentMixin, BTreeOrderedContainer):
-    """Gallery persistent class"""
+class BaseGallery(RenderedContentMixin, BTreeOrderedContainer):
+    """Base gallery persistent class"""
 
-    title = FieldProperty(IGallery['title'])
-    description = FieldProperty(IGallery['description'])
-    renderer = FieldProperty(IGallery['renderer'])
+    renderer = FieldProperty(IBaseGallery['renderer'])
 
     last_id = 1
 
@@ -73,7 +65,16 @@
             index_object(value)
 
     def get_visible_medias(self):
-        return [media for media in self.values() if media.visible]
+        yield from filter(lambda x: IGalleryFile(x).visible, self.values())
+
+
+@implementer(IGallery)
+@factory_config(provided=IGallery)
+class Gallery(BaseGallery):
+    """Gallery persistent class"""
+
+    title = FieldProperty(IGallery['title'])
+    description = FieldProperty(IGallery['description'])
 
 
 @adapter_config(context=IGalleryTarget, provides=IGallery)
@@ -161,7 +162,7 @@
         for media in IGallery(self.context).values():
             if not media.visible:
                 continue
-            for name, checker in sorted(registry.getAdapters((media, ), IContentChecker),
+            for name, checker in sorted(registry.getAdapters((media,), IContentChecker),
                                         key=lambda x: x[1].weight):
                 output.append('- {0} : '.format(checker.label or
                                                 II18n(media).query_attribute('title', request=request)))
--- a/src/pyams_content/component/gallery/file.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/gallery/file.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,32 +12,27 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
+from persistent import Persistent
+from pyramid.events import subscriber
+from pyramid.threadlocal import get_current_registry
+from zope.container.contained import Contained
+from zope.interface import alsoProvides, implementer
+from zope.lifecycleevent import ObjectModifiedEvent
+from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent
+from zope.schema.fieldproperty import FieldProperty
 
-# import interfaces
 from pyams_content.component.gallery.interfaces import IGalleryFile
-from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
+from pyams_content.features.checker import BaseContentChecker
+from pyams_content.features.checker.interfaces import IContentChecker, MISSING_LANG_VALUE, MISSING_VALUE
 from pyams_content.shared.common.interfaces import IWfSharedContent
-from pyams_file.interfaces import IResponsiveImage, IImage
+from pyams_file.interfaces import IImage, IResponsiveImage
+from pyams_file.property import FileProperty
 from pyams_form.interfaces.form import IFormContextPermissionChecker
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
-from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent
-
-# import packages
-from persistent import Persistent
-from pyams_content.features.checker import BaseContentChecker
-from pyams_file.property import FileProperty
-from pyams_utils.adapter import adapter_config, ContextAdapter
+from pyams_utils.adapter import ContextAdapter, adapter_config
 from pyams_utils.registry import get_utility
 from pyams_utils.request import check_request
 from pyams_utils.traversing import get_parent
-from pyramid.events import subscriber
-from pyramid.threadlocal import get_current_registry
-from zope.lifecycleevent import ObjectModifiedEvent
-from zope.container.contained import Contained
-from zope.interface import implementer, alsoProvides
-from zope.schema.fieldproperty import FieldProperty
 
 
 #
@@ -53,8 +48,6 @@
     alt_title = FieldProperty(IGalleryFile['alt_title'])
     description = FieldProperty(IGalleryFile['description'])
     author = FieldProperty(IGalleryFile['author'])
-    author_comments = FieldProperty(IGalleryFile['author_comments'])
-    pif_number = FieldProperty(IGalleryFile['pif_number'])
     sound = FileProperty(IGalleryFile['sound'])
     sound_title = FieldProperty(IGalleryFile['sound_title'])
     sound_description = FieldProperty(IGalleryFile['sound_description'])
@@ -122,7 +115,7 @@
             langs = manager.get_languages()
         else:
             negotiator = get_utility(INegotiator)
-            langs = (negotiator.server_language, )
+            langs = (negotiator.server_language,)
         i18n = II18n(self.context)
         for lang in langs:
             for attr in ('title', 'alt_title', 'description'):
--- a/src/pyams_content/component/gallery/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/gallery/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,21 +12,16 @@
 
 __docformat__ = 'restructuredtext'
 
+from zope.annotation.interfaces import IAttributeAnnotatable
+from zope.container.constraints import containers, contains
+from zope.container.interfaces import IOrderedContainer
+from zope.interface import Interface
+from zope.schema import Bool, Choice, TextLine
 
-# import standard library
-
-# import interfaces
 from pyams_content.component.paragraph.interfaces import IBaseParagraph
 from pyams_content.features.renderer.interfaces import IRenderedContent
-from zope.container.interfaces import IOrderedContainer
-
-# import packages
-from pyams_file.schema import MediaField, AudioField
-from pyams_i18n.schema import I18nTextLineField, I18nTextField
-from zope.annotation.interfaces import IAttributeAnnotatable
-from zope.container.constraints import contains, containers
-from zope.interface import Interface
-from zope.schema import Bool, TextLine, Choice
+from pyams_file.schema import AudioField, MediaField
+from pyams_i18n.schema import I18nTextField, I18nTextLineField
 
 from pyams_content import _
 
@@ -62,14 +57,6 @@
                       description=_("Name of document's author"),
                       required=True)
 
-    author_comments = I18nTextField(title=_("Author's comments"),
-                                    description=_("Comments relatives to author's rights management"),
-                                    required=False)
-
-    pif_number = TextLine(title=_("Source ID"),
-                          description=_("Number used to identify media into it's original source"),
-                          required=False)
-
     sound = AudioField(title=_("Audio data"),
                        description=_("Sound file associated with the current media"),
                        required=False)
@@ -94,14 +81,6 @@
 class IBaseGallery(IOrderedContainer, IAttributeAnnotatable, IRenderedContent):
     """Base gallery interface"""
 
-    title = I18nTextLineField(title=_("Title"),
-                              description=_("Gallery title, as shown in front-office"),
-                              required=False)
-
-    description = I18nTextField(title=_("Description"),
-                                description=_("Gallery description displayed by front-office template"),
-                                required=False)
-
     renderer = Choice(title=_("Gallery template"),
                       description=_("Presentation template used for this gallery"),
                       vocabulary=GALLERY_RENDERERS,
@@ -124,6 +103,14 @@
 
     contains(IGalleryItem)
 
+    title = I18nTextLineField(title=_("Title"),
+                              description=_("Gallery title, as shown in front-office"),
+                              required=False)
+
+    description = I18nTextField(title=_("Description"),
+                                description=_("Gallery description displayed by front-office template"),
+                                required=False)
+
 
 class IGalleryTarget(IAttributeAnnotatable):
     """Gallery container target marker interface"""
@@ -133,5 +120,5 @@
 GALLERY_PARAGRAPH_NAME = _("Medias gallery")
 
 
-class IGalleryParagraph(IGallery, IBaseParagraph):
+class IGalleryParagraph(IBaseGallery, IBaseParagraph):
     """Gallery paragraph"""
--- a/src/pyams_content/component/gallery/paragraph.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/gallery/paragraph.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,22 +12,19 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
+from zope.interface import implementer
 
-# import interfaces
-from pyams_content.component.gallery.interfaces import IGalleryParagraph, GALLERY_PARAGRAPH_TYPE, GALLERY_PARAGRAPH_NAME
+from pyams_content import _
+from pyams_content.component.gallery import BaseGallery
+from pyams_content.component.gallery.interfaces import GALLERY_PARAGRAPH_NAME, GALLERY_PARAGRAPH_TYPE, IGalleryParagraph
+from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
-from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
-from pyams_i18n.interfaces import II18n, INegotiator, II18nManager
-
-# import packages
-from pyams_content.component.gallery import Gallery as BaseGallery
-from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
+from pyams_content.features.checker.interfaces import IContentChecker, MISSING_LANG_VALUE, MISSING_VALUE
+from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
 from pyams_utils.adapter import adapter_config
-from pyams_utils.registry import utility_config, get_utility
+from pyams_utils.registry import get_utility, utility_config
+from pyams_utils.request import check_request
 from pyams_utils.traversing import get_parent
-from zope.interface import implementer
 
 
 @implementer(IGalleryParagraph)
@@ -37,6 +34,18 @@
     icon_class = 'fa-picture-o'
     icon_hint = GALLERY_PARAGRAPH_NAME
 
+    @property
+    def title(self):
+        request = check_request()
+        translate = request.localizer.translate
+        nb_medias = len(self)
+        if nb_medias > 1:
+            return translate(_("(gallery contains {0} medias)")).format(nb_medias)
+        elif nb_medias == 1:
+            return translate(_("(gallery contains 1 media)"))
+        else:
+            return translate(_("(empty gallery)"))
+
 
 @utility_config(name=GALLERY_PARAGRAPH_TYPE, provides=IParagraphFactory)
 class GalleryFactory(BaseParagraphFactory):
@@ -58,7 +67,7 @@
             langs = manager.get_languages()
         else:
             negotiator = get_utility(INegotiator)
-            langs = (negotiator.server_language, )
+            langs = (negotiator.server_language,)
         i18n = II18n(self.context)
         for lang in langs:
             value = i18n.get_attribute('title', lang, request)
--- a/src/pyams_content/component/gallery/zmi/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/gallery/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,41 +12,35 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
 import json
 import zipfile
-
 from io import BytesIO
 
-# import interfaces
-from pyams_content.component.gallery.interfaces import IGallery
-from pyams_content.component.gallery.zmi.interfaces import IGalleryContentsView
-from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
-from pyams_file.interfaces import IFileInfo
-from pyams_form.interfaces.form import IWidgetsPrefixViewletsManager
-from pyams_i18n.interfaces import II18n
-from pyams_skin.layer import IPyAMSLayer
-from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
+from pyramid.exceptions import NotFound
 from pyramid.interfaces import IView
-
-# import packages
-from pyams_content.shared.common.zmi import WfSharedContentPermissionMixin
-from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
-from pyams_form.form import ajax_config
-from pyams_pagelet.pagelet import pagelet_config
-from pyams_template.template import template_config
-from pyams_utils.url import absolute_url
-from pyams_viewlet.viewlet import viewlet_config, Viewlet
-from pyams_zmi.form import AdminDialogEditForm, AdminDialogDisplayForm
-from pyramid.exceptions import NotFound
 from pyramid.renderers import render_to_response
 from pyramid.response import Response
 from pyramid.view import view_config
 from z3c.form import field
-from zope.interface import implementer, Interface
+from zope.interface import Interface, implementer
 
 from pyams_content import _
+from pyams_content.component.gallery.interfaces import IBaseGallery, IGallery
+from pyams_content.component.gallery.zmi.interfaces import IGalleryContentsView
+from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
+from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
+from pyams_content.shared.common.zmi import WfSharedContentPermissionMixin
+from pyams_file.interfaces import IFileInfo
+from pyams_form.form import ajax_config
+from pyams_form.interfaces.form import IWidgetsPrefixViewletsManager
+from pyams_i18n.interfaces import II18n
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.layer import IPyAMSLayer
+from pyams_template.template import template_config
+from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
+from pyams_utils.url import absolute_url
+from pyams_viewlet.viewlet import Viewlet, viewlet_config
+from pyams_zmi.form import AdminDialogDisplayForm, AdminDialogEditForm
 
 
 #
@@ -82,7 +76,7 @@
 # Gallery contents
 #
 
-@pagelet_config(name='contents.html', context=IGallery, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='contents.html', context=IBaseGallery, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
 @implementer(IGalleryContentsView)
 class GalleryContentForm(AdminDialogDisplayForm):
     """Gallery contents form"""
@@ -94,7 +88,7 @@
     show_widget_title = True
 
 
-@viewlet_config(name='gallery-medias', context=IGallery, view=IGalleryContentsView,
+@viewlet_config(name='gallery-medias', context=IBaseGallery, view=IGalleryContentsView,
                 manager=IWidgetsPrefixViewletsManager)
 @template_config(template='templates/gallery-medias.pt', layer=IPyAMSLayer)
 @implementer(IGalleryContentsView)
@@ -105,7 +99,7 @@
         return II18n(media).query_attribute('title', request=self.request)
 
 
-@view_config(name='get-gallery-medias.html', context=IGallery, request_type=IPyAMSLayer,
+@view_config(name='get-gallery-medias.html', context=IBaseGallery, request_type=IPyAMSLayer,
              permission=VIEW_SYSTEM_PERMISSION)
 @implementer(IGalleryContentsView)
 class GalleryMediasView(WfSharedContentPermissionMixin):
@@ -128,7 +122,7 @@
             return absolute_url(media, self.request, 'preview.html')
 
 
-@view_config(name='set-medias-order.json', context=IGallery, request_type=IPyAMSLayer,
+@view_config(name='set-medias-order.json', context=IBaseGallery, request_type=IPyAMSLayer,
              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
 def set_medias_order(request):
     """Set gallery medias order"""
@@ -137,11 +131,11 @@
     return {'status': 'success'}
 
 
-@view_config(name='set-media-visibility.json', context=IGallery, request_type=IPyAMSLayer,
+@view_config(name='set-media-visibility.json', context=IBaseGallery, request_type=IPyAMSLayer,
              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
 def set_media_visibility(request):
     """Set gallery media visibility"""
-    gallery = IGallery(request.context)
+    gallery = IBaseGallery(request.context)
     media = gallery.get(str(request.params.get('object_name')))
     if media is None:
         raise NotFound()
@@ -153,13 +147,13 @@
 # Gallery medias downloader
 #
 
-@view_config(name='get-medias.zip', context=IGallery, request_type=IPyAMSLayer,
+@view_config(name='get-medias.zip', context=IBaseGallery, request_type=IPyAMSLayer,
              permission=VIEW_SYSTEM_PERMISSION)
 def get_medias_archive(request):
     """Get all gallery medias as ZIP file"""
     zip_data = BytesIO()
     zip_file = zipfile.ZipFile(zip_data, mode='w')
-    for media in IGallery(request.context).values():
+    for media in IBaseGallery(request.context).values():
         zip_file.writestr(IFileInfo(media.data).filename, media.data.data)
     zip_file.close()
     zip_data.seek(0)
--- a/src/pyams_content/component/gallery/zmi/file.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/gallery/zmi/file.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,48 +12,45 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
-# import interfaces
-from pyams_content.component.gallery.interfaces import IGallery, IGalleryFile, IGalleryParagraph, \
-    GALLERY_FILE_HIDDEN_FIELDS
-from pyams_content.component.gallery.zmi.interfaces import IGalleryMediasAddFields, IGalleryContentsView
-from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
-from pyams_file.interfaces.archive import IArchiveExtractor
-from pyams_form.interfaces.form import IFormContextPermissionChecker
-from pyams_i18n.interfaces import II18n
-from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager, IContextActions
-from pyams_skin.layer import IPyAMSLayer
-from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION, FORBIDDEN_PERMISSION
+from pyramid.renderers import render
+from z3c.form import field
 from z3c.form.interfaces import NOT_CHANGED
+from zope.interface import Interface
+from zope.lifecycleevent import ObjectCreatedEvent
+from zope.location import locate
 from zope.schema.interfaces import WrongType
 
-# import packages
 from pyams_content.component.gallery.file import GalleryFile
-from pyams_content.shared.common import IWfSharedContent
+from pyams_content.component.gallery.interfaces import GALLERY_FILE_HIDDEN_FIELDS, IBaseGallery, IGalleryFile, \
+    IGalleryParagraph
+from pyams_content.component.gallery.zmi.interfaces import IGalleryContentsView, IGalleryMediasAddFields
+from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
+from pyams_content.shared.common.interfaces import IWfSharedContent
 from pyams_content.shared.common.zmi import WfSharedContentPermissionMixin
 from pyams_file.file import get_magic_content_type
+from pyams_file.interfaces.archive import IArchiveExtractor
 from pyams_file.zmi.file import FilePropertiesAction
 from pyams_form.form import AJAXAddForm, ajax_config
 from pyams_form.group import NamedWidgetsGroup
+from pyams_form.interfaces.form import IFormContextPermissionChecker
+from pyams_i18n.interfaces import II18n
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.event import get_json_refresh_event
-from pyams_skin.viewlet.toolbar import ToolbarAction, JsToolbarActionItem
+from pyams_skin.interfaces.viewlet import IContextActions, IWidgetTitleViewletManager
+from pyams_skin.layer import IPyAMSLayer
+from pyams_skin.viewlet.toolbar import JsToolbarActionItem, ToolbarAction
+from pyams_utils.interfaces import FORBIDDEN_PERMISSION, VIEW_SYSTEM_PERMISSION
 from pyams_utils.registry import query_utility
 from pyams_utils.traversing import get_parent
 from pyams_utils.url import absolute_url
 from pyams_viewlet.viewlet import viewlet_config
-from pyams_zmi.form import AdminDialogEditForm, AdminDialogAddForm
-from pyramid.renderers import render
-from z3c.form import field
-from zope.lifecycleevent import ObjectCreatedEvent
-from zope.location import locate
+from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
 
 from pyams_content import _
 
 
-@viewlet_config(name='add-media.menu', context=IGallery, view=IGalleryContentsView, manager=IWidgetTitleViewletManager)
+@viewlet_config(name='add-media.menu', context=IBaseGallery, view=IGalleryContentsView,
+                manager=IWidgetTitleViewletManager)
 class GalleryMediaAddMenu(WfSharedContentPermissionMixin, ToolbarAction):
     """Gallery media add menu"""
 
@@ -64,8 +61,8 @@
     stop_propagation = True
 
 
-@pagelet_config(name='add-media.html', context=IGallery, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
-@ajax_config(name='add-media.json', context=IGallery, layer=IPyAMSLayer, base=AJAXAddForm)
+@pagelet_config(name='add-media.html', context=IBaseGallery, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='add-media.json', context=IBaseGallery, layer=IPyAMSLayer, base=AJAXAddForm)
 class GalleryMediaAddForm(AdminDialogAddForm):
     """Gallery media add form"""
 
@@ -115,9 +112,8 @@
                     medias.append(media)
             for media in medias:
                 media.author = data.get('author')
-                media.author_comments = data.get('author_comments')
                 self.context.append(media)
-        return None
+        return medias
 
     def get_ajax_output(self, changes):
         return {
@@ -127,7 +123,7 @@
         }
 
 
-@viewlet_config(name='file.showhide.action', context=IGalleryFile, layer=IPyAMSLayer, view=IGalleryContentsView,
+@viewlet_config(name='file.showhide.action', context=IGalleryFile, layer=IPyAMSLayer, view=Interface,
                 manager=IContextActions, permission=VIEW_SYSTEM_PERMISSION, weight=1)
 class GalleryFileShowHideAction(WfSharedContentPermissionMixin, JsToolbarActionItem):
     """Gallery file show/hide action"""
@@ -163,7 +159,7 @@
             return self.url
 
 
-@viewlet_config(name='file.properties.action', context=IGalleryFile, layer=IPyAMSLayer, view=IGalleryContentsView,
+@viewlet_config(name='file.properties.action', context=IGalleryFile, layer=IPyAMSLayer, view=Interface,
                 manager=IContextActions, permission=VIEW_SYSTEM_PERMISSION, weight=5)
 class GalleryFilePropertiesAction(FilePropertiesAction):
     """Media properties action"""
@@ -188,14 +184,9 @@
 
     @property
     def title(self):
-        gallery = get_parent(self.context, IGallery)
+        gallery = get_parent(self.context, IBaseGallery)
         return II18n(gallery).query_attribute('title', request=self.request)
 
-    def updateWidgets(self, prefix=None):
-        super(GalleryFilePropertiesEditForm, self).updateWidgets(prefix)
-        if 'pif_number' in self.widgets:
-            self.widgets['pif_number'].input_css_class = 'col-md-3'
-
     def updateGroups(self):
         self.add_group(NamedWidgetsGroup(self, 'audio_file', self.widgets,
                                          ('sound', 'sound_title', 'sound_description'),
@@ -209,7 +200,7 @@
     def get_ajax_output(self, changes):
         output = super(self.__class__, self).get_ajax_output(changes)
         if 'title' in changes.get(IGalleryFile, ()):
-            gallery = get_parent(self.context, IGallery)
+            gallery = get_parent(self.context, IBaseGallery)
             if gallery is not None:
                 output.setdefault('events', []).append({
                     'event': 'myams.refresh',
@@ -228,7 +219,7 @@
         return output
 
 
-@viewlet_config(name='gallery-file-remover.action', context=IGalleryFile, layer=IPyAMSLayer, view=IGalleryContentsView,
+@viewlet_config(name='gallery-file-remover.action', context=IGalleryFile, layer=IPyAMSLayer, view=Interface,
                 manager=IContextActions, weight=90)
 class GalleryFileRemoverAction(WfSharedContentPermissionMixin, JsToolbarActionItem):
     """Gallery file remover action"""
--- a/src/pyams_content/component/gallery/zmi/interfaces.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/gallery/zmi/interfaces.py	Fri Oct 05 10:44:32 2018 +0200
@@ -17,13 +17,12 @@
 
 # import interfaces
 
-# import packages
-from pyams_file.schema import FileField
-from pyams_i18n.schema import I18nTextField
 from zope.interface import Interface
 from zope.schema import TextLine
 
 from pyams_content import _
+# import packages
+from pyams_file.schema import FileField
 
 
 class IGalleryContentsView(Interface):
@@ -40,7 +39,3 @@
     author = TextLine(title=_("Author"),
                       description=_("Name of document's author"),
                       required=True)
-
-    author_comments = I18nTextField(title=_("Author comments"),
-                                    description=_("Comments relatives to author's rights management"),
-                                    required=False)
--- a/src/pyams_content/component/gallery/zmi/paragraph.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/gallery/zmi/paragraph.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,39 +12,42 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
+from pyramid.interfaces import IView
+from pyramid.renderers import render
+from pyramid.view import view_config
+from transaction.interfaces import ITransactionManager
+from z3c.form import button, field
+from z3c.form.interfaces import INPUT_MODE
+from zope.interface import Interface, implementer
 
-# import interfaces
-from pyams_content.component.gallery.interfaces import IGalleryParagraph, IBaseGallery, GALLERY_PARAGRAPH_TYPE
+from pyams_content.component.gallery.interfaces import GALLERY_PARAGRAPH_TYPE, IGalleryParagraph
+from pyams_content.component.gallery.paragraph import Gallery
+from pyams_content.component.gallery.zmi.file import GalleryMediaAddForm
 from pyams_content.component.gallery.zmi.interfaces import IGalleryContentsView
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
-    PARAGRAPH_HIDDEN_FIELDS
-from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView
+from pyams_content.component.paragraph.interfaces import IParagraphContainer, IParagraphContainerTarget
+from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \
+    BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, IParagraphEditFormButtons, ParagraphContainerTable, \
+    get_json_paragraph_refresh_event
+from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerView, IParagraphInnerEditor
+from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
+from pyams_content.shared.common.zmi import WfSharedContentPermissionMixin
+from pyams_form.form import AJAXAddForm, ajax_config
 from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
 from pyams_i18n.interfaces import II18n
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.container import delete_container_element
 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
 from pyams_skin.layer import IPyAMSLayer
-from pyramid.interfaces import IView
-from z3c.form.interfaces import INPUT_MODE
-
-# import packages
-from pyams_content.component.gallery.paragraph import Gallery
-from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \
-    BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, get_json_paragraph_refresh_event, IParagraphEditFormButtons
-from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
-from pyams_content.shared.common.zmi import WfSharedContentPermissionMixin
-from pyams_form.form import ajax_config
-from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.table import get_table_id
 from pyams_skin.viewlet.toolbar import ToolbarAction
 from pyams_template.template import template_config
 from pyams_utils.adapter import adapter_config
+from pyams_utils.interfaces import ICacheKeyValue
+from pyams_utils.traversing import get_parent
 from pyams_utils.url import absolute_url
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm, InnerAdminDisplayForm
-from z3c.form import field, button
-from zope.interface import implementer, Interface
 
 from pyams_content import _
 
@@ -70,7 +73,7 @@
     legend = _("Add new gallery")
     icon_css_class = 'fa fa-fw fa-picture-o'
 
-    fields = field.Fields(IGalleryParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
+    fields = field.Fields(IGalleryParagraph).select('renderer')
     edit_permission = MANAGE_CONTENT_PERMISSION
 
     def create(self, data):
@@ -92,21 +95,11 @@
     legend = _("Edit gallery properties")
     icon_css_class = 'fa fa-fw fa-picture-o'
 
-    fields = field.Fields(IGalleryParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
+    fields = field.Fields(IGalleryParagraph).select('renderer')
     fields['renderer'].widgetFactory = RendererFieldWidget
 
     edit_permission = MANAGE_CONTENT_PERMISSION
 
-    def get_ajax_output(self, changes):
-        updated = changes.get(IBaseGallery, ())
-        if 'title' in updated:
-            return {
-                'status': 'success',
-                'events': [get_json_paragraph_refresh_event(self.context, self.request), ]
-            }
-        else:
-            return super(self.__class__, self).get_ajax_output(changes)
-
 
 @adapter_config(context=(IGalleryParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
 @implementer(IInnerForm)
@@ -149,7 +142,7 @@
 
 @viewlet_config(name='add-media.menu', context=IGalleryParagraph, view=GalleryContentsView,
                 manager=IWidgetTitleViewletManager)
-class GalleryMediaAddMenu(WfSharedContentPermissionMixin, ToolbarAction):
+class GalleryParagraphMediaAddMenu(WfSharedContentPermissionMixin, ToolbarAction):
     """Gallery media add menu"""
 
     label = _("Add media(s)")
@@ -157,3 +150,47 @@
     url = 'add-media.html'
     modal_target = True
     stop_propagation = True
+
+
+@pagelet_config(name='add-media.html', context=IGalleryParagraph, layer=IPyAMSLayer,
+                permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='add-media.json', context=IGalleryParagraph, layer=IPyAMSLayer, base=AJAXAddForm)
+class GalleryParagraphMediaAddForm(GalleryMediaAddForm):
+    """Gallery media add form"""
+
+    def get_ajax_output(self, changes):
+        ITransactionManager(self.context).commit()
+        medias = []
+        for media in changes:
+            medias.append(render('templates/gallery-media.pt',
+                                 {'media': media}, request=self.request))
+        output = {
+            'status': 'success',
+            'message': self.request.localizer.translate(_("Media(s) successfully added")),
+            'events': [
+                get_json_paragraph_refresh_event(self.context, self.request)
+            ],
+            'callback': 'PyAMS_content.galleries.addMediaCallback',
+            'options': {
+                'parent': '{0}::{1}'.format(get_table_id(ParagraphContainerTable,
+                                                         context=get_parent(self.context, IParagraphContainerTarget)),
+                                            ICacheKeyValue(self.context)),
+                'medias': medias
+            }
+        }
+        return output
+
+
+@view_config(name='delete-element.json', context=IGalleryParagraph, request_type=IPyAMSLayer,
+             renderer='json', xhr=True)
+def delete_media(request):
+    """Delete media from container"""
+    result = delete_container_element(request, IGalleryParagraph)
+    if result.get('status') == 'success':
+        result.update({
+            'handle_json': True,
+            'events': [
+                get_json_paragraph_refresh_event(request.context, request)
+            ]
+        })
+    return result
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/component/gallery/zmi/templates/gallery-media.pt	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,58 @@
+<div class="media margin-5 margin-bottom-10 radius-4 padding-5 pull-left text-center"
+	 style="position: relative;"
+	 tal:attributes="data-ams-element-name media.__name__">
+	<tal:var define="thumbnails tales:thumbnails(media.data);">
+		<tal:if condition="thumbnails">
+			<tal:if condition="media.data.content_type.startswith('image/')">
+				<a class="fancyimg hint" data-toggle
+				   data-ams-hint-gravity="sw"
+				   title="Zoom image" i18n:attributes="title"
+				   tal:define="target thumbnails.get_thumbnail('800x600')"
+				   tal:attributes="class 'fancyimg hint {0}'.format('not-visible' if not media.visible else '');
+								   href tales:absolute_url(target);
+								   rel string:gallery_${context.__name__};">
+					<img class="thumbnail"
+						 data-ams-hint-gravity="s"
+						 tal:define="thumbnail thumbnails.get_thumbnail('128x128');
+									 image_size thumbnail.get_image_size();
+									 margin_left 64 - image_size[0] / 2;
+									 margin_top 64 - image_size[1] / 2;
+									 title i18n:media.title;
+									 src tales:absolute_url(thumbnail);"
+						 tal:attributes="src string:${src}?_=${tales:timestamp(thumbnail)};
+										 id 'media_{0}_{1}'.format(context.__name__, media.__name__);
+										 original-title title or '--';
+										 style string:margin-left: ${margin_left}px;; margin-right: ${margin_left}px;; margin-top: ${margin_top}px;; margin-bottom: ${margin_top}px;;" />
+				</a>
+			</tal:if>
+			<tal:if condition="not:media.data.content_type.startswith('image/')">
+				<a tal:define="thumbnail thumbnails.get_thumbnail('128x128');
+							   target view.get_thumbnail_target(media.data);
+							   image_size thumbnail.get_image_size();
+							   margin_left 64 - image_size[0] / 2;
+							   margin_top 64 - image_size[1] / 2;
+							   title i18n:media.title;"
+				   tal:omit-tag="not:target"
+				   tal:attributes="href target" data-toggle="modal">
+					<img class="thumbnail no-border"
+						 data-ams-hint-gravity="s"
+						 tal:attributes="src tales:absolute_url(thumbnail);
+										 id 'media_{0}_{1}'.format(context.__name__, media.__name__);
+										 original-title title or '--';
+										 style string:margin-left: ${margin_left}px;; margin-right: ${margin_left}px;; margin-top: ${margin_top}px;; margin-bottom: ${margin_top}px;;" />
+				</a>
+			</tal:if>
+		</tal:if>
+		<tal:if condition="not:thumbnails">
+			<img class="thumbnail hint" src="/--static--/pyams_skin/img/mimetypes/unknown.png"
+				 tal:attributes="title i18n:media.title"
+				 style="padding: 48px;" />
+		</tal:if>
+	</tal:var>
+	<div class="btn-group margin-top-10"
+		 tal:define="actions tales:context_actions(media);">
+		<tal:loop repeat="viewlet actions.viewlets"
+				  content="structure viewlet.render()" />
+	</div>
+	<span class="clearfix"></span>
+</div>
--- a/src/pyams_content/component/illustration/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/illustration/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,39 +12,33 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
-# import interfaces
-from pyams_content.component.illustration.interfaces import IIllustration, IIllustrationTarget, \
-    ILLUSTRATION_KEY, ILLUSTRATION_RENDERERS, IBasicIllustration, IBasicIllustrationTarget, BASIC_ILLUSTRATION_KEY, \
-    ILinkIllustrationTarget, LINK_ILLUSTRATION_KEY, ILinkIllustration
-from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
-from pyams_file.interfaces import IFileInfo, IImage, IResponsiveImage
-from pyams_i18n.interfaces import INegotiator, II18n, II18nManager
+from persistent import Persistent
+from pyramid.events import subscriber
+from pyramid.threadlocal import get_current_registry
+from zope.container.contained import Contained
+from zope.interface import alsoProvides, implementer
+from zope.lifecycleevent import ObjectAddedEvent
 from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent
 from zope.location.interfaces import ISublocations
+from zope.schema.fieldproperty import FieldProperty
 from zope.traversing.interfaces import ITraversable
 
-# import packages
-from persistent import Persistent
+from pyams_content import _
+from pyams_content.component.illustration.interfaces import BASIC_ILLUSTRATION_KEY, IBasicIllustration, \
+    IBasicIllustrationTarget, IIllustration, IIllustrationTarget, IIllustrationTargetBase, ILLUSTRATION_KEY, \
+    ILLUSTRATION_RENDERERS, ILinkIllustration, ILinkIllustrationTarget, LINK_ILLUSTRATION_KEY
 from pyams_content.features.checker import BaseContentChecker
+from pyams_content.features.checker.interfaces import IContentChecker, MISSING_LANG_VALUE, MISSING_VALUE
 from pyams_content.features.renderer import RenderedContentMixin, RenderersVocabulary
+from pyams_file.interfaces import IFileInfo, IImage, IResponsiveImage
+from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
 from pyams_i18n.property import I18nFileProperty
-from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
+from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter
 from pyams_utils.factory import factory_config
-from pyams_utils.registry import query_utility, get_utility, get_global_registry
+from pyams_utils.registry import get_global_registry, get_utility, query_utility
 from pyams_utils.request import check_request
 from pyams_utils.traversing import get_parent
 from pyams_utils.vocabulary import vocabulary_config
-from pyramid.events import subscriber
-from pyramid.threadlocal import get_current_registry
-from zope.container.contained import Contained
-from zope.interface import implementer, alsoProvides
-from zope.lifecycleevent import ObjectCreatedEvent, ObjectAddedEvent
-from zope.schema.fieldproperty import FieldProperty
-
-from pyams_content import _
 
 
 @implementer(IBasicIllustration)
@@ -77,6 +71,15 @@
         return False
 
 
+@implementer(IIllustration)
+@factory_config(provided=IIllustration)
+class Illustration(RenderedContentMixin, BasicIllustration):
+    """Illustration persistent class"""
+
+    description = FieldProperty(IIllustration['description'])
+    renderer = FieldProperty(IIllustration['renderer'])
+
+
 @adapter_config(context=IBasicIllustrationTarget, provides=IIllustration)
 def basic_illustration_factory(context):
     """Basic illustration factory"""
@@ -89,15 +92,6 @@
                                   callback=illustration_callback)
 
 
-@implementer(IIllustration)
-@factory_config(provided=IIllustration)
-class Illustration(RenderedContentMixin, BasicIllustration):
-    """Illustration persistent class"""
-
-    description = FieldProperty(IIllustration['description'])
-    renderer = FieldProperty(IIllustration['renderer'])
-
-
 @adapter_config(context=IIllustrationTarget, provides=IIllustration)
 def illustration_factory(context):
     """Illustration factory"""
@@ -151,7 +145,7 @@
     update_illustration_properties(illustration)
 
 
-@adapter_config(name='illustration', context=IBasicIllustrationTarget, provides=ITraversable)
+@adapter_config(name='illustration', context=IIllustrationTargetBase, provides=ITraversable)
 class IllustrationNamespace(ContextAdapter):
     """++illustration++ namespace adapter"""
 
@@ -160,13 +154,13 @@
         return registry.queryAdapter(self.context, IIllustration, name=name)
 
 
-@adapter_config(name='illustration', context=IBasicIllustrationTarget, provides=ISublocations)
+@adapter_config(name='illustration', context=IIllustrationTargetBase, provides=ISublocations)
 class IllustrationSublocations(ContextAdapter):
     """Illustration sub-locations adapter"""
 
     def sublocations(self):
         registry = get_global_registry()
-        for name, adapter in registry.getAdapters((self, ), IBasicIllustration):
+        for name, adapter in registry.getAdapters((self,), IBasicIllustration):
             yield adapter
 
 
@@ -185,7 +179,7 @@
             langs = manager.get_languages()
         else:
             negotiator = get_utility(INegotiator)
-            langs = (negotiator.server_language, )
+            langs = (negotiator.server_language,)
         missing_value = translate(MISSING_VALUE)
         missing_lang_value = translate(MISSING_LANG_VALUE)
         i18n = II18n(self.context)
@@ -204,7 +198,7 @@
                         output.append(missing_lang_value.format(field=translate(IIllustration[attr].title),
                                                                 lang=lang))
         if has_data:
-            for attr in ('author', ):
+            for attr in ('author',):
                 value = getattr(self.context, attr)
                 if not value:
                     output.append(missing_value.format(field=translate(IIllustration[attr].title)))
--- a/src/pyams_content/component/illustration/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/illustration/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,20 +12,14 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
-# import interfaces
-from pyams_content.component.paragraph.interfaces import IBaseParagraph
-from pyams_content.features.renderer.interfaces import IRenderedContent
-from pyams_i18n.schema import I18nTextLineField, I18nTextField, I18nThumbnailMediaField
 from zope.annotation.interfaces import IAttributeAnnotatable
-
-# import packages
 from zope.interface import Interface
 from zope.schema import Choice, TextLine
 
 from pyams_content import _
+from pyams_content.component.paragraph.interfaces import IBaseParagraph
+from pyams_content.features.renderer.interfaces import IRenderedContent
+from pyams_i18n.schema import I18nTextField, I18nTextLineField, I18nThumbnailMediaField
 
 
 #
@@ -79,7 +73,11 @@
     """Navigation link illustration interface"""
 
 
-class IBasicIllustrationTarget(IAttributeAnnotatable):
+class IIllustrationTargetBase(IAttributeAnnotatable):
+    """Illustration target base interface"""
+
+
+class IBasicIllustrationTarget(IIllustrationTargetBase):
     """Basic illustration target marker interface"""
 
 
@@ -87,7 +85,7 @@
     """Illustration target interface"""
 
 
-class ILinkIllustrationTarget(IBasicIllustrationTarget):
+class ILinkIllustrationTarget(IIllustrationTargetBase):
     """Link illustration target interface"""
 
 
--- a/src/pyams_content/component/illustration/zmi/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/illustration/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,30 +12,25 @@
 
 __docformat__ = 'restructuredtext'
 
+from transaction.interfaces import ITransactionManager
+from z3c.form import field
 
-# import standard library
-
-# import interfaces
+from pyams_content import _
 from pyams_content.component.illustration.interfaces import IBasicIllustration, IBasicIllustrationTarget, \
     IIllustration, IIllustrationTarget, ILinkIllustrationTarget
-from pyams_content.component.paragraph import IBaseParagraph
-from pyams_form.interfaces.form import IInnerSubForm, IWidgetsPrefixViewletsManager
-from pyams_skin.layer import IPyAMSLayer
-from pyams_zmi.interfaces import IPropertiesEditForm
-from transaction.interfaces import ITransactionManager
-
 # import packages
 from pyams_content.component.illustration.zmi.paragraph import ParagraphContainerIllustrationMarker
+from pyams_content.component.paragraph import IBaseParagraph
 from pyams_content.component.paragraph.zmi import get_json_paragraph_markers_refresh_event
 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
+from pyams_form.interfaces.form import IInnerSubForm, IWidgetsPrefixViewletsManager
 from pyams_skin.event import get_json_form_refresh_event, get_json_widget_refresh_event
+from pyams_skin.layer import IPyAMSLayer
 from pyams_template.template import template_config
 from pyams_utils.adapter import adapter_config
 from pyams_viewlet.viewlet import viewlet_config, Viewlet, EmptyViewlet
 from pyams_zmi.form import InnerAdminEditForm
-from z3c.form import field
-
-from pyams_content import _
+from pyams_zmi.interfaces import IPropertiesEditForm
 
 
 #
--- a/src/pyams_content/component/illustration/zmi/paragraph.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/illustration/zmi/paragraph.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,40 +12,35 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
-# import interfaces
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, \
-    IParagraphContainer
-from pyams_content.component.illustration.interfaces import IIllustrationTarget, IIllustration, \
-    IIllustrationParagraph, ILLUSTRATION_PARAGRAPH_TYPE
-from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView, \
-    IParagraphContainerTable, IParagraphTitleToolbar
-from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
-from pyams_form.interfaces.form import IInnerForm
-from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
-from pyams_skin.layer import IPyAMSLayer
-from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
 from transaction.interfaces import ITransactionManager
+from z3c.form import field, button
 from z3c.form.interfaces import INPUT_MODE
-
-# import packages
-from pyams_content.component.illustration.paragraph import Illustration
-from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \
-    BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, get_json_paragraph_refresh_event, IParagraphEditFormButtons
-from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
-from pyams_form.form import ajax_config
-from pyams_pagelet.pagelet import pagelet_config
-from pyams_skin.event import get_json_form_refresh_event
-from pyams_template.template import template_config
-from pyams_utils.adapter import adapter_config
-from pyams_viewlet.viewlet import viewlet_config, Viewlet
-from pyams_zmi.form import AdminDialogAddForm
-from z3c.form import field, button
 from zope.interface import implementer
 
 from pyams_content import _
+from pyams_content.component.illustration.interfaces import IIllustrationTarget, IIllustration, \
+    IIllustrationParagraph, ILLUSTRATION_PARAGRAPH_TYPE
+# import packages
+from pyams_content.component.illustration.paragraph import Illustration
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, \
+    IParagraphContainer
+from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \
+    BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, get_json_paragraph_refresh_event, IParagraphEditFormButtons
+from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView, \
+    IParagraphContainerTable, IParagraphTitleToolbar
+from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
+from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
+from pyams_form.form import ajax_config
+from pyams_form.interfaces.form import IInnerForm
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.event import get_json_form_refresh_event
+from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
+from pyams_skin.layer import IPyAMSLayer
+from pyams_template.template import template_config
+from pyams_utils.adapter import adapter_config
+from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
+from pyams_viewlet.viewlet import viewlet_config, Viewlet
+from pyams_zmi.form import AdminDialogAddForm
 
 
 #
@@ -74,8 +69,8 @@
     dialog_class = 'modal-large'
     icon_css_class = 'fa fa-fw fa-file-image-o'
 
-    fields = field.Fields(IIllustrationParagraph).select('data', 'title', 'alt_title', 'description',
-                                                         'author', 'renderer')
+    fields = field.Fields(IIllustrationParagraph).select('data', 'title', 'alt_title',
+                                                         'author', 'description', 'renderer')
 
     edit_permission = MANAGE_CONTENT_PERMISSION
 
@@ -99,8 +94,8 @@
     dialog_class = 'modal-large'
     icon_css_class = 'fa fa-fw fa-file-image-o'
 
-    fields = field.Fields(IIllustrationParagraph).select('data', 'title', 'alt_title', 'description',
-                                                         'author', 'renderer')
+    fields = field.Fields(IIllustrationParagraph).select('data', 'title', 'alt_title',
+                                                         'author', 'description', 'renderer')
     fields['renderer'].widgetFactory = RendererFieldWidget
 
     edit_permission = MANAGE_CONTENT_PERMISSION
--- a/src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt	Fri Oct 05 10:44:32 2018 +0200
@@ -23,7 +23,7 @@
 	</ul>
 	<div tal:define="visible_links list(settings.links.get_visible_items(request))"
 		 tal:condition="visible_links">
-		<u><i18n:var translate="" >Associated links</i18n:var> :</u>
+		<u><i18n:var translate>Associated links</i18n:var> :</u>
 		<ul>
 			<li tal:repeat="link visible_links">
 				<i class="fa fa-fw fa-eye-slash text-danger hint opaque align-base"
--- a/src/pyams_content/component/keynumber/zmi/paragraph.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/keynumber/zmi/paragraph.py	Fri Oct 05 10:44:32 2018 +0200
@@ -40,7 +40,7 @@
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm
 from z3c.form import field, button
-from zope.interface import implementer, Interface
+from zope.interface import implementer
 
 from pyams_content import _
 
--- a/src/pyams_content/component/links/zmi/container.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/links/zmi/container.py	Fri Oct 05 10:44:32 2018 +0200
@@ -16,7 +16,8 @@
 # import standard library
 
 # import interfaces
-from pyams_content.component.association.interfaces import IAssociationContainer, IAssociationContainerTarget, IAssociationInfo
+from pyams_content.component.association.interfaces import IAssociationContainer, IAssociationContainerTarget, \
+    IAssociationInfo
 from pyams_content.component.extfile.interfaces import IBaseExtFile
 from pyams_content.component.links.interfaces import IBaseLink
 from pyams_i18n.interfaces import II18n
--- a/src/pyams_content/component/paragraph/audio.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/audio.py	Fri Oct 05 10:44:32 2018 +0200
@@ -15,25 +15,25 @@
 
 # import standard library
 
+from zope.interface import implementer
+from zope.schema.fieldproperty import FieldProperty
+
 # import interfaces
 from pyams_content.component.illustration.interfaces import IBasicIllustrationTarget
+# import packages
+from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
 from pyams_content.component.paragraph.interfaces.audio import IAudioParagraph, AUDIO_PARAGRAPH_TYPE, \
     AUDIO_PARAGRAPH_RENDERERS, AUDIO_PARAGRAPH_NAME
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
-from pyams_i18n.interfaces import II18nManager, INegotiator, II18n
-
-# import packages
-from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
 from pyams_content.features.renderer import RenderersVocabulary
 from pyams_file.property import FileProperty
+from pyams_i18n.interfaces import II18nManager, INegotiator, II18n
 from pyams_utils.adapter import adapter_config
 from pyams_utils.factory import factory_config
 from pyams_utils.registry import utility_config, get_utility
 from pyams_utils.traversing import get_parent
 from pyams_utils.vocabulary import vocabulary_config
-from zope.interface import implementer
-from zope.schema.fieldproperty import FieldProperty
 
 
 @implementer(IAudioParagraph, IBasicIllustrationTarget)
@@ -45,8 +45,8 @@
     icon_hint = AUDIO_PARAGRAPH_NAME
 
     data = FileProperty(IAudioParagraph['data'])
+    author = FieldProperty(IAudioParagraph['author'])
     description = FieldProperty(IAudioParagraph['description'])
-    author = FieldProperty(IAudioParagraph['author'])
     renderer = FieldProperty(IAudioParagraph['renderer'])
 
 
--- a/src/pyams_content/component/paragraph/container.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/container.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,24 +12,21 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
+from ZODB.interfaces import IBroken
 from zope.interface import implementer
 from zope.location.interfaces import ISublocations
 from zope.traversing.interfaces import ITraversable
 
-from pyams_content import _
-# import interfaces
 from pyams_content.component.paragraph.interfaces import IParagraphFactory, IParagraphContainer, \
     IParagraphContainerTarget, PARAGRAPH_CONTAINER_KEY
-# import packages
 from pyams_content.features.checker import BaseContentChecker
 from pyams_content.features.checker.interfaces import IContentChecker
 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
 from pyams_utils.container import BTreeOrderedContainer
 from pyams_utils.registry import get_global_registry
 
+from pyams_content import _
+
 
 @implementer(IParagraphContainer)
 class ParagraphContainer(BTreeOrderedContainer):
@@ -46,11 +43,11 @@
         if names:
             for name in names:
                 paragraph = self.get(name)
-                if (paragraph is not None) and paragraph.visible:
+                if (paragraph is not None) and (not IBroken.providedBy(paragraph)) and paragraph.visible:
                     yield paragraph
         else:
             for paragraph in self.values():
-                if not paragraph.visible:
+                if IBroken.providedBy(paragraph) or not paragraph.visible:
                     continue
                 if anchors_only and not paragraph.anchor:
                     continue
@@ -107,7 +104,7 @@
             if not paragraph.visible:
                 continue
             visible = True
-            for name, checker in sorted(registry.getAdapters((paragraph, ), IContentChecker),
+            for name, checker in sorted(registry.getAdapters((paragraph,), IContentChecker),
                                         key=lambda x: x[1].weight):
                 if name:
                     output.append('<div class="padding-left-20">')
--- a/src/pyams_content/component/paragraph/interfaces/audio.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/audio.py	Fri Oct 05 10:44:32 2018 +0200
@@ -15,16 +15,14 @@
 
 # import standard library
 
+from zope.schema import TextLine, Choice
+
+from pyams_content import _
 # import interfaces
 from pyams_content.component.paragraph.interfaces import IBaseParagraph
-
 # import packages
 from pyams_file.schema import AudioField
 from pyams_i18n.schema import I18nTextField, I18nTextLineField
-from zope.schema import TextLine, Choice
-
-from pyams_content import _
-
 
 #
 # Audio paragraph
@@ -45,14 +43,14 @@
     title = I18nTextLineField(title=_("Legend"),
                               required=False)
 
+    author = TextLine(title=_("Author"),
+                      description=_("Name of document's author"),
+                      required=False)
+
     description = I18nTextField(title=_("Description"),
                                 description=_("File description displayed by front-office template"),
                                 required=False)
 
-    author = TextLine(title=_("Author"),
-                      description=_("Name of document's author"),
-                      required=False)
-
     renderer = Choice(title=_("Audio template"),
                       description=_("Presentation template used for this audio file"),
                       vocabulary=AUDIO_PARAGRAPH_RENDERERS,
--- a/src/pyams_content/component/paragraph/interfaces/contact.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/contact.py	Fri Oct 05 10:44:32 2018 +0200
@@ -24,6 +24,7 @@
 try:
     from pyams_gis.schema import GeoPointField
 except ImportError:
+    GeoPointField = None
     have_gis = False
 else:
     have_gis = True
--- a/src/pyams_content/component/paragraph/interfaces/map.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/map.py	Fri Oct 05 10:44:32 2018 +0200
@@ -16,6 +16,7 @@
 try:
     from pyams_gis.schema import GeoPointField
 except ImportError:
+    GeoPointField = None
     have_gis = False
 else:
     have_gis = True
@@ -32,7 +33,6 @@
 
     from pyams_content import _
 
-
     #
     # Map paragraph
     #
--- a/src/pyams_content/component/paragraph/interfaces/milestone.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/milestone.py	Fri Oct 05 10:44:32 2018 +0200
@@ -15,19 +15,17 @@
 
 # import standard library
 
-# import interfaces
-from pyams_content.component.paragraph import IBaseParagraph
-from pyams_content.interfaces.container import IOrderedContainer
 from zope.annotation.interfaces import IAttributeAnnotatable
-
-# import packages
-from pyams_i18n.schema import I18nTextLineField, I18nTextField
 from zope.container.constraints import containers, contains
 from zope.interface import Interface
 from zope.schema import Bool, Choice
 
 from pyams_content import _
-
+# import interfaces
+from pyams_content.component.paragraph import IBaseParagraph
+from pyams_content.interfaces.container import IOrderedContainer
+# import packages
+from pyams_i18n.schema import I18nTextLineField, I18nTextField
 
 MILESTONE_CONTAINER_KEY = 'pyams_content.milestones'
 
@@ -81,8 +79,8 @@
     """Milestones paragraph interface"""
 
     body = I18nTextField(title=_("Associated text"),
-                              description=_("Additional text associated to this milestone Paragraph"),
-                              required=False)
+                         description=_("Additional text associated to this milestone paragraph"),
+                         required=False)
 
     renderer = Choice(title=_("Milestones template"),
                       description=_("Presentation template used for milestones"),
--- a/src/pyams_content/component/paragraph/interfaces/video.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/video.py	Fri Oct 05 10:44:32 2018 +0200
@@ -15,16 +15,14 @@
 
 # import standard library
 
+from zope.schema import TextLine, Choice
+
+from pyams_content import _
 # import interfaces
 from pyams_content.component.paragraph.interfaces import IBaseParagraph
-
 # import packages
 from pyams_file.schema import VideoField
 from pyams_i18n.schema import I18nTextField, I18nTextLineField
-from zope.schema import TextLine, Choice
-
-from pyams_content import _
-
 
 #
 # HTML paragraph
@@ -45,14 +43,14 @@
     title = I18nTextLineField(title=_("Legend"),
                               required=False)
 
+    author = TextLine(title=_("Author"),
+                      description=_("Name of document's author"),
+                      required=True)
+
     description = I18nTextField(title=_("Associated text"),
                                 description=_("Video description displayed by front-office template"),
                                 required=False)
 
-    author = TextLine(title=_("Author"),
-                      description=_("Name of document's author"),
-                      required=True)
-
     renderer = Choice(title=_("Video template"),
                       description=_("Presentation template used for this video"),
                       vocabulary=VIDEO_PARAGRAPH_RENDERERS,
--- a/src/pyams_content/component/paragraph/milestone.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/milestone.py	Fri Oct 05 10:44:32 2018 +0200
@@ -15,40 +15,38 @@
 
 # import standard library
 from persistent import Persistent
+from pyramid.events import subscriber
+from zope.container.contained import Contained
+from zope.container.ordered import OrderedContainer
+from zope.interface import implementer
+from zope.lifecycleevent import ObjectModifiedEvent
+from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent
+from zope.location import locate
+from zope.location.interfaces import ISublocations
+from zope.schema.fieldproperty import FieldProperty
+from zope.traversing.interfaces import ITraversable
 
+# import interfaces
+from pyams_catalog.utils import index_object
+from pyams_content import _
+from pyams_content.component.paragraph import BaseParagraph, BaseParagraphFactory, BaseParagraphContentChecker
 # import packages
 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
     IParagraphFactory
 from pyams_content.component.paragraph.interfaces.milestone import IMilestone, IMilestoneContainer, \
     IMilestoneContainerTarget, MILESTONE_CONTAINER_KEY, IMilestoneParagraph, MILESTONE_PARAGRAPH_TYPE, \
     MILESTONE_PARAGRAPH_RENDERERS, MILESTONE_PARAGRAPH_NAME
+from pyams_content.features.checker import BaseContentChecker
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE, ERROR_VALUE
+from pyams_content.features.renderer import RenderersVocabulary
 from pyams_form.interfaces.form import IFormContextPermissionChecker
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
-from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent
-from zope.location.interfaces import ISublocations
-from zope.traversing.interfaces import ITraversable
-
-# import interfaces
-from pyams_catalog.utils import index_object
-from pyams_content.component.paragraph import BaseParagraph, BaseParagraphFactory, BaseParagraphContentChecker
-from pyams_content.features.checker import BaseContentChecker
-from pyams_content.features.renderer import RenderersVocabulary
 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
 from pyams_utils.factory import factory_config
 from pyams_utils.registry import get_current_registry, get_utility, utility_config
 from pyams_utils.request import check_request
 from pyams_utils.traversing import get_parent
 from pyams_utils.vocabulary import vocabulary_config
-from pyramid.events import subscriber
-from zope.container.contained import Contained
-from zope.container.ordered import OrderedContainer
-from zope.interface import implementer
-from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
-from zope.location import locate
-from zope.schema.fieldproperty import FieldProperty
-
-from pyams_content import _
 
 
 #
@@ -220,6 +218,7 @@
 
     icon_class = 'fa-arrows-h'
     icon_hint = MILESTONE_PARAGRAPH_NAME
+
     body = FieldProperty(IMilestoneParagraph['body'])
     renderer = FieldProperty(IMilestoneParagraph['renderer'])
 
--- a/src/pyams_content/component/paragraph/pictogram.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/pictogram.py	Fri Oct 05 10:44:32 2018 +0200
@@ -26,7 +26,7 @@
 from pyams_content.reference.pictograms.interfaces import IPictogramTable
 from pyams_form.interfaces.form import IFormContextPermissionChecker
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
-from zope.lifecycleevent import IObjectAddedEvent, ObjectModifiedEvent, ObjectCreatedEvent
+from zope.lifecycleevent import IObjectAddedEvent, ObjectModifiedEvent
 from zope.location.interfaces import ISublocations
 from zope.traversing.interfaces import ITraversable
 
--- a/src/pyams_content/component/paragraph/portlet/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/portlet/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -22,17 +22,23 @@
 # import packages
 from pyams_content.component.paragraph import BaseParagraph
 # import interfaces
-from pyams_content.component.paragraph.interfaces import IParagraphFactory, IParagraphContainerTarget, \
-    IParagraphContainer
-from pyams_content.component.paragraph.portlet.interfaces import IParagraphContainerPortletSettings
+from pyams_content.component.paragraph.interfaces import IParagraphContainer, IParagraphContainerTarget, \
+    IParagraphFactory
+from pyams_content.component.paragraph.portlet.interfaces import IParagraphContainerPortletSettings, \
+    IParagraphNavigationPortletSettings
 from pyams_i18n.interfaces import II18n
-from pyams_portal.portlet import PortletSettings, portlet_config, Portlet
+from pyams_portal.portlet import Portlet, PortletSettings, portlet_config
 from pyams_utils.factory import factory_config
 from pyams_utils.interfaces import VIEW_PERMISSION
 from pyams_utils.registry import get_global_registry
 from pyams_utils.request import check_request
 from pyams_utils.traversing import get_parent
 
+
+#
+# Paragraphs container portlet
+#
+
 PARAGRAPH_CONTAINER_PORTLET_NAME = 'pyams_content.portlet.paragraphs'
 
 
@@ -76,4 +82,58 @@
     name = PARAGRAPH_CONTAINER_PORTLET_NAME
     label = _("Content paragraphs")
 
+    toolbar_css_class = 'fa fa-fw fa-2x fa-paragraph'
+
     settings_factory = IParagraphContainerPortletSettings
+
+
+#
+# Paragraphs navigation portlet
+#
+
+PARAGRAPH_NAVIGATION_PORTLET_NAME = 'pyams_content.portlet.paragraphs.navigation'
+
+
+@implementer(IParagraphNavigationPortletSettings)
+@factory_config(provided=IParagraphNavigationPortletSettings)
+class ParagraphNavigationPortletSettings(PortletSettings):
+    """Paragraph navigation portlet settings"""
+
+    paragraphs = FieldProperty(IParagraphNavigationPortletSettings['paragraphs'])
+    factories = FieldProperty(IParagraphNavigationPortletSettings['factories'])
+    anchors_only = FieldProperty(IParagraphNavigationPortletSettings['anchors_only'])
+
+    def get_paragraphs_labels(self):
+        if not self.paragraphs:
+            yield '--'
+        else:
+            target = get_parent(self, IParagraphContainerTarget)
+            if target is not None:
+                container = IParagraphContainer(target)
+                for name in self.paragraphs:
+                    paragraph = container.get(name)
+                    if name is not None:
+                        yield II18n(paragraph).query_attribute('title') or BaseParagraph.empty_title
+
+    def get_paragraph_types_labels(self):
+        if not self.factories:
+            yield '--'
+        else:
+            request = check_request()
+            registry = get_global_registry()
+            for factory_name in self.factories:
+                factory = registry.queryUtility(IParagraphFactory, name=factory_name)
+                if factory is not None:
+                    yield request.localizer.translate(factory.name)
+
+
+@portlet_config(permission=VIEW_PERMISSION)
+class ParagraphNavigationPortlet(Portlet):
+    """Paragraphs navigation portlet"""
+
+    name = PARAGRAPH_NAVIGATION_PORTLET_NAME
+    label = _("Paragraphs navigation anchors")
+
+    toolbar_css_class = 'fa fa-fw fa-2x fa-arrows-v'
+
+    settings_factory = IParagraphNavigationPortletSettings
--- a/src/pyams_content/component/paragraph/portlet/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/portlet/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -16,7 +16,7 @@
 # import standard library
 
 # import packages
-from zope.schema import Bool, Set, Choice, List
+from zope.schema import Bool, Choice, List, Set
 
 from pyams_content import _
 # import interfaces
@@ -44,3 +44,25 @@
                         description=_("If 'yes', only paragraphs set as 'anchors' will be selected"),
                         required=True,
                         default=False)
+
+
+class IParagraphNavigationPortletSettings(IPortletSettings):
+    """Paragraphs container navigation settings interface"""
+
+    paragraphs = List(title=_("Selected paragraphs"),
+                      description=_("List of paragraphs selected for navigation; an empty selection means that "
+                                    "all paragraphs will be selectable by following filters; otherwise, "
+                                    "this selection will have priority"),
+                      value_type=Choice(vocabulary='PyAMS content paragraphs'),
+                      required=False)
+
+    factories = Set(title=_("Paragraph types"),
+                    description=_("Select list of paragraph types you want to use for navigation; an empty "
+                                  "selection means that all paragraphs types will be selected"),
+                    required=False,
+                    value_type=Choice(vocabulary=PARAGRAPH_FACTORIES_VOCABULARY))
+
+    anchors_only = Bool(title=_("Anchors only?"),
+                        description=_("If 'no', all paragraphs will be used as navigation anchors"),
+                        required=True,
+                        default=True)
--- a/src/pyams_content/component/paragraph/portlet/zmi/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/portlet/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,16 +12,12 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
 from zope.interface import Interface, alsoProvides
 
 from pyams_content import _
-# import interfaces
 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget
+from pyams_content.component.paragraph.portlet import IParagraphNavigationPortletSettings
 from pyams_content.component.paragraph.portlet.interfaces import IParagraphContainerPortletSettings
-# import packages
 from pyams_form.form import AJAXEditForm
 from pyams_form.interfaces.form import IInnerTabForm
 from pyams_pagelet.interfaces import IPagelet
@@ -37,6 +33,10 @@
 from pyams_utils.traversing import get_parent
 
 
+#
+# Paragraphs container portlet
+#
+
 @pagelet_config(name='properties.html', context=IParagraphContainerPortletSettings, layer=IPyAMSLayer,
                 permission=VIEW_SYSTEM_PERMISSION)
 class ParagraphContainerPortletSettingsEditor(PortletSettingsEditor):
@@ -83,6 +83,61 @@
 
 @adapter_config(context=(Interface, IPyAMSLayer, Interface, IParagraphContainerPortletSettings),
                 provides=IPortletPreviewer)
-@template_config(template='templates/preview.pt', layer=IPyAMSLayer)
+@template_config(template='templates/container-preview.pt', layer=IPyAMSLayer)
 class ParagraphContainerPortletPreviewer(PortletPreviewer):
     """Paragraph container portlet previewer"""
+
+
+#
+# Paragraphs navigation portlet
+#
+
+@pagelet_config(name='properties.html', context=IParagraphNavigationPortletSettings, layer=IPyAMSLayer,
+                permission=VIEW_SYSTEM_PERMISSION)
+class ParagraphNavigationPortletSettingsEditor(PortletSettingsEditor):
+    """Paragraphs navigation portlet settings editor"""
+
+    settings = IParagraphNavigationPortletSettings
+
+
+@adapter_config(name='properties', context=(Interface, IPyAMSLayer, ParagraphNavigationPortletSettingsEditor),
+                provides=IInnerTabForm)
+class ParagraphNavigationPortletSettingsPropertiesEditor(PortletSettingsPropertiesEditor):
+    """Paragraphs navigation portlet settings editor"""
+
+    @property
+    def fields(self):
+        fields = super(ParagraphNavigationPortletSettingsPropertiesEditor, self).fields
+        container = get_parent(self.context, IParagraphContainerTarget)
+        if container is None:
+            fields = fields.omit('paragraphs')
+        return fields
+
+    def updateWidgets(self, prefix=None):
+        super(ParagraphNavigationPortletSettingsPropertiesEditor, self).updateWidgets(prefix)
+        if 'paragraphs' in self.widgets:
+            widget = self.widgets['paragraphs']
+            widget.object_data = {
+                'ams-select2-placeholder': self.request.localizer.translate(
+                    _("No filter, all paragraphs selected"))
+            }
+            alsoProvides(widget, IObjectData)
+        if 'factories' in self.widgets:
+            widget = self.widgets['factories']
+            widget.object_data = {
+                'ams-select2-placeholder': self.request.localizer.translate(
+                    _("No filter, all paragraph types selected"))
+            }
+            alsoProvides(widget, IObjectData)
+
+
+@adapter_config(name='properties.json', context=(IParagraphNavigationPortletSettings, IPyAMSLayer), provides=IPagelet)
+class ParagraphNavigationPortletConfigurationAJAXEditor(AJAXEditForm, ParagraphNavigationPortletSettingsEditor):
+    """Paragraphs navigation portlet settings editor, JSON renderer"""
+
+
+@adapter_config(context=(Interface, IPyAMSLayer, Interface, IParagraphNavigationPortletSettings),
+                provides=IPortletPreviewer)
+@template_config(template='templates/navigation-preview.pt', layer=IPyAMSLayer)
+class ParagraphNavigationPortletPreviewer(PortletPreviewer):
+    """Paragraphs navigation portlet previewer"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/component/paragraph/portlet/zmi/templates/container-preview.pt	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,21 @@
+<tal:var define="settings view.settings" i18n:domain="pyams_content">
+	<div class="padding-5" tal:condition="settings.paragraphs">
+		<i class="fa fa-fw fa-${'check-' if settings.paragraphs else ''}square-o"></i>
+		<span i18n:translate="">Selected paragraphs: </span>
+		<ul>
+			<li tal:repeat="label settings.get_paragraphs_labels()">${label}</li>
+		</ul>
+	</div>
+	<tal:if condition="not:settings.paragraphs">
+		<div class="padding-5" i18n:translate="">Paragraphs filters:</div>
+		<div class="padding-x-10">
+			<i class="fa fa-fw fa-${'check-' if settings.factories else ''}square-o"></i>
+			<span i18n:translate="">Selected paragraph types: </span>
+			${', '.join(settings.get_paragraph_types_labels())}
+		</div>
+		<div class="padding-x-10">
+			<i class="fa fa-fw fa-${'check-' if settings.anchors_only else ''}square-o"></i>
+			<span i18n:translate="">Only display anchors</span>
+		</div>
+	</tal:if>
+</tal:var>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/component/paragraph/portlet/zmi/templates/navigation-preview.pt	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,21 @@
+<tal:var define="settings view.settings" i18n:domain="pyams_content">
+	<div class="padding-5" tal:condition="settings.paragraphs">
+		<i class="fa fa-fw fa-${'check-' if settings.paragraphs else ''}square-o"></i>
+		<span i18n:translate="">Selected paragraphs: </span>
+		<ul>
+			<li tal:repeat="label settings.get_paragraphs_labels()">${label}</li>
+		</ul>
+	</div>
+	<tal:if condition="not:settings.paragraphs">
+		<div class="padding-5" i18n:translate="">Paragraphs filters:</div>
+		<div class="padding-x-10">
+			<i class="fa fa-fw fa-${'check-' if settings.factories else ''}square-o"></i>
+			<span i18n:translate="">Selected paragraph types: </span>
+			${', '.join(settings.get_paragraph_types_labels())}
+		</div>
+		<div class="padding-x-10">
+			<i class="fa fa-fw fa-${'check-' if settings.anchors_only else ''}square-o"></i>
+			<span i18n:translate="">Only display anchors</span>
+		</div>
+	</tal:if>
+</tal:var>
--- a/src/pyams_content/component/paragraph/portlet/zmi/templates/preview.pt	Thu Sep 06 18:10:04 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-<tal:var define="settings view.settings" i18n:domain="pyams_content">
-	<div class="padding-5" tal:condition="settings.paragraphs">
-		<i class="fa fa-fw fa-${'check-' if settings.paragraphs else ''}square-o"></i>
-		<span i18n:translate="">Selected paragraphs: </span>
-		<ul>
-			<li tal:repeat="label settings.get_paragraphs_labels()">${label}</li>
-		</ul>
-	</div>
-	<tal:if condition="not:settings.paragraphs">
-		<div class="padding-5" i18n:translate="">Paragraphs filters:</div>
-		<div class="padding-x-10">
-			<i class="fa fa-fw fa-${'check-' if settings.factories else ''}square-o"></i>
-			<span i18n:translate="">Selected paragraph types: </span>
-			${', '.join(settings.get_paragraph_types_labels())}
-		</div>
-		<div class="padding-x-10">
-			<i class="fa fa-fw fa-${'check-' if settings.anchors_only else ''}square-o"></i>
-			<span i18n:translate="">Only display anchors</span>
-		</div>
-	</tal:if>
-</tal:var>
--- a/src/pyams_content/component/paragraph/verbatim.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/verbatim.py	Fri Oct 05 10:44:32 2018 +0200
@@ -15,24 +15,24 @@
 
 # import standard library
 
+from zope.interface import implementer
+from zope.schema.fieldproperty import FieldProperty
+
 # import interfaces
-from pyams_content.component.illustration.interfaces import IIllustrationTarget, IBasicIllustrationTarget
+from pyams_content.component.illustration.interfaces import IBasicIllustrationTarget
+# import packages
+from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
 from pyams_content.component.paragraph.interfaces.verbatim import IVerbatimParagraph, VERBATIM_PARAGRAPH_TYPE, \
     VERBATIM_PARAGRAPH_RENDERERS, VERBATIM_PARAGRAPH_NAME
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
+from pyams_content.features.renderer import RenderersVocabulary
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
-
-# import packages
-from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
-from pyams_content.features.renderer import RenderersVocabulary
 from pyams_utils.adapter import adapter_config
 from pyams_utils.factory import factory_config
 from pyams_utils.registry import utility_config, get_utility
 from pyams_utils.traversing import get_parent
 from pyams_utils.vocabulary import vocabulary_config
-from zope.interface import implementer
-from zope.schema.fieldproperty import FieldProperty
 
 
 #
--- a/src/pyams_content/component/paragraph/video.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/video.py	Fri Oct 05 10:44:32 2018 +0200
@@ -15,24 +15,24 @@
 
 # import standard library
 
+from zope.interface import implementer
+from zope.schema.fieldproperty import FieldProperty
+
+# import packages
+from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
 # import interfaces
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
 from pyams_content.component.paragraph.interfaces.video import IVideoParagraph, VIDEO_PARAGRAPH_TYPE, \
     VIDEO_PARAGRAPH_RENDERERS, VIDEO_PARAGRAPH_NAME
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
-from pyams_i18n.interfaces import II18nManager, INegotiator, II18n
-
-# import packages
-from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
 from pyams_content.features.renderer import RenderersVocabulary
 from pyams_file.property import FileProperty
+from pyams_i18n.interfaces import II18nManager, INegotiator, II18n
 from pyams_utils.adapter import adapter_config
 from pyams_utils.factory import factory_config
 from pyams_utils.registry import utility_config, get_utility
 from pyams_utils.traversing import get_parent
 from pyams_utils.vocabulary import vocabulary_config
-from zope.interface import implementer
-from zope.schema.fieldproperty import FieldProperty
 
 
 @implementer(IVideoParagraph)
@@ -44,8 +44,8 @@
     icon_hint = VIDEO_PARAGRAPH_NAME
 
     data = FileProperty(IVideoParagraph['data'])
+    author = FieldProperty(IVideoParagraph['author'])
     description = FieldProperty(IVideoParagraph['description'])
-    author = FieldProperty(IVideoParagraph['author'])
     renderer = FieldProperty(IVideoParagraph['renderer'])
 
 
--- a/src/pyams_content/component/paragraph/zmi/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -113,9 +113,11 @@
 def get_json_paragraph_toolbar_refresh_event(context, request, table_factory=None, viewlet_factory=None):
     """Get JSON response value for paragraph toolbar refresh event"""
     if table_factory is None:
-        from pyams_content.component.paragraph.zmi.container import ParagraphContainerTable as table_factory
+        from pyams_content.component.paragraph.zmi.container \
+            import ParagraphContainerTable as table_factory
     if viewlet_factory is None:
-        from pyams_content.component.paragraph.zmi.container import ParagraphTitleToolbarViewletManager as viewlet_factory
+        from pyams_content.component.paragraph.zmi.container \
+            import ParagraphTitleToolbarViewletManager as viewlet_factory
 
     parent = get_parent(context, IParagraphContainerTarget)
     if parent is not None:
@@ -242,7 +244,7 @@
                 get_json_paragraph_refresh_event(self.context, self.request))
         elif 'renderer' in self.widgets:
             renderer_interface = self.widgets['renderer'].field.interface
-            if 'renderer' in changes.get(renderer_interface):
+            if 'renderer' in changes.get(renderer_interface, ()):
                 output.setdefault('events', []).append(
                     get_json_widget_refresh_event(self.context, self.request, self.__class__, 'renderer'))
                 renderer = self.context.get_renderer(self.request)
--- a/src/pyams_content/component/paragraph/zmi/container.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/container.py	Fri Oct 05 10:44:32 2018 +0200
@@ -19,8 +19,8 @@
 # import interfaces
 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
 from pyams_content.component.association.interfaces import IAssociationContainer
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, IBaseParagraph, \
-    IParagraphFactorySettings
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
+    IBaseParagraph, IParagraphFactorySettings
 from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphTitleToolbar, \
     IParagraphContainerTable, IParagraphContainerView
 from pyams_form.interfaces.form import IFormSecurityContext, IInnerSubForm
@@ -433,7 +433,7 @@
                 view = AssociationsContainerView(paragraph, self.request)
                 view.widget_icon_class = 'fa fa-fw {0}'.format(paragraph.icon_class)
                 view.title = II18n(paragraph).query_attribute('title', request=self.request) or \
-                             BaseParagraph.empty_title
+                    BaseParagraph.empty_title
                 result.append(view)
         return result
 
--- a/src/pyams_content/component/paragraph/zmi/header.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/header.py	Fri Oct 05 10:44:32 2018 +0200
@@ -91,5 +91,6 @@
             output.setdefault('events', []).append(get_json_paragraph_refresh_event(self.context, self.request))
         if 'renderer' in updated:
             output.setdefault('events', []).append(get_json_widget_refresh_event(self.context, self.request,
-                                                                                 HeaderParagraphInnerEditForm, 'renderer'))
+                                                                                 HeaderParagraphInnerEditForm,
+                                                                                 'renderer'))
         return output
--- a/src/pyams_content/component/paragraph/zmi/keypoint.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/keypoint.py	Fri Oct 05 10:44:32 2018 +0200
@@ -37,7 +37,6 @@
 from pyams_utils.adapter import adapter_config
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm
-from pyramid.view import view_config
 from z3c.form import field, button
 from zope.interface import implementer
 
--- a/src/pyams_content/component/paragraph/zmi/map.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/map.py	Fri Oct 05 10:44:32 2018 +0200
@@ -32,8 +32,8 @@
     # import packages
     from pyams_content.component.paragraph.map import MapParagraph
     from pyams_content.component.paragraph.zmi import IParagraphContainerView, BaseParagraphAddMenu, \
-        BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, BaseParagraphPropertiesEditForm, IParagraphEditFormButtons, \
-        get_json_paragraph_refresh_event
+        BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, BaseParagraphPropertiesEditForm, \
+        IParagraphEditFormButtons, get_json_paragraph_refresh_event
     from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
     from pyams_form.form import ajax_config
     from pyams_pagelet.pagelet import pagelet_config
--- a/src/pyams_content/component/paragraph/zmi/milestone.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/milestone.py	Fri Oct 05 10:44:32 2018 +0200
@@ -16,34 +16,41 @@
 # import standard library
 import json
 
+from pyramid.decorator import reify
+from pyramid.view import view_config
+from z3c.form import field, button
+from z3c.form.interfaces import INPUT_MODE
+from z3c.table.column import GetAttrColumn
+from z3c.table.interfaces import IValues, IColumn
+from zope.interface import implementer, Interface
+from zope.schema.vocabulary import getVocabularyRegistry
+
+from pyams_content import _
 # import interfaces
 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
     PARAGRAPH_HIDDEN_FIELDS
 from pyams_content.component.paragraph.interfaces.milestone import MILESTONE_PARAGRAPH_TYPE, IMilestoneParagraph, \
     IMilestoneContainer, IMilestoneContainerTarget, IMilestone
-from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
-from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor
-from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
-from pyams_content.shared.common import IWfSharedContent
-from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
-from pyams_i18n.interfaces import II18n
-from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
-from pyams_skin.layer import IPyAMSLayer
-from z3c.form.interfaces import INPUT_MODE
-from z3c.table.interfaces import IValues, IColumn
-
 # import packages
 from pyams_content.component.paragraph.milestone import MilestoneParagraph, Milestone
 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm
+from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
+from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor
 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
+from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
+from pyams_content.shared.common import IWfSharedContent
 from pyams_form.form import AJAXAddForm, ajax_config
+from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
 from pyams_form.security import ProtectedFormObjectMixin
 from pyams_i18n.column import I18nAttrColumn
+from pyams_i18n.interfaces import II18n
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.container import switch_element_visibility
 from pyams_skin.event import get_json_switched_table_refresh_event, get_json_table_row_refresh_event, \
     get_json_widget_refresh_event
+from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
+from pyams_skin.layer import IPyAMSLayer
 from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, VisibilitySwitcherColumn
 from pyams_skin.viewlet.toolbar import ToolbarAction
 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
@@ -52,14 +59,6 @@
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
 from pyams_zmi.zmi.table import InnerTableView
-from pyramid.decorator import reify
-from pyramid.view import view_config
-from z3c.form import field, button
-from z3c.table.column import GetAttrColumn
-from zope.interface import implementer, Interface
-from zope.schema.vocabulary import getVocabularyRegistry
-
-from pyams_content import _
 
 
 class IMilestonesView(Interface):
@@ -352,8 +351,7 @@
 
     def get_ajax_output(self, changes):
         output = super(self.__class__, self).get_ajax_output(changes)
-        updated = changes.get(IMilestone, ())
-        if ('title' in updated) or ('anchor' in updated):
+        if changes:
             target = get_parent(self.context, IMilestoneContainerTarget)
             output.setdefault('events', []).append(get_json_table_row_refresh_event(target, self.request,
                                                                                     MilestonesTable, self.context))
--- a/src/pyams_content/component/paragraph/zmi/pictogram.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/pictogram.py	Fri Oct 05 10:44:32 2018 +0200
@@ -16,38 +16,44 @@
 # import standard library
 import json
 
+from pyramid.decorator import reify
+from pyramid.events import subscriber
+from pyramid.view import view_config
+from z3c.form import field, button
+from z3c.form.interfaces import INPUT_MODE, IDataExtractedEvent
+from z3c.table.column import GetAttrColumn
+from z3c.table.interfaces import IValues, IColumn
+from zope.interface import implementer, Interface, Invalid
+
+from pyams_content import _
+# import packages
+from pyams_content.component.paragraph import BaseParagraph
 # import interfaces
 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
     PARAGRAPH_HIDDEN_FIELDS
 from pyams_content.component.paragraph.interfaces.pictogram import PICTOGRAM_PARAGRAPH_TYPE, IPictogramParagraph, \
     IPictogramContainer, IPictogramContainerTarget, IPictogramItem
-from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
-from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor
-from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
-from pyams_content.shared.common import IWfSharedContent
-from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
-from pyams_i18n.interfaces import II18n
-from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
-from pyams_skin.layer import IPyAMSLayer
-from pyams_zmi.interfaces import IPropertiesEditForm
-from z3c.form.interfaces import INPUT_MODE, IDataExtractedEvent
-from z3c.table.interfaces import IValues, IColumn
-
-# import packages
-from pyams_content.component.paragraph import BaseParagraph
 from pyams_content.component.paragraph.pictogram import PictogramParagraph, PictogramItem
 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm
+from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
+from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor
 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
+from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
 from pyams_content.reference.pictograms.zmi.widget import PictogramSelectFieldWidget
+from pyams_content.shared.common import IWfSharedContent
 from pyams_file.zmi.image import render_image
 from pyams_form.form import AJAXAddForm, ajax_config
+from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
 from pyams_form.security import ProtectedFormObjectMixin
 from pyams_i18n.column import I18nAttrColumn
+from pyams_i18n.interfaces import II18n
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.container import switch_element_visibility
 from pyams_skin.event import get_json_widget_refresh_event, get_json_switched_table_refresh_event, \
     get_json_table_row_refresh_event
+from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
+from pyams_skin.layer import IPyAMSLayer
 from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, VisibilitySwitcherColumn
 from pyams_skin.viewlet.toolbar import ToolbarAction
 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
@@ -56,15 +62,8 @@
 from pyams_utils.url import absolute_url
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
+from pyams_zmi.interfaces import IPropertiesEditForm
 from pyams_zmi.zmi.table import InnerTableView
-from pyramid.decorator import reify
-from pyramid.events import subscriber
-from pyramid.view import view_config
-from z3c.form import field, button
-from z3c.table.column import GetAttrColumn
-from zope.interface import implementer, alsoProvides, Interface, Invalid
-
-from pyams_content import _
 
 
 class IPictogramsView(Interface):
--- a/src/pyams_content/component/theme/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/theme/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -44,6 +44,9 @@
     thesaurus_name = FieldProperty(ITagsManager['thesaurus_name'])
     extract_name = FieldProperty(ITagsManager['extract_name'])
 
+    enable_tags_search = FieldProperty(ITagsManager['enable_tags_search'])
+    tags_search_target = FieldProperty(ITagsManager['tags_search_target'])
+
 
 @adapter_config(context=ITagsManagerTarget, provides=ITagsManager)
 def tags_manager_factory(target):
--- a/src/pyams_content/component/theme/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/theme/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -19,8 +19,10 @@
 from pyams_thesaurus.interfaces.thesaurus import IThesaurusContextManager, IThesaurusContextManagerTarget
 
 # import packages
+from pyams_sequence.schema import InternalReferenceField
 from pyams_thesaurus.schema import ThesaurusTermsListField
-from zope.interface import Interface
+from zope.interface import Interface, invariant, Invalid
+from zope.schema import Bool
 
 from pyams_content import _
 
@@ -36,6 +38,21 @@
 class ITagsManager(IThesaurusContextManager):
     """Tags manager interface"""
 
+    enable_tags_search = Bool(title=_("Enable search by tag?"),
+                              description=_("If 'yes', displayed tags will lead to a search engine "
+                                            "displaying contents matching given tag"),
+                              required=True,
+                              default=False)
+
+    tags_search_target = InternalReferenceField(title=_("Tags search target"),
+                                                description=_("Site or folder where tags search is displayed"),
+                                                required=False)
+
+    @invariant
+    def check_search_target(self):
+        if self.enable_tags_search and not self.tags_search_target:
+            raise Invalid(_("You must specify search target when activating search by tags!"))
+
 
 class ITagsManagerTarget(IThesaurusContextManagerTarget):
     """Marker interface for tags manager"""
--- a/src/pyams_content/component/theme/zmi/manager.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/theme/zmi/manager.py	Fri Oct 05 10:44:32 2018 +0200
@@ -70,6 +70,7 @@
     prefix = 'manager_themes.'
 
     legend = _("Selected tags")
+    dialog_class = 'modal-large'
 
     fields = field.Fields(ITagsManager)
     edit_permission = MANAGE_SITE_ROOT_PERMISSION
--- a/src/pyams_content/component/video/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/video/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,33 +12,27 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
 from persistent import Persistent
-
-# import interfaces
-from pyams_content.component.video.interfaces import IExternalVideo, IExternalVideoProvider, IExternalVideoSettings
-from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
-from pyams_i18n.interfaces import II18nManager, INegotiator, II18n
-
-# import packages
-from pyams_content.features.checker import BaseContentChecker, VALUE_OK
-from pyams_utils.adapter import adapter_config, get_annotation_adapter
-from pyams_utils.registry import query_utility, get_utility
-from pyams_utils.traversing import get_parent
 from zope.container.contained import Contained
 from zope.interface import implementer
 from zope.schema.fieldproperty import FieldProperty
 
 from pyams_content import _
+from pyams_content.component.video.interfaces import IExternalVideo, IExternalVideoProvider, IExternalVideoSettings
+from pyams_content.features.checker import BaseContentChecker, VALUE_OK
+from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
+from pyams_i18n.interfaces import II18nManager, INegotiator, II18n
+from pyams_utils.adapter import adapter_config, get_annotation_adapter
+from pyams_utils.registry import query_utility, get_utility
+from pyams_utils.traversing import get_parent
 
 
 @implementer(IExternalVideo)
 class ExternalVideo(Persistent, Contained):
     """External video persistent class"""
 
+    author = FieldProperty(IExternalVideo['author'])
     description = FieldProperty(IExternalVideo['description'])
-    author = FieldProperty(IExternalVideo['author'])
     provider_name = FieldProperty(IExternalVideo['provider_name'])
 
     def get_provider(self):
--- a/src/pyams_content/component/video/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/video/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,20 +12,14 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
-# import interfaces
-from pyams_content.component.paragraph.interfaces import IBaseParagraph
 from zope.annotation import IAttributeAnnotatable
 from zope.contentprovider.interfaces import IContentProvider
-
-# import packages
-from pyams_i18n.schema import I18nTextField, I18nTextLineField
 from zope.interface import Interface, Attribute
 from zope.schema import Choice, TextLine
 
 from pyams_content import _
+from pyams_content.component.paragraph.interfaces import IBaseParagraph
+from pyams_i18n.schema import I18nTextField, I18nTextLineField
 
 
 class IExternalVideoSettings(Interface):
@@ -45,14 +39,14 @@
 class IExternalVideo(IAttributeAnnotatable):
     """Base interface for external video integration"""
 
+    author = TextLine(title=_("Author"),
+                      description=_("Name of document's author"),
+                      required=True)
+
     description = I18nTextField(title=_("Associated text"),
                                 description=_("Video description displayed by front-office template"),
                                 required=False)
 
-    author = TextLine(title=_("Author"),
-                      description=_("Name of document's author"),
-                      required=True)
-
     provider_name = Choice(title=_("Video provider"),
                            description=_("Name of external platform providing selected video"),
                            required=False,
--- a/src/pyams_content/component/video/provider/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/video/provider/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -9,32 +9,25 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
-from zope.component._api import getUtilitiesFor
-from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
-
-from pyams_utils.request import check_request
 
 __docformat__ = 'restructuredtext'
 
+from persistent import Persistent
+from zope.component import getUtilitiesFor
+from zope.interface import implementer
+from zope.schema.fieldproperty import FieldProperty
+from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
 
-# import standard library
-
-# import interfaces
+from pyams_content import _
+from pyams_content.component.video import external_video_settings_factory
 from pyams_content.component.video.interfaces import IExternalVideo, IExternalVideoProvider, IExternalVideoSettings
 from pyams_content.component.video.provider.interfaces import ICustomVideoSettings
+from pyams_content.features.checker import BaseContentChecker
 from pyams_content.features.checker.interfaces import IContentChecker
-
-# import packages
-from persistent import Persistent
-from pyams_content.component.video import external_video_settings_factory
-from pyams_content.features.checker import BaseContentChecker
 from pyams_utils.adapter import adapter_config
 from pyams_utils.registry import utility_config
+from pyams_utils.request import check_request
 from pyams_utils.vocabulary import vocabulary_config
-from zope.interface import implementer
-from zope.schema.fieldproperty import FieldProperty
-
-from pyams_content import _
 
 
 @vocabulary_config(name='PyAMS video providers')
--- a/src/pyams_content/component/video/zmi/paragraph.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/component/video/zmi/paragraph.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,46 +12,39 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
-# import interfaces
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
-    IBaseParagraph
-from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerView, IParagraphInnerEditor
-from pyams_content.component.video.interfaces import IExternalVideoProvider, IExternalVideoSettings, \
-    IExternalVideoParagraph, EXTERNAL_VIDEO_PARAGRAPH_TYPE
-from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
-from pyams_form.interfaces.form import IWidgetsSuffixViewletsManager, IInnerForm
-from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
-from pyams_skin.layer import IPyAMSLayer
-from pyams_utils.interfaces.data import IObjectData
-from z3c.form.interfaces import DISPLAY_MODE, INPUT_MODE, IDataExtractedEvent
-
-# import packages
-from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
-    BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm, get_json_paragraph_refresh_event, \
-    IParagraphEditFormButtons
-from pyams_content.component.video.paragraph import ExternalVideoParagraph
-from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
-from pyams_form.form import ajax_config
-from pyams_form.group import NamedWidgetsGroup
-from pyams_pagelet.pagelet import pagelet_config
-from pyams_template.template import template_config
-from pyams_utils.adapter import adapter_config
-from pyams_utils.registry import get_utility
-from pyams_utils.url import absolute_url
-from pyams_viewlet.viewlet import viewlet_config, Viewlet
-from pyams_zmi.form import AdminDialogAddForm, InnerAdminAddForm, InnerAdminEditForm
 from pyramid.events import subscriber
 from pyramid.exceptions import NotFound
 from pyramid.response import Response
 from pyramid.view import view_config
 from z3c.form import field, button
+from z3c.form.interfaces import DISPLAY_MODE, INPUT_MODE, IDataExtractedEvent
 from zope.interface import implementer, alsoProvides, Interface, Invalid
 from zope.schema import getFieldNamesInOrder
 
 from pyams_content import _
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer
+from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
+    BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm, get_json_paragraph_refresh_event, \
+    IParagraphEditFormButtons
+from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerView, IParagraphInnerEditor
+from pyams_content.component.video.interfaces import IExternalVideoProvider, IExternalVideoSettings, \
+    IExternalVideoParagraph, EXTERNAL_VIDEO_PARAGRAPH_TYPE
+from pyams_content.component.video.paragraph import ExternalVideoParagraph
+from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
+from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
+from pyams_form.form import ajax_config
+from pyams_form.group import NamedWidgetsGroup
+from pyams_form.interfaces.form import IWidgetsSuffixViewletsManager, IInnerForm
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
+from pyams_skin.layer import IPyAMSLayer
+from pyams_template.template import template_config
+from pyams_utils.adapter import adapter_config
+from pyams_utils.interfaces.data import IObjectData
+from pyams_utils.registry import get_utility
+from pyams_utils.url import absolute_url
+from pyams_viewlet.viewlet import viewlet_config, Viewlet
+from pyams_zmi.form import AdminDialogAddForm, InnerAdminAddForm, InnerAdminEditForm
 
 
 @viewlet_config(name='add-external-video.menu', context=IParagraphContainerTarget, view=IParagraphContainerView,
@@ -76,7 +69,7 @@
     dialog_class = 'modal-large'
     icon_css_class = 'fa fa-fw fa-youtube-play'
 
-    fields = field.Fields(IExternalVideoParagraph).select('title', 'description', 'author', 'renderer', 'provider_name')
+    fields = field.Fields(IExternalVideoParagraph).select('title', 'author', 'description', 'renderer', 'provider_name')
     edit_permission = MANAGE_CONTENT_PERMISSION
 
     def updateWidgets(self, prefix=None):
@@ -193,7 +186,7 @@
 
     @property
     def fields(self):
-        fields = field.Fields(IExternalVideoParagraph).select('title', 'description', 'author', 'renderer',
+        fields = field.Fields(IExternalVideoParagraph).select('title', 'author', 'description', 'renderer',
                                                               'provider_name')
         fields['renderer'].widgetFactory = RendererFieldWidget
         provider = self.context.get_provider()
@@ -239,7 +232,7 @@
              base=BaseParagraphAJAXEditForm)
 @implementer(IInnerForm)
 class ExternalVideoParagraphInnerEditForm(ExternalVideoParagraphPropertiesEditForm):
-    """External video paragraph properties inner deit form"""
+    """External video paragraph properties inner edit form"""
 
     legend = None
 
--- a/src/pyams_content/features/alert/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/alert/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,21 +12,16 @@
 
 __docformat__ = 'restructuredtext'
 
+from persistent import Persistent
+from zope.container.contained import Contained
+from zope.interface import implementer
+from zope.schema.fieldproperty import FieldProperty
 
-# import standard library
-from persistent import Persistent
-
-# import interfaces
+from pyams_content.component.links import InternalReferenceMixin
 from pyams_content.features.alert.interfaces import IAlertItem
 from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION
 from pyams_form.interfaces.form import IFormContextPermissionChecker
-
-# import packages
-from pyams_content.component.links import InternalReferenceMixin
-from pyams_utils.adapter import adapter_config, ContextAdapter
-from zope.container.contained import Contained
-from zope.interface import implementer
-from zope.schema.fieldproperty import FieldProperty
+from pyams_utils.adapter import ContextAdapter, adapter_config
 
 
 @implementer(IAlertItem)
@@ -43,7 +38,7 @@
 
 
 @adapter_config(context=IAlertItem, provides=IFormContextPermissionChecker)
-class AlertitemPermissionChecker(ContextAdapter):
+class AlertItemPermissionChecker(ContextAdapter):
     """Alert item permission checker"""
 
     edit_permission = MANAGE_SITE_ROOT_PERMISSION
--- a/src/pyams_content/features/alert/container.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/alert/container.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,20 +12,18 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
+from datetime import datetime
 
-# import interfaces
-from pyams_content.features.alert.interfaces import IAlertContainer, IAlertItem, IAlertTarget, ALERT_CONTAINER_KEY
+from zope.container.ordered import OrderedContainer
+from zope.interface import implementer
+from zope.location import locate
 from zope.location.interfaces import ISublocations
 from zope.traversing.interfaces import ITraversable
 
-# import packages
 from pyams_catalog.utils import index_object
-from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
-from zope.container.ordered import OrderedContainer
-from zope.interface import implementer
-from zope.location import locate
+from pyams_content.features.alert.interfaces import ALERT_CONTAINER_KEY, IAlertContainer, IAlertItem, IAlertTarget
+from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter
+from pyams_utils.timezone import tztime
 
 
 @implementer(IAlertContainer)
@@ -46,7 +44,13 @@
             index_object(value)
 
     def get_visible_items(self):
-        yield from filter(lambda x: IAlertItem(x).visible, self.values())
+        now = tztime(datetime.utcnow())
+        for alert in filter(lambda x: IAlertItem(x).visible, self.values()):
+            if alert.start_date and (alert.start_date > now):
+                continue
+            if alert.end_date and (alert.end_date < now):
+                continue
+            yield alert
 
 
 @adapter_config(context=IAlertTarget, provides=IAlertContainer)
--- a/src/pyams_content/features/alert/interfaces.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/alert/interfaces.py	Fri Oct 05 10:44:32 2018 +0200
@@ -25,7 +25,7 @@
 from pyams_i18n.schema import I18nTextLineField
 from pyams_sequence.schema import InternalReferenceField
 from zope.container.constraints import containers, contains
-from zope.interface import Interface, Attribute
+from zope.interface import Interface
 from zope.schema import Bool, Choice, Datetime, Int
 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
 
--- a/src/pyams_content/features/alert/zmi/container.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/alert/zmi/container.py	Fri Oct 05 10:44:32 2018 +0200
@@ -19,7 +19,6 @@
 # import interfaces
 from pyams_content.features.alert.interfaces import IAlertTarget, IAlertContainer
 from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION
-from pyams_i18n.interfaces import II18n
 from pyams_skin.interfaces import IPageHeader
 from pyams_skin.layer import IPyAMSLayer
 from pyams_zmi.interfaces.menu import ISiteManagementMenu
@@ -42,7 +41,6 @@
 from pyramid.decorator import reify
 from pyramid.exceptions import NotFound
 from pyramid.view import view_config
-from z3c.table.column import GetAttrColumn
 
 from pyams_content import _
 
--- a/src/pyams_content/features/checker/zmi/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/checker/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -20,13 +20,13 @@
 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
 from pyams_form.interfaces.form import IWidgetsSuffixViewletsManager
 from pyams_skin.interfaces import IInnerPage
-from pyams_skin.interfaces.viewlet import IContextActions, IToolbarViewletManager
+from pyams_skin.interfaces.viewlet import IToolbarViewletManager
 from pyams_skin.layer import IPyAMSLayer
 from pyams_zmi.layer import IAdminLayer
 
 # import packages
 from pyams_pagelet.pagelet import pagelet_config
-from pyams_skin.viewlet.toolbar import ToolbarMenuItem, ToolbarAction
+from pyams_skin.viewlet.toolbar import ToolbarAction
 from pyams_viewlet.viewlet import viewlet_config, Viewlet
 from pyams_zmi.form import AdminDialogDisplayForm
 from z3c.form import field
--- a/src/pyams_content/features/footer/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/footer/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -16,8 +16,8 @@
 # import standard library
 
 # import interfaces
-from pyams_content.features.footer.interfaces import FOOTER_RENDERERS, IFooterRenderer, IFooterSettings, IFooterTarget, \
-    FOOTER_SETTINGS_KEY, IFooterRendererSettings, FOOTER_RENDERER_SETTINGS_KEY
+from pyams_content.features.footer.interfaces import FOOTER_RENDERERS, IFooterRenderer, IFooterSettings, \
+    IFooterTarget, FOOTER_SETTINGS_KEY, IFooterRendererSettings, FOOTER_RENDERER_SETTINGS_KEY
 from zope.lifecycleevent.interfaces import IObjectModifiedEvent
 from zope.traversing.interfaces import ITraversable
 
@@ -32,8 +32,8 @@
 from pyams_utils.traversing import get_parent
 from pyams_utils.vocabulary import vocabulary_config
 from pyramid.events import subscriber
-from zope.interface import implementer, noLongerProvides, alsoProvides
-from zope.location import Location, locate
+from zope.interface import implementer
+from zope.location import Location
 from zope.schema.fieldproperty import FieldProperty
 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
 
--- a/src/pyams_content/features/header/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/header/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -16,8 +16,8 @@
 # import standard library
 
 # import interfaces
-from pyams_content.features.header.interfaces import HEADER_RENDERERS, IHeaderRenderer, IHeaderSettings, IHeaderTarget, \
-    HEADER_SETTINGS_KEY, IHeaderRendererSettings, HEADER_RENDERER_SETTINGS_KEY
+from pyams_content.features.header.interfaces import HEADER_RENDERERS, IHeaderRenderer, IHeaderSettings, \
+    IHeaderTarget, HEADER_SETTINGS_KEY, IHeaderRendererSettings, HEADER_RENDERER_SETTINGS_KEY
 from zope.lifecycleevent.interfaces import IObjectModifiedEvent
 from zope.traversing.interfaces import ITraversable
 
@@ -32,8 +32,8 @@
 from pyams_utils.traversing import get_parent
 from pyams_utils.vocabulary import vocabulary_config
 from pyramid.events import subscriber
-from zope.interface import implementer, noLongerProvides, alsoProvides
-from zope.location import Location, locate
+from zope.interface import implementer
+from zope.location import Location
 from zope.schema.fieldproperty import FieldProperty
 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
 
--- a/src/pyams_content/features/header/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/header/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -57,6 +57,5 @@
     cache_key = Attribute("Renderer cache key")
 
 
-
 class IHeaderRendererSettings(IRendererSettings):
     """Header renderer settings interface"""
--- a/src/pyams_content/features/menu/portlet/navigation/zmi/double.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/menu/portlet/navigation/zmi/double.py	Fri Oct 05 10:44:32 2018 +0200
@@ -35,7 +35,7 @@
 from pyams_portal.zmi.portlet import PortletSettingsEditor, PortletSettingsPropertiesEditor
 from pyams_template.template import template_config
 from pyams_utils.adapter import adapter_config
-from zope.interface import alsoProvides, Interface
+from zope.interface import Interface
 
 from pyams_content import _
 
--- a/src/pyams_content/features/redirect/container.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/redirect/container.py	Fri Oct 05 10:44:32 2018 +0200
@@ -16,8 +16,8 @@
 # import standard library
 
 # import interfaces
-from pyams_content.features.redirect.interfaces import IRedirectionManager, IRedirectionRule, IRedirectionManagerTarget, \
-    REDIRECT_MANAGER_KEY
+from pyams_content.features.redirect.interfaces import IRedirectionManager, IRedirectionRule, \
+    IRedirectionManagerTarget, REDIRECT_MANAGER_KEY
 from zope.location.interfaces import ISublocations
 from zope.traversing.interfaces import ITraversable
 
--- a/src/pyams_content/features/redirect/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/redirect/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -23,7 +23,7 @@
 from pyams_sequence.schema import InternalReferenceField
 from zope.container.constraints import contains, containers
 from zope.interface import Interface, Attribute, invariant, Invalid
-from zope.schema import Bool, TextLine, Choice
+from zope.schema import Bool, TextLine
 
 from pyams_content import _
 
--- a/src/pyams_content/features/renderer/skin/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/renderer/skin/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,22 +12,16 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
-# import interfaces
-from pyams_content.features.renderer.interfaces import IContentRenderer, IRendererSettings, IRenderedContent, \
-    HIDDEN_RENDERER_NAME
-from pyams_i18n.interfaces import II18n
-from pyams_skin.layer import IPyAMSLayer
-
-# import packages
-from pyams_template.template import get_view_template
-from pyams_utils.adapter import ContextRequestAdapter, adapter_config
 from pyramid.decorator import reify
 from zope.interface import implementer
 
 from pyams_content import _
+from pyams_content.features.renderer.interfaces import HIDDEN_RENDERER_NAME, IContentRenderer, IRenderedContent, \
+    IRendererSettings
+from pyams_i18n.interfaces import II18n
+from pyams_skin.layer import IPyAMSLayer
+from pyams_template.template import get_view_template
+from pyams_utils.adapter import ContextRequestAdapter, adapter_config
 
 
 @implementer(IContentRenderer)
@@ -71,5 +65,6 @@
     label = _("Hidden content")
     weight = -999
 
-    def render(self):
+    @staticmethod
+    def render():
         return ''
--- a/src/pyams_content/features/review/zmi/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/features/review/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,27 +12,25 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
+from pyramid.view import view_config
+from pyramid_chameleon.interfaces import IChameleonTranslate
+from z3c.form import field, button
+from zope.interface import Interface
+from zope.schema import Text, Bool
 
-# import interfaces
+from pyams_content import _
+from pyams_content.features.review import ReviewComment
+from pyams_content.features.review.interfaces import IReviewManager, IReviewComments, IReviewTarget
 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION, COMMENT_CONTENT_PERMISSION
-from pyams_content.features.review.interfaces import IReviewManager, IReviewComments, IReviewTarget
 from pyams_content.shared.common import IWfSharedContentRoles
-from pyams_security.interfaces import ISecurityManager
-from pyams_security.interfaces.profile import IPublicProfile
-from pyams_skin.interfaces.viewlet import IContextActions
-from pyams_skin.layer import IPyAMSLayer
-from pyams_zmi.interfaces.menu import IContentManagementMenu
-from pyams_zmi.layer import IAdminLayer
-from pyramid_chameleon.interfaces import IChameleonTranslate
-
-# import packages
-from pyams_content.features.review import ReviewComment
 from pyams_form.form import AJAXAddForm, ajax_config
 from pyams_form.schema import CloseButton
 from pyams_pagelet.pagelet import pagelet_config
+from pyams_security.interfaces import ISecurityManager
+from pyams_security.interfaces.profile import IPublicProfile
 from pyams_security.schema import PrincipalsSet
+from pyams_skin.interfaces.viewlet import IContextActions
+from pyams_skin.layer import IPyAMSLayer
 from pyams_skin.viewlet.menu import MenuItem
 from pyams_skin.viewlet.toolbar import ToolbarMenuItem
 from pyams_template.template import template_config, get_view_template
@@ -40,13 +38,9 @@
 from pyams_utils.registry import get_utility, query_utility
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm
+from pyams_zmi.interfaces.menu import IContentManagementMenu
+from pyams_zmi.layer import IAdminLayer
 from pyams_zmi.view import InnerAdminView
-from pyramid.view import view_config
-from z3c.form import field, button
-from zope.interface import Interface
-from zope.schema import Text, Bool
-
-from pyams_content import _
 
 
 #
@@ -195,13 +189,16 @@
     def get_principal(self, principal_id):
         return self.security.get_principal(principal_id)
 
-    def get_avatar(self, principal):
+    @staticmethod
+    def get_avatar(principal):
         return IPublicProfile(principal).avatar
 
-    def get_date(self, comment):
+    @staticmethod
+    def get_date(comment):
         return format_datetime(comment.creation_date)
 
-    def get_age(self, comment):
+    @staticmethod
+    def get_age(comment):
         return get_age(comment.creation_date)
 
 
--- a/src/pyams_content/generations/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/generations/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,44 +12,41 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
 import logging
 logger = logging.getLogger("PyAMS (content)")
 
-# import interfaces
+from hypatia.text.lexicon import Lexicon
+from pyramid.path import DottedNameResolver
+from zope.lifecycleevent import ObjectCreatedEvent
+from zope.dublincore.interfaces import IZopeDublinCore
+
+from pyams_catalog.index import FieldIndexWithInterface, KeywordIndexWithInterface, DatetimeIndexWithInterface
+from pyams_catalog.nltk import NltkFullTextProcessor
+from pyams_catalog.site import check_required_indexes
 from pyams_catalog.interfaces import MINUTE_RESOLUTION, DATE_RESOLUTION
 from pyams_content.component.theme import ITagsInfo, IThemesInfo, ICollectionsInfo
 from pyams_content.interfaces import IBaseContent, WEBMASTER_ROLE, OWNER_ROLE, PILOT_ROLE, MANAGER_ROLE, \
     CONTRIBUTOR_ROLE
+from pyams_content.reference import ReferencesManager
+from pyams_content.reference.pictograms import PictogramTable
 from pyams_content.root.interfaces import ISiteRootToolsConfiguration
+from pyams_content.shared.common.manager import SharedToolContainer
 from pyams_content.shared.common.interfaces import IWfSharedContent
 from pyams_content.shared.common.interfaces.types import IWfTypedSharedContent
 from pyams_content.shared.form.interfaces import IFormsManagerFactory
 from pyams_content.shared.imagemap.interfaces import IImageMapManagerFactory
 from pyams_content.shared.logo.interfaces import ILogosManagerFactory
 from pyams_content.shared.news.interfaces import INewsManagerFactory
+from pyams_content.shared.topic.interfaces import ITopicManagerFactory
 from pyams_content.shared.view.interfaces import IViewsManagerFactory
-from pyams_utils.interfaces.site import ISiteGenerations
-from pyams_utils.interfaces.traversing import IPathElements
-from pyams_workflow.interfaces import IWorkflowState, IWorkflowPublicationInfo
-from zope.dublincore.interfaces import IZopeDublinCore
-
-# import packages
-from hypatia.text.lexicon import Lexicon
-from pyams_catalog.index import FieldIndexWithInterface, KeywordIndexWithInterface, DatetimeIndexWithInterface
-from pyams_catalog.nltk import NltkFullTextProcessor
-from pyams_catalog.site import check_required_indexes
-from pyams_content.reference import ReferencesManager
-from pyams_content.reference.pictograms import PictogramTable
-from pyams_content.shared.common.manager import SharedToolContainer
 from pyams_i18n.index import I18nTextIndexWithInterface
 from pyams_security.index import PrincipalsRoleIndex
 from pyams_thesaurus.index import ThesaurusTermsListFieldIndex
+from pyams_utils.interfaces.site import ISiteGenerations
+from pyams_utils.interfaces.traversing import IPathElements
 from pyams_utils.registry import utility_config, get_global_registry
 from pyams_utils.site import check_required_utilities
-from pyramid.path import DottedNameResolver
-from zope.lifecycleevent import ObjectCreatedEvent
+from pyams_workflow.interfaces import IWorkflowState, IWorkflowPublicationInfo
 
 
 def get_fulltext_lexicon(language):
@@ -57,14 +54,6 @@
 
 
 RENAMED_CLASSES = {
-    'pyams_content.shared.common.review ReviewComment':
-        'pyams_content.features.review ReviewComment',
-    'pyams_content.shared.common.review ReviewCommentsContainer':
-        'pyams_content.features.review ReviewCommentsContainer',
-    'pyams_portal.portlets.content ContentPortletSettings':
-        'pyams_content.portlet.content SharedContentPortletSettings',
-    'pyams_content.shared.common.portlet.content SharedContentPortletSettings':
-        'pyams_content.component.paragraph.portlet ParagraphContainerPortletSettings',
     'pyams_content.component.association.menu MenusContainer':
         'pyams_content.features.menu MenusContainer',
     'pyams_content.component.association.menu Menu':
@@ -75,6 +64,18 @@
         'pyams_content.component.keynumber KeyNumberContainer',
     'pyams_content.component.paragraph.keynumber KeyNumberParagraph':
         'pyams_content.component.keynumber.paragraph KeyNumberParagraph',
+    'pyams_content.shared.common.review ReviewComment':
+        'pyams_content.features.review ReviewComment',
+    'pyams_content.shared.common.review ReviewCommentsContainer':
+        'pyams_content.features.review ReviewCommentsContainer',
+    'pyams_content.shared.common.portlet.content SharedContentPortletSettings':
+        'pyams_content.component.paragraph.portlet ParagraphContainerPortletSettings',
+    'pyams_content.shared.site Topic':
+        'pyams_content.shared.site SiteTopic',
+    'pyams_content.shared.site WfTopic':
+        'pyams_content.shared.site WfSiteTopic',
+    'pyams_portal.portlets.content ContentPortletSettings':
+        'pyams_content.portlet.content SharedContentPortletSettings',
     'pyams_content.portlet.content SharedContentPortletSettings':
         'pyams_content.shared.common.portlet.content SharedContentPortletSettings',
     'pyams_content.portlet.navigation SimpleNavigationPortletSettings':
@@ -83,7 +84,6 @@
         'pyams_content.features.menu.portlet.navigation.interfaces.simple ISimpleNavigationMenu'
 }
 
-
 REQUIRED_UTILITIES = ()
 
 REQUIRED_TABLES = (
@@ -95,7 +95,8 @@
     ('logos', ILogosManagerFactory),
     ('imagemaps', IImageMapManagerFactory),
     ('forms', IFormsManagerFactory),
-    ('news', INewsManagerFactory)
+    ('news', INewsManagerFactory),
+    ('topics', ITopicManagerFactory)
 ]
 
 REQUIRED_INDEXES = [
@@ -247,8 +248,7 @@
         """Check for shared tools manager"""
         if registry is None:
             registry = get_global_registry()
-        name = config.tools_name or \
-               registry.settings.get('pyams_content.config.tools_name', 'tools')
+        name = config.tools_name or registry.settings.get('pyams_content.config.tools_name', 'tools')
         if name not in site:
             manager = SharedToolContainer()
             registry.notify(ObjectCreatedEvent(manager))
@@ -324,7 +324,8 @@
     order = 100
     generation = 1
 
-    def evolve(self, site, current=None):
+    @staticmethod
+    def evolve(site, current=None):
         """Check for required utilities, tables and tools"""
         check_required_utilities(site, REQUIRED_UTILITIES)
         check_required_indexes(site, get_required_indexes())
Binary file src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.mo has changed
--- a/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po	Fri Oct 05 10:44:32 2018 +0200
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-09-06 16:56+0200\n"
+"POT-Creation-Date: 2018-10-03 10:57+0200\n"
 "PO-Revision-Date: 2015-09-10 10:42+0200\n"
 "Last-Translator: Thierry Florac <tflorac@ulthar.net>\n"
 "Language-Team: French\n"
@@ -40,7 +40,7 @@
 msgid "Comment content"
 msgstr "Commenter un contenu"
 
-#: src/pyams_content/__init__.py:49 src/pyams_content/workflow/__init__.py:375
+#: src/pyams_content/__init__.py:49 src/pyams_content/workflow/__init__.py:376
 msgid "Publish content"
 msgstr "Publier le contenu"
 
@@ -80,446 +80,247 @@
 msgid "Guest user (role)"
 msgstr "Invité (rôle)"
 
-#: src/pyams_content/component/gallery/__init__.py:154
-msgid "Gallery"
-msgstr "Galerie de médias"
-
-#: src/pyams_content/component/gallery/zmi/file.py:60
-#: src/pyams_content/component/gallery/zmi/file.py:72
-#: src/pyams_content/component/gallery/zmi/paragraph.py:155
-msgid "Add media(s)"
-msgstr "Ajouter des médias"
-
-#: src/pyams_content/component/gallery/zmi/file.py:182
-msgid "Update media properties"
-msgstr "Propriétés du média"
-
-#: src/pyams_content/component/gallery/zmi/file.py:236
-msgid "Remove media..."
-msgstr "Supprimer le média"
-
-#: src/pyams_content/component/gallery/zmi/file.py:146
-msgid "Show/hide media"
-msgstr "Cliquez pour rendre le média visible ou non"
-
-#: src/pyams_content/component/gallery/zmi/file.py:203
-msgid "Audio content"
-msgstr "Contenu audio associé"
-
-#: src/pyams_content/component/gallery/zmi/paragraph.py:57
-msgid "Medias gallery..."
-msgstr "Galerie de médias"
-
-#: src/pyams_content/component/gallery/zmi/paragraph.py:70
-msgid "Add new gallery"
-msgstr "Ajout d'une galerie de médias"
-
-#: src/pyams_content/component/gallery/zmi/paragraph.py:92
-msgid "Edit gallery properties"
-msgstr "Propriétés de la galerie de médias"
-
-#: src/pyams_content/component/gallery/zmi/__init__.py:63
-msgid "Update gallery properties"
-msgstr "Propriétés de la galerie de médias"
-
-#: src/pyams_content/component/gallery/zmi/__init__.py:90
-msgid "Update gallery contents"
-msgstr "Contenu de la galerie de médias"
-
-#: src/pyams_content/component/gallery/zmi/interfaces.py:36
-msgid "Images or videos data"
-msgstr "Fichier"
-
-#: src/pyams_content/component/gallery/zmi/interfaces.py:37
-msgid "You can upload a single file or choose to upload a whole ZIP archive"
-msgstr ""
-"Vous pouvez déposer les médias un par un, ou en nombre en les réunissant au "
-"préalable dans un fichier ZIP"
-
-#: src/pyams_content/component/gallery/zmi/interfaces.py:40
-#: src/pyams_content/component/gallery/interfaces/__init__.py:61
-#: src/pyams_content/component/extfile/interfaces/__init__.py:44
-#: src/pyams_content/component/illustration/interfaces/__init__.py:68
-#: src/pyams_content/component/paragraph/interfaces/video.py:52
-#: src/pyams_content/component/paragraph/interfaces/audio.py:52
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:44
-#: src/pyams_content/component/video/interfaces/__init__.py:52
-msgid "Author"
-msgstr "Auteur"
-
-#: src/pyams_content/component/gallery/zmi/interfaces.py:41
-#: src/pyams_content/component/gallery/interfaces/__init__.py:62
-#: src/pyams_content/component/extfile/interfaces/__init__.py:45
-#: src/pyams_content/component/paragraph/interfaces/video.py:53
-#: src/pyams_content/component/paragraph/interfaces/audio.py:53
-#: src/pyams_content/component/video/interfaces/__init__.py:53
-msgid "Name of document's author"
-msgstr "Sous la forme \"Prénom Nom / Organisme\""
-
-#: src/pyams_content/component/gallery/zmi/interfaces.py:44
-msgid "Author comments"
-msgstr "À propos de l'auteur"
-
-#: src/pyams_content/component/gallery/zmi/interfaces.py:45
-#: src/pyams_content/component/gallery/interfaces/__init__.py:66
-msgid "Comments relatives to author's rights management"
-msgstr ""
-"Commentaires (non publiés mais à conserver) relatifs à l'auteur et à la "
-"gestion de ses droits"
-
-#: src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:12
-msgid "Gallery medias"
-msgstr "Contenu de la galerie"
-
-#: src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:18
-msgid "Download medias"
-msgstr "Télécharger tous les médias"
-
-#: src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:42
-msgid "Zoom image"
-msgstr "Agrandir l'image"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:133
-msgid "Medias gallery"
-msgstr "Galerie de médias"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:47
-#: src/pyams_content/component/illustration/interfaces/__init__.py:46
-#: src/pyams_content/component/illustration/interfaces/__init__.py:105
-msgid "Image or video data"
-msgstr "Fichier"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:48
-#: src/pyams_content/component/illustration/interfaces/__init__.py:47
-#: src/pyams_content/component/illustration/interfaces/__init__.py:106
-msgid "Image or video content"
-msgstr ""
-"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu..."
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:51
-#: src/pyams_content/component/illustration/interfaces/__init__.py:53
-#: src/pyams_content/component/paragraph/interfaces/video.py:45
-#: src/pyams_content/component/paragraph/interfaces/audio.py:45
-#: src/pyams_content/component/video/interfaces/__init__.py:75
-msgid "Legend"
-msgstr "Légende"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:54
-#: src/pyams_content/component/illustration/interfaces/__init__.py:56
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:48
-msgid "Accessibility title"
-msgstr "Alternative (accessibilité)"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:55
-msgid "Alternate title used to describe media content"
-msgstr ""
-"Ce texte est affiché lorsque le média ne peut être téléchargé ou affiché ; "
-"il est aussi utilisé par les navigateurs des personnes souffrant de "
-"déficiences visuelles. Il doit donc décrire le contenu du média, pour se "
-"conformer aux normes d'accessibilité."
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:58
-#: src/pyams_content/component/gallery/interfaces/__init__.py:101
-#: src/pyams_content/component/extfile/interfaces/__init__.py:40
-#: src/pyams_content/component/paragraph/interfaces/audio.py:48
-#: src/pyams_content/component/links/interfaces/__init__.py:39
-#: src/pyams_content/shared/form/interfaces/__init__.py:64
-msgid "Description"
-msgstr "Description"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:65
-msgid "Author's comments"
-msgstr "À propos de l'auteur"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:69
-msgid "Source ID"
-msgstr "ID source"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:70
-msgid "Number used to identify media into it's original source"
-msgstr ""
-"Identifiant ou référence de ce média dans la base de données dont elle est "
-"issue ; au besoin, préciser le nom de cette base"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:73
-#: src/pyams_content/component/extfile/interfaces/__init__.py:89
-#: src/pyams_content/component/paragraph/interfaces/audio.py:41
-msgid "Audio data"
-msgstr "Fichier"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:74
-msgid "Sound file associated with the current media"
-msgstr "Vous pouvez associer un fichier audio à ce média"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:77
-msgid "Sound title"
-msgstr "Titre"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:78
-msgid "Title of associated sound file"
-msgstr "Titre du fichier audio associé à ce média"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:81
-msgid "Sound description"
-msgstr "Description"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:82
-msgid "Short description of associated sound file"
-msgstr "Courte description du fichier audio associé à ce média"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:85
-msgid "Visible media?"
-msgstr "Média visible ?"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:86
-msgid "If 'no', this media won't be displayed in front office"
-msgstr "Si 'non', ce média ne sera pas présenté aux internautes"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:97
-#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:31
-#: src/pyams_content/component/paragraph/zmi/milestone.py:239
-#: src/pyams_content/component/paragraph/zmi/container.py:270
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:45
-#: src/pyams_content/shared/common/zmi/reverse.py:73
-#: src/pyams_content/shared/common/zmi/dashboard.py:109
-#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:200
-#: src/pyams_content/shared/view/portlet/interfaces.py:56
-#: src/pyams_content/shared/imagemap/zmi/container.py:123
-#: src/pyams_content/shared/site/zmi/folder.py:71
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:197
-#: src/pyams_content/interfaces/__init__.py:101
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:150
-#: src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:31
-#: src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:31
-msgid "Title"
-msgstr "Titre"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:98
-msgid "Gallery title, as shown in front-office"
-msgstr "Titre de la galerie présenté aux internautes"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:102
-msgid "Gallery description displayed by front-office template"
-msgstr "Description de la galerie de médias présentée aux internautes"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:105
-msgid "Gallery template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:106
-msgid "Presentation template used for this gallery"
-msgstr ""
-"<span>Modèle de présentation utilisé par cette galerie.<br /"
-"><strong>ATTENTION :</strong> certains modes de rendu ne prennent en charge "
-"que certains types de médias !!</span>"
-
-#: src/pyams_content/component/extfile/__init__.py:172
-#: src/pyams_content/component/extfile/__init__.py:176
-msgid "Standard file"
-msgstr "Fichier"
-
+#: src/pyams_content/reference/zmi/__init__.py:50
+msgid "References"
+msgstr "Tables de réf."
+
+#: src/pyams_content/reference/zmi/__init__.py:68
+#: src/pyams_content/reference/zmi/table.py:129
+msgid "References tables"
+msgstr "Tables de références"
+
+#: src/pyams_content/reference/zmi/table.py:73
+msgid "Contents"
+msgstr "Contenu"
+
+#: src/pyams_content/reference/zmi/table.py:83
+msgid "Table contents"
+msgstr "Contenu de la table"
+
+#: src/pyams_content/reference/zmi/table.py:143
+msgid "Properties..."
+msgstr "Propriétés"
+
+#: src/pyams_content/reference/zmi/table.py:157
+msgid "Edit table properties"
+msgstr "Propriétés de la table"
+
+#: src/pyams_content/reference/zmi/table.py:167
+msgid "Table management"
+msgstr "Gérer cette table"
+
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:44
 #: src/pyams_content/component/extfile/__init__.py:223
 #: src/pyams_content/component/extfile/__init__.py:238
 #: src/pyams_content/shared/imagemap/interfaces/__init__.py:67
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:44
 msgid "Image"
 msgstr "Image"
 
-#: src/pyams_content/component/extfile/__init__.py:253
-#: src/pyams_content/component/extfile/__init__.py:257
-#: src/pyams_content/component/paragraph/interfaces/video.py:34
-msgid "Video"
-msgstr "Vidéo"
-
-#: src/pyams_content/component/extfile/__init__.py:272
-#: src/pyams_content/component/extfile/__init__.py:276
-msgid "Audio file"
-msgstr "Fichier audio"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:74
-msgid "External files"
-msgstr "Fichiers"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:89
-msgid "Add external file"
-msgstr "Fichier"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:103
-msgid "Add new external file"
-msgstr "Ajout d'un fichier"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:133
-msgid "Update file properties"
-msgstr "Propriétés du fichier"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:161
-msgid "Images"
-msgstr "Images"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:176
-msgid "Add image"
-msgstr "Image téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:190
-msgid "Add new image"
-msgstr "Ajout d'une image téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:221
-msgid "Update image properties"
-msgstr "Propriétés de l'image téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:254
-msgid "Videos"
-msgstr "Vidéos"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:269
-msgid "Add video"
-msgstr "Vidéo téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:283
-msgid "Add new video"
-msgstr "Ajout d'une vidéo téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:307
-msgid "Update video properties"
-msgstr "Propriétés de la vidéo téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:333
-msgid "Audios files"
-msgstr "Fichiers audios"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:348
-msgid "Add audio file"
-msgstr "Bande son téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:362
-msgid "Add new audio file"
-msgstr "Ajout d'une bande son téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:386
-msgid "Update audio file properties"
-msgstr "Propriétés de la bande son téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:50
-msgid "External file type"
-msgstr "Type de fichier joint"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:36
-#: src/pyams_content/component/links/interfaces/__init__.py:35
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:55
-msgid "Alternate title"
-msgstr "Titre de substitution"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:37
-msgid "File title, as shown in front-office"
-msgstr "Titre présenté aux internautes"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:41
-#: src/pyams_content/component/paragraph/interfaces/audio.py:49
-msgid "File description displayed by front-office template"
-msgstr "Description du fichier, présentée aux internautes"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:48
-#: src/pyams_content/component/links/interfaces/__init__.py:65
-msgid "Language"
-msgstr "Langue"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:49
-msgid "File's content language"
-msgstr "Langue du fichier"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:53
-msgid "Save file as..."
-msgstr "Nom du fichier"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:54
-msgid "Name under which the file will be saved"
-msgstr ""
-"Nom donné au fichier en cas de téléchargement ; il est donc important de "
-"veiller au sens de ce nom, sans oublier d'indiquer l'extension (« .pdf », « ."
-"doc »...) !"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:61
-msgid "File data"
-msgstr "Fichier"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:62
-msgid "File content"
-msgstr ""
-"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:73
-#: src/pyams_content/shared/logo/interfaces/__init__.py:48
-msgid "Image data"
-msgstr "Fichier"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:74
-msgid "Image content"
-msgstr ""
-"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu..."
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:81
-#: src/pyams_content/component/paragraph/interfaces/video.py:41
-msgid "Video data"
-msgstr "Fichier"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:82
-msgid "Video content"
-msgstr ""
-"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
-
-#: src/pyams_content/component/extfile/interfaces/__init__.py:90
-#: src/pyams_content/component/paragraph/interfaces/audio.py:42
-msgid "Audio file content"
-msgstr ""
-"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:45
+msgid "Pictogram content"
+msgstr "Utilisez le bouton \"Parcourir\" pour modifier le contenu de l'image"
+
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:48
+#: src/pyams_content/component/gallery/interfaces/__init__.py:49
+#: src/pyams_content/component/illustration/interfaces/__init__.py:50
+msgid "Accessibility title"
+msgstr "Alternative (accessibilité)"
+
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:49
+#: src/pyams_content/component/illustration/interfaces/__init__.py:51
+msgid "Alternate title used to describe image content"
+msgstr ""
+"Ce texte est affiché lorsque le contenu ne peut être téléchargé ou affiché ; "
+"il est aussi utilisé par les navigateurs des personnes souffrant de "
+"déficiences visuelles. Il doit donc décrire le contenu, pour se conformer "
+"aux normes d'accessibilité."
+
+#. Default: Header
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:52
+msgid "pictogram-header"
+msgstr "En-tête par défaut"
+
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:53
+msgid "Default header associated with this pictogram"
+msgstr "En-tête par défaut associé à ce pictogramme"
+
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:73
+#: src/pyams_content/reference/pictograms/zmi/manager.py:62
+#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:34
+msgid "Selected pictograms"
+msgstr "Pictogrammes sélectionnés"
+
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:74
+msgid "List of selected pictograms which will be available to shared contents"
+msgstr "Liste des pictogrammes proposés dans les contenus partagés"
+
+#: src/pyams_content/reference/pictograms/zmi/widget.py:36
+msgid "No selected pictogram"
+msgstr "Aucun pictogramme sélectionné"
+
+#: src/pyams_content/reference/pictograms/zmi/widget.py:55
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:169
+msgid "Default header: --"
+msgstr "En-tête par défaut : --"
+
+#: src/pyams_content/reference/pictograms/zmi/manager.py:50
+msgid "Pictograms selection..."
+msgstr "Sélection de pictogrammes"
+
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:59
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:313
+msgid "Add pictogram"
+msgstr "Ajouter un pictogramme"
+
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:71
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:326
+msgid "Add new pictogram"
+msgstr "Ajout d'un pictogramme"
+
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:95
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:368
+msgid "Edit pictogram properties"
+msgstr "Propriétés du pictogramme"
+
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:150
+#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:31
+#: src/pyams_content/component/gallery/interfaces/__init__.py:106
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:43
+#: src/pyams_content/component/paragraph/zmi/container.py:270
+#: src/pyams_content/component/paragraph/zmi/milestone.py:238
+#: src/pyams_content/interfaces/__init__.py:101
+#: src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:31
+#: src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:31
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:197
+#: src/pyams_content/shared/view/portlet/interfaces.py:56
+#: src/pyams_content/shared/common/zmi/dashboard.py:103
+#: src/pyams_content/shared/common/zmi/reverse.py:73
+#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:200
+#: src/pyams_content/shared/site/zmi/folder.py:66
+#: src/pyams_content/shared/imagemap/zmi/container.py:123
+#: src/pyams_content/shared/logo/interfaces/__init__.py:46
+msgid "Title"
+msgstr "Titre"
+
+#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:7
+msgid "Available pictograms"
+msgstr "Pictogrammes disponibles"
+
+#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:21
+#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:48
+msgid "Display pictogram properties"
+msgstr "Propriétés du pictogramme"
+
+#: src/pyams_content/reference/pictograms/zmi/templates/pictogram-header.pt:6
+msgid "Default header: ${header}"
+msgstr "En-tête par défaut : ${header}"
 
 #: src/pyams_content/component/keynumber/__init__.py:189
-#: src/pyams_content/component/keynumber/zmi/__init__.py:212
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:83
 #: src/pyams_content/component/keynumber/portlet/zmi/__init__.py:74
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:83
+#: src/pyams_content/component/keynumber/zmi/__init__.py:212
 msgid "Key numbers"
 msgstr "Chiffres-clés"
 
-#: src/pyams_content/component/keynumber/zmi/paragraph.py:53
-msgid "Key numbers..."
-msgstr "Chiffres-clés"
-
-#: src/pyams_content/component/keynumber/zmi/paragraph.py:66
-msgid "Add new key number paragraph"
-msgstr "Ajout de chiffres-clés"
-
-#: src/pyams_content/component/keynumber/zmi/paragraph.py:94
-msgid "Edit key number paragraph properties"
-msgstr "Propriétés des chiffres-clés"
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:40
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:41
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:38
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:42
+#: src/pyams_content/component/association/interfaces/__init__.py:42
+#: src/pyams_content/features/alert/interfaces.py:54
+#: src/pyams_content/features/menu/interfaces/__init__.py:59
+#: src/pyams_content/shared/form/interfaces/__init__.py:85
+#: src/pyams_content/shared/site/interfaces/__init__.py:156
+msgid "Visible?"
+msgstr "Visible ?"
+
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:41
+msgid "Is this key number visible in front-office?"
+msgstr "Si 'non', ce chiffre-clé ne sera pas présenté aux internautes"
 
 #. Default: Header
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:45
 #: src/pyams_content/component/keynumber/zmi/__init__.py:160
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:45
 msgid "key-number-label"
 msgstr "En-tête"
 
-#: src/pyams_content/component/keynumber/zmi/__init__.py:172
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:46
+msgid ""
+"Small text to be displayed above number (according to selected renderer)"
+msgstr ""
+"Texte court affiché au-dessus du chiffre (selon le mode de rendu sélectionné)"
+
 #: src/pyams_content/component/keynumber/interfaces/__init__.py:50
+#: src/pyams_content/component/keynumber/zmi/__init__.py:172
 msgid "Number"
 msgstr "Chiffre"
 
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:51
+msgid "Key number value"
+msgstr "Chiffre"
+
 #. Default: Unit
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:54
 #: src/pyams_content/component/keynumber/zmi/__init__.py:181
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:54
 msgid "key-number-unit"
 msgstr "Unité"
 
-#: src/pyams_content/component/keynumber/zmi/__init__.py:193
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:55
+msgid "Displayed unit"
+msgstr "Unité affichée"
+
 #: src/pyams_content/component/keynumber/interfaces/__init__.py:58
-#: src/pyams_content/component/illustration/interfaces/__init__.py:64
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:277
-#: src/pyams_content/component/paragraph/interfaces/video.py:48
+#: src/pyams_content/component/keynumber/zmi/__init__.py:193
+#: src/pyams_content/component/video/interfaces/__init__.py:46
+#: src/pyams_content/component/paragraph/interfaces/video.py:50
 #: src/pyams_content/component/paragraph/interfaces/pictogram.py:58
-#: src/pyams_content/component/video/interfaces/__init__.py:48
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:81
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:276
+#: src/pyams_content/component/illustration/interfaces/__init__.py:62
 msgid "Associated text"
 msgstr "Texte associé"
 
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:59
+msgid "The way this text will be rendered depends on presentation template"
+msgstr ""
+"La présentation de cette information peut varier en fonction du mode de "
+"rendu choisi"
+
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:94
+msgid "Key numbers template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:95
+msgid "Presentation template used for key numbers"
+msgstr "Modèle de présentation utilisé par ce bloc de contenu"
+
+#: src/pyams_content/component/keynumber/portlet/__init__.py:71
+msgid "Key Numbers"
+msgstr "Chiffres-clés"
+
+#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:32
+msgid "Portlet title"
+msgstr "Titre"
+
+#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:35
+msgid "Teaser"
+msgstr "Accroche"
+
+#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:36
+msgid "Short text displayed above key numbers"
+msgstr "Texte d'introduction des chiffres-clés"
+
+#: src/pyams_content/component/keynumber/portlet/zmi/__init__.py:97
+#: src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:26
+msgid "Associated links"
+msgstr "Liens associés"
+
+#: src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:31
+#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:10
+#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:7
+msgid "Link target is not published!"
+msgstr "Le contenu ciblé n'est pas publié"
+
 #: src/pyams_content/component/keynumber/zmi/__init__.py:231
 msgid "Add keynumber"
 msgstr "Ajouter un chiffre-clé"
@@ -536,1153 +337,265 @@
 msgid "Key number was correctly added"
 msgstr "Le chiffre-clé a été ajouté."
 
-#: src/pyams_content/component/keynumber/portlet/__init__.py:71
-msgid "Key Numbers"
+#: src/pyams_content/component/keynumber/zmi/paragraph.py:53
+msgid "Key numbers..."
 msgstr "Chiffres-clés"
 
-#: src/pyams_content/component/keynumber/portlet/zmi/__init__.py:97
-#: src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:26
-msgid "Associated links"
-msgstr "Liens associés"
-
-#: src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:31
-#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:10
-#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:7
-msgid "Link target is not published!"
-msgstr "Le contenu ciblé n'est pas publié"
-
-#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:32
-msgid "Portlet title"
+#: src/pyams_content/component/keynumber/zmi/paragraph.py:66
+msgid "Add new key number paragraph"
+msgstr "Ajout de chiffres-clés"
+
+#: src/pyams_content/component/keynumber/zmi/paragraph.py:94
+msgid "Edit key number paragraph properties"
+msgstr "Propriétés des chiffres-clés"
+
+#: src/pyams_content/component/gallery/__init__.py:155
+msgid "Gallery"
+msgstr "Galerie de médias"
+
+#: src/pyams_content/component/gallery/paragraph.py:45
+msgid "(gallery contains 1 media)"
+msgstr "(1 média dans la galerie)"
+
+#: src/pyams_content/component/gallery/paragraph.py:47
+msgid "(empty gallery)"
+msgstr "(aucun média dans la galerie)"
+
+#: src/pyams_content/component/gallery/paragraph.py:43
+#, python-format
+msgid "(gallery contains {0} medias)"
+msgstr "({0} medias dans la galerie)"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:120
+msgid "Medias gallery"
+msgstr "Galerie de médias"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:42
+#: src/pyams_content/component/illustration/interfaces/__init__.py:40
+#: src/pyams_content/component/illustration/interfaces/__init__.py:103
+msgid "Image or video data"
+msgstr "Fichier"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:43
+#: src/pyams_content/component/illustration/interfaces/__init__.py:41
+#: src/pyams_content/component/illustration/interfaces/__init__.py:104
+msgid "Image or video content"
+msgstr ""
+"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu..."
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:46
+#: src/pyams_content/component/video/interfaces/__init__.py:69
+#: src/pyams_content/component/paragraph/interfaces/video.py:43
+#: src/pyams_content/component/paragraph/interfaces/audio.py:43
+#: src/pyams_content/component/illustration/interfaces/__init__.py:47
+msgid "Legend"
+msgstr "Légende"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:50
+msgid "Alternate title used to describe media content"
+msgstr ""
+"Ce texte est affiché lorsque le média ne peut être téléchargé ou affiché ; "
+"il est aussi utilisé par les navigateurs des personnes souffrant de "
+"déficiences visuelles. Il doit donc décrire le contenu du média, pour se "
+"conformer aux normes d'accessibilité."
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:53
+#: src/pyams_content/component/gallery/interfaces/__init__.py:110
+#: src/pyams_content/component/links/interfaces/__init__.py:39
+#: src/pyams_content/component/paragraph/interfaces/audio.py:50
+#: src/pyams_content/component/extfile/interfaces/__init__.py:40
+#: src/pyams_content/shared/form/interfaces/__init__.py:64
+msgid "Description"
+msgstr "Description"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:56
+#: src/pyams_content/component/gallery/zmi/interfaces.py:39
+#: src/pyams_content/component/video/interfaces/__init__.py:42
+#: src/pyams_content/component/paragraph/interfaces/video.py:46
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:44
+#: src/pyams_content/component/paragraph/interfaces/audio.py:46
+#: src/pyams_content/component/extfile/interfaces/__init__.py:44
+#: src/pyams_content/component/illustration/interfaces/__init__.py:54
+msgid "Author"
+msgstr "Auteur"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:57
+#: src/pyams_content/component/gallery/zmi/interfaces.py:40
+#: src/pyams_content/component/video/interfaces/__init__.py:43
+#: src/pyams_content/component/paragraph/interfaces/video.py:47
+#: src/pyams_content/component/paragraph/interfaces/audio.py:47
+#: src/pyams_content/component/extfile/interfaces/__init__.py:45
+msgid "Name of document's author"
+msgstr "Sous la forme \"Prénom Nom / Organisme\""
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:60
+#: src/pyams_content/component/paragraph/interfaces/audio.py:39
+#: src/pyams_content/component/extfile/interfaces/__init__.py:89
+msgid "Audio data"
+msgstr "Fichier"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:61
+msgid "Sound file associated with the current media"
+msgstr "Vous pouvez associer un fichier audio à ce média"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:64
+msgid "Sound title"
 msgstr "Titre"
 
-#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:35
-msgid "Teaser"
-msgstr "Accroche"
-
-#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:36
-msgid "Short text displayed above key numbers"
-msgstr "Texte d'introduction des chiffres-clés"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:40
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:40
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:44
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:41
-#: src/pyams_content/component/association/interfaces/__init__.py:42
-#: src/pyams_content/shared/form/interfaces/__init__.py:85
-#: src/pyams_content/shared/site/interfaces/__init__.py:144
-#: src/pyams_content/features/alert/interfaces.py:54
-#: src/pyams_content/features/menu/interfaces/__init__.py:59
-msgid "Visible?"
-msgstr "Visible ?"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:41
-msgid "Is this key number visible in front-office?"
-msgstr "Si 'non', ce chiffre-clé ne sera pas présenté aux internautes"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:46
-msgid ""
-"Small text to be displayed above number (according to selected renderer)"
-msgstr ""
-"Texte court affiché au-dessus du chiffre (selon le mode de rendu sélectionné)"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:51
-msgid "Key number value"
-msgstr "Chiffre"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:55
-msgid "Displayed unit"
-msgstr "Unité affichée"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:59
-msgid "The way this text will be rendered depends on presentation template"
-msgstr ""
-"La présentation de cette information peut varier en fonction du mode de "
-"rendu choisi"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:94
-msgid "Key numbers template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:95
-msgid "Presentation template used for key numbers"
-msgstr "Modèle de présentation utilisé par ce bloc de contenu"
-
-#: src/pyams_content/component/illustration/__init__.py:177
-#: src/pyams_content/component/illustration/thesaurus.py:32
-#: src/pyams_content/component/illustration/zmi/paragraph.py:158
-#: src/pyams_content/component/illustration/zmi/__init__.py:56
-#: src/pyams_content/component/illustration/zmi/__init__.py:117
-#: src/pyams_content/component/illustration/interfaces/__init__.py:99
-msgid "Illustration"
-msgstr "Illustration"
-
-#: src/pyams_content/component/illustration/zmi/paragraph.py:60
-msgid "Illustration..."
-msgstr "Illustration"
-
-#: src/pyams_content/component/illustration/zmi/paragraph.py:73
-msgid "Add new illustration"
-msgstr "Ajout d'une illustration"
-
-#: src/pyams_content/component/illustration/zmi/paragraph.py:98
-#: src/pyams_content/component/illustration/zmi/thesaurus.py:42
-msgid "Edit illustration properties"
-msgstr "Propriétés de l'illustration"
-
-#: src/pyams_content/component/illustration/zmi/__init__.py:151
-msgid "Navigation link illustration"
-msgstr "Illustration de navigation"
-
-#: src/pyams_content/component/illustration/zmi/__init__.py:119
-msgid "Header illustration"
-msgstr "Illustration d'en-tête"
-
-#: src/pyams_content/component/illustration/interfaces/__init__.py:57
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:49
-msgid "Alternate title used to describe image content"
-msgstr ""
-"Ce texte est affiché lorsque le contenu ne peut être téléchargé ou affiché ; "
-"il est aussi utilisé par les navigateurs des personnes souffrant de "
-"déficiences visuelles. Il doit donc décrire le contenu, pour se conformer "
-"aux normes d'accessibilité."
-
-#: src/pyams_content/component/illustration/interfaces/__init__.py:65
-msgid "Illustration description displayed in front-office templates"
-msgstr ""
-"Le texte accompagne l'illustration, en complément de la légende. Attention : "
-"sa présence et sa mise en forme dépendent du mode de rendu choisi."
-
-#: src/pyams_content/component/illustration/interfaces/__init__.py:69
-msgid "Name of picture's author"
-msgstr "Sous la forme \"Prénom Nom / Organisme\""
-
-#: src/pyams_content/component/illustration/interfaces/__init__.py:72
-msgid "Illustration template"
+#: src/pyams_content/component/gallery/interfaces/__init__.py:65
+msgid "Title of associated sound file"
+msgstr "Titre du fichier audio associé à ce média"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:68
+msgid "Sound description"
+msgstr "Description"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:69
+msgid "Short description of associated sound file"
+msgstr "Courte description du fichier audio associé à ce média"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:72
+msgid "Visible media?"
+msgstr "Média visible ?"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:73
+msgid "If 'no', this media won't be displayed in front office"
+msgstr "Si 'non', ce média ne sera pas présenté aux internautes"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:84
+msgid "Gallery template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/illustration/interfaces/__init__.py:73
-msgid "Presentation template used for illustration"
-msgstr ""
-"<span>Modèle de présentation utilisé par cette illustration.<br /"
-"><strong>ATTENTION :</strong> certains modes de rendu ne prennent pas en "
-"compte tous les types de médias !</span>"
-
-#: src/pyams_content/component/paragraph/milestone.py:140
-msgid "Selected paragraph is missing"
-msgstr "le bloc sélectionné est introuvable"
-
-#: src/pyams_content/component/paragraph/milestone.py:143
-msgid "Selected paragraph is not visible"
-msgstr "le bloc sélectionné n'est pas visible"
-
-#: src/pyams_content/component/paragraph/container.py:97
-msgid "Paragraphs"
-msgstr "Blocs de contenu"
-
-#: src/pyams_content/component/paragraph/container.py:119
-msgid "no visible paragraph"
-msgstr "aucun bloc de contenu visible"
-
-#: src/pyams_content/component/paragraph/pictogram.py:135
-msgid "Selected pictogram is missing"
-msgstr "le pictogramme sélectionné est introuvable"
-
-#: src/pyams_content/component/paragraph/header.py:62
-msgid "This paragraph type is deprecated and should be removed!"
-msgstr "Ce type de paragraphe a été supprimé et ne doit plus être utilisé !"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:78
-msgid "Milestones..."
-msgstr "Chronologie"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:91
-msgid "Add new milestone paragraph"
-msgstr "Ajout d'une chronologie"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:118
-msgid "Edit milestone paragraph properties"
-msgstr "Propriétés de la chronologie"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:251
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:49
-msgid "Associated label"
-msgstr "Information associée"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:263
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:53
-msgid "Anchor"
-msgstr "Ancre"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:292
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:76
-msgid "Milestones"
-msgstr "Chronologie"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:307
-msgid "Add milestone"
-msgstr "Ajouter un jalon"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:320
-msgid "Add new milestone"
-msgstr "Ajout d'un jalon"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:347
-msgid "Edit milestone properties"
-msgstr "Propriétés du jalon"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:335
-msgid "Milestone was correctly added"
-msgstr "Le jalon a été ajouté."
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:278
-msgid "(missing paragraph)"
-msgstr "(paragraphe supprimé)"
-
-#: src/pyams_content/component/paragraph/zmi/keypoint.py:52
-msgid "Key points..."
-msgstr "Points clés"
-
-#: src/pyams_content/component/paragraph/zmi/keypoint.py:65
-msgid "Add new key points paragraph"
-msgstr "Ajout de points clés"
-
-#: src/pyams_content/component/paragraph/zmi/keypoint.py:92
-msgid "Edit key points paragraph properties"
-msgstr "Propriétés des points clés"
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:64
-msgid "Content block types..."
-msgstr "Types de blocs de contenu"
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:78
-msgid "Content block types"
-msgstr "Types de blocs de contenu"
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:88
-msgid ""
-"You can define which types of paragraphs are allowed in this container.\n"
-"\n"
-"Default paragraphs will be added automatically (in selected order) to any "
-"new created content.\n"
-"\n"
-"NOTICE: removing types from allowed types list will have no effect on "
-"already created contents!"
-msgstr ""
-"Vous pouvez indiquer la liste des types de blocs de contenu autorisés pour "
-"ce gabarit.\n"
-"\n"
-"Les types de blocs par défaut seront ajoutés automatiquement (dans l'ordre "
-"défini) à chaque nouveau contenu créé selon ce gabarit.\n"
-"\n"
-"REMARQUE : supprimer des types de la liste des types de blocs autorisés sera "
-"sans effet sur les contenus existants."
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:206
-#: src/pyams_content/shared/common/zmi/templates/preview-input.pt:39
-#: src/pyams_content/features/preview/zmi/__init__.py:45
-msgid "Preview"
-msgstr "Aperçu"
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:211
-#: src/pyams_content/shared/common/zmi/workflow.py:123
-#: src/pyams_content/shared/common/zmi/workflow.py:210
-#: src/pyams_content/shared/common/zmi/workflow.py:250
-#: src/pyams_content/shared/common/zmi/workflow.py:304
-#: src/pyams_content/shared/common/zmi/workflow.py:393
-#: src/pyams_content/shared/common/zmi/workflow.py:449
-#: src/pyams_content/shared/common/zmi/workflow.py:489
-#: src/pyams_content/shared/common/zmi/workflow.py:530
-#: src/pyams_content/shared/common/zmi/workflow.py:573
-#: src/pyams_content/shared/common/zmi/workflow.py:613
-#: src/pyams_content/shared/common/zmi/workflow.py:654
-#: src/pyams_content/shared/common/zmi/workflow.py:705
-#: src/pyams_content/shared/common/zmi/__init__.py:273
-#: src/pyams_content/shared/common/zmi/owner.py:73
-#: src/pyams_content/features/review/zmi/__init__.py:90
-msgid "Cancel"
-msgstr "Annuler"
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:213
-msgid "Submit"
-msgstr "Enregistrer"
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:194
-msgid "Paragraph was correctly added."
-msgstr "Le bloc a été ajouté."
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:253
-msgid ""
-"You changed renderer selection. Don't omit to update new renderer "
-"properties..."
-msgstr ""
-"Vous avez changé de mode de rendu. N'oubliez pas de vérifier les propriétés "
-"du nouveau mode de rendu sélectionné..."
-
-#: src/pyams_content/component/paragraph/zmi/map.py:55
-msgid "Location map..."
-msgstr "Carte de situation"
-
-#: src/pyams_content/component/paragraph/zmi/map.py:68
-msgid "Add new location map"
-msgstr "Ajout d'une carte de situation"
-
-#: src/pyams_content/component/paragraph/zmi/map.py:91
-msgid "Edit location map properties"
-msgstr "Propriétés de la carte"
-
-#: src/pyams_content/component/paragraph/zmi/video.py:54
-msgid "Video paragraph..."
-msgstr "Vidéo"
-
-#: src/pyams_content/component/paragraph/zmi/video.py:67
-msgid "Add new video paragraph"
-msgstr "Ajout d'une vidéo"
-
-#: src/pyams_content/component/paragraph/zmi/video.py:90
-#: src/pyams_content/component/video/zmi/paragraph.py:189
-msgid "Edit video properties"
-msgstr "Propriétés de la vidéo"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:74
-msgid "Contents..."
-msgstr "Blocs de contenu"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:215
-msgid "Set navigation anchor"
-msgstr "Ancre de navigation"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:286
-msgid "Show/hide all paragraphs"
-msgstr "Afficher/masquer tous les blocs"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:334
-#: src/pyams_content/component/paragraph/zmi/container.py:343
-#: src/pyams_content/component/paragraph/zmi/container.py:356
-msgid "Content blocks"
-msgstr "Blocs de contenu"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:413
-msgid "Links and attachments..."
-msgstr "Récap. liens et PJ"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:425
-msgid "Content blocks links and attachments"
-msgstr "Récapitulatif des liens et pièces jointes par bloc de contenu"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:145
-msgid "No currently defined paragraph."
-msgstr "Aucun bloc n'est associé à ce contenu."
-
-#: src/pyams_content/component/paragraph/zmi/container.py:295
-msgid "Click to open/close all paragraphs editors"
-msgstr "Afficher/masquer tous les blocs"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:308
-msgid "Click to open/close paragraph editor"
-msgstr "Afficher/masquer ce bloc"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:151
-msgid "Check allowed paragraph types to be able to create new paragraphs."
-msgstr ""
-"Vérifiez le paramétrage des types de blocs de contenu autorisés pour pouvoir "
-"ajouter de nouveaux blocs."
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:83
-msgid "Pictograms..."
-msgstr "Pictogrammes"
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:96
-msgid "Add new pictogram paragraph"
-msgstr "Ajout de pictogrammes"
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:123
-msgid "Edit pictogram paragraph properties"
-msgstr "Propriétés des pictogrammes"
-
-#. Default: Header
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:260
-msgid "pictogram-item-header"
-msgstr "En-tête"
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:299
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:80
-msgid "Pictograms"
-msgstr "Pictogrammes"
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:314
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:59
-msgid "Add pictogram"
-msgstr "Ajouter un pictogramme"
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:327
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:71
-msgid "Add new pictogram"
-msgstr "Ajout d'un pictogramme"
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:369
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:95
-msgid "Edit pictogram properties"
-msgstr "Propriétés du pictogramme"
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:349
-msgid "Pictogram was correctly added"
-msgstr "Le pictogramme a été ajouté."
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:359
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:397
-msgid "You must select a pictogram!"
-msgstr "Vous devez sélectionner un pictogramme !"
-
-#: src/pyams_content/component/paragraph/zmi/audio.py:54
-msgid "Audio paragraph..."
-msgstr "Bande son"
-
-#: src/pyams_content/component/paragraph/zmi/audio.py:67
-msgid "Add new audio paragraph"
-msgstr "Ajout d'une bande son"
-
-#: src/pyams_content/component/paragraph/zmi/audio.py:89
-msgid "Edit audio properties"
-msgstr "Propriétés de la bande son"
-
-#: src/pyams_content/component/paragraph/zmi/frame.py:86
-msgid "Framed text..."
-msgstr "Encadré"
-
-#: src/pyams_content/component/paragraph/zmi/frame.py:100
-msgid "Add new framed text paragraph"
-msgstr "Ajout d'un encadré"
-
-#: src/pyams_content/component/paragraph/zmi/frame.py:126
-msgid "Edit framed text paragraph properties"
-msgstr "Propriétés de l'encadré"
-
-#: src/pyams_content/component/paragraph/zmi/verbatim.py:57
-msgid "Verbatim..."
-msgstr "Verbatim"
-
-#: src/pyams_content/component/paragraph/zmi/verbatim.py:70
-msgid "Add new verbatim paragraph"
-msgstr "Ajout d'un verbatim"
-
-#: src/pyams_content/component/paragraph/zmi/verbatim.py:92
-msgid "Edit verbatim paragraph properties"
-msgstr "Propriétés du verbatim"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:76
-msgid "Raw HTML..."
-msgstr "Code HTML"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:89
-msgid "Add new raw HTML paragraph"
-msgstr "Ajout d'un bloc de code HTML"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:119
-msgid "Edit raw HTML paragraph properties"
-msgstr "Propriétés du code HTML"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:159
-msgid "Rich text..."
-msgstr "Texte enrichi"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:172
-msgid "Add new rich text paragraph"
-msgstr "Ajout d'un bloc de texte enrichi"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:197
-msgid "Edit rich text paragraph properties"
-msgstr "Propriétés du texte enrichi"
-
-#: src/pyams_content/component/paragraph/zmi/contact.py:53
-msgid "Contact card..."
-msgstr "Fiche contact"
-
-#: src/pyams_content/component/paragraph/zmi/contact.py:66
-msgid "Add new contact card"
-msgstr "Ajout d'une fiche contact"
-
-#: src/pyams_content/component/paragraph/zmi/contact.py:89
-msgid "Edit contact card properties"
-msgstr "Propriétés de la fiche contact"
-
-#: src/pyams_content/component/paragraph/zmi/header.py:49
-msgid "Edit header paragraph properties"
-msgstr "Propriétés du chapô"
-
-#: src/pyams_content/component/paragraph/portlet/__init__.py:79
-msgid "Content paragraphs"
-msgstr "Blocs de contenu"
-
-#: src/pyams_content/component/paragraph/portlet/zmi/__init__.py:68
-msgid "No filter, all paragraphs selected"
-msgstr "Pas de filtre, tous les blocs sont acceptés"
-
-#: src/pyams_content/component/paragraph/portlet/zmi/__init__.py:75
-msgid "No filter, all paragraph types selected"
-msgstr "Pas de filtre, tous les types de blocs sont acceptés"
-
-#: src/pyams_content/component/paragraph/portlet/zmi/templates/preview.pt:4
-msgid "Selected paragraphs:"
-msgstr "Blocs sélectionnés :"
-
-#: src/pyams_content/component/paragraph/portlet/zmi/templates/preview.pt:10
-msgid "Paragraphs filters:"
-msgstr "Filtrage des blocs :"
-
-#: src/pyams_content/component/paragraph/portlet/zmi/templates/preview.pt:13
-msgid "Selected paragraph types:"
-msgstr "Types de blocs :"
-
-#: src/pyams_content/component/paragraph/portlet/zmi/templates/preview.pt:18
-msgid "Only display anchors"
-msgstr "Ne sélectionner que les ancres"
-
-#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:31
-msgid "Selected paragraphs"
-msgstr "Blocs sélectionnés"
-
-#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:32
-msgid ""
-"List of selected paragraphs; an empty selection means that all paragraphs "
-"will be selectable by following filters; otherwise, this selection will have "
-"priority"
-msgstr ""
-"Liste des blocs sélectionnés ; si la sélection est vide, tous les blocs de contenu "
-"pourront être sélectionnés via les filtres ci-dessous ; dans le cas contraire, cette "
-"sélection devient prioritaire et les autres filtres ne sont pas appliqués"
-
-#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:38
-msgid "Paragraph types"
-msgstr "Types de blocs"
-
-#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:39
-msgid ""
-"Select list of paragraph types you want to include; an empty selection means "
-"that all paragraphs types will be selected"
-msgstr ""
-"Liste des types de blocs que vous souhaitez sélectionner ; si la sélection est vide, "
-"tous les types de blocs seront pris en compte"
-
-#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:44
-msgid "Anchors only?"
-msgstr "Ancres seulement ?"
-
-#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:45
-msgid "If 'yes', only paragraphs set as 'anchors' will be selected"
-msgstr "Si 'oui', seuls les blocs définis comme ancres de navigation seront sélectionnés"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:41
-msgid "Is this milestone visible in front-office?"
-msgstr "Si 'non', ce jalon ne sera pas présenté aux internautes"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:46
-msgid "Milestone title"
-msgstr "Libellé associé au jalon"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:50
-msgid "The way this label will be rendered depends on presentation template"
-msgstr ""
-"La présentation de cette information peut varier en fonction du mode de "
-"rendu choisi"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:54
-msgid "Paragraph to which this milestone should lead"
-msgstr "Bloc de contenu vers lequel ce jalon doit conduire"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:83
-msgid "Milestones template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:84
-msgid "Presentation template used for milestones"
-msgstr "Modèle de présentation utilisé par ce bloc de contenu"
-
-#: src/pyams_content/component/paragraph/interfaces/keypoint.py:33
-#: src/pyams_content/component/paragraph/interfaces/keypoint.py:40
-msgid "Key points"
-msgstr "Points clés"
-
-#: src/pyams_content/component/paragraph/interfaces/keypoint.py:41
-msgid "Enter one key point by line, without hyphen or prefix"
-msgstr ""
-"Indiquez un point clé par ligne, sans tiret. Passez à la ligne entre chaque "
-"point clé, la mise en forme sera effectuée automatiquement."
-
-#: src/pyams_content/component/paragraph/interfaces/keypoint.py:44
-msgid "Presentation template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/keypoint.py:45
-#: src/pyams_content/component/paragraph/interfaces/frame.py:44
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:53
-#: src/pyams_content/component/paragraph/interfaces/html.py:46
-#: src/pyams_content/component/paragraph/interfaces/html.py:67
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:101
-#: src/pyams_content/shared/logo/interfaces/__init__.py:82
-msgid "Presentation template used for this paragraph"
-msgstr "Mode de rendu utilisé par ce bloc de contenu"
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:45
-msgid "Is this paragraph visible in front-office?"
-msgstr "Si 'non', ce bloc de contenu ne sera pas présenté aux internautes"
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:49
-msgid "Anchor?"
-msgstr "Ancre ?"
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:50
-msgid "Is this paragraph a navigation anchor?"
-msgstr ""
-"Si 'oui', ce bloc pourra recevoir une ancre de navigation au sein du contenu"
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:54
-msgid "§ Title"
-msgstr "Titre §"
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:94
-msgid "Allowed paragraphs"
-msgstr "Types de blocs autorisés"
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:95
-msgid "List of paragraphs allowed for this content type"
-msgstr "Liste des types de blocs de contenu autorisés pour ce gabarit."
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:99
-#: src/pyams_content/shared/common/zmi/types.py:172
-#: src/pyams_content/shared/common/zmi/types.py:412
-msgid "Default paragraphs"
-msgstr "Types de blocs par défaut"
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:100
-msgid "List of paragraphs automatically added to a new content"
-msgstr "Liste des types de blocs ajoutés automatiquement aux nouveaux contenus"
-
-#: src/pyams_content/component/paragraph/interfaces/map.py:41
-msgid "Location map"
-msgstr "Carte"
-
-#: src/pyams_content/component/paragraph/interfaces/map.py:48
-#: src/pyams_content/component/paragraph/interfaces/contact.py:72
-msgid "GPS location"
-msgstr "Position GPS"
-
-#: src/pyams_content/component/paragraph/interfaces/map.py:49
-msgid "GPS coordinates used to locate map"
-msgstr "Coordonnées GPS de situation de la carte"
-
-#: src/pyams_content/component/paragraph/interfaces/map.py:52
-msgid "Display location mark?"
-msgstr "Marqueur de position ?"
-
-#: src/pyams_content/component/paragraph/interfaces/map.py:53
-msgid "If 'yes', a location marker will be displayed on map"
-msgstr "Si 'oui', un marqueur de position sera placé sur la carte"
-
-#: src/pyams_content/component/paragraph/interfaces/map.py:57
-msgid "Map template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/map.py:58
-msgid "Presentation template used for this map"
-msgstr "Mode de rendu utilisé par cette carte"
-
-#: src/pyams_content/component/paragraph/interfaces/video.py:42
-msgid "Video file content"
-msgstr ""
-"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
-
-#: src/pyams_content/component/paragraph/interfaces/video.py:49
-#: src/pyams_content/component/video/interfaces/__init__.py:49
+#: src/pyams_content/component/gallery/interfaces/__init__.py:85
+msgid "Presentation template used for this gallery"
+msgstr ""
+"<span>Modèle de présentation utilisé par cette galerie.<br /"
+"><strong>ATTENTION :</strong> certains modes de rendu ne prennent en charge "
+"que certains types de médias !!</span>"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:107
+msgid "Gallery title, as shown in front-office"
+msgstr "Titre de la galerie présenté aux internautes"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:111
+msgid "Gallery description displayed by front-office template"
+msgstr "Description de la galerie de médias présentée aux internautes"
+
+#: src/pyams_content/component/gallery/zmi/file.py:57
+#: src/pyams_content/component/gallery/zmi/file.py:69
+#: src/pyams_content/component/gallery/zmi/paragraph.py:148
+msgid "Add media(s)"
+msgstr "Ajouter un média / un groupe de médias (zip)"
+
+#: src/pyams_content/component/gallery/zmi/file.py:178
+msgid "Update media properties"
+msgstr "Propriétés du média"
+
+#: src/pyams_content/component/gallery/zmi/file.py:227
+msgid "Remove media..."
+msgstr "Supprimer le média"
+
+#: src/pyams_content/component/gallery/zmi/file.py:142
+msgid "Show/hide media"
+msgstr "Cliquez pour rendre le média visible ou non"
+
+#: src/pyams_content/component/gallery/zmi/file.py:194
+msgid "Audio content"
+msgstr "Contenu audio associé"
+
+#: src/pyams_content/component/gallery/zmi/__init__.py:57
+msgid "Update gallery properties"
+msgstr "Propriétés de la galerie de médias"
+
+#: src/pyams_content/component/gallery/zmi/__init__.py:84
+msgid "Update gallery contents"
+msgstr "Contenu de la galerie de médias"
+
+#: src/pyams_content/component/gallery/zmi/interfaces.py:35
+msgid "Images or videos data"
+msgstr "Fichier"
+
+#: src/pyams_content/component/gallery/zmi/interfaces.py:36
+msgid "You can upload a single file or choose to upload a whole ZIP archive"
+msgstr ""
+"Vous pouvez déposer les médias un par un, ou en nombre en les réunissant au "
+"préalable dans un fichier ZIP"
+
+#: src/pyams_content/component/gallery/zmi/paragraph.py:60
+msgid "Medias gallery..."
+msgstr "Galerie de médias"
+
+#: src/pyams_content/component/gallery/zmi/paragraph.py:73
+msgid "Add new gallery"
+msgstr "Ajout d'une galerie de médias"
+
+#: src/pyams_content/component/gallery/zmi/paragraph.py:95
+msgid "Edit gallery properties"
+msgstr "Propriétés de la galerie de médias"
+
+#: src/pyams_content/component/gallery/zmi/paragraph.py:169
+msgid "Media(s) successfully added"
+msgstr "Les médias ont été ajoutés dans la galerie."
+
+#: src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:12
+msgid "Gallery medias"
+msgstr "Contenu de la galerie"
+
+#: src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:18
+msgid "Download medias"
+msgstr "Enregistrer tous les médias sous..."
+
+#: src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:42
+#: src/pyams_content/component/gallery/zmi/templates/gallery-media.pt:9
+msgid "Zoom image"
+msgstr "Agrandir l'image"
+
+#: src/pyams_content/component/video/__init__.py:67
+#: src/pyams_content/component/video/interfaces/__init__.py:62
+msgid "External video"
+msgstr "Vidéo externe"
+
+#: src/pyams_content/component/video/interfaces/__init__.py:47
+#: src/pyams_content/component/paragraph/interfaces/video.py:51
 msgid "Video description displayed by front-office template"
 msgstr ""
 "Le texte accompagne la vidéo, en complément de la légende. Attention : sa "
 "présence et sa mise en forme dépendent du mode de rendu choisi."
 
-#: src/pyams_content/component/paragraph/interfaces/video.py:56
-#: src/pyams_content/component/video/interfaces/__init__.py:78
+#: src/pyams_content/component/video/interfaces/__init__.py:50
+msgid "Video provider"
+msgstr "Fournisseur"
+
+#: src/pyams_content/component/video/interfaces/__init__.py:51
+msgid "Name of external platform providing selected video"
+msgstr "Nom de la plate-forme externe fournissant la vidéo à afficher"
+
+#: src/pyams_content/component/video/interfaces/__init__.py:72
+#: src/pyams_content/component/paragraph/interfaces/video.py:54
 msgid "Video template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/paragraph/interfaces/video.py:57
-#: src/pyams_content/component/video/interfaces/__init__.py:79
+#: src/pyams_content/component/video/interfaces/__init__.py:73
+#: src/pyams_content/component/paragraph/interfaces/video.py:55
 msgid "Presentation template used for this video"
 msgstr "Mode de rendu utilisé par cette vidéo"
 
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:42
-msgid "Is this pictogram visible in front-office?"
-msgstr "Si 'non', ce pictogramme ne sera pas présenté aux internautes"
-
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:46
-#: src/pyams_content/component/links/interfaces/__init__.py:43
-#: src/pyams_content/shared/common/interfaces/types.py:75
-msgid "Pictogram"
-msgstr "Pictogramme"
-
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:47
-msgid "Name of the pictogram to select"
-msgstr "Sélection du pictogramme à afficher"
-
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:53
-msgid "Alternate header"
-msgstr "En-tête de substitution"
-
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:54
-msgid ""
-"Alternate pictogram label; if not specified, the pictogram header will be "
-"used"
-msgstr ""
-"En-tête de substitution utilisé par le pictogramme; si rien n'est spécifié, "
-"l'en-tête du pictogramme sélectionné sera utilisé."
-
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:59
-msgid "Additional text associated to this pictogram"
-msgstr "Texte complémentaire associé à ce pictogramme"
-
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:87
-msgid "Pictograms template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:88
-msgid "Presentation template used for pictograms"
-msgstr "Modèle de présentation utilisé par ce bloc de contenu"
-
-#: src/pyams_content/component/paragraph/interfaces/audio.py:34
-msgid "Audio"
-msgstr "Bande son"
-
-#: src/pyams_content/component/paragraph/interfaces/audio.py:56
-msgid "Audio template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/audio.py:57
-msgid "Presentation template used for this audio file"
-msgstr "Mode de rendu utilisé pour cette bande son"
-
-#: src/pyams_content/component/paragraph/interfaces/frame.py:33
-msgid "Framed text"
-msgstr "Encadré"
-
-#: src/pyams_content/component/paragraph/interfaces/frame.py:40
-msgid "Frame body"
-msgstr "Contenu"
-
-#: src/pyams_content/component/paragraph/interfaces/frame.py:43
-msgid "Text template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:33
-msgid "Verbatim"
-msgstr "Verbatim"
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:40
-msgid "Quoted text"
-msgstr "Citation"
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:41
-msgid "Quotation marks will be added automatically by presentation template"
-msgstr "Les guillemets seront ajoutés automatiquement par le mode de rendu..."
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:45
-msgid "Name of the quote author"
-msgstr "Nom de l'auteur de la citation"
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:48
-#: src/pyams_content/component/paragraph/interfaces/contact.py:54
-msgid "In charge of"
-msgstr "Fonction"
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:49
-msgid "Label of author function"
-msgstr "Fonction de l'auteur"
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:52
-msgid "Verbatim template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:33
-msgid "Raw HTML "
-msgstr "Code HTML"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:56
-msgid "Rich text"
-msgstr "Texte enrichi"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:40
-msgid "Raw HTML code"
-msgstr "Code HTML"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:41
-msgid ""
-"This HTML code will be used 'as is', without any transformation. Use with "
-"care!!"
-msgstr ""
-"Ce code HTML sera utilisé en l'état et intégré dans les pages sans "
-"modification. À utiliser avec précaution !!!"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:45
-msgid "Raw HTML code template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:63
-msgid "Body"
-msgstr "Contenu HTML"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:66
-msgid "Body template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:43
-msgid "Contact card"
-msgstr "Fiche contact"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:50
-msgid "Contact identity"
-msgstr "Nom du contact"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:51
-msgid "Name of the contact"
-msgstr "Nom complet du contact"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:55
-msgid "Label of contact function"
-msgstr "Fonction du contact"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:58
-msgid "Email address"
-msgstr "Adresse de messagerie"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:59
-msgid "Contact email address"
-msgstr "Adresse de messagerie \"stricte\", soit uniquement \"xxx@yyy.com\""
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:62
-msgid "Contact form"
-msgstr "Formulaire de contact"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:63
-msgid "Reference of contact form"
-msgstr "Référence d'un formulaire de contact"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:67
-msgid "Photo"
-msgstr "Photo"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:68
-msgid "Use 'browse' button to select contact picture"
-msgstr "Utilisez le bouton 'Parcourir' pour sélectionner la photo du contact"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:76
-msgid "Address"
-msgstr "Adresse"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:79
-msgid "Contact template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:80
-msgid "Presentation template used for this contact"
-msgstr "Modèle de présentation utilisé pour ce contact"
-
-#: src/pyams_content/component/paragraph/interfaces/contact.py:73
-msgid "GPS coordinates used to locate contact"
-msgstr "Coordonnées GPS de situation du contact"
-
-#: src/pyams_content/component/paragraph/interfaces/header.py:33
-#: src/pyams_content/component/paragraph/interfaces/header.py:40
-#: src/pyams_content/shared/common/interfaces/__init__.py:153
-msgid "Header"
-msgstr "Chapô"
-
-#: src/pyams_content/component/paragraph/interfaces/header.py:43
-#: src/pyams_content/features/header/interfaces/__init__.py:39
-msgid "Header template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/header.py:44
-#: src/pyams_content/features/header/interfaces/__init__.py:40
-msgid "Presentation template used for this header"
-msgstr "Mode de rendu utilisé par ce chapô"
-
-#: src/pyams_content/component/theme/__init__.py:71
-#: src/pyams_content/component/theme/zmi/portlet.py:40
-#: src/pyams_content/component/theme/interfaces/__init__.py:47
-#: src/pyams_content/component/theme/interfaces/__init__.py:61
-#: src/pyams_content/shared/common/zmi/search.py:189
-#: src/pyams_content/root/zmi/search.py:179
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:181
-msgid "Tags"
-msgstr "Tags"
-
-#: src/pyams_content/component/theme/__init__.py:119
-#: src/pyams_content/component/theme/zmi/portlet.py:55
-#: src/pyams_content/component/theme/interfaces/__init__.py:88
-#: src/pyams_content/component/theme/interfaces/__init__.py:102
-#: src/pyams_content/shared/common/zmi/search.py:192
-msgid "Themes"
-msgstr "Thèmes"
-
-#: src/pyams_content/component/theme/__init__.py:167
-#: src/pyams_content/component/theme/zmi/portlet.py:70
-#: src/pyams_content/component/theme/interfaces/__init__.py:129
-#: src/pyams_content/component/theme/interfaces/__init__.py:143
-#: src/pyams_content/shared/common/zmi/search.py:195
-msgid "Collections"
-msgstr "Collections"
-
-#: src/pyams_content/component/theme/__init__.py:80
-msgid "no defined tag"
-msgstr "aucun tag défini"
-
-#: src/pyams_content/component/theme/__init__.py:128
-msgid "no defined theme"
-msgstr "aucun thème défini"
-
-#: src/pyams_content/component/theme/__init__.py:176
-msgid "no defined collection"
-msgstr "aucune collection définie"
-
-#: src/pyams_content/component/theme/zmi/__init__.py:55
-#: src/pyams_content/shared/view/zmi/theme.py:56
-msgid "Tags..."
-msgstr "Tags"
-
-#: src/pyams_content/component/theme/zmi/__init__.py:66
-msgid "Content tags"
-msgstr "Tags du contenu"
-
-#: src/pyams_content/component/theme/zmi/__init__.py:99
-#: src/pyams_content/shared/view/zmi/theme.py:102
-msgid "Themes..."
-msgstr "Thèmes"
-
-#: src/pyams_content/component/theme/zmi/__init__.py:107
-msgid "Content themes"
-msgstr "Thèmes du contenu"
-
-#: src/pyams_content/component/theme/zmi/__init__.py:159
-#: src/pyams_content/shared/view/zmi/theme.py:148
-msgid "Collections..."
-msgstr "Collections"
-
-#: src/pyams_content/component/theme/zmi/__init__.py:172
-msgid "Content collections"
-msgstr "Collections associées au contenu"
-
-#: src/pyams_content/component/theme/zmi/manager.py:58
-msgid "Tags settings..."
-msgstr "Paramétrage des tags"
-
-#: src/pyams_content/component/theme/zmi/manager.py:72
-msgid "Selected tags"
-msgstr "Tags sélectionnés"
-
-#: src/pyams_content/component/theme/zmi/manager.py:108
-msgid "Themes settings..."
-msgstr "Paramétrage des thèmes"
-
-#: src/pyams_content/component/theme/zmi/manager.py:122
-msgid "Selected themes"
-msgstr "Thèmes sélectionnés"
-
-#: src/pyams_content/component/theme/zmi/manager.py:158
-msgid "Collections settings..."
-msgstr "Paramétrage des collections"
-
-#: src/pyams_content/component/theme/zmi/manager.py:172
-msgid "Selected collections"
-msgstr "Collections sélectionnées"
-
-#: src/pyams_content/component/association/container.py:91
-#: src/pyams_content/component/association/zmi/__init__.py:303
-#: src/pyams_content/component/association/interfaces/__init__.py:93
-msgid "Associations"
-msgstr "Liens et pièces jointes"
-
-#: src/pyams_content/component/association/zmi/paragraph.py:54
-#: src/pyams_content/component/association/zmi/__init__.py:96
-msgid "Associations..."
-msgstr "Liens et pièces jointes"
-
-#: src/pyams_content/component/association/zmi/paragraph.py:67
-msgid "Add new association paragraph"
-msgstr "Ajout d'un bloc  « liens et pièces jointes »"
-
-#: src/pyams_content/component/association/zmi/paragraph.py:93
-msgid "Edit association paragraph properties"
-msgstr "Propriétés du bloc « liens et pièces jointes »"
-
-#: src/pyams_content/component/association/zmi/__init__.py:205
-msgid "Public title"
-msgstr "Libellé public"
-
-#: src/pyams_content/component/association/zmi/__init__.py:223
-msgid "Inner title"
-msgstr "Contenu interne"
-
-#: src/pyams_content/component/association/zmi/__init__.py:239
-msgid "Size"
-msgstr "Taille"
-
-#: src/pyams_content/component/association/zmi/__init__.py:280
-#: src/pyams_content/component/association/zmi/__init__.py:290
-msgid "Associations list"
-msgstr "Liste des liens et pièces jointes"
-
-#: src/pyams_content/component/association/zmi/__init__.py:66
-msgid "Association was correctly added."
-msgstr "L'association a été ajoutée."
-
-#: src/pyams_content/component/association/interfaces/__init__.py:43
-#: src/pyams_content/features/menu/interfaces/__init__.py:60
-msgid "Is this item visible in front-office?"
-msgstr "Si 'non', ce lien ne sera pas présenté aux internautes"
-
-#: src/pyams_content/component/association/interfaces/__init__.py:100
-msgid "Associations template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/association/interfaces/__init__.py:101
-msgid "Presentation template used for associations"
-msgstr "Modèle de présentation utilisé par ce bloc de contenu"
-
-#: src/pyams_content/component/links/__init__.py:144
-msgid "Internal link"
-msgstr "Lien interne"
-
-#: src/pyams_content/component/links/__init__.py:230
-msgid "External link"
-msgstr "Lien externe"
-
-#: src/pyams_content/component/links/__init__.py:283
-msgid "Mailto link"
-msgstr "Lien mailto"
-
-#: src/pyams_content/component/links/__init__.py:217
-msgid "target is not published"
-msgstr "le contenu ciblé n'est pas publié"
-
-#: src/pyams_content/component/links/zmi/__init__.py:60
-msgid "Internal links"
-msgstr "Liens internes"
-
-#: src/pyams_content/component/links/zmi/__init__.py:75
-msgid "Add internal link"
-msgstr "Lien interne"
-
-#: src/pyams_content/component/links/zmi/__init__.py:89
-msgid "Add new internal link"
-msgstr "Ajout d'un lien interne"
-
-#: src/pyams_content/component/links/zmi/__init__.py:120
-msgid "Edit internal link properties"
-msgstr "Propriétés du lien interne"
-
-#: src/pyams_content/component/links/zmi/__init__.py:149
-msgid "External links"
-msgstr "Liens externes"
-
-#: src/pyams_content/component/links/zmi/__init__.py:164
-msgid "Add external link"
-msgstr "Lien externe"
-
-#: src/pyams_content/component/links/zmi/__init__.py:178
-msgid "Add new external link"
-msgstr "Ajout d'un lien externe"
-
-#: src/pyams_content/component/links/zmi/__init__.py:209
-msgid "Edit external link properties"
-msgstr "Propriétés du lien externe"
-
-#: src/pyams_content/component/links/zmi/__init__.py:238
-msgid "Mailto links"
-msgstr "Liens mailto"
-
-#: src/pyams_content/component/links/zmi/__init__.py:253
-msgid "Add mailto link"
-msgstr "Lien mailto"
-
-#: src/pyams_content/component/links/zmi/__init__.py:267
-msgid "Add new mailto link"
-msgstr "Ajout d'un lien « mailto »"
-
-#: src/pyams_content/component/links/zmi/__init__.py:298
-msgid "Edit mailto link properties"
-msgstr "Propriétés du lien « mailto »"
-
-#: src/pyams_content/component/links/interfaces/__init__.py:36
-msgid "Link title, as shown in front-office"
-msgstr ""
-"Le contexte d'utilisation de ce lien peut nécessiter de modifier son titre "
-"d'origine. Ce titre de substitution sera alors présenté aux internautes."
-
-#: src/pyams_content/component/links/interfaces/__init__.py:40
-msgid "Link description displayed by front-office template"
-msgstr "Description du lien, présentée aux internautes"
-
-#: src/pyams_content/component/links/interfaces/__init__.py:44
-msgid "Name of the pictogram associated with this link"
-msgstr ""
-"Pictogramme à associer à ce lien. ATTENTION: ce pictogramme n'est affiché "
-"que par certains modes de rendu !!"
-
-#: src/pyams_content/component/links/interfaces/__init__.py:61
-#: src/pyams_content/shared/logo/interfaces/__init__.py:56
-#: src/pyams_content/features/redirect/interfaces/__init__.py:68
-msgid "Target URL"
-msgstr "URL cible"
-
-#: src/pyams_content/component/links/interfaces/__init__.py:62
-#: src/pyams_content/shared/logo/interfaces/__init__.py:57
-msgid "URL used to access external resource"
-msgstr ""
-"URL utilisée pour accéder à cette ressource externe. Doit comprendre le "
-"protocole d'accès au site, comme « http:// » ou « https:// »."
-
-#: src/pyams_content/component/links/interfaces/__init__.py:66
-msgid "Language used in this remote resource"
-msgstr ""
-"Langue utilisée par cette ressource extene ; à préciser lorsqu'il ne s'agit "
-"pas de la langue par défaut du site."
-
-#: src/pyams_content/component/links/interfaces/__init__.py:74
-msgid "Target address"
-msgstr "Adresse mail"
-
-#: src/pyams_content/component/links/interfaces/__init__.py:75
-msgid "Target email address"
-msgstr "Adresse de messagerie \"stricte\", soit uniquement \"xxx@yyy.com\""
-
-#: src/pyams_content/component/links/interfaces/__init__.py:78
-msgid "Address name"
-msgstr "Nom de messagerie"
-
-#: src/pyams_content/component/links/interfaces/__init__.py:79
-msgid "Address as displayed in address book"
-msgstr ""
-"Nom de la boîte aux lettres, tel qu'il sera affiché dans l'application de "
-"messagerie."
-
-#: src/pyams_content/component/video/__init__.py:73
-#: src/pyams_content/component/video/interfaces/__init__.py:68
-msgid "External video"
-msgstr "Vidéo externe"
-
 #: src/pyams_content/component/video/provider/dailymotion.py:94
 msgid "Dailymotion settings"
 msgstr "Paramètres Dailymotion"
 
-#: src/pyams_content/component/video/provider/__init__.py:70
-msgid "Other provider"
-msgstr "Autre fournisseur"
-
-#: src/pyams_content/component/video/provider/__init__.py:94
-msgid "Custom video settings"
-msgstr "Paramètres spécifiques"
-
 #: src/pyams_content/component/video/provider/vimeo.py:92
 msgid "Vimeo settings"
 msgstr "Paramètres Vimeo"
 
+#: src/pyams_content/component/video/provider/__init__.py:63
+msgid "Other provider"
+msgstr "Autre fournisseur"
+
+#: src/pyams_content/component/video/provider/__init__.py:87
+msgid "Custom video settings"
+msgstr "Paramètres spécifiques"
+
 #: src/pyams_content/component/video/provider/interfaces.py:31
 msgid "Integration code"
 msgstr "Code d'intégration"
@@ -1925,1522 +838,2492 @@
 msgid "Youtube settings"
 msgstr "Paramétres Youtube"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:62
+#: src/pyams_content/component/video/zmi/paragraph.py:55
 msgid "External video..."
 msgstr "Vidéo externe"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:75
+#: src/pyams_content/component/video/zmi/paragraph.py:68
 msgid "Add new external video..."
 msgstr "Ajout d'une vidéo externe"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:124
+#: src/pyams_content/component/video/zmi/paragraph.py:182
+#: src/pyams_content/component/paragraph/zmi/video.py:90
+msgid "Edit video properties"
+msgstr "Propriétés de la vidéo"
+
+#: src/pyams_content/component/video/zmi/paragraph.py:117
 msgid "Video provider is required"
 msgstr "Le nom du fournisseur est obligatoire"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:172
-#: src/pyams_content/component/video/zmi/paragraph.py:223
+#: src/pyams_content/component/video/zmi/paragraph.py:165
+#: src/pyams_content/component/video/zmi/paragraph.py:216
 msgid "Video provider settings"
 msgstr "Paramètres liés au fournisseur"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:152
+#: src/pyams_content/component/video/zmi/paragraph.py:145
 msgid "Other settings"
 msgstr "Autres paramètres"
 
-#: src/pyams_content/component/video/interfaces/__init__.py:56
-msgid "Video provider"
-msgstr "Fournisseur"
-
-#: src/pyams_content/component/video/interfaces/__init__.py:57
-msgid "Name of external platform providing selected video"
-msgstr "Nom de la plate-forme externe fournissant la vidéo à afficher"
-
-#: src/pyams_content/shared/common/__init__.py:242
-#: src/pyams_content/shared/common/zmi/properties.py:69
-#: src/pyams_content/shared/common/zmi/manager.py:96
-msgid "Properties"
-msgstr "Propriétés"
-
-#: src/pyams_content/shared/common/__init__.py:152
-#: src/pyams_content/shared/common/__init__.py:160
-#, python-format
-msgid "{date} by {principal}"
-msgstr "{date} par {principal}"
-
-#: src/pyams_content/shared/common/__init__.py:265
-#, python-format
-msgid "title length should be between 40 and 66 characters ({length} actually)"
-msgstr ""
-"Le titre devrait être composé de 40 à 66 caractères ({length} actuellement)"
-
-#: src/pyams_content/shared/common/zmi/search.py:96
-#: src/pyams_content/root/zmi/search.py:95
-msgid "Quick search results"
-msgstr "Résultats de la recherche rapide"
-
-#: src/pyams_content/shared/common/zmi/search.py:162
-#: src/pyams_content/shared/common/zmi/search.py:204
-#: src/pyams_content/root/zmi/search.py:152
-#: src/pyams_content/root/zmi/search.py:188
-msgid "Advanced search"
-msgstr "Recherche avancée"
-
-#: src/pyams_content/shared/common/zmi/search.py:332
-#: src/pyams_content/root/zmi/search.py:280
-msgid "Advanced search results"
-msgstr "Résultats de la recherche avancée"
-
-#: src/pyams_content/shared/common/zmi/search.py:170
-#: src/pyams_content/shared/common/zmi/dashboard.py:231
-#: src/pyams_content/root/zmi/search.py:164
-msgid "Owner"
-msgstr "Propriétaire"
-
-#: src/pyams_content/shared/common/zmi/search.py:173
-#: src/pyams_content/shared/common/zmi/dashboard.py:154
-msgid "Status"
-msgstr "Statut"
-
-#: src/pyams_content/shared/common/zmi/search.py:177
-#: src/pyams_content/root/zmi/search.py:167
-msgid "Created after..."
-msgstr "Créé entre le"
-
-#: src/pyams_content/shared/common/zmi/search.py:180
-#: src/pyams_content/root/zmi/search.py:170
-msgid "Created before..."
-msgstr "et le"
-
-#: src/pyams_content/shared/common/zmi/search.py:183
-#: src/pyams_content/root/zmi/search.py:173
-msgid "Modified after..."
-msgstr "Modifié entre le"
-
-#: src/pyams_content/shared/common/zmi/search.py:186
-#: src/pyams_content/root/zmi/search.py:176
-msgid "Modified before..."
-msgstr "et le"
-
-#: src/pyams_content/shared/common/zmi/properties.py:59
-msgid "Composition"
-msgstr "Composition"
-
-#: src/pyams_content/shared/common/zmi/properties.py:82
-msgid "Content properties"
-msgstr "Propriétés élémentaires"
-
-#: src/pyams_content/shared/common/zmi/types.py:70
-msgid "Data types"
-msgstr "Types de contenus"
-
-#: src/pyams_content/shared/common/zmi/types.py:148
-msgid "Data type label"
-msgstr "Libellé du type"
-
-#: src/pyams_content/shared/common/zmi/types.py:188
-#: src/pyams_content/shared/common/zmi/types.py:428
-msgid "Default associations"
-msgstr "Liens et pièces jointes par défaut"
-
-#: src/pyams_content/shared/common/zmi/types.py:204
-msgid "Default themes"
-msgstr "Thèmes par défaut"
-
-#: src/pyams_content/shared/common/zmi/types.py:232
-msgid "Content data types"
-msgstr "Types de contenus"
-
-#: src/pyams_content/shared/common/zmi/types.py:255
-msgid "Add data type"
-msgstr "Ajouter un type"
-
-#: src/pyams_content/shared/common/zmi/types.py:267
-msgid "Add new data type"
-msgstr "Ajout d'un type de contenu"
-
-#: src/pyams_content/shared/common/zmi/types.py:310
-msgid "Data type properties"
-msgstr "Propriétés du type de contenu"
-
-#: src/pyams_content/shared/common/zmi/types.py:391
-msgid "Subtype label"
-msgstr "Libellé du sous-type"
-
-#: src/pyams_content/shared/common/zmi/types.py:472
-msgid "Add subtype"
-msgstr "Ajouter un sous-type"
-
-#: src/pyams_content/shared/common/zmi/types.py:484
-msgid "Add new subtype"
-msgstr "Ajout d'un sous-type de contenu"
-
-#: src/pyams_content/shared/common/zmi/types.py:531
-msgid "Data subtype properties"
-msgstr "Propriétés du fichier standard"
-
-#: src/pyams_content/shared/common/zmi/types.py:573
-msgid "Select content type..."
-msgstr "Sélectionnez un type de contenu..."
-
-#: src/pyams_content/shared/common/zmi/types.py:115
-msgid "No currently defined data type."
-msgstr "Aucun type de contenu n'est actuellement défini."
-
-#: src/pyams_content/shared/common/zmi/types.py:300
-msgid "Specified type name is already used!"
-msgstr "Le nom indiqué pour ce type de contenu est déjà utilisé !"
-
-#: src/pyams_content/shared/common/zmi/types.py:507
-msgid "Subtype was correctly added."
-msgstr "Le sous-type a été ajouté."
-
-#: src/pyams_content/shared/common/zmi/types.py:521
-msgid "Specified subtype name is already used!"
-msgstr "Le nom indiqué pour ce sous-type de contenu est déjà utilisé !"
-
-#: src/pyams_content/shared/common/zmi/types.py:160
-msgid "Click to see subtypes"
-msgstr "Montrer ou caher les sous-types"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:845
-msgid "Prior checks"
-msgstr "Contrôles préalables : avez-vous ?"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:124
-msgid "Request publication"
-msgstr "Demander la publication"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:211
-#: src/pyams_content/workflow/__init__.py:315
-msgid "Cancel publication request"
-msgstr "Annuler la demande de publication"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:251
-msgid "Refuse publication request"
-msgstr "Refuser la demande de publication"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:305
-#: src/pyams_content/workflow/basic.py:196
-msgid "Publish"
-msgstr "Publier"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:394
-msgid "Request retire"
-msgstr "Demander le retrait"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:450
-msgid "Cancel retire request"
-msgstr "Annuler la demande de retrait"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:490
-msgid "Retire"
-msgstr "Retirer"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:531
-#: src/pyams_content/workflow/__init__.py:436
-msgid "Request archive"
-msgstr "Demander l'archivage"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:574
-msgid "Cancel archive request"
-msgstr "Annuler la demande d'archivage"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:614
-msgid "Archive"
-msgstr "Archiver"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:655
-#: src/pyams_content/workflow/__init__.py:501
-#: src/pyams_content/workflow/__init__.py:513
-#: src/pyams_content/workflow/__init__.py:525
-#: src/pyams_content/workflow/__init__.py:537
-#: src/pyams_content/workflow/__init__.py:549
-#: src/pyams_content/workflow/basic.py:224
-#: src/pyams_content/workflow/basic.py:236
-msgid "Create new version"
-msgstr "Créer une nouvelle version"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:706
-#: src/pyams_content/workflow/__init__.py:561
-#: src/pyams_content/workflow/basic.py:248
-msgid "Delete version"
-msgstr "Supprimer cette version"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:791
-msgid "Previewed content?"
-msgstr "Prévisualisé ce contenu ?"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:795
-msgid "Verified content?"
-msgstr "Audité ce contenu ?"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:181
-#: src/pyams_content/shared/common/zmi/workflow.py:363
-msgid "Publication start date is required"
-msgstr "La date de début de publication est obligatoire"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:274
-#: src/pyams_content/shared/common/zmi/workflow.py:420
-msgid "A comment is required"
-msgstr "Le commentaire est obligatoire"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:730
-msgid "Delete content"
-msgstr "Supprimer définitivement ce contenu"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:739
-msgid "Delete definitively"
-msgstr "Supprimer définitivement"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:868
+#: src/pyams_content/component/links/__init__.py:144
+msgid "Internal link"
+msgstr "Lien interne"
+
+#: src/pyams_content/component/links/__init__.py:230
+msgid "External link"
+msgstr "Lien externe"
+
+#: src/pyams_content/component/links/__init__.py:283
+msgid "Mailto link"
+msgstr "Lien mailto"
+
+#: src/pyams_content/component/links/__init__.py:217
+msgid "target is not published"
+msgstr "le contenu ciblé n'est pas publié"
+
+#: src/pyams_content/component/links/interfaces/__init__.py:35
+#: src/pyams_content/component/extfile/interfaces/__init__.py:36
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:55
+msgid "Alternate title"
+msgstr "Titre de substitution"
+
+#: src/pyams_content/component/links/interfaces/__init__.py:36
+msgid "Link title, as shown in front-office"
+msgstr ""
+"Le contexte d'utilisation de ce lien peut nécessiter de modifier son titre "
+"d'origine. Ce titre de substitution sera alors présenté aux internautes."
+
+#: src/pyams_content/component/links/interfaces/__init__.py:40
+msgid "Link description displayed by front-office template"
+msgstr "Description du lien, présentée aux internautes"
+
+#: src/pyams_content/component/links/interfaces/__init__.py:43
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:46
+#: src/pyams_content/shared/common/interfaces/types.py:75
+msgid "Pictogram"
+msgstr "Pictogramme"
+
+#: src/pyams_content/component/links/interfaces/__init__.py:44
+msgid "Name of the pictogram associated with this link"
+msgstr ""
+"Pictogramme à associer à ce lien. ATTENTION: ce pictogramme n'est affiché "
+"que par certains modes de rendu !!"
+
+#: src/pyams_content/component/links/interfaces/__init__.py:61
+#: src/pyams_content/features/redirect/interfaces/__init__.py:68
+#: src/pyams_content/shared/logo/interfaces/__init__.py:54
+msgid "Target URL"
+msgstr "URL cible"
+
+#: src/pyams_content/component/links/interfaces/__init__.py:62
+#: src/pyams_content/shared/logo/interfaces/__init__.py:55
+msgid "URL used to access external resource"
+msgstr ""
+"URL utilisée pour accéder à cette ressource externe. Doit comprendre le "
+"protocole d'accès au site, comme « http:// » ou « https:// »."
+
+#: src/pyams_content/component/links/interfaces/__init__.py:65
+#: src/pyams_content/component/extfile/interfaces/__init__.py:48
+msgid "Language"
+msgstr "Langue"
+
+#: src/pyams_content/component/links/interfaces/__init__.py:66
+msgid "Language used in this remote resource"
+msgstr ""
+"Langue utilisée par cette ressource extene ; à préciser lorsqu'il ne s'agit "
+"pas de la langue par défaut du site."
+
+#: src/pyams_content/component/links/interfaces/__init__.py:74
+msgid "Target address"
+msgstr "Adresse mail"
+
+#: src/pyams_content/component/links/interfaces/__init__.py:75
+msgid "Target email address"
+msgstr "Adresse de messagerie \"stricte\", soit uniquement \"xxx@yyy.com\""
+
+#: src/pyams_content/component/links/interfaces/__init__.py:78
+msgid "Address name"
+msgstr "Nom de messagerie"
+
+#: src/pyams_content/component/links/interfaces/__init__.py:79
+msgid "Address as displayed in address book"
+msgstr ""
+"Nom de la boîte aux lettres, tel qu'il sera affiché dans l'application de "
+"messagerie."
+
+#: src/pyams_content/component/links/zmi/__init__.py:60
+msgid "Internal links"
+msgstr "Liens internes"
+
+#: src/pyams_content/component/links/zmi/__init__.py:75
+msgid "Add internal link"
+msgstr "Lien interne"
+
+#: src/pyams_content/component/links/zmi/__init__.py:89
+msgid "Add new internal link"
+msgstr "Ajout d'un lien interne"
+
+#: src/pyams_content/component/links/zmi/__init__.py:120
+msgid "Edit internal link properties"
+msgstr "Propriétés du lien interne"
+
+#: src/pyams_content/component/links/zmi/__init__.py:149
+msgid "External links"
+msgstr "Liens externes"
+
+#: src/pyams_content/component/links/zmi/__init__.py:164
+msgid "Add external link"
+msgstr "Lien externe"
+
+#: src/pyams_content/component/links/zmi/__init__.py:178
+msgid "Add new external link"
+msgstr "Ajout d'un lien externe"
+
+#: src/pyams_content/component/links/zmi/__init__.py:209
+msgid "Edit external link properties"
+msgstr "Propriétés du lien externe"
+
+#: src/pyams_content/component/links/zmi/__init__.py:238
+msgid "Mailto links"
+msgstr "Liens mailto"
+
+#: src/pyams_content/component/links/zmi/__init__.py:253
+msgid "Add mailto link"
+msgstr "Lien mailto"
+
+#: src/pyams_content/component/links/zmi/__init__.py:267
+msgid "Add new mailto link"
+msgstr "Ajout d'un lien « mailto »"
+
+#: src/pyams_content/component/links/zmi/__init__.py:298
+msgid "Edit mailto link properties"
+msgstr "Propriétés du lien « mailto »"
+
+#: src/pyams_content/component/paragraph/header.py:62
+msgid "This paragraph type is deprecated and should be removed!"
+msgstr "Ce type de paragraphe a été supprimé et ne doit plus être utilisé !"
+
+#: src/pyams_content/component/paragraph/container.py:94
+msgid "Paragraphs"
+msgstr "Blocs de contenu"
+
+#: src/pyams_content/component/paragraph/container.py:116
+msgid "no visible paragraph"
+msgstr "aucun bloc de contenu visible"
+
+#: src/pyams_content/component/paragraph/pictogram.py:135
+msgid "Selected pictogram is missing"
+msgstr "le pictogramme sélectionné est introuvable"
+
+#: src/pyams_content/component/paragraph/milestone.py:138
+msgid "Selected paragraph is missing"
+msgstr "le bloc sélectionné est introuvable"
+
+#: src/pyams_content/component/paragraph/milestone.py:141
+msgid "Selected paragraph is not visible"
+msgstr "le bloc sélectionné n'est pas visible"
+
+#: src/pyams_content/component/paragraph/interfaces/header.py:33
+#: src/pyams_content/component/paragraph/interfaces/header.py:40
+#: src/pyams_content/shared/common/interfaces/__init__.py:151
+msgid "Header"
+msgstr "Chapô"
+
+#: src/pyams_content/component/paragraph/interfaces/header.py:43
+#: src/pyams_content/features/header/interfaces/__init__.py:39
+msgid "Header template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/header.py:44
+#: src/pyams_content/features/header/interfaces/__init__.py:40
+msgid "Presentation template used for this header"
+msgstr "Mode de rendu utilisé par ce chapô"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:44
+msgid "Contact card"
+msgstr "Fiche contact"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:51
+msgid "Contact identity"
+msgstr "Nom du contact"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:52
+msgid "Name of the contact"
+msgstr "Nom complet du contact"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:55
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:48
+msgid "In charge of"
+msgstr "Fonction"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:56
+msgid "Label of contact function"
+msgstr "Fonction du contact"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:59
+msgid "Email address"
+msgstr "Adresse de messagerie"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:60
+msgid "Contact email address"
+msgstr "Adresse de messagerie \"stricte\", soit uniquement \"xxx@yyy.com\""
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:63
+msgid "Contact form"
+msgstr "Formulaire de contact"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:64
+msgid "Reference of contact form"
+msgstr "Référence d'un formulaire de contact"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:68
+msgid "Photo"
+msgstr "Photo"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:69
+msgid "Use 'browse' button to select contact picture"
+msgstr "Utilisez le bouton 'Parcourir' pour sélectionner la photo du contact"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:77
+msgid "Address"
+msgstr "Adresse"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:80
+msgid "Contact template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:81
+msgid "Presentation template used for this contact"
+msgstr "Modèle de présentation utilisé pour ce contact"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:73
+#: src/pyams_content/component/paragraph/interfaces/map.py:48
+msgid "GPS location"
+msgstr "Position GPS"
+
+#: src/pyams_content/component/paragraph/interfaces/contact.py:74
+msgid "GPS coordinates used to locate contact"
+msgstr "Coordonnées GPS de situation du contact"
+
+#: src/pyams_content/component/paragraph/interfaces/video.py:32
+#: src/pyams_content/component/extfile/__init__.py:253
+#: src/pyams_content/component/extfile/__init__.py:257
+msgid "Video"
+msgstr "Vidéo"
+
+#: src/pyams_content/component/paragraph/interfaces/video.py:39
+#: src/pyams_content/component/extfile/interfaces/__init__.py:81
+msgid "Video data"
+msgstr "Fichier"
+
+#: src/pyams_content/component/paragraph/interfaces/video.py:40
+msgid "Video file content"
+msgstr ""
+"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:80
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:298
+msgid "Pictograms"
+msgstr "Pictogrammes"
+
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:42
+msgid "Is this pictogram visible in front-office?"
+msgstr "Si 'non', ce pictogramme ne sera pas présenté aux internautes"
+
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:47
+msgid "Name of the pictogram to select"
+msgstr "Sélection du pictogramme à afficher"
+
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:53
+msgid "Alternate header"
+msgstr "En-tête de substitution"
+
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:54
+msgid ""
+"Alternate pictogram label; if not specified, the pictogram header will be "
+"used"
+msgstr ""
+"En-tête de substitution utilisé par le pictogramme; si rien n'est spécifié, "
+"l'en-tête du pictogramme sélectionné sera utilisé."
+
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:59
+msgid "Additional text associated to this pictogram"
+msgstr "Texte complémentaire associé à ce pictogramme"
+
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:87
+msgid "Pictograms template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:88
+msgid "Presentation template used for pictograms"
+msgstr "Modèle de présentation utilisé par ce bloc de contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:74
+#: src/pyams_content/component/paragraph/zmi/milestone.py:291
+msgid "Milestones"
+msgstr "Chronologie"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:39
+msgid "Is this milestone visible in front-office?"
+msgstr "Si 'non', ce jalon ne sera pas présenté aux internautes"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:44
+msgid "Milestone title"
+msgstr "Libellé associé au jalon"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:47
+#: src/pyams_content/component/paragraph/zmi/milestone.py:250
+msgid "Associated label"
+msgstr "Information associée"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:48
+msgid "The way this label will be rendered depends on presentation template"
+msgstr ""
+"La présentation de cette information peut varier en fonction du mode de "
+"rendu choisi"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:51
+#: src/pyams_content/component/paragraph/zmi/milestone.py:262
+msgid "Anchor"
+msgstr "Ancre"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:52
+msgid "Paragraph to which this milestone should lead"
+msgstr "Bloc de contenu vers lequel ce jalon doit conduire"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:82
+msgid "Additional text associated to this milestone paragraph"
+msgstr "Texte complémentaire associé à ce bloc"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:85
+msgid "Milestones template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:86
+msgid "Presentation template used for milestones"
+msgstr "Modèle de présentation utilisé par ce bloc de contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:33
+msgid "Raw HTML "
+msgstr "Code HTML"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:56
+msgid "Rich text"
+msgstr "Texte enrichi"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:40
+msgid "Raw HTML code"
+msgstr "Code HTML"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:41
+msgid ""
+"This HTML code will be used 'as is', without any transformation. Use with "
+"care!!"
+msgstr ""
+"Ce code HTML sera utilisé en l'état et intégré dans les pages sans "
+"modification. À utiliser avec précaution !!!"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:45
+msgid "Raw HTML code template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:46
+#: src/pyams_content/component/paragraph/interfaces/html.py:67
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:53
+#: src/pyams_content/component/paragraph/interfaces/keypoint.py:45
+#: src/pyams_content/component/paragraph/interfaces/frame.py:44
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:101
+#: src/pyams_content/shared/logo/interfaces/__init__.py:89
+msgid "Presentation template used for this paragraph"
+msgstr "Mode de rendu utilisé par ce bloc de contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:63
+msgid "Body"
+msgstr "Contenu HTML"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:66
+msgid "Body template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:33
+msgid "Verbatim"
+msgstr "Verbatim"
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:40
+msgid "Quoted text"
+msgstr "Citation"
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:41
+msgid "Quotation marks will be added automatically by presentation template"
+msgstr "Les guillemets seront ajoutés automatiquement par le mode de rendu..."
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:45
+msgid "Name of the quote author"
+msgstr "Nom de l'auteur de la citation"
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:49
+msgid "Label of author function"
+msgstr "Fonction de l'auteur"
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:52
+msgid "Verbatim template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:43
+msgid "Is this paragraph visible in front-office?"
+msgstr "Si 'non', ce bloc de contenu ne sera pas présenté aux internautes"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:47
+msgid "Anchor?"
+msgstr "Ancre ?"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:48
+msgid "Is this paragraph a navigation anchor?"
+msgstr ""
+"Si 'oui', ce bloc pourra recevoir une ancre de navigation au sein du contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:52
+msgid "§ Title"
+msgstr "Titre §"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:92
+msgid "Allowed paragraphs"
+msgstr "Types de blocs autorisés"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:93
+msgid "List of paragraphs allowed for this content type"
+msgstr "Liste des types de blocs de contenu autorisés pour ce gabarit."
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:97
+#: src/pyams_content/shared/common/zmi/types.py:171
+#: src/pyams_content/shared/common/zmi/types.py:411
+msgid "Default paragraphs"
+msgstr "Types de blocs par défaut"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:98
+msgid "List of paragraphs automatically added to a new content"
+msgstr "Liste des types de blocs ajoutés automatiquement aux nouveaux contenus"
+
+#: src/pyams_content/component/paragraph/interfaces/map.py:41
+msgid "Location map"
+msgstr "Carte"
+
+#: src/pyams_content/component/paragraph/interfaces/map.py:49
+msgid "GPS coordinates used to locate map"
+msgstr "Coordonnées GPS de situation de la carte"
+
+#: src/pyams_content/component/paragraph/interfaces/map.py:52
+msgid "Display location mark?"
+msgstr "Marqueur de position ?"
+
+#: src/pyams_content/component/paragraph/interfaces/map.py:53
+msgid "If 'yes', a location marker will be displayed on map"
+msgstr "Si 'oui', un marqueur de position sera placé sur la carte"
+
+#: src/pyams_content/component/paragraph/interfaces/map.py:57
+msgid "Map template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/map.py:58
+msgid "Presentation template used for this map"
+msgstr "Mode de rendu utilisé par cette carte"
+
+#: src/pyams_content/component/paragraph/interfaces/keypoint.py:33
+#: src/pyams_content/component/paragraph/interfaces/keypoint.py:40
+msgid "Key points"
+msgstr "Points clés"
+
+#: src/pyams_content/component/paragraph/interfaces/keypoint.py:41
+msgid "Enter one key point by line, without hyphen or prefix"
+msgstr ""
+"Indiquez un point clé par ligne, sans tiret. Passez à la ligne entre chaque "
+"point clé, la mise en forme sera effectuée automatiquement."
+
+#: src/pyams_content/component/paragraph/interfaces/keypoint.py:44
+msgid "Presentation template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/frame.py:33
+msgid "Framed text"
+msgstr "Encadré"
+
+#: src/pyams_content/component/paragraph/interfaces/frame.py:40
+msgid "Frame body"
+msgstr "Contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/frame.py:43
+msgid "Text template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/audio.py:32
+msgid "Audio"
+msgstr "Bande son"
+
+#: src/pyams_content/component/paragraph/interfaces/audio.py:40
+#: src/pyams_content/component/extfile/interfaces/__init__.py:90
+msgid "Audio file content"
+msgstr ""
+"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/audio.py:51
+#: src/pyams_content/component/extfile/interfaces/__init__.py:41
+msgid "File description displayed by front-office template"
+msgstr "Description du fichier, présentée aux internautes"
+
+#: src/pyams_content/component/paragraph/interfaces/audio.py:54
+msgid "Audio template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/audio.py:55
+msgid "Presentation template used for this audio file"
+msgstr "Mode de rendu utilisé pour cette bande son"
+
+#: src/pyams_content/component/paragraph/portlet/__init__.py:83
+msgid "Content paragraphs"
+msgstr "Blocs de contenu"
+
+#: src/pyams_content/component/paragraph/portlet/__init__.py:135
+msgid "Paragraphs navigation anchors"
+msgstr "Navigation au sein des blocs"
+
+#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:30
+#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:52
+msgid "Selected paragraphs"
+msgstr "Blocs sélectionnés"
+
+#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:31
+msgid ""
+"List of selected paragraphs; an empty selection means that all paragraphs "
+"will be selectable by following filters; otherwise, this selection will have "
+"priority"
+msgstr ""
+"Liste des blocs sélectionnés ; si la sélection est vide, tous les blocs de "
+"contenu pourront être sélectionnés via les filtres ci-dessous ; dans le cas "
+"contraire, cette sélection devient prioritaire et les autres filtres ne sont "
+"pas appliqués"
+
+#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:37
+#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:59
+msgid "Paragraph types"
+msgstr "Types de blocs"
+
+#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:38
+msgid ""
+"Select list of paragraph types you want to include; an empty selection means "
+"that all paragraphs types will be selected"
+msgstr ""
+"Liste des types de blocs que vous souhaitez sélectionner ; si la sélection "
+"est vide, tous les types de blocs seront pris en compte"
+
+#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:43
+#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:65
+msgid "Anchors only?"
+msgstr "Ancres seulement ?"
+
+#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:44
+msgid "If 'yes', only paragraphs set as 'anchors' will be selected"
+msgstr ""
+"Si 'oui', seuls les blocs définis comme ancres de navigation seront "
+"sélectionnés"
+
+#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:53
+msgid ""
+"List of paragraphs selected for navigation; an empty selection means that "
+"all paragraphs will be selectable by following filters; otherwise, this "
+"selection will have priority"
+msgstr ""
+"Liste des blocs sélectionnés pour la navigation ; si la sélection est vide, "
+"tous les blocs de contenu pourront être sélectionnés via les filtres ci-"
+"dessous ; dans le cas contraire, cette sélection devient prioritaire et les "
+"autres filtres ne sont pas appliqués"
+
+#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:60
+msgid ""
+"Select list of paragraph types you want to use for navigation; an empty "
+"selection means that all paragraphs types will be selected"
+msgstr ""
+"Liste des types de blocs que vous souhaitez sélectionner pour la "
+"navigation ; si la sélection est vide, tous les types de blocs seront pris "
+"en compte"
+
+#: src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:66
+msgid "If 'no', all paragraphs will be used as navigation anchors"
+msgstr ""
+"Si 'non', tous les blocs seront utilisés comme liens de navigation même si "
+"ce ne sont pas des ancres"
+
+#: src/pyams_content/component/paragraph/portlet/zmi/__init__.py:67
+#: src/pyams_content/component/paragraph/portlet/zmi/__init__.py:122
+msgid "No filter, all paragraphs selected"
+msgstr "Pas de filtre, tous les blocs sont acceptés"
+
+#: src/pyams_content/component/paragraph/portlet/zmi/__init__.py:74
+#: src/pyams_content/component/paragraph/portlet/zmi/__init__.py:129
+msgid "No filter, all paragraph types selected"
+msgstr "Pas de filtre, tous les types de blocs sont acceptés"
+
+#: src/pyams_content/component/paragraph/portlet/zmi/templates/navigation-preview.pt:4
+#: src/pyams_content/component/paragraph/portlet/zmi/templates/container-preview.pt:4
+msgid "Selected paragraphs:"
+msgstr "Blocs sélectionnés :"
+
+#: src/pyams_content/component/paragraph/portlet/zmi/templates/navigation-preview.pt:10
+#: src/pyams_content/component/paragraph/portlet/zmi/templates/container-preview.pt:10
+msgid "Paragraphs filters:"
+msgstr "Filtrage des blocs :"
+
+#: src/pyams_content/component/paragraph/portlet/zmi/templates/navigation-preview.pt:13
+#: src/pyams_content/component/paragraph/portlet/zmi/templates/container-preview.pt:13
+msgid "Selected paragraph types:"
+msgstr "Types de blocs :"
+
+#: src/pyams_content/component/paragraph/portlet/zmi/templates/navigation-preview.pt:18
+#: src/pyams_content/component/paragraph/portlet/zmi/templates/container-preview.pt:18
+msgid "Only display anchors"
+msgstr "Ne sélectionner que les ancres"
+
+#: src/pyams_content/component/paragraph/zmi/header.py:49
+msgid "Edit header paragraph properties"
+msgstr "Propriétés du chapô"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:74
+msgid "Contents..."
+msgstr "Blocs de contenu"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:215
+msgid "Set navigation anchor"
+msgstr "Ancre de navigation"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:286
+msgid "Show/hide all paragraphs"
+msgstr "Afficher/masquer tous les blocs"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:334
+#: src/pyams_content/component/paragraph/zmi/container.py:343
+#: src/pyams_content/component/paragraph/zmi/container.py:356
+msgid "Content blocks"
+msgstr "Blocs de contenu"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:413
+msgid "Links and attachments..."
+msgstr "Récap. liens et PJ"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:425
+msgid "Content blocks links and attachments"
+msgstr "Récapitulatif des liens et pièces jointes par bloc de contenu"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:145
+msgid "No currently defined paragraph."
+msgstr "Aucun bloc n'est associé à ce contenu."
+
+#: src/pyams_content/component/paragraph/zmi/container.py:295
+msgid "Click to open/close all paragraphs editors"
+msgstr "Afficher/masquer tous les blocs"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:308
+msgid "Click to open/close paragraph editor"
+msgstr "Afficher/masquer ce bloc"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:151
+msgid "Check allowed paragraph types to be able to create new paragraphs."
+msgstr ""
+"Vérifiez le paramétrage des types de blocs de contenu autorisés pour pouvoir "
+"ajouter de nouveaux blocs."
+
+#: src/pyams_content/component/paragraph/zmi/contact.py:53
+msgid "Contact card..."
+msgstr "Fiche contact"
+
+#: src/pyams_content/component/paragraph/zmi/contact.py:66
+msgid "Add new contact card"
+msgstr "Ajout d'une fiche contact"
+
+#: src/pyams_content/component/paragraph/zmi/contact.py:89
+msgid "Edit contact card properties"
+msgstr "Propriétés de la fiche contact"
+
+#: src/pyams_content/component/paragraph/zmi/video.py:54
+msgid "Video paragraph..."
+msgstr "Vidéo"
+
+#: src/pyams_content/component/paragraph/zmi/video.py:67
+msgid "Add new video paragraph"
+msgstr "Ajout d'une vidéo"
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:82
+msgid "Pictograms..."
+msgstr "Pictogrammes"
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:95
+msgid "Add new pictogram paragraph"
+msgstr "Ajout de pictogrammes"
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:122
+msgid "Edit pictogram paragraph properties"
+msgstr "Propriétés des pictogrammes"
+
+#. Default: Header
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:259
+msgid "pictogram-item-header"
+msgstr "En-tête"
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:348
+msgid "Pictogram was correctly added"
+msgstr "Le pictogramme a été ajouté."
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:358
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:396
+msgid "You must select a pictogram!"
+msgstr "Vous devez sélectionner un pictogramme !"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:77
+msgid "Milestones..."
+msgstr "Chronologie"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:90
+msgid "Add new milestone paragraph"
+msgstr "Ajout d'une chronologie"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:117
+msgid "Edit milestone paragraph properties"
+msgstr "Propriétés de la chronologie"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:306
+msgid "Add milestone"
+msgstr "Ajouter un jalon"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:319
+msgid "Add new milestone"
+msgstr "Ajout d'un jalon"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:346
+msgid "Edit milestone properties"
+msgstr "Propriétés du jalon"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:334
+msgid "Milestone was correctly added"
+msgstr "Le jalon a été ajouté."
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:277
+msgid "(missing paragraph)"
+msgstr "(paragraphe supprimé)"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:76
+msgid "Raw HTML..."
+msgstr "Code HTML"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:89
+msgid "Add new raw HTML paragraph"
+msgstr "Ajout d'un bloc de code HTML"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:119
+msgid "Edit raw HTML paragraph properties"
+msgstr "Propriétés du code HTML"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:159
+msgid "Rich text..."
+msgstr "Texte enrichi"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:172
+msgid "Add new rich text paragraph"
+msgstr "Ajout d'un bloc de texte enrichi"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:197
+msgid "Edit rich text paragraph properties"
+msgstr "Propriétés du texte enrichi"
+
+#: src/pyams_content/component/paragraph/zmi/verbatim.py:57
+msgid "Verbatim..."
+msgstr "Verbatim"
+
+#: src/pyams_content/component/paragraph/zmi/verbatim.py:70
+msgid "Add new verbatim paragraph"
+msgstr "Ajout d'un verbatim"
+
+#: src/pyams_content/component/paragraph/zmi/verbatim.py:92
+msgid "Edit verbatim paragraph properties"
+msgstr "Propriétés du verbatim"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:64
+msgid "Content block types..."
+msgstr "Types de blocs de contenu"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:78
+msgid "Content block types"
+msgstr "Types de blocs de contenu"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:88
+msgid ""
+"You can define which types of paragraphs are allowed in this container.\n"
+"\n"
+"Default paragraphs will be added automatically (in selected order) to any "
+"new created content.\n"
+"\n"
+"NOTICE: removing types from allowed types list will have no effect on "
+"already created contents!"
+msgstr ""
+"Vous pouvez indiquer la liste des types de blocs de contenu autorisés pour "
+"ce gabarit.\n"
+"\n"
+"Les types de blocs par défaut seront ajoutés automatiquement (dans l'ordre "
+"défini) à chaque nouveau contenu créé selon ce gabarit.\n"
+"\n"
+"REMARQUE : supprimer des types de la liste des types de blocs autorisés sera "
+"sans effet sur les contenus existants."
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:208
+#: src/pyams_content/features/preview/zmi/__init__.py:45
+#: src/pyams_content/shared/common/zmi/templates/preview-input.pt:39
+msgid "Preview"
+msgstr "Aperçu"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:213
+#: src/pyams_content/features/review/zmi/__init__.py:84
+#: src/pyams_content/shared/common/zmi/__init__.py:275
+#: src/pyams_content/shared/common/zmi/owner.py:73
+#: src/pyams_content/shared/common/zmi/workflow.py:123
+#: src/pyams_content/shared/common/zmi/workflow.py:210
+#: src/pyams_content/shared/common/zmi/workflow.py:250
+#: src/pyams_content/shared/common/zmi/workflow.py:304
+#: src/pyams_content/shared/common/zmi/workflow.py:393
+#: src/pyams_content/shared/common/zmi/workflow.py:449
+#: src/pyams_content/shared/common/zmi/workflow.py:489
+#: src/pyams_content/shared/common/zmi/workflow.py:530
+#: src/pyams_content/shared/common/zmi/workflow.py:573
+#: src/pyams_content/shared/common/zmi/workflow.py:613
+#: src/pyams_content/shared/common/zmi/workflow.py:654
+#: src/pyams_content/shared/common/zmi/workflow.py:705
+msgid "Cancel"
+msgstr "Annuler"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:215
+msgid "Submit"
+msgstr "Enregistrer"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:196
+msgid "Paragraph was correctly added."
+msgstr "Le bloc a été ajouté."
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:255
 msgid ""
-"You must confirm that you previewed and checked this content before "
-"requesting publication!!"
-msgstr ""
-"Vous devez avoir prévisualisé et audité ce contenu avant de pouvoir le "
-"publier !!"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:88
-#, python-format
-msgid "{state} | by {principal}"
-msgstr "{state} | par {principal}"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:871
+"You changed renderer selection. Don't omit to update new renderer "
+"properties..."
+msgstr ""
+"Vous avez changé de mode de rendu. N'oubliez pas de vérifier les propriétés "
+"du nouveau mode de rendu sélectionné..."
+
+#: src/pyams_content/component/paragraph/zmi/map.py:55
+msgid "Location map..."
+msgstr "Carte de situation"
+
+#: src/pyams_content/component/paragraph/zmi/map.py:68
+msgid "Add new location map"
+msgstr "Ajout d'une carte de situation"
+
+#: src/pyams_content/component/paragraph/zmi/map.py:91
+msgid "Edit location map properties"
+msgstr "Propriétés de la carte"
+
+#: src/pyams_content/component/paragraph/zmi/keypoint.py:51
+msgid "Key points..."
+msgstr "Points clés"
+
+#: src/pyams_content/component/paragraph/zmi/keypoint.py:64
+msgid "Add new key points paragraph"
+msgstr "Ajout de points clés"
+
+#: src/pyams_content/component/paragraph/zmi/keypoint.py:91
+msgid "Edit key points paragraph properties"
+msgstr "Propriétés des points clés"
+
+#: src/pyams_content/component/paragraph/zmi/frame.py:86
+msgid "Framed text..."
+msgstr "Encadré"
+
+#: src/pyams_content/component/paragraph/zmi/frame.py:100
+msgid "Add new framed text paragraph"
+msgstr "Ajout d'un encadré"
+
+#: src/pyams_content/component/paragraph/zmi/frame.py:126
+msgid "Edit framed text paragraph properties"
+msgstr "Propriétés de l'encadré"
+
+#: src/pyams_content/component/paragraph/zmi/audio.py:54
+msgid "Audio paragraph..."
+msgstr "Bande son"
+
+#: src/pyams_content/component/paragraph/zmi/audio.py:67
+msgid "Add new audio paragraph"
+msgstr "Ajout d'une bande son"
+
+#: src/pyams_content/component/paragraph/zmi/audio.py:89
+msgid "Edit audio properties"
+msgstr "Propriétés de la bande son"
+
+#: src/pyams_content/component/association/container.py:91
+#: src/pyams_content/component/association/interfaces/__init__.py:93
+#: src/pyams_content/component/association/zmi/__init__.py:313
+msgid "Associations"
+msgstr "Liens et pièces jointes"
+
+#: src/pyams_content/component/association/interfaces/__init__.py:43
+#: src/pyams_content/features/menu/interfaces/__init__.py:60
+msgid "Is this item visible in front-office?"
+msgstr "Si 'non', ce lien ne sera pas présenté aux internautes"
+
+#: src/pyams_content/component/association/interfaces/__init__.py:100
+msgid "Associations template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/association/interfaces/__init__.py:101
+msgid "Presentation template used for associations"
+msgstr "Modèle de présentation utilisé par ce bloc de contenu"
+
+#: src/pyams_content/component/association/zmi/__init__.py:96
+#: src/pyams_content/component/association/zmi/paragraph.py:54
+msgid "Associations..."
+msgstr "Liens et pièces jointes"
+
+#: src/pyams_content/component/association/zmi/__init__.py:209
+msgid "Public title"
+msgstr "Libellé public"
+
+#: src/pyams_content/component/association/zmi/__init__.py:229
+msgid "Inner title"
+msgstr "Contenu interne"
+
+#: src/pyams_content/component/association/zmi/__init__.py:247
+msgid "Size"
+msgstr "Taille"
+
+#: src/pyams_content/component/association/zmi/__init__.py:290
+#: src/pyams_content/component/association/zmi/__init__.py:300
+msgid "Associations list"
+msgstr "Liste des liens et pièces jointes"
+
+#: src/pyams_content/component/association/zmi/__init__.py:66
+msgid "Association was correctly added."
+msgstr "L'association a été ajoutée."
+
+#: src/pyams_content/component/association/zmi/paragraph.py:67
+msgid "Add new association paragraph"
+msgstr "Ajout d'un bloc  « liens et pièces jointes »"
+
+#: src/pyams_content/component/association/zmi/paragraph.py:93
+msgid "Edit association paragraph properties"
+msgstr "Propriétés du bloc « liens et pièces jointes »"
+
+#: src/pyams_content/component/extfile/__init__.py:172
+#: src/pyams_content/component/extfile/__init__.py:176
+msgid "Standard file"
+msgstr "Fichier"
+
+#: src/pyams_content/component/extfile/__init__.py:272
+#: src/pyams_content/component/extfile/__init__.py:276
+msgid "Audio file"
+msgstr "Fichier audio"
+
+#: src/pyams_content/component/extfile/interfaces/__init__.py:37
+msgid "File title, as shown in front-office"
+msgstr "Titre présenté aux internautes"
+
+#: src/pyams_content/component/extfile/interfaces/__init__.py:49
+msgid "File's content language"
+msgstr "Langue du fichier"
+
+#: src/pyams_content/component/extfile/interfaces/__init__.py:53
+msgid "Save file as..."
+msgstr "Nom du fichier"
+
+#: src/pyams_content/component/extfile/interfaces/__init__.py:54
+msgid "Name under which the file will be saved"
+msgstr ""
+"Nom donné au fichier en cas de téléchargement ; il est donc important de "
+"veiller au sens de ce nom, sans oublier d'indiquer l'extension (« .pdf », « ."
+"doc »...) !"
+
+#: src/pyams_content/component/extfile/interfaces/__init__.py:61
+msgid "File data"
+msgstr "Fichier"
+
+#: src/pyams_content/component/extfile/interfaces/__init__.py:62
+msgid "File content"
+msgstr ""
+"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
+
+#: src/pyams_content/component/extfile/interfaces/__init__.py:73
+#: src/pyams_content/shared/logo/interfaces/__init__.py:59
+msgid "Image data"
+msgstr "Fichier"
+
+#: src/pyams_content/component/extfile/interfaces/__init__.py:74
+msgid "Image content"
+msgstr ""
+"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu..."
+
+#: src/pyams_content/component/extfile/interfaces/__init__.py:82
+msgid "Video content"
+msgstr ""
+"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:74
+msgid "External files"
+msgstr "Fichiers"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:89
+msgid "Add external file"
+msgstr "Fichier"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:103
+msgid "Add new external file"
+msgstr "Ajout d'un fichier"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:133
+msgid "Update file properties"
+msgstr "Propriétés du fichier"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:161
+msgid "Images"
+msgstr "Images"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:176
+msgid "Add image"
+msgstr "Image téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:190
+msgid "Add new image"
+msgstr "Ajout d'une image téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:221
+msgid "Update image properties"
+msgstr "Propriétés de l'image téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:254
+msgid "Videos"
+msgstr "Vidéos"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:269
+msgid "Add video"
+msgstr "Vidéo téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:283
+msgid "Add new video"
+msgstr "Ajout d'une vidéo téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:307
+msgid "Update video properties"
+msgstr "Propriétés de la vidéo téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:333
+msgid "Audios files"
+msgstr "Fichiers audios"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:348
+msgid "Add audio file"
+msgstr "Bande son téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:362
+msgid "Add new audio file"
+msgstr "Ajout d'une bande son téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:386
+msgid "Update audio file properties"
+msgstr "Propriétés de la bande son téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:50
+msgid "External file type"
+msgstr "Type de fichier joint"
+
+#: src/pyams_content/component/illustration/__init__.py:171
+#: src/pyams_content/component/illustration/thesaurus.py:32
+#: src/pyams_content/component/illustration/interfaces/__init__.py:97
+#: src/pyams_content/component/illustration/zmi/__init__.py:51
+#: src/pyams_content/component/illustration/zmi/__init__.py:112
+#: src/pyams_content/component/illustration/zmi/paragraph.py:153
+msgid "Illustration"
+msgstr "Illustration"
+
+#: src/pyams_content/component/illustration/interfaces/__init__.py:55
+msgid "Name of picture's author"
+msgstr "Sous la forme \"Prénom Nom / Organisme\""
+
+#: src/pyams_content/component/illustration/interfaces/__init__.py:63
+msgid "Illustration description displayed in front-office templates"
+msgstr ""
+"Le texte accompagne l'illustration, en complément de la légende. Attention : "
+"sa présence et sa mise en forme dépendent du mode de rendu choisi."
+
+#: src/pyams_content/component/illustration/interfaces/__init__.py:66
+msgid "Illustration template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/illustration/interfaces/__init__.py:67
+msgid "Presentation template used for illustration"
+msgstr ""
+"<span>Modèle de présentation utilisé par cette illustration.<br /"
+"><strong>ATTENTION :</strong> certains modes de rendu ne prennent pas en "
+"compte tous les types de médias !</span>"
+
+#: src/pyams_content/component/illustration/zmi/__init__.py:146
+msgid "Navigation link illustration"
+msgstr "Illustration de navigation"
+
+#: src/pyams_content/component/illustration/zmi/__init__.py:114
+msgid "Header illustration"
+msgstr "Illustration d'en-tête"
+
+#: src/pyams_content/component/illustration/zmi/thesaurus.py:42
+#: src/pyams_content/component/illustration/zmi/paragraph.py:93
+msgid "Edit illustration properties"
+msgstr "Propriétés de l'illustration"
+
+#: src/pyams_content/component/illustration/zmi/paragraph.py:55
+msgid "Illustration..."
+msgstr "Illustration"
+
+#: src/pyams_content/component/illustration/zmi/paragraph.py:68
+msgid "Add new illustration"
+msgstr "Ajout d'une illustration"
+
+#: src/pyams_content/component/theme/__init__.py:74
+#: src/pyams_content/component/theme/interfaces/__init__.py:64
+#: src/pyams_content/component/theme/interfaces/__init__.py:78
+#: src/pyams_content/component/theme/zmi/portlet.py:40
+#: src/pyams_content/root/zmi/search.py:179
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:181
+#: src/pyams_content/shared/common/zmi/search.py:189
+msgid "Tags"
+msgstr "Tags"
+
+#: src/pyams_content/component/theme/__init__.py:122
+#: src/pyams_content/component/theme/interfaces/__init__.py:105
+#: src/pyams_content/component/theme/interfaces/__init__.py:119
+#: src/pyams_content/component/theme/zmi/portlet.py:55
+#: src/pyams_content/shared/common/zmi/search.py:192
+msgid "Themes"
+msgstr "Thèmes"
+
+#: src/pyams_content/component/theme/__init__.py:170
+#: src/pyams_content/component/theme/interfaces/__init__.py:146
+#: src/pyams_content/component/theme/interfaces/__init__.py:160
+#: src/pyams_content/component/theme/zmi/portlet.py:70
+#: src/pyams_content/shared/common/zmi/search.py:195
+msgid "Collections"
+msgstr "Collections"
+
+#: src/pyams_content/component/theme/__init__.py:83
+msgid "no defined tag"
+msgstr "aucun tag défini"
+
+#: src/pyams_content/component/theme/__init__.py:131
+msgid "no defined theme"
+msgstr "aucun thème défini"
+
+#: src/pyams_content/component/theme/__init__.py:179
+msgid "no defined collection"
+msgstr "aucune collection définie"
+
+#: src/pyams_content/component/theme/interfaces/__init__.py:41
+msgid "Enable search by tag?"
+msgstr "Activer la recherche par tag ?"
+
+#: src/pyams_content/component/theme/interfaces/__init__.py:42
 msgid ""
-"You must confirm that you checked this content before requesting "
-"publication!!"
-msgstr "Vous devez avoir audité ce contenu avant de pouvoir le publier !!"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:84
-#: src/pyams_content/workflow/__init__.py:648
-#: src/pyams_content/workflow/__init__.py:619
-#: src/pyams_content/workflow/basic.py:315
-#: src/pyams_content/workflow/basic.py:286
-#, python-format
-msgid "{state} {date}"
-msgstr "{state} {date}"
-
-#: src/pyams_content/shared/common/zmi/__init__.py:263
-msgid "Duplicate content..."
-msgstr "Dupliquer le contenu"
-
-#: src/pyams_content/shared/common/zmi/__init__.py:283
-msgid "Duplicate content"
-msgstr "Dupliquer ce contenu"
-
-#: src/pyams_content/shared/common/zmi/__init__.py:84
-msgid "This title can be modified afterwards"
-msgstr "Pourra être modifié ultérieurement"
-
-#: src/pyams_content/shared/common/zmi/__init__.py:274
-msgid "Duplicate this content"
-msgstr "Dupliquer ce contenu"
-
-#: src/pyams_content/shared/common/zmi/__init__.py:330
-#, python-format
-msgid "Clone created from version {source} of {oid} (in « {state} » state)"
-msgstr ""
-"Duplication de la version {source} du contenu {oid} (alors en statut "
-"« {state} »)"
-
-#: src/pyams_content/shared/common/zmi/__init__.py:375
-msgid "Created or modified in this version"
-msgstr "Créé ou modifié dans cette version"
-
-#: src/pyams_content/shared/common/zmi/summary.py:52
-msgid "Display content summary"
-msgstr "Récapitulatif pour ce contenu"
-
-#: src/pyams_content/shared/common/zmi/summary.py:76
-msgid "Identity card"
-msgstr "Carte d'identité"
-
-#: src/pyams_content/shared/common/zmi/summary.py:94
-msgid "Requested action"
-msgstr "Évolution demandée"
-
-#: src/pyams_content/shared/common/zmi/summary.py:135
-msgid "Publication and retire dates"
-msgstr "Dates de publication et de retrait planifiées"
-
-#: src/pyams_content/shared/common/zmi/summary.py:154
-msgid "Current version"
-msgstr "À propos de cette version"
-
-#: src/pyams_content/shared/common/zmi/summary.py:184
-msgid "Content history"
-msgstr "Pour mémoire"
-
-#: src/pyams_content/shared/common/zmi/summary.py:125
-msgid "Associated comment"
-msgstr "Commentaire associé"
-
-#: src/pyams_content/shared/common/zmi/summary.py:166
-#: src/pyams_content/shared/common/zmi/dashboard.py:198
-msgid "Version"
-msgstr "Version"
-
-#: src/pyams_content/shared/common/zmi/summary.py:115
-#, python-format
-msgid "{state} {date} by {principal}"
-msgstr "{state} {date} par {principal}"
-
-#: src/pyams_content/shared/common/zmi/summary.py:172
-#, python-format
-msgid "{state} since {date}, by {principal}"
-msgstr "{state} depuis {date} par {principal}"
-
-#: src/pyams_content/shared/common/zmi/manager.py:107
-msgid "Shared tool properties"
-msgstr "Propriétés de l'outil"
-
-#: src/pyams_content/shared/common/zmi/manager.py:125
-msgid "WARNING"
-msgstr "ATTENTION"
-
-#: src/pyams_content/shared/common/zmi/manager.py:127
+"If 'yes', displayed tags will lead to a search engine displaying contents "
+"matching given tag"
+msgstr ""
+"Si 'oui', un clic sur un tag permet d'accéder à une page de résultat de "
+"recherche portant sur le tag sélectionné"
+
+#: src/pyams_content/component/theme/interfaces/__init__.py:47
+msgid "Tags search target"
+msgstr "Cible de la recherche"
+
+#: src/pyams_content/component/theme/interfaces/__init__.py:48
+msgid "Site or folder where tags search is displayed"
+msgstr "Site ou rubrique où la recherche par tags s'effectue"
+
+#: src/pyams_content/component/theme/interfaces/__init__.py:54
+msgid "You must specify search target when activating search by tags!"
+msgstr ""
+"Vous devez indiquer la cible de la recherche lorsque vous activez la "
+"recherche par tags !"
+
+#: src/pyams_content/component/theme/zmi/manager.py:58
+msgid "Tags settings..."
+msgstr "Paramétrage des tags"
+
+#: src/pyams_content/component/theme/zmi/manager.py:72
+msgid "Selected tags"
+msgstr "Tags sélectionnés"
+
+#: src/pyams_content/component/theme/zmi/manager.py:109
+msgid "Themes settings..."
+msgstr "Paramétrage des thèmes"
+
+#: src/pyams_content/component/theme/zmi/manager.py:123
+msgid "Selected themes"
+msgstr "Thèmes sélectionnés"
+
+#: src/pyams_content/component/theme/zmi/manager.py:159
+msgid "Collections settings..."
+msgstr "Paramétrage des collections"
+
+#: src/pyams_content/component/theme/zmi/manager.py:173
+msgid "Selected collections"
+msgstr "Collections sélectionnées"
+
+#: src/pyams_content/component/theme/zmi/__init__.py:55
+#: src/pyams_content/shared/view/zmi/theme.py:56
+msgid "Tags..."
+msgstr "Tags"
+
+#: src/pyams_content/component/theme/zmi/__init__.py:66
+msgid "Content tags"
+msgstr "Tags du contenu"
+
+#: src/pyams_content/component/theme/zmi/__init__.py:99
+#: src/pyams_content/shared/view/zmi/theme.py:102
+msgid "Themes..."
+msgstr "Thèmes"
+
+#: src/pyams_content/component/theme/zmi/__init__.py:107
+msgid "Content themes"
+msgstr "Thèmes du contenu"
+
+#: src/pyams_content/component/theme/zmi/__init__.py:159
+#: src/pyams_content/shared/view/zmi/theme.py:148
+msgid "Collections..."
+msgstr "Collections"
+
+#: src/pyams_content/component/theme/zmi/__init__.py:172
+msgid "Content collections"
+msgstr "Collections associées au contenu"
+
+#: src/pyams_content/interfaces/__init__.py:95
+msgid "Unique key"
+msgstr "Clé unique"
+
+#: src/pyams_content/interfaces/__init__.py:96
+msgid ""
+"WARNING: this key can't be modified after creation!!! Spaces, uppercase "
+"letters ou accentuated characters will be replaced automatically."
+msgstr ""
+"ATTENTION : cette clé ne pourra plus être modifiée après sa création. Les "
+"espaces, les majuscules, les lettres accentuées et les caractères spéciaux "
+"seront remplacées automatiquement."
+
+#: src/pyams_content/interfaces/__init__.py:102
+#: src/pyams_content/shared/site/zmi/folder.py:67
+msgid "Visible label used to display content"
+msgstr "Le titre présenté aux internautes"
+
+#: src/pyams_content/interfaces/__init__.py:105
+msgid "Short name"
+msgstr "Fil d'Ariane"
+
+#: src/pyams_content/interfaces/__init__.py:106
+msgid "Short name used in breadcrumbs"
+msgstr "Libellé utilisé dans le fil d'Ariane"
+
+#: src/pyams_content/interfaces/__init__.py:113
+#: src/pyams_content/features/review/interfaces.py:74
+#: src/pyams_content/shared/view/interfaces/__init__.py:43
+msgid "Creation date"
+msgstr "Date de création"
+
+#: src/pyams_content/interfaces/__init__.py:117
+msgid "Modification date"
+msgstr "Dernière modification apportée"
+
+#: src/pyams_content/features/alert/interfaces.py:39
+msgid "Alert"
+msgstr "Alerte"
+
+#: src/pyams_content/features/alert/interfaces.py:40
+msgid "End of alert"
+msgstr "Levée d'alerte"
+
+#: src/pyams_content/features/alert/interfaces.py:41
+msgid "Information"
+msgstr "Information"
+
+#: src/pyams_content/features/alert/interfaces.py:42
+msgid "Warning"
+msgstr "Avertissement"
+
+#: src/pyams_content/features/alert/interfaces.py:43
+msgid "Recommendation"
+msgstr "Recommandation"
+
+#: src/pyams_content/features/alert/interfaces.py:55
+msgid "Is this alert visible in front-office?"
+msgstr "Si 'non', cette alerte ne sera pas présentée aux internautes"
+
+#: src/pyams_content/features/alert/interfaces.py:59
+msgid "Alert gravity"
+msgstr "Niveau de gravité"
+
+#: src/pyams_content/features/alert/interfaces.py:60
+msgid "Alert gravity will affect rendered alert style"
+msgstr "Le niveau de gravité choisi affectera le style de rendu de l'alerte"
+
+#: src/pyams_content/features/alert/interfaces.py:65
+#: src/pyams_content/features/alert/zmi/container.py:143
+msgid "Message"
+msgstr "Message"
+
+#: src/pyams_content/features/alert/interfaces.py:66
+msgid "Alert message"
+msgstr "Le message d'alerte doit être assez court et explicite"
+
+#: src/pyams_content/features/alert/interfaces.py:69
+#: src/pyams_content/features/menu/interfaces/__init__.py:68
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:96
+msgid "Internal reference"
+msgstr "Référence interne"
+
+#: src/pyams_content/features/alert/interfaces.py:70
 msgid ""
-"Workflow shouldn't be modified if this tool already contains any shared "
-"content!"
-msgstr ""
-"Le workflow ne doit pas être modifié si cet outil renferme déjà des contenus "
-"partagés !"
-
-#: src/pyams_content/shared/common/zmi/manager.py:150
-msgid "Languages"
-msgstr "Langues"
-
-#: src/pyams_content/shared/common/zmi/manager.py:162
-msgid "Content languages"
-msgstr "Langues pour la traduction de cet outil"
-
-#: src/pyams_content/shared/common/zmi/manager.py:172
+"Internal link target reference. You can search a reference using '+' "
+"followed by internal number, of by entering text matching content title."
+msgstr ""
+"Référence interne vers la cible du lien. Vous pouvez la rechercher par des "
+"mots de son titre, ou par son numéro interne (précédé d'un '+') ; le titre "
+"d'origine peut être modifié en utilisant le titre de substitution."
+
+#: src/pyams_content/features/alert/interfaces.py:75
+msgid "Display start date"
+msgstr "Date d'affichage"
+
+#: src/pyams_content/features/alert/interfaces.py:76
+msgid "First date at which alert should be displayed"
+msgstr ""
+"Première date à laquelle l'alerte sera affichée. Laissez la zone vide pour "
+"qu'elle soit affichée immédiatement."
+
+#: src/pyams_content/features/alert/interfaces.py:79
+msgid "Display end date"
+msgstr "Date de retrait"
+
+#: src/pyams_content/features/alert/interfaces.py:80
+msgid "Last date at which alert should be displayed"
+msgstr ""
+"Dernière date à laquelle l'alerte sera affichée. Laissez la zone vide pour "
+"qu'elle ne soit pas retirée."
+
+#: src/pyams_content/features/alert/interfaces.py:83
+msgid "Maximum interval"
+msgstr "Intervalle d'affichage"
+
+#: src/pyams_content/features/alert/interfaces.py:84
+msgid ""
+"Maximum interval between alert displays on a given device, given in hours; "
+"set to 0 to always display the alert"
+msgstr ""
+"Cet intervalle est donné en heures ; passé ce délai, pour un internaute "
+"donné, l'alerte apparaîtra à nouveau. Si aucun intervalle n'est indiqué, "
+"l'alerte s'affichera en permanence."
+
+#: src/pyams_content/features/alert/zmi/container.py:53
+msgid "Alerts"
+msgstr "Alertes"
+
+#: src/pyams_content/features/alert/zmi/container.py:165
+msgid "Alert list"
+msgstr "Liste des alertes"
+
+#: src/pyams_content/features/alert/zmi/container.py:95
+msgid "No currently defined alert."
+msgstr "Aucune alerte n'est définie actuellement."
+
+#: src/pyams_content/features/alert/zmi/__init__.py:45
+msgid "Add alert"
+msgstr "Ajouter une alerte"
+
+#: src/pyams_content/features/alert/zmi/__init__.py:56
+msgid "Add new alert"
+msgstr "Ajout d'une alerte"
+
+#: src/pyams_content/features/alert/zmi/__init__.py:79
+msgid "Edit alert properties"
+msgstr "Propriétés de l'alerte"
+
+#: src/pyams_content/features/redirect/container.py:81
+msgid "not matching"
+msgstr "pas de correspondance"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:39
+msgid "Active rule?"
+msgstr "Règle active ?"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:40
+msgid "If 'no', selected rule is inactive"
+msgstr "Si 'non', la règle est inactive"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:44
+msgid "Chained rule?"
+msgstr "Règle chaînée ?"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:45
 msgid ""
-"Tool languages are used to translate own tool properties, and newly created "
-"contents will propose these languages by default"
-msgstr ""
-"Les langues sont utilisées pour traduire les propriétés de l'outil.\n"
+"If 'no', and if this rule is matching received request URL, the rule returns "
+"a redirection response; otherwise, the rule just rewrites the input URL "
+"which is forwarded to the next rule"
+msgstr ""
+"Si 'non', et si cette règle correspond à l'URL reçue en entrée, une réponde "
+"de redirection est renvoyée directement ; dans le cas contraire, l'URL "
+"générée par cette règle est passée en entrée de la règle suivante"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:51
+msgid "Permanent redirect?"
+msgstr "Redirection permanente ?"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:52
+msgid "Define if this redirection should be permanent or temporary"
+msgstr ""
+"Indique si cette redirection doit être considérée comme permanente ou "
+"temporaire"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:56
+#: src/pyams_content/features/redirect/zmi/container.py:210
+#: src/pyams_content/features/redirect/zmi/container.py:366
+msgid "URL pattern"
+msgstr "Schéma d'URL"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:57
+msgid "Regexp pattern of matching URLs for this redirection rule"
+msgstr "Modèle de l'URL d'origine de cette règle de redirection"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:62
+msgid "Internal redirection target"
+msgstr "Redirection interne"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:63
+msgid ""
+"Internal redirection reference. You can search a reference using '+' "
+"followed by internal number, of by entering text matching content title."
+msgstr ""
+"Référence interne vers une cible de redirection. Vous pouvez la rechercher "
+"par des mots de son titre, ou par son numéro interne (précédé d'un '+')"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:69
+msgid "URL to which source URL should be redirected"
+msgstr "URL vers laquelle l'URL d'origine doit être redirigée"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:75
+msgid "You can only provide an internal reference OR a target URL"
+msgstr ""
+"Vous ne pouvez fournir qu'une référence interne OU une URL de redirection !"
+
+#: src/pyams_content/features/redirect/interfaces/__init__.py:77
+msgid "You must provide an internal reference OR a target URL"
+msgstr "Vous devez fournir une référence interne OU une URL de redirection !"
+
+#: src/pyams_content/features/redirect/zmi/container.py:67
+msgid "Redirections"
+msgstr "Redirections"
+
+#: src/pyams_content/features/redirect/zmi/container.py:161
+msgid "Enable/disable rule"
+msgstr "Activer/désactiver la règle"
+
+#: src/pyams_content/features/redirect/zmi/container.py:188
+msgid "Chain/unchain rule"
+msgstr "Enchaîner la règle avec la suivante"
+
+#: src/pyams_content/features/redirect/zmi/container.py:220
+msgid "Target"
+msgstr "Cible"
+
+#: src/pyams_content/features/redirect/zmi/container.py:246
+msgid "Redirections list"
+msgstr "Liste des règles de redirection"
+
+#: src/pyams_content/features/redirect/zmi/container.py:261
+msgid "Redirection rules"
+msgstr "Règles de redirection"
+
+#: src/pyams_content/features/redirect/zmi/container.py:262
+msgid ""
+"Redirection rules are use to handle redirections responses when a request "
+"generates \n"
+"a famous « 404 NotFound » error.\n"
 "\n"
-"Les nouveaux contenus proposeront également ces langues par défaut."
-
-#: src/pyams_content/shared/common/zmi/manager.py:80
-msgid "Content management"
-msgstr "Gérer ce gabarit"
-
-#: src/pyams_content/shared/common/zmi/manager.py:82
-msgid "Tool management"
-msgstr "Gérer cet outil"
-
-#: src/pyams_content/shared/common/zmi/owner.py:50
-msgid "Change owner..."
-msgstr "Changer de propriétaire"
-
-#: src/pyams_content/shared/common/zmi/owner.py:83
-msgid "Change content's owner"
-msgstr "Changement de propriétaire"
-
-#: src/pyams_content/shared/common/zmi/owner.py:125
+"Redirections are particularly useful when you are migrating from a previous "
+"site and don't want to lose \n"
+"your SEO.\n"
+"\n"
+"You can define a set of rules which will be applied to every \"NotFound\" "
+"request; rules are based on \n"
+"regular expressions which are applied to input URL: if the rule is \"matching"
+"\", the target URL is rewritten\n"
+"and a \"Redirect\" response is send.\n"
+"\n"
+"You can chain rules together: when a rule is chained, it's rewritten URL is "
+"passed as input URL to the \n"
+"next rule, until a matching rule is found.\n"
+msgstr ""
+"Les règles de redirection sont utilisées pour transmettre des réponses de "
+"redirection au lieu de la fameuse erreur « 404 - Page non trouvée ».\n"
+"\n"
+"La gestion des redirections est particulièrement importante en phase de "
+"migration d'un site web, pour éviter les liens cassés, ne pas perdre votre "
+"référencement et faciliter la mise à jour des moteurs de recherche.\n"
+"\n"
+"Vous pouvez définir un ensemble de règles qui seront appliquées dès lors "
+"qu'une requête adressée au serveur génère une erreur de page non trouvée ; "
+"les règles sont basées sur des expressions rationnelles que l'on applique à "
+"l'URL de la requête reçue : si la règle correspond, l'URL est réécrite et "
+"une réponse de redirection vers cette nouvelle URL est renvoyée.\n"
+"\n"
+"Vous pouvez également enchaîner les règles : lorsqu'une règle est \"chaînée"
+"\", la nouvelle URL qu'elle génère est passée aux règles suivantes, jusqu'à "
+"ce qu'une règle s'applique à cette nouvelle URL.\n"
+
+#: src/pyams_content/features/redirect/zmi/container.py:288
+msgid "Test"
+msgstr "Tester !"
+
+#: src/pyams_content/features/redirect/zmi/container.py:323
+msgid "Test redirection rules"
+msgstr "Test des règles de redirection"
+
+#: src/pyams_content/features/redirect/zmi/container.py:301
+msgid "Test URL"
+msgstr "URL à tester"
+
+#: src/pyams_content/features/redirect/zmi/container.py:304
+msgid "Check inactive rules?"
+msgstr "Tester les règles inactive ?"
+
+#: src/pyams_content/features/redirect/zmi/container.py:305
+msgid "If 'yes', inactive rules will also be tested"
+msgstr "Si 'oui', les règles inactives seront également testées"
+
+#: src/pyams_content/features/redirect/zmi/container.py:313
+msgid "Close"
+msgstr "Fermer"
+
+#: src/pyams_content/features/redirect/zmi/container.py:314
+msgid "Test rules"
+msgstr "Tester cette URL"
+
+#: src/pyams_content/features/redirect/zmi/container.py:123
+msgid "No currently defined redirection rule."
+msgstr "Aucune règle de redirection n'est définie actuellement."
+
+#: src/pyams_content/features/redirect/zmi/container.py:371
+msgid "No matching rule!"
+msgstr "Aucune règle ne correspond !"
+
+#: src/pyams_content/features/redirect/zmi/container.py:365
+msgid "Input URL"
+msgstr "URL en entrée"
+
+#: src/pyams_content/features/redirect/zmi/container.py:367
+msgid "Output URL"
+msgstr "URL générée"
+
+#: src/pyams_content/features/redirect/zmi/__init__.py:50
+msgid "Add rule"
+msgstr "Ajouter une règle"
+
+#: src/pyams_content/features/redirect/zmi/__init__.py:63
+msgid "Add new redirection rule"
+msgstr "Ajout d'une règle de redirection"
+
+#: src/pyams_content/features/redirect/zmi/__init__.py:88
+msgid "Edit redirection rule properties"
+msgstr "Propriétés de la règle de redirection"
+
+#: src/pyams_content/features/redirect/zmi/__init__.py:109
+msgid ""
+"URL pattern and target URL are defined by *regular expressions* (see |"
+"regexp|).\n"
+"    \n"
+"In URL pattern, you can use any valid regular expression element, notably:\n"
+"\n"
+"- « .* » to match any list of characters \n"
+"\n"
+"- « ( ) » to \"memorize\" parts of the URL which can be replaced into target "
+"URL\n"
+"\n"
+"- special characters (like \"+\") must be escaped with an « \\\\ ».\n"
+"\n"
+"In target URL, memorized parts can be reused using « \\\\1 », « \\\\2 » and "
+"so on, where given number is\n"
+"the order of the matching pattern element.\n"
+"\n"
+".. |regexp| raw:: html\n"
+"\n"
+"    <a href=\"https://docs.python.org/3/library/re.html\" target=\"_blank"
+"\">Python Regular Expressions</a>\n"
+msgstr ""
+"Le schéma d'URL et l'URL cible sont définis en tant que « expressions "
+"rationelles » (voir |regexp|).\n"
+"\n"
+"Dans le schéma d'URL utilisé pour identifier les requêtes en entrée, vous "
+"pouvez utiliser tout élément d'une expression rationnelle valide, "
+"notamment :\n"
+"\n"
+"- « .* » pour rechercher n'importe quelle suite de caractères\n"
+"\n"
+"- « ^ » et « $ » pour identifier le début ou la fin de l'URL\n"
+"\n"
+"- « ( ) » pour \"mémoriser\" certains éléments de l'URL qui pourront être "
+"repris dans l'URL cible\n"
+"\n"
+"- les caractères spéciaux (comme les \"+\") doivent être protégés par un "
+"caractère « \\\\ ».\n"
+"\n"
+"For exemple : dans le schéma « ^/.*?oid=([a-z0-9]+)$ », toute URL contenant "
+"un paramètre \"oid\" composé de minuscules et/ou de chiffres sera mémorisé "
+"pour pouvoir être réutilisé dans l'URL cible.\n"
+"\n"
+"Dans l'URL cible, les éléments mémorisés peuvent être réutilisés en "
+"utilisant une expression comme « \\\\1 », « \\\\2 » (et ainsi de suite), le "
+"chiffre indiquant la position de l'élément dans la liste des éléments "
+"mémorisés.\n"
+"\n"
+".. |regexp| raw:: html\n"
+"\n"
+"    <a href=\"https://docs.python.org/fr/3/library/re.html\" target=\"_blank"
+"\">Expressions rationnelles en Python</a>\n"
+
+#: src/pyams_content/features/review/__init__.py:181
+#, python-format
+msgid "Request comment: {comment}"
+msgstr "Commentaire joint : {comment}"
+
+#: src/pyams_content/features/review/__init__.py:211
+#, python-format
+msgid "A new comment was added on content « {0} »"
+msgstr "Un nouveau commentaire a été ajouté pour le contenu « {0} »"
+
+#: src/pyams_content/features/review/__init__.py:168
+#, python-format
+msgid "[{service_name}] A content review is requested"
+msgstr "[{service_name}] Demande de relecture"
+
+#: src/pyams_content/features/review/interfaces.py:32
+msgid "Review request"
+msgstr "Demande de relecture"
+
+#: src/pyams_content/features/review/interfaces.py:33
+msgid "Reviewer comment"
+msgstr "Commentaire"
+
+#: src/pyams_content/features/review/interfaces.py:56
+msgid "Comment writer"
+msgstr "Rédacteur"
+
+#: src/pyams_content/features/review/interfaces.py:59
+msgid "Content reviewers"
+msgstr "Relecteurs sollicités"
+
+#: src/pyams_content/features/review/interfaces.py:62
+msgid "Comment type"
+msgstr "Type de commentaire"
+
+#: src/pyams_content/features/review/interfaces.py:67
+msgid "Comment body"
+msgstr "Commentaire"
+
+#: src/pyams_content/features/review/interfaces.py:70
+msgid "Reviewer comment?"
+msgstr "Commentaire d'un relecteur ?"
+
+#: src/pyams_content/features/review/interfaces.py:86
+msgid "Reviewers list"
+msgstr "Liste des relecteurs"
+
+#: src/pyams_content/features/review/interfaces.py:87
+msgid "List of principals which reviewed the comment"
+msgstr "Liste des utilisateurs qui ont apporté des commentaires sur ce contenu"
+
+#: src/pyams_content/features/review/zmi/__init__.py:55
+msgid "Ask for review..."
+msgstr "Demander une relecture"
+
+#: src/pyams_content/features/review/zmi/__init__.py:94
+msgid "Content review request"
+msgstr "Demande de relecture"
+
+#: src/pyams_content/features/review/zmi/__init__.py:159
+msgid "Comments"
+msgstr "Commentaires"
+
+#: src/pyams_content/features/review/zmi/__init__.py:179
+msgid "Review comments"
+msgstr "Commentaires associés à cette version"
+
+#: src/pyams_content/features/review/zmi/__init__.py:65
+msgid "Sought principals"
+msgstr "Relecteurs sollicités"
+
+#: src/pyams_content/features/review/zmi/__init__.py:66
+msgid "List of principals from which a review is requested"
+msgstr ""
+"Liste des utilisateurs que vous souhaitez solliciter par mail pour relire ce "
+"contenu"
+
+#: src/pyams_content/features/review/zmi/__init__.py:69
+msgid "Comment"
+msgstr "Commentaire"
+
+#: src/pyams_content/features/review/zmi/__init__.py:70
+msgid "Comment associated with this request"
+msgstr ""
+"Ce commentaire associé à cette demande sera également transmis par mail"
+
+#: src/pyams_content/features/review/zmi/__init__.py:73
+msgid "Notify all reviewers"
+msgstr "Notifier tous les relecteurs"
+
+#: src/pyams_content/features/review/zmi/__init__.py:74
+msgid ""
+"If 'yes', selected reviewers will be notified by mail of your request, even "
+"if they were already members of the reviewers group. Otherwise, only new "
+"reviewers will be notified"
+msgstr ""
+"Si 'oui', tous les relecteurs sollicités seront notifiés par mail de votre "
+"demande, même s'ils avaient déjà été sollicités auparavant. Dans le cas "
+"contraire, seuls les nouveaux relecteurs seront notifiés."
+
+#: src/pyams_content/features/review/zmi/__init__.py:85
+msgid "Ask for content review"
+msgstr "Demander la relecture"
+
+#: src/pyams_content/features/review/zmi/__init__.py:140
+msgid "Request successful. No new notification have been sent"
+msgstr ""
+"Votre demande a été transmise. Aucune nouvelle notification n'a été envoyée."
+
+#: src/pyams_content/features/review/zmi/__init__.py:256
+msgid "Message is mandatory!"
+msgstr "Un commentaire est obligatoire !"
+
+#: src/pyams_content/features/review/zmi/__init__.py:128
+#, python-format
+msgid "Request successful. {count} new notification(s) have been sent"
+msgstr "Votre demande a été transmise. {count} notification(s) envoyée(s)."
+
+#: src/pyams_content/features/review/zmi/templates/review-comments-json.pt:15
+#: src/pyams_content/features/review/zmi/templates/review-comments.pt:32
+#: src/pyams_content/features/review/zmi/templates/review-add-comment.pt:14
+msgid "Review query from"
+msgstr "Demande de relecture de "
+
+#: src/pyams_content/features/review/zmi/templates/review-comments-json.pt:21
+#: src/pyams_content/features/review/zmi/templates/review-comments.pt:38
+#: src/pyams_content/features/review/zmi/templates/review-add-comment.pt:20
+msgid "(as reviewer)"
+msgstr "(relecteur)"
+
+#: src/pyams_content/features/review/zmi/templates/review-comments-json.pt:30
+#: src/pyams_content/features/review/zmi/templates/review-comments.pt:47
+msgid "Selected reviewers:"
+msgstr "Auprès de :"
+
+#: src/pyams_content/features/review/zmi/templates/review-comments.pt:64
+msgid "Add comment"
+msgstr "Déposer un commentaire"
+
+#: src/pyams_content/features/review/zmi/templates/review-comments.pt:67
+msgid "Add a comment..."
+msgstr "Votre commentaire..."
+
+#: src/pyams_content/features/review/zmi/templates/review-comments.pt:73
+msgid "Add this comment"
+msgstr "Ajouter ce commentaire"
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:4
+msgid "[${service_name}] You are requested for a content review"
+msgstr "[${service_name}] Demande de relecture"
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:30
+msgid "Hello,"
+msgstr "Bonjour,"
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:31
+msgid ""
+"You have been requested by ${sender}, contributor of « ${service_name} » "
+"website, to make a review of a content."
+msgstr ""
+"Vous êtes sollicité par ${sender}, contributeur du site internet "
+"${service_name}, qui souhaite recueillir votre commentaire à propos d'un "
+"contenu."
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:36
+msgid "${sender} added the following message to his request:"
+msgstr "${sender} a accompagné sa demande de relecture du message suivant :"
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:41
 msgid ""
-"All versions of this content which are not archived will be transferred to "
-"newly selected owner"
-msgstr ""
-"Toutes les versions non archivées de ce contenu seront transférées au "
-"nouveau propriétaire sélectionné"
-
-#: src/pyams_content/shared/common/zmi/owner.py:60
-msgid "New owner"
-msgstr "Nouveau propriétaire"
-
-#: src/pyams_content/shared/common/zmi/owner.py:61
-msgid "The selected user will become the new content's owner"
-msgstr "L'utilisateur sélectionné deviendra le nouveau propriétaire du contenu"
-
-#: src/pyams_content/shared/common/zmi/owner.py:63
-msgid "Keep previous owner as contributor"
-msgstr "L'ancien propriétaire reste contributeur"
-
-#: src/pyams_content/shared/common/zmi/owner.py:64
-msgid "If 'yes', the previous owner will still be able to modify this content"
-msgstr ""
-"Si 'oui', l'actuel propriétaire du contenu en restera contributeur et pourra "
-"donc continuer à le mettre à jour"
-
-#: src/pyams_content/shared/common/zmi/owner.py:74
-msgid "Change owner"
-msgstr "Changer le propriétaire"
-
-#: src/pyams_content/shared/common/zmi/rename.py:62
-msgid "Change URL..."
-msgstr "Changer d'URL"
-
-#: src/pyams_content/shared/common/zmi/rename.py:79
-msgid "Change item URL"
-msgstr "Modification de l'URL"
-
-#: src/pyams_content/shared/common/zmi/rename.py:86
-msgid "Item URL part"
-msgstr "URL du contenu"
-
-#: src/pyams_content/shared/common/zmi/rename.py:87
-msgid "URL part used to access this content"
-msgstr "Portion de l'URL utilisée pour accéder à ce contenu"
-
-#: src/pyams_content/shared/common/zmi/rename.py:121
-msgid "You must provide an URL for this item!"
-msgstr "Vous devez fournir une URL pour ce contenu !"
-
-#: src/pyams_content/shared/common/zmi/reverse.py:57
-msgid "Reverse links"
-msgstr "Liens amont"
-
-#: src/pyams_content/shared/common/zmi/reverse.py:66
-msgid "Content's internal links"
-msgstr "Autres contenus qui pointent vers ce contenu"
-
-#: src/pyams_content/shared/common/zmi/site.py:38
+"To review and comment this publication, please use the following link: "
+"${target}."
+msgstr "Pour accéder à cette contribution, cliquer ici : ${target}."
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:44
+msgid "After reading this content, please use the « Comments » menu entry."
+msgstr ""
+"Lorsque vous aurez pris connaissance du contenu, cliquez sur « Commentaires "
+"» dans le menu en colonne de gauche."
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:45
+msgid ""
+"If you don't want to reply to this request, please contact ${sender} "
+"directly by replying to this mail."
+msgstr ""
+"Si vous ne souhaitez pas donner suite à cette demande, vous pouvez répondre "
+"directement à ${sender} en lui adressant un message dans ce sens."
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:47
+msgid "Thank you."
+msgstr "Merci."
+
+#: src/pyams_content/features/review/zmi/templates/review-add-comment.pt:22
+msgid "just now"
+msgstr "À l'instant !"
+
+#: src/pyams_content/features/renderer/zmi/__init__.py:71
+#: src/pyams_content/features/renderer/zmi/templates/renderer-input.pt:4
+msgid "Edit renderer properties"
+msgstr "Propriétés de ce mode de rendu"
+
+#: src/pyams_content/features/renderer/skin/__init__.py:65
+msgid "Hidden content"
+msgstr "NON affiché"
+
+#: src/pyams_content/features/preview/zmi/__init__.py:62
+msgid "Content preview"
+msgstr "Aperçu du contenu"
+
+#: src/pyams_content/features/preview/zmi/__init__.py:67
+#, python-format
+msgid "{title} ({preview})"
+msgstr "{title} ({preview})"
+
+#: src/pyams_content/features/preview/zmi/__init__.py:68
+msgid "preview"
+msgstr "aperçu"
+
+#: src/pyams_content/features/footer/interfaces/__init__.py:39
+msgid "Footer template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/features/footer/interfaces/__init__.py:40
+msgid "Presentation template used for this footer"
+msgstr "Mode de rendu utilisé par ce pied de page"
+
+#: src/pyams_content/features/footer/zmi/__init__.py:60
+msgid "Page footer"
+msgstr "Pied de pages"
+
+#: src/pyams_content/features/footer/zmi/__init__.py:78
+msgid "Edit footer settings"
+msgstr "Paramétrage des pieds de pages"
+
+#: src/pyams_content/features/footer/zmi/__init__.py:152
+msgid ""
+"WARNING: Footer properties are saved automatically when changing inherit "
+"mode!!"
+msgstr ""
+"ATTENTION : les propriétés du pied de page sont enregistrées automatiquement "
+"lorsque vous modifiez le mode d'héritage !!"
+
+#: src/pyams_content/features/footer/zmi/__init__.py:220
+msgid "Footer renderer settings"
+msgstr "Propriétés de ce mode de rendu"
+
+#: src/pyams_content/features/footer/zmi/__init__.py:107
+msgid "Don't inherit parent footer"
+msgstr "Ne pas hériter du pied de pages du parent"
+
+#: src/pyams_content/features/footer/skin/__init__.py:94
+msgid "Hidden footer"
+msgstr "Ne pas afficher de pied de pages"
+
+#: src/pyams_content/features/menu/interfaces/__init__.py:64
+msgid "Menu title"
+msgstr "Libellé"
+
+#: src/pyams_content/features/menu/interfaces/__init__.py:65
+msgid "Displayed menu label"
+msgstr "Libellé du menu"
+
+#: src/pyams_content/features/menu/interfaces/__init__.py:69
+msgid "Direct reference to menu target"
+msgstr ""
+"Lorsque le menu est utilisé dans l'en-tête de page, référence interne vers "
+"la cible du menu (site ou rubrique) permettant de mettre en évidence le menu "
+"actif ; un lien sera également créé vers cette référence si le menu ne "
+"contient aucun lien."
+
+#: src/pyams_content/features/menu/portlet/navigation/simple.py:67
+msgid "Simple navigation"
+msgstr "Navigation à un niveau"
+
+#: src/pyams_content/features/menu/portlet/navigation/double.py:67
+msgid "Double navigation"
+msgstr "Navigation à deux niveaux"
+
+#: src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:32
+#: src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:32
+msgid "Portlet main title"
+msgstr "Titre du composant"
+
+#: src/pyams_content/features/menu/portlet/navigation/zmi/simple.py:69
+msgid "Navigation links"
+msgstr "Liens de navigation"
+
+#: src/pyams_content/features/menu/portlet/navigation/zmi/double.py:69
+msgid "Navigation menus"
+msgstr "Menus de navigation"
+
+#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:14
+#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:11
+msgid "Link has no illustration"
+msgstr "Le lien n'a pas d'illustration"
+
+#: src/pyams_content/features/menu/zmi/__init__.py:81
+msgid "Add menu..."
+msgstr "Ajouter une entrée"
+
+#: src/pyams_content/features/menu/zmi/__init__.py:92
+msgid "Add new menu"
+msgstr "Ajout d'un menu"
+
+#: src/pyams_content/features/menu/zmi/__init__.py:123
+msgid "Edit menu properties"
+msgstr "Propriétés du menu"
+
+#: src/pyams_content/features/menu/zmi/__init__.py:215
+#: src/pyams_content/shared/form/interfaces/__init__.py:60
+#: src/pyams_content/shared/form/zmi/field.py:167
+#: src/pyams_content/shared/common/interfaces/types.py:47
+#: src/pyams_content/shared/common/zmi/templates/preview-input.pt:34
+#: src/pyams_content/shared/common/zmi/templates/check-input.pt:34
+msgid "Label"
+msgstr "Libellé"
+
+#: src/pyams_content/features/menu/zmi/__init__.py:110
+msgid "Menu was correctly added."
+msgstr "Le menu a été ajouté."
+
+#: src/pyams_content/features/menu/zmi/__init__.py:395
+msgid "Link was correctly added."
+msgstr "Le lien a été ajouté."
+
+#: src/pyams_content/features/menu/zmi/templates/menu-name-cell.pt:7
+msgid "Click to see menu items"
+msgstr "Montrer ou cacher les éléments du menu"
+
+#: src/pyams_content/features/checker/interfaces.py:27
 #, python-format
-msgid ""
-"SEARCH - Between all contents published into &laquo;&nbsp;{site}&nbsp;&raquo;"
-msgstr ""
-"RECHERCHE - Tous contenus présents dans &laquo;&nbsp;{site}&nbsp;&raquo; "
-"confondus"
-
-#: src/pyams_content/shared/common/zmi/portal.py:44
-msgid "Edit default template properties"
-msgstr "Modèle de présentation par défaut"
-
-#: src/pyams_content/shared/common/zmi/portal.py:54
+msgid " - {field}: <span class=\"text-danger\">no value</span>"
+msgstr " - {field} : <span class=\"text-danger\">non renseigné</span>"
+
+#: src/pyams_content/features/checker/interfaces.py:28
+#, python-format
+msgid " - {field} ({lang}): <span class=\"text-danger\">no value</span>"
+msgstr " - {field} ({lang}) : <span class=\"text-danger\">non renseigné</span>"
+
+#: src/pyams_content/features/checker/interfaces.py:29
+#, python-format
+msgid " - {field}: <span class=\"text-danger\">{message}</span>"
+msgstr " - {field} : <span class=\"text-danger\">{message}</span>"
+
+#: src/pyams_content/features/checker/zmi/__init__.py:43
+#: src/pyams_content/shared/common/zmi/templates/check-input.pt:39
+msgid "Audit"
+msgstr "Audit"
+
+#: src/pyams_content/features/checker/zmi/__init__.py:58
+msgid "Content check"
+msgstr "Audit du contenu"
+
+#: src/pyams_content/features/checker/zmi/__init__.py:82
+msgid "No checker available. This content is clean!"
+msgstr "Pas de vérificateur disponible pour ce contenu."
+
+#: src/pyams_content/features/checker/zmi/__init__.py:78
+#, python-format
+msgid "{0}:"
+msgstr "{0} :"
+
+#: src/pyams_content/features/header/zmi/__init__.py:66
+msgid "Page header"
+msgstr "En-tête de pages"
+
+#: src/pyams_content/features/header/zmi/__init__.py:84
+msgid "Edit header settings"
+msgstr "Paramétrage des en-têtes de pages"
+
+#: src/pyams_content/features/header/zmi/__init__.py:161
 msgid ""
-"**This form allows you to select shared content default template.**\n"
-"\n"
-"If you choose to use a shared template, you can only adjust settings of each "
-"portlet individually but can't change portlets list or page configuration.\n"
-"\n"
-"If you use a local template, you can define a whole custom configuration but "
-"the template definition can't be reused anywhere..."
-msgstr ""
-"Vous pouvez modifier le modèle de présentation qui sera appliqué **par "
-"défaut** à tous les contenus de ce gabarit.\n"
-"\n"
-"Si vous choisissez d'utiliser un modèle de présentation partagé, vous "
-"pourrez ajuster les paramètres de chaque composant mais ne pourrez pas "
-"modifier la liste des composants ou leur position et la configuration de la "
-"page.\n"
-"\n"
-"Si vous choisissez d'utiliser un modèle de présentation \"local\", vous "
-"pourrez définir l'ensemble de la configuration mais le modèle de "
-"présentation ne pourra pas être réutilisé ailleurs que dans les contenus de "
-"ce gabarit."
-
-#: src/pyams_content/shared/common/zmi/portal.py:70
-msgid "Use tool default template"
-msgstr "Utiliser le modèle de présentation par défaut de ce gabarit"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:134
-msgid "Unique ID"
+"WARNING: Header properties are saved automatically when changing inherit "
+"mode!!"
+msgstr ""
+"ATTENTION : les propriétés de l'en-tête sont enregistrées automatiquement "
+"lorsque vous modifiez le mode d'héritage !!"
+
+#: src/pyams_content/features/header/zmi/__init__.py:229
+msgid "Header renderer settings"
+msgstr "Propriétés de ce mode de rendu"
+
+#: src/pyams_content/features/header/zmi/__init__.py:113
+msgid "Don't inherit parent header"
+msgstr "Ne pas hériter de l'en-tête de pages du parent"
+
+#: src/pyams_content/features/header/skin/__init__.py:100
+msgid "Hidden header"
+msgstr "Ne pas afficher d'en-tête de pages"
+
+#: src/pyams_content/profile/interfaces/__init__.py:33
+msgid "User favorites"
+msgstr "Favoris de l'utilisateur"
+
+#: src/pyams_content/profile/interfaces/__init__.py:34
+msgid "List of internal numbers of shared contents stored for quick access"
+msgstr "Liste des numéros internes des contenus mémorisés pour un accès rapide"
+
+#: src/pyams_content/profile/interfaces/__init__.py:37
+msgid "Default table length"
+msgstr "Longueur des tableaux"
+
+#: src/pyams_content/profile/interfaces/__init__.py:38
+msgid "Default length used for inner tables and dashboards"
+msgstr "Longueur par défaut des tableaux internes et des tableaux de bord"
+
+#: src/pyams_content/profile/zmi/__init__.py:42
+msgid "Admin. profile"
+msgstr "Profil intervenant"
+
+#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:43
+msgid "Shared sites"
+msgstr "Sites et blogs"
+
+#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:64
+msgid "Shared contents"
+msgstr "Gabarits"
+
+#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:87
+msgid "Shared tools"
+msgstr "Outils"
+
+#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:110
+msgid "My roles"
+msgstr "Mes rôles"
+
+#: src/pyams_content/skin/zmi/viewlet/toplinks/templates/user-addings.pt:7
+msgid "Create new content"
+msgstr "Créer un nouveau contenu"
+
+#: src/pyams_content/root/__init__.py:63
+msgid "Site root"
+msgstr "Racine du site"
+
+#: src/pyams_content/root/interfaces/__init__.py:33
+msgid "Site managers"
+msgstr "Administrateurs"
+
+#: src/pyams_content/root/interfaces/__init__.py:37
+#: src/pyams_content/shared/common/interfaces/__init__.py:41
+msgid "Webmasters"
+msgstr "Webmestres"
+
+#: src/pyams_content/root/interfaces/__init__.py:41
+msgid "Templates managers"
+msgstr "Designers"
+
+#: src/pyams_content/root/interfaces/__init__.py:45
+msgid "Operators group"
+msgstr "Groupe des opérateurs"
+
+#: src/pyams_content/root/interfaces/__init__.py:46
+msgid "Name of group containing all roles owners"
+msgstr ""
+"Tous les utilisateurs auxquels sera attribué un rôle seront placés dans ce "
+"groupe"
+
+#: src/pyams_content/root/zmi/sites.py:68
+#: src/pyams_content/shared/site/zmi/container.py:176
+#: src/pyams_content/shared/site/zmi/container.py:186
+msgid "Site tree"
+msgstr "Arborescence du site"
+
+#: src/pyams_content/root/zmi/sites.py:78
+msgid "Blogs and shared sites"
+msgstr "Blogs et sites partagés"
+
+#: src/pyams_content/root/zmi/sites.py:108
+msgid "Visible site?"
+msgstr "Site visible ?"
+
+#: src/pyams_content/root/zmi/sites.py:134
+msgid "OID"
 msgstr "N° IN"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:181
-msgid "Status date"
-msgstr "En date du"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:213
-msgid "Status principal"
-msgstr "Intervenant"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:250
-msgid "Last modification"
-msgstr "Dernière modification"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:273
+#: src/pyams_content/root/zmi/sites.py:152
+msgid "Delete shared site"
+msgstr "Supprimer ce site"
+
+#: src/pyams_content/root/zmi/sites.py:171
+#: src/pyams_content/shared/imagemap/zmi/container.py:175
+msgid "No provided object_name argument!"
+msgstr "Argument 'object_name' non fourni !"
+
+#: src/pyams_content/root/zmi/sites.py:180
+msgid "Given element name doesn't exist!"
+msgstr "Le nom de l'élément indiqué n'existe pas !"
+
+#: src/pyams_content/root/zmi/__init__.py:78
+msgid "Home"
+msgstr "Accueil"
+
 #: src/pyams_content/root/zmi/__init__.py:110
+#: src/pyams_content/shared/common/zmi/dashboard.py:267
 msgid "Dashboard"
 msgstr "Tableau de bord"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:283
-msgid "Contents dashboard"
-msgstr "Mon tableau de bord"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:329
 #: src/pyams_content/root/zmi/__init__.py:159
+#: src/pyams_content/shared/common/zmi/dashboard.py:323
 #, python-format
 msgid "MANAGER - {0} content waiting for your action"
 msgstr "RESPONSABLE - {0} contenu en attente de votre intervention"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:330
 #: src/pyams_content/root/zmi/__init__.py:160
+#: src/pyams_content/shared/common/zmi/dashboard.py:324
 #, python-format
 msgid "MANAGER - {0} contents waiting for your action"
 msgstr "RESPONSABLE - {0} contenus en attente de votre intervention"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:371
 #: src/pyams_content/root/zmi/__init__.py:204
+#: src/pyams_content/shared/common/zmi/dashboard.py:365
 #, python-format
 msgid "CONTRIBUTOR - {0} content waiting for action"
 msgstr "CONTRIBUTEUR - {0} contenu soumis à un responsable"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:372
 #: src/pyams_content/root/zmi/__init__.py:205
+#: src/pyams_content/shared/common/zmi/dashboard.py:366
 #, python-format
 msgid "CONTRIBUTOR - {0} contents waiting for action"
 msgstr "CONTRIBUTEUR - {0} contenus soumis à un responsable"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:404
 #: src/pyams_content/root/zmi/__init__.py:240
+#: src/pyams_content/shared/common/zmi/dashboard.py:398
 #, python-format
 msgid "CONTRIBUTOR - {0} modified content"
 msgstr "CONTRIBUTEUR - {0} contenu modifié"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:445
 #: src/pyams_content/root/zmi/__init__.py:283
+#: src/pyams_content/shared/common/zmi/dashboard.py:439
 msgid "My contents"
 msgstr "Mes contenus"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:460
-#: src/pyams_content/shared/common/zmi/templates/dashboard.pt:8
 #: src/pyams_content/root/zmi/__init__.py:298
 #: src/pyams_content/root/zmi/templates/dashboard.pt:8
+#: src/pyams_content/shared/common/zmi/dashboard.py:454
+#: src/pyams_content/shared/common/zmi/templates/dashboard.pt:8
 msgid "My favorites"
 msgstr "Mes favoris"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:469
 #: src/pyams_content/root/zmi/__init__.py:307
+#: src/pyams_content/shared/common/zmi/dashboard.py:463
 #, python-format
 msgid "CONTRIBUTOR - {0} favorite"
 msgstr "CONTRIBUTEUR - {0} contenu favori"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:470
 #: src/pyams_content/root/zmi/__init__.py:308
+#: src/pyams_content/shared/common/zmi/dashboard.py:464
 #, python-format
 msgid "CONTRIBUTOR - {0} favorites"
 msgstr "CONTRIBUTEUR - {0} contenus favoris"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:482
-#: src/pyams_content/shared/common/zmi/templates/header.pt:23
-msgid "Add/remove from favorites"
-msgstr "Ajouter/enlever des favoris"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:545
 #: src/pyams_content/root/zmi/__init__.py:346
+#: src/pyams_content/shared/common/zmi/dashboard.py:539
 msgid "Your favorite contents"
 msgstr "Mes contenus favoris"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:558
 #: src/pyams_content/root/zmi/__init__.py:359
+#: src/pyams_content/shared/common/zmi/dashboard.py:552
 msgid "My preparations"
 msgstr "Mes préparations"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:567
 #: src/pyams_content/root/zmi/__init__.py:368
+#: src/pyams_content/shared/common/zmi/dashboard.py:561
 #, python-format
 msgid "CONTRIBUTOR - {0} prepared content"
 msgstr "CONTRIBUTEUR - {0} contenu en préparation"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:568
 #: src/pyams_content/root/zmi/__init__.py:369
+#: src/pyams_content/shared/common/zmi/dashboard.py:562
 #, python-format
 msgid "CONTRIBUTOR - {0} prepared contents"
 msgstr "CONTRIBUTEUR - {0} contenus en préparation"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:608
 #: src/pyams_content/root/zmi/__init__.py:408
+#: src/pyams_content/shared/common/zmi/dashboard.py:603
 msgid "Your prepared contents"
 msgstr "Mes contenus en préparation"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:621
 #: src/pyams_content/root/zmi/__init__.py:421
+#: src/pyams_content/shared/common/zmi/dashboard.py:616
 msgid "My submissions"
 msgstr "Mes demandes"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:630
 #: src/pyams_content/root/zmi/__init__.py:430
+#: src/pyams_content/shared/common/zmi/dashboard.py:625
 #, python-format
 msgid "CONTRIBUTOR - {0} submitted content"
 msgstr "CONTRIBUTEUR - {0} contenu soumis à un responsable"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:631
 #: src/pyams_content/root/zmi/__init__.py:431
+#: src/pyams_content/shared/common/zmi/dashboard.py:626
 #, python-format
 msgid "CONTRIBUTOR - {0} submitted contents"
 msgstr "CONTRIBUTEUR - {0} contenus soumis à un responsable"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:671
 #: src/pyams_content/root/zmi/__init__.py:470
+#: src/pyams_content/shared/common/zmi/dashboard.py:667
 msgid "Your submitted contents"
 msgstr "Mes contenus soumis à un responsable"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:684
 #: src/pyams_content/root/zmi/__init__.py:483
+#: src/pyams_content/shared/common/zmi/dashboard.py:680
 msgid "My publications"
 msgstr "Mes publications"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:693
 #: src/pyams_content/root/zmi/__init__.py:492
+#: src/pyams_content/shared/common/zmi/dashboard.py:689
 #, python-format
 msgid "CONTRIBUTOR - {0} published content"
 msgstr "CONTRIBUTEUR - {0} contenu publié"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:694
 #: src/pyams_content/root/zmi/__init__.py:493
+#: src/pyams_content/shared/common/zmi/dashboard.py:690
 #, python-format
 msgid "CONTRIBUTOR - {0} published contents"
 msgstr "CONTRIBUTEUR - {0} contenus publiés"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:734
 #: src/pyams_content/root/zmi/__init__.py:532
+#: src/pyams_content/shared/common/zmi/dashboard.py:731
 msgid "Your published contents"
 msgstr "Mes contenus publiés"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:747
 #: src/pyams_content/root/zmi/__init__.py:545
+#: src/pyams_content/shared/common/zmi/dashboard.py:744
 msgid "My retired contents"
 msgstr "Mes contenus retirés"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:756
 #: src/pyams_content/root/zmi/__init__.py:554
+#: src/pyams_content/shared/common/zmi/dashboard.py:753
 #, python-format
 msgid "CONTRIBUTOR - {0} retired content"
 msgstr "CONTRIBUTEUR - {0} contenu retiré"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:757
 #: src/pyams_content/root/zmi/__init__.py:555
+#: src/pyams_content/shared/common/zmi/dashboard.py:754
 #, python-format
 msgid "CONTRIBUTOR - {0} retired contents"
 msgstr "CONTRIBUTEUR - {0} contenus retirés"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:798
 #: src/pyams_content/root/zmi/__init__.py:595
+#: src/pyams_content/shared/common/zmi/dashboard.py:795
 msgid "Your retired contents"
 msgstr "Mes contenus retirés"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:811
 #: src/pyams_content/root/zmi/__init__.py:608
+#: src/pyams_content/shared/common/zmi/dashboard.py:808
 msgid "My archived contents"
 msgstr "Mes contenus archivés"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:820
 #: src/pyams_content/root/zmi/__init__.py:617
+#: src/pyams_content/shared/common/zmi/dashboard.py:817
 #, python-format
 msgid "CONTRIBUTOR - {0} archived content"
 msgstr "CONTRIBUTEUR - {0} contenu archivé"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:821
 #: src/pyams_content/root/zmi/__init__.py:618
+#: src/pyams_content/shared/common/zmi/dashboard.py:818
 #, python-format
 msgid "CONTRIBUTOR - {0} archived contents"
 msgstr "CONTRIBUTEUR - {0} contenus archivés"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:868
 #: src/pyams_content/root/zmi/__init__.py:664
+#: src/pyams_content/shared/common/zmi/dashboard.py:865
 msgid "Your archived contents"
 msgstr "Mes contenus archivés"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:882
 #: src/pyams_content/root/zmi/__init__.py:678
+#: src/pyams_content/shared/common/zmi/dashboard.py:879
 msgid "Other interventions"
 msgstr "Toutes les interventions"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:897
 #: src/pyams_content/root/zmi/__init__.py:693
+#: src/pyams_content/shared/common/zmi/dashboard.py:894
 msgid "Last publications"
 msgstr "Dernières publications"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:906
 #: src/pyams_content/root/zmi/__init__.py:702
+#: src/pyams_content/shared/common/zmi/dashboard.py:903
 #, python-format
 msgid "CONTRIBUTORS - {0} published content"
 msgstr "TOUS CONTRIBUTEURS - {0} contenu publié"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:953
 #: src/pyams_content/root/zmi/__init__.py:748
+#: src/pyams_content/shared/common/zmi/dashboard.py:950
 msgid "Last published contents"
 msgstr "Derniers contenus publiés"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:966
 #: src/pyams_content/root/zmi/__init__.py:761
+#: src/pyams_content/shared/common/zmi/dashboard.py:963
 msgid "Last updates"
 msgstr "Dernières modifications"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:975
 #: src/pyams_content/root/zmi/__init__.py:770
+#: src/pyams_content/shared/common/zmi/dashboard.py:972
 #, python-format
 msgid "CONTRIBUTORS - {0} updated content"
 msgstr "TOUS CONTRIBUTEURS - {0} contenu modifié"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:1020
 #: src/pyams_content/root/zmi/__init__.py:814
+#: src/pyams_content/shared/common/zmi/dashboard.py:1017
 msgid "Last updated contents"
 msgstr "Derniers contenus modifiés"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:409
+#: src/pyams_content/root/zmi/__init__.py:825
+#: src/pyams_content/shared/site/zmi/container.py:407
+msgid "Content"
+msgstr "Contenu"
+
 #: src/pyams_content/root/zmi/__init__.py:245
+#: src/pyams_content/shared/common/zmi/dashboard.py:403
 #, python-format
 msgid "CONTRIBUTOR - {0} modified contents"
 msgstr "CONTRIBUTEUR - {0} contenus modifiés"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:411
 #: src/pyams_content/root/zmi/__init__.py:247
+#: src/pyams_content/shared/common/zmi/dashboard.py:405
 #, python-format
 msgid "CONTRIBUTOR - Last {0} modified contents"
 msgstr "CONTRIBUTEUR - Les {0} dernières modifications"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:911
 #: src/pyams_content/root/zmi/__init__.py:707
+#: src/pyams_content/shared/common/zmi/dashboard.py:908
 #, python-format
 msgid "CONTRIBUTORS - Last {0} published contents"
 msgstr "TOUS CONTRIBUTEURS - Les {0} dernières publications"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:913
 #: src/pyams_content/root/zmi/__init__.py:709
+#: src/pyams_content/shared/common/zmi/dashboard.py:910
 msgid "CONTRIBUTORS - Last published contents (in the limit of 50)"
 msgstr "TOUS CONTRIBUTEURS - Les {0} dernières publications"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:980
 #: src/pyams_content/root/zmi/__init__.py:775
+#: src/pyams_content/shared/common/zmi/dashboard.py:977
 #, python-format
 msgid "CONTRIBUTORS - Last {0} updated contents"
 msgstr "TOUS CONTRIBUTEURS - Les {0} dernières modifications"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:982
 #: src/pyams_content/root/zmi/__init__.py:777
+#: src/pyams_content/shared/common/zmi/dashboard.py:979
 msgid "CONTRIBUTORS - Last updated contents (in the limit of 50)"
 msgstr "TOUS CONTRIBUTEURS - Les {0} dernières modifications"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:306
-#, python-format
-msgid "SEARCH - Between all contents of type &laquo;&nbsp;{type}&nbsp;&raquo;"
-msgstr "RECHERCHE - Tous contenus &laquo;&nbsp;{type}&nbsp;&raquo; confondus"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:171
-#: src/pyams_content/shared/common/zmi/header.py:96
-msgid "Content publication start date is not passed yet"
-msgstr "La date de début de publication n'est pas encore atteinte"
-
-#: src/pyams_content/shared/common/zmi/security.py:64
-msgid "Contributors restrictions"
-msgstr "Paramètres des contributeurs"
-
-#: src/pyams_content/shared/common/zmi/security.py:73
-msgid "Content contributors restrictions"
-msgstr "Liste des contributeurs"
-
-#: src/pyams_content/shared/common/zmi/security.py:107
-msgid "Contributor name"
-msgstr "Nom du contributeur"
-
-#: src/pyams_content/shared/common/zmi/security.py:118
-#: src/pyams_content/shared/common/zmi/security.py:270
-msgid "Activated publication checks?"
-msgstr "Tunnel de publication activé"
-
-#: src/pyams_content/shared/common/zmi/security.py:218
-msgid "Managers restrictions"
-msgstr "Paramètres des responsables"
-
-#: src/pyams_content/shared/common/zmi/security.py:227
-msgid "Content managers restrictions"
-msgstr "Liste des responsables"
-
-#: src/pyams_content/shared/common/zmi/security.py:259
-msgid "Manager name"
-msgstr "Nom du responsable"
-
-#: src/pyams_content/shared/common/zmi/security.py:287
-msgid "Restricted"
-msgstr "Restrictions"
-
-#: src/pyams_content/shared/common/zmi/security.py:304
-msgid "Owners"
-msgstr "Propriétaires"
-
-#: src/pyams_content/shared/common/zmi/security.py:394
-msgid "Publication workflow"
-msgstr "Workflow de publication"
-
-#: src/pyams_content/shared/common/zmi/security.py:167
-#, python-format
-msgid "Edit contributor restrictions for « {0} »"
-msgstr "Gérer les paramètres d'intervention de « {0} »"
-
-#: src/pyams_content/shared/common/zmi/security.py:353
-#, python-format
-msgid "Edit manager restrictions for « {0} »"
-msgstr "Gérer les paramètres d'intervention de « {0} »"
-
-#: src/pyams_content/shared/common/zmi/security.py:400
-msgid "Apply contents restrictions"
-msgstr "Appliquer des restrictions d'accès"
-
-#: src/pyams_content/shared/common/zmi/security.py:402
-msgid ""
-"You can specify which contents this manager will be able to manage. If you "
-"specify several criteria, the manager will be able to manage contents for "
-"which at least one criteria is matching."
-msgstr ""
-"Vous pouvez indiquer les propriétés des contenus que ce responsable sera "
-"autorisé à gérer. Si vous indiquez plusieurs critères, il pourra gérer les "
-"contenus pour lesquels au moins l'un des critères correspond."
-
-#: src/pyams_content/shared/common/zmi/header.py:85
-#, python-format
-msgid "{state} by {principal}"
-msgstr "{state} par {principal}"
-
-#: src/pyams_content/shared/common/zmi/header.py:116
-#, python-format
-msgid "since {date}"
-msgstr "depuis {date}"
-
-#: src/pyams_content/shared/common/zmi/header.py:128
-msgid "access published version"
-msgstr "accéder à la version en ligne"
-
-#: src/pyams_content/shared/common/zmi/header.py:135
-msgid "access new version"
-msgstr "accéder à la version en préparation"
-
-#: src/pyams_content/shared/common/zmi/header.py:145
-msgid "access waiting version"
-msgstr "accéder à la version en attente"
-
-#: src/pyams_content/shared/common/zmi/header.py:156
-msgid "access retired version"
-msgstr "accéder à la version retirée"
-
-#: src/pyams_content/shared/common/zmi/header.py:166
-msgid "access archived version"
-msgstr "accéder à la version archivée"
-
-#: src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:2
-msgid ""
-"You considerate that the currently published version should no more be "
-"publicly visible."
-msgstr ""
-"Vous considérez que la version actuellement en ligne ne doit plus être "
-"consultable."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:3
-msgid ""
-"WARNING: the content will remain visible until a manager validate the "
-"request."
-msgstr ""
-"ATTENTION : ce contenu restera visible jusqu'à ce qu'un responsable prenne "
-"en charge votre demande."
-
-#: src/pyams_content/shared/common/zmi/templates/header.pt:6
-msgid "Back to previous page"
-msgstr "Revenir à la page précédente"
-
-#: src/pyams_content/shared/common/zmi/templates/header.pt:20
-msgid "by ${owner}"
-msgstr "de ${owner}"
-
-#: src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:2
-msgid "As a manager, you considerate that this content must be archived."
-msgstr ""
-"En tant que responsable, vous considérez que ce contenu doit être archivé."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:3
-#: src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:3
-msgid ""
-"After archiving, it will be backed up but you will not be able to publish it "
-"again except by creating a new version."
-msgstr ""
-"L'archivage permet de conserver une version d'un contenu dans son état "
-"actuel ; il pourra ensuite à nouveau être publié, en créant une nouvelle "
-"version."
-
-#: src/pyams_content/shared/common/zmi/templates/check-input.pt:34
-#: src/pyams_content/shared/common/zmi/templates/preview-input.pt:34
-#: src/pyams_content/shared/common/interfaces/types.py:47
-#: src/pyams_content/shared/form/zmi/field.py:167
-#: src/pyams_content/shared/form/interfaces/__init__.py:60
-#: src/pyams_content/features/menu/zmi/__init__.py:215
-msgid "Label"
-msgstr "Libellé"
-
-#: src/pyams_content/shared/common/zmi/templates/check-input.pt:39
-#: src/pyams_content/features/checker/zmi/__init__.py:43
-msgid "Audit"
-msgstr "Audit"
-
+#: src/pyams_content/root/zmi/search.py:95
+#: src/pyams_content/shared/common/zmi/search.py:96
+msgid "Quick search results"
+msgstr "Résultats de la recherche rapide"
+
+#: src/pyams_content/root/zmi/search.py:152
+#: src/pyams_content/root/zmi/search.py:188
+#: src/pyams_content/shared/common/zmi/search.py:162
+#: src/pyams_content/shared/common/zmi/search.py:204
+msgid "Advanced search"
+msgstr "Recherche avancée"
+
+#: src/pyams_content/root/zmi/search.py:280
+#: src/pyams_content/shared/common/zmi/search.py:332
+msgid "Advanced search results"
+msgstr "Résultats de la recherche avancée"
+
+#: src/pyams_content/root/zmi/search.py:160
+msgid "Content types"
+msgstr "Types de contenus"
+
+#: src/pyams_content/root/zmi/search.py:164
+#: src/pyams_content/shared/common/zmi/dashboard.py:225
+#: src/pyams_content/shared/common/zmi/search.py:170
+msgid "Owner"
+msgstr "Propriétaire"
+
+#: src/pyams_content/root/zmi/search.py:167
+#: src/pyams_content/shared/common/zmi/search.py:177
+msgid "Created after..."
+msgstr "Créé entre le"
+
+#: src/pyams_content/root/zmi/search.py:170
+#: src/pyams_content/shared/common/zmi/search.py:180
+msgid "Created before..."
+msgstr "et le"
+
+#: src/pyams_content/root/zmi/search.py:173
+#: src/pyams_content/shared/common/zmi/search.py:183
+msgid "Modified after..."
+msgstr "Modifié entre le"
+
+#: src/pyams_content/root/zmi/search.py:176
+#: src/pyams_content/shared/common/zmi/search.py:186
+msgid "Modified before..."
+msgstr "et le"
+
+#: src/pyams_content/root/zmi/templates/dashboard.pt:7
+msgid "Your contents dashboard"
+msgstr "Les contenus qui me concernent"
+
+#: src/pyams_content/root/zmi/templates/dashboard.pt:18
+msgid "SEARCH - Between all contents"
+msgstr "RECHERCHE - Tous contenus confondus"
+
+#: src/pyams_content/root/zmi/templates/dashboard.pt:29
 #: src/pyams_content/shared/common/zmi/templates/dashboard.pt:29
-#: src/pyams_content/root/zmi/templates/dashboard.pt:29
 msgid "Quick search..."
 msgstr "Recherche rapide..."
 
+#: src/pyams_content/root/zmi/templates/dashboard.pt:35
 #: src/pyams_content/shared/common/zmi/templates/dashboard.pt:35
-#: src/pyams_content/root/zmi/templates/dashboard.pt:35
 msgid "Advanced search..."
 msgstr "Recherche avancée..."
 
+#: src/pyams_content/root/zmi/templates/dashboard.pt:49
 #: src/pyams_content/shared/common/zmi/templates/dashboard.pt:49
-#: src/pyams_content/root/zmi/templates/dashboard.pt:49
 msgid "You are not actually concerned by any content."
 msgstr "Vous n'êtes actuellement concerné par aucun contenu."
 
-#: src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:2
-msgid ""
-"As a manager, you considerate that this content is complete and can be "
-"published 'as is'."
-msgstr ""
-"En tant que responsable, vous considérez que ce contenu peut être publié en "
-"l'état."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:4
-msgid ""
-"This operation will make the content publicly available (except if "
-"restricted access has been set)."
-msgstr ""
-"Cette opération va rendre le contenu visible de tous, sauf si des "
-"restrictions d'accès lui ont été appliquées."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:2
-msgid ""
-"This new content is going to be created in 'draft' mode, so that you can "
-"complete it before publication."
-msgstr ""
-"Ce nouveau contenu va être créé en statut 'Brouillon' pour vous permettre de "
-"le préparer."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:4
-msgid ""
-"A unique number is also going to be assigned to it. This number will be "
-"shared by all content's versions."
-msgstr ""
-"Un numéro unique va lui être attribué ; il sera permanent, quelle que soit "
-"la version."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-operator-warning.pt:1
-msgid ""
-"WARNING: this request was made by a contributor which is not the owner of "
-"this content."
-msgstr ""
-"ATTENTION : cette demande est formulée par un contributeur habilité qui "
-"n'est pas le propriétaire."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:2
-msgid "You considerate that the currently published must evolve."
-msgstr "Vous considérez que la version actuelle de ce contenu doit évoluer."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:3
-msgid ""
-"By creating a new version, you can update it's content without impacting the "
-"currently published one."
-msgstr ""
-"En créant une nouvelle version, vous pourrez apporter des modifications sans "
-"impacter la version actuelle."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:5
-msgid ""
-"When the new version will be complete, you will be able to make a new "
-"publication request to replace the currently published version (which will "
-"be archived automatically)."
-msgstr ""
-"Lorsque la nouvelle version sera prête, vous demanderez sa publication (et "
-"la version actuelle sera automatiquement archivée)."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-propose-message.pt:1
-msgid ""
-"This publication request is going to be transmitted to a content manager."
-msgstr "Cette demande de publication va être soumise à un responsable."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:2
-msgid "You are going to duplicate a whole content."
-msgstr ""
-"Vous vous apprêtez à dupliquer une version de ce contenu pour en créer un "
-"nouveau."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:3
-msgid ""
-"The new copy is going to be created in 'draft' mode, so that you can modify "
-"it before publication."
-msgstr ""
-"Cette copie va être créée en statut 'Brouillon' pour vous permettre de la "
-"préparer."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:5
-msgid ""
-"A new unique number is also going to be assigned to it. This number will be "
-"shared by all content's versions."
-msgstr ""
-"Un numéro unique lui sera également attribué ; ce numéro sera conservé "
-"pendant toute la vie du contenu, quelle que soit la version."
-
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:130
 #: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:130
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:130
 msgid "Created between"
 msgstr "Créé entre le"
 
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:142
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:168
 #: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:142
 #: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:168
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:142
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:168
 msgid "and"
 msgstr "et le"
 
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:156
 #: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:156
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:156
 msgid "Modified between"
 msgstr "Modifié entre le"
 
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:211
 #: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:214
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:211
 msgid "Tab label"
 msgstr "Libellé de l'onglet"
 
-#: src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:2
-msgid ""
-"As a content manager, you considerate that this content can't be published "
-"'as is'."
-msgstr ""
-"En tant que responsable, vous considérez que ce contenu ne peut pas être "
-"publié en l'état."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:4
-msgid ""
-"The contributor will be notified of this and will be able to update the "
-"content before doing a new publication request."
-msgstr ""
-"Le contributeur qui vous a sollicité va être notifié de votre refus ; il "
-"pourra modifier ce contenu et effectuer une nouvelle demande de publication."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-cancel-archiving-message.pt:1
-msgid ""
-"After cancelling this request, the content will return to it's previous "
-"retired state."
-msgstr "En annulant cette demande, ce contenu va retourner en statut 'Retiré'."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-cancel-retiring-message.pt:1
-msgid ""
-"After cancelling this request, the content will return to it's normal "
-"published state."
-msgstr "En annulant cette demande, ce contenu va retourner en statut 'Publié'."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:2
-msgid ""
-"As a content manager, you considerate that this content should no longer be "
-"published."
-msgstr ""
-"En tant que responsable, vous considérez que ce contenu ne doit plus être "
-"publié."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:4
-msgid ""
-"Retired content won't be visible anymore, but it can be updated and "
-"published again, or archived."
-msgstr ""
-"Après ce retrait, il ne sera plus visible des internautes. Il pourra par "
-"contre être publié à nouveau, archivé, ou modifié en créant une nouvelle "
-"version."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-cancel-propose-message.pt:1
-msgid ""
-"After canceling the request, you will be able to update the content again."
-msgstr "En annulant cette demande, ce contenu pourra à nouveau être modifié."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:2
-msgid ""
-"This content was never published. If you confirm deletion, it won't be "
-"possible to restore it."
-msgstr ""
-"Ce contenu n'a jamais été publié. Une fois supprimé, il ne pourra pas être "
-"récupéré."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:6
-msgid ""
-"The content version is going to be definitely deleted. Will only remain the "
-"currently published version."
-msgstr ""
-"Cette version va être définitivement supprimée, pour revenir à la version "
-"précédente."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-owner-warning.pt:1
-msgid ""
-"RECALL: you are not the owner of the content on which you are intervening."
-msgstr ""
-"ATTENTION : vous intervenez sur un contenu dont vous n'êtes pas le "
-"propriétaire."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:2
-msgid "FOR YOUR INFORMATION"
-msgstr "POUR VOTRE INFORMATION"
-
-#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:5
-msgid "Next step"
-msgstr "Étape suivante"
-
-#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:7
-msgid "Previous step"
-msgstr "Étape précédente"
-
-#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:10
-msgid "With this comment:"
-msgstr "Avec ce commentaire :"
-
-#: src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:2
-msgid "This content is already retired and not visible."
-msgstr "Ce contenu est déjà retiré et n'est plus visible des internautes."
-
-#: src/pyams_content/shared/common/interfaces/types.py:43
-#: src/pyams_content/shared/form/zmi/field.py:156
-msgid "Name"
-msgstr "Nom"
-
-#: src/pyams_content/shared/common/interfaces/types.py:44
-msgid "Name of this data type; must be unique between all data types"
-msgstr "Nom de ce type de donnée ; doit être unique entre tous les types"
-
-#: src/pyams_content/shared/common/interfaces/types.py:50
-msgid "Navigation label"
-msgstr "Libellé de navigation"
-
-#: src/pyams_content/shared/common/interfaces/types.py:51
-msgid "Label used for navigation entries"
-msgstr "Libellé utilisé pour les entrées de navigation"
-
-#: src/pyams_content/shared/common/interfaces/types.py:54
-msgid "Tab-folder label"
-msgstr "Libellé d'un l'onglet"
-
-#: src/pyams_content/shared/common/interfaces/types.py:55
-msgid "Label used to include into tab folder"
-msgstr "Libellé utilisé pour l'affichage du type sous la forme d'un onglet"
-
-#: src/pyams_content/shared/common/interfaces/types.py:58
-msgid "'See also' label"
-msgstr "Libellé 'À voir aussi'"
-
-#: src/pyams_content/shared/common/interfaces/types.py:59
-msgid ""
-"This label can be used when contents of this type will be displayed in a "
-"'See also' entries block"
-msgstr ""
-"Ce libellé peut être utilisé lorsque des contenus de ce type sont affichés "
-"sous la forme d'un bloc 'À voir aussi'"
-
-#: src/pyams_content/shared/common/interfaces/types.py:63
-msgid "'Single value' label"
-msgstr "Libellé 'Valeur unique'"
-
-#: src/pyams_content/shared/common/interfaces/types.py:64
-msgid "Label given to this type when a single value is displayed"
-msgstr "Libellé utilisé pour ce type lorsqu'une seule valeur est affichée"
-
-#: src/pyams_content/shared/common/interfaces/types.py:67
-msgid "'Link to list' label"
-msgstr "Libellé 'Lien vers une liste'"
-
-#: src/pyams_content/shared/common/interfaces/types.py:68
-msgid "Label used to display a link to a list of items of this type"
-msgstr ""
-"Libellé utilisé lorsque l'on crée un lien vers uns liste de contenus de ce "
-"type"
-
-#: src/pyams_content/shared/common/interfaces/types.py:71
-msgid "Next content label"
-msgstr "Libellé du contenu suivant"
-
-#: src/pyams_content/shared/common/interfaces/types.py:72
-msgid "Label used to announce next date for this type"
-msgstr ""
-"Libellé utilisé pour afficher la prochaine date d'un événement pour ce type"
-
-#: src/pyams_content/shared/common/interfaces/types.py:76
-msgid "Pictogram associated with this data type"
-msgstr "Pictogramme associé à ce type"
-
-#: src/pyams_content/shared/common/interfaces/types.py:90
-msgid "Field names"
-msgstr "Champs associés"
-
-#: src/pyams_content/shared/common/interfaces/types.py:91
-msgid "List of fields associated with this data type"
-msgstr "Liste des champs de saisie associés à ce type"
-
-#: src/pyams_content/shared/common/interfaces/types.py:125
-msgid "Data type"
-msgstr "Type du contenu"
-
-#: src/pyams_content/shared/common/interfaces/types.py:126
-msgid "Type of content data"
-msgstr "Type du contenu associé à ce gabarit"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:45
-#: src/pyams_content/root/interfaces/__init__.py:43
-msgid "Webmasters"
-msgstr "Webmestres"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:46
-msgid "Webmasters can handle all contents, including published ones"
-msgstr ""
-"Les webmestres peuvent modifier et gérer tous les contenus, y compris ceux "
-"qui sont publiés et hormis ceux qui sont archivés"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:50
-msgid "Pilots"
-msgstr "Pilotes"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:51
-msgid ""
-"Pilots can handle tool configuration, manage access rules, grant users roles "
-"and manage managers restrictions"
-msgstr ""
-"Les pilotes gèrent la configuration des outils, désignent les responsables "
-"et les contributeurs, et limitent si nécessaire l'intervention des "
-"responsables à certains contenus"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:56
-#: src/pyams_content/shared/common/interfaces/__init__.py:196
-msgid "Managers"
-msgstr "Responsables"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:57
-#: src/pyams_content/shared/common/interfaces/__init__.py:197
-msgid ""
-"Managers can handle main operations in tool's workflow, like publish or "
-"retire contents"
-msgstr ""
-"Les responsables peuvent intervenir sur les étapes importantes du workflow "
-"(comme la publication ou le retrait des contenus), dans la limite des "
-"restrictions qui leur sont imposées"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:62
-#: src/pyams_content/shared/common/interfaces/__init__.py:202
-msgid "Contributors"
-msgstr "Contributeurs"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:63
-msgid "Contributors are users which are allowed to create new contents"
-msgstr "Les contributeurs sont autorisés à créer de nouveaux contenus"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:67
-#: src/pyams_content/shared/common/interfaces/__init__.py:208
-msgid "Designers"
-msgstr "Designers"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:68
-#: src/pyams_content/shared/common/interfaces/__init__.py:209
-msgid "Designers are users which are allowed to manage presentation templates"
-msgstr "Les designers sont autorisés à configurer les modèles de présentation"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:94
-msgid "Workflow name"
-msgstr "Nom du workflow"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:95
-msgid "Name of workflow utility used to manage tool contents"
-msgstr "Nom du workflow qui gère le cycle de vie des contenus de cet outil"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:123
-msgid "Content URL"
-msgstr "URL du contenu"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:124
-msgid ""
-"URL used to access this content; this is important for SEO and should "
-"include most important words describing content; spaces and underscores will "
-"be automatically replaced by hyphens"
-msgstr ""
-"<span>Texte utilisé dans l'URL d'accès au contenu ; cette information est "
-"importante pour le référencement : il faut utiliser des mots essentiels pour "
-"décrire ce contenu.</span><br /><strong>Remarque :</strong> le texte saisi "
-"est converti automatiquement en minuscules, les espaces et traits de "
-"soulignement (« underscores ») sont remplacés automatiquement par des traits "
-"d'union, les lettres accentuées par leur équivalent sans accent, et les mots "
-"de moins de trois lettres sont supprimés."
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:129
-msgid "Version creator"
-msgstr "À l'origine de cette version"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:130
-msgid ""
-"Name of content's version creator. The creator of the first version is also "
-"it's owner."
-msgstr ""
-"Nom du créateur de cette version. Le créateur de la première version d'un "
-"contenu est aussi son propriétaire."
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:134
-msgid "First owner"
-msgstr "Premier propriétaire"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:135
-msgid "Name of content's first version owner"
-msgstr "Nom de l'utilisateur ayant créé la première version"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:139
-msgid "Version creation"
-msgstr "Date de création"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:142
-msgid "Version modifiers"
-msgstr "Intervenants"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:143
-msgid "List of principals who modified this content"
-msgstr "Liste des utilisateurs qui sont intervenus sur cette version"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:146
-msgid "Last modifier"
-msgstr "Dernier intervenant"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:147
-msgid "Last principal who modified this content"
-msgstr "Dernier utilisateur étant intervenu sur ce contenu"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:150
-msgid "Last update"
-msgstr "Dernière modification"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:154
-msgid "Content's header is generally displayed in page header"
-msgstr "Le chapô du contenu est généralement affiché en tête de page"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:159
-msgid "Meta-description"
-msgstr "Méta-description"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:160
-msgid ""
-"The content's description is 'hidden' into HTML's page headers; but it can "
-"be seen, for example, in some search engines results as content's "
-"description; if description is empty, content's header will be used."
-msgstr ""
-"La description du contenu est 'masquée' dans les en-têtes des pages HTML ; "
-"mais on peut la retrouver, par exemple, dans les listes de résultats des "
-"moteurs de recherche ; si la description n'est pas renseignée, le chapô "
-"(s'il existe pour ce contenu) sera utilisé."
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:165
-msgid "Keywords"
-msgstr "Mots-clés"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:166
-msgid "They will be included into HTML pages metadata"
-msgstr "Ces mots-clés seront intégrés dans les métadonnées des pages HTML"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:169
-#: src/pyams_content/shared/site/zmi/folder.py:79
-#: src/pyams_content/shared/site/interfaces/__init__.py:76
-msgid "Notepad"
-msgstr "Bloc-notes"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:170
-#: src/pyams_content/shared/site/zmi/folder.py:80
-#: src/pyams_content/shared/site/interfaces/__init__.py:77
-msgid "Internal information to be known about this content"
-msgstr ""
-"Pour prendre note d'informations internes utiles ou importantes à propos de "
-"ce contenu ; ces notes ne seront pas publiées sur internet."
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:189
-msgid "Content owner"
-msgstr "Propriétaire"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:190
-msgid ""
-"The owner is the creator of content's first version, except if it was "
-"transferred afterwards to another owner"
-msgstr ""
-"Le propriétaire est le créateur de la première version d'un contenu, sauf "
-"lorsque cette propriété a été transférée à un autre utilisateur après coup. "
-"Les contenus archivés ne sont plus transférables."
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:203
-msgid ""
-"Contributors are users which are allowed to update this content in addition "
-"to it's owner"
-msgstr ""
-"Les contributeurs sont autorisés, en plus du propriétaire, à modifier ce "
-"contenu"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:213
-msgid "Readers"
-msgstr "Relecteurs"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:214
-msgid ""
-"Readers are users which are asked to verify and comment contents before they "
-"are published"
-msgstr ""
-"Les relecteurs sont des utilisateurs qui sont sollicités pour vérifier et "
-"commenter un contenu avant sa publication"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:219
-msgid "Guests"
-msgstr "Invités"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:220
-msgid ""
-"Guests are users which are allowed to view contents with restricted access"
-msgstr ""
-"Les invités sont autorisés à consulter des contenus dont l'accès a été "
-"restreint"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:243
-msgid "Principal ID"
-msgstr "ID utilisateur"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:282
-#: src/pyams_content/shared/common/interfaces/__init__.py:307
-msgid "Publication checks"
-msgstr "Activer le tunnel de publication"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:283
-msgid ""
-"If 'yes', this contributor will have to confirm that contents have been "
-"previewed and checked before asking for publication"
-msgstr ""
-"Si 'oui', ce contributeur devra confirmer qu'il a bien prévisualisé et "
-"audité chaque contenu avant de pouvoir effectuer une demande de publication"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:308
-msgid ""
-"If 'yes', this manager will have to confirm that contents have been "
-"previewed and checked before publishing a content"
-msgstr ""
-"Si 'oui', ce responsable devra confirmer qu'il a bien prévisualisé et audité "
-"chaque contenu avant de pouvoir effectuer une publication"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:313
-msgid "Restricted contents"
-msgstr "Accès restreints"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:314
-msgid ""
-"If 'yes', this manager will get restricted access to manage contents based "
-"on selected settings"
-msgstr ""
-"Si 'oui', ce responsable n'aura qu'un accès restreint à certains contenus en "
-"fonction de paramètres spécifiques"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:319
-msgid "Selected owners"
-msgstr "Propriétaires"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:320
-msgid "Manager will have access to contents owned by these principals"
-msgstr ""
-"Le responsable n'aura accès qu'aux contenus dont ces utilisateurs sont "
-"propriétaires"
-
-#: src/pyams_content/shared/form/__init__.py:97
-msgid "Form fields"
-msgstr "Champs de saisie"
-
-#: src/pyams_content/shared/form/__init__.py:98
-msgid "no field defined"
-msgstr "aucun champ défini"
-
-#: src/pyams_content/shared/form/handler.py:80
-msgid "Mailto form handler"
-msgstr "Envoi des données par mail"
-
-#: src/pyams_content/shared/form/handler.py:44
-msgid "No selected handler..."
-msgstr "Aucun gestionnaire sélectionné"
-
 #: src/pyams_content/shared/form/field.py:146
 msgid "Text"
 msgstr "Texte simple"
@@ -3481,61 +3364,21 @@
 msgid "List"
 msgstr "Choix multiples dans une liste"
 
-#: src/pyams_content/shared/form/zmi/properties.py:41
-msgid "Main form settings"
-msgstr "Paramètres du formulaire"
-
-#: src/pyams_content/shared/form/zmi/properties.py:65
-msgid "Form handler settings"
-msgstr "Paramètres du gestionnaire"
-
-#: src/pyams_content/shared/form/zmi/__init__.py:44
-msgid "This form"
-msgstr "Ce formulaire"
-
-#: src/pyams_content/shared/form/zmi/__init__.py:63
-#: src/pyams_content/shared/form/zmi/__init__.py:74
-msgid "Add form"
-msgstr "Ajouter un formulaire"
-
-#: src/pyams_content/shared/form/zmi/__init__.py:54
-#, python-format
-msgid "Form « {title} »"
-msgstr "Formulaire « {title} »"
-
-#: src/pyams_content/shared/form/zmi/field.py:69
-msgid "Form fields..."
+#: src/pyams_content/shared/form/handler.py:80
+msgid "Mailto form handler"
+msgstr "Envoi des données par mail"
+
+#: src/pyams_content/shared/form/handler.py:44
+msgid "No selected handler..."
+msgstr "Aucun gestionnaire sélectionné"
+
+#: src/pyams_content/shared/form/__init__.py:97
+msgid "Form fields"
 msgstr "Champs de saisie"
 
-#: src/pyams_content/shared/form/zmi/field.py:178
-#: src/pyams_content/shared/form/interfaces/__init__.py:55
-msgid "Field type"
-msgstr "Type de champ"
-
-#: src/pyams_content/shared/form/zmi/field.py:211
-msgid "Form fields list"
-msgstr "Liste des champs du formulaire"
-
-#: src/pyams_content/shared/form/zmi/field.py:234
-#: src/pyams_content/shared/form/zmi/field.py:247
-msgid "Add form field"
-msgstr "Ajouter un champ"
-
-#: src/pyams_content/shared/form/zmi/field.py:285
-msgid "Edit form field properties"
-msgstr "Propriétés du champ"
-
-#: src/pyams_content/shared/form/zmi/field.py:187
-msgid "-- unknown field type --"
-msgstr "-- type de champ inconnu --"
-
-#: src/pyams_content/shared/form/zmi/field.py:122
-msgid "No currently defined form field."
-msgstr "Ce formulaire ne comporte aucun champ."
-
-#: src/pyams_content/shared/form/zmi/field.py:269
-msgid "Specified name is already used!"
-msgstr "Le nom indiqué pour ce champ est déjà utilisé !"
+#: src/pyams_content/shared/form/__init__.py:98
+msgid "no field defined"
+msgstr "aucun champ défini"
 
 #: src/pyams_content/shared/form/interfaces/__init__.py:33
 msgid "Form"
@@ -3550,6 +3393,11 @@
 msgstr ""
 "Nom interne du champ ; ce nom doit être unique pour un formulaire donné"
 
+#: src/pyams_content/shared/form/interfaces/__init__.py:55
+#: src/pyams_content/shared/form/zmi/field.py:178
+msgid "Field type"
+msgstr "Type de champ"
+
 #: src/pyams_content/shared/form/interfaces/__init__.py:56
 msgid "Selected field type"
 msgstr "Type de champ proposé à l'internaute"
@@ -3679,23 +3527,61 @@
 msgid "Name of data recipient"
 msgstr "Nom du destinataire des messages"
 
-#: src/pyams_content/shared/news/zmi/__init__.py:44
-msgid "This news topic"
-msgstr "Cette actualité"
-
-#: src/pyams_content/shared/news/zmi/__init__.py:63
-#: src/pyams_content/shared/news/zmi/__init__.py:74
-msgid "Add news topic"
-msgstr "Ajouter une actualité"
-
-#: src/pyams_content/shared/news/zmi/__init__.py:54
+#: src/pyams_content/shared/form/zmi/properties.py:41
+msgid "Main form settings"
+msgstr "Paramètres du formulaire"
+
+#: src/pyams_content/shared/form/zmi/properties.py:65
+msgid "Form handler settings"
+msgstr "Paramètres du gestionnaire"
+
+#: src/pyams_content/shared/form/zmi/field.py:69
+msgid "Form fields..."
+msgstr "Champs de saisie"
+
+#: src/pyams_content/shared/form/zmi/field.py:156
+#: src/pyams_content/shared/common/interfaces/types.py:43
+msgid "Name"
+msgstr "Nom"
+
+#: src/pyams_content/shared/form/zmi/field.py:211
+msgid "Form fields list"
+msgstr "Liste des champs du formulaire"
+
+#: src/pyams_content/shared/form/zmi/field.py:234
+#: src/pyams_content/shared/form/zmi/field.py:247
+msgid "Add form field"
+msgstr "Ajouter un champ"
+
+#: src/pyams_content/shared/form/zmi/field.py:285
+msgid "Edit form field properties"
+msgstr "Propriétés du champ"
+
+#: src/pyams_content/shared/form/zmi/field.py:187
+msgid "-- unknown field type --"
+msgstr "-- type de champ inconnu --"
+
+#: src/pyams_content/shared/form/zmi/field.py:122
+msgid "No currently defined form field."
+msgstr "Ce formulaire ne comporte aucun champ."
+
+#: src/pyams_content/shared/form/zmi/field.py:269
+msgid "Specified name is already used!"
+msgstr "Le nom indiqué pour ce champ est déjà utilisé !"
+
+#: src/pyams_content/shared/form/zmi/__init__.py:44
+msgid "This form"
+msgstr "Ce formulaire"
+
+#: src/pyams_content/shared/form/zmi/__init__.py:63
+#: src/pyams_content/shared/form/zmi/__init__.py:74
+msgid "Add form"
+msgstr "Ajouter un formulaire"
+
+#: src/pyams_content/shared/form/zmi/__init__.py:54
 #, python-format
-msgid "News topic « {title} »"
-msgstr "Actualité « {title} »"
-
-#: src/pyams_content/shared/news/interfaces/__init__.py:29
-msgid "News topic"
-msgstr "Actualité"
+msgid "Form « {title} »"
+msgstr "Formulaire « {title} »"
 
 #: src/pyams_content/shared/view/merge.py:59
 msgid "Concatenate views items in order"
@@ -3739,126 +3625,6 @@
 "Trier tous les résultats sur la date de première publication (du plus récent "
 "au plus ancien)"
 
-#: src/pyams_content/shared/view/zmi/properties.py:45
-msgid "Main view settings"
-msgstr "Paramètres de la vue"
-
-#: src/pyams_content/shared/view/zmi/__init__.py:44
-msgid "This view"
-msgstr "Cette vue"
-
-#: src/pyams_content/shared/view/zmi/__init__.py:63
-#: src/pyams_content/shared/view/zmi/__init__.py:73
-msgid "Add view"
-msgstr "Ajouter une vue"
-
-#: src/pyams_content/shared/view/zmi/__init__.py:54
-#, python-format
-msgid "View « {title} »"
-msgstr "Vue « {title} »"
-
-#: src/pyams_content/shared/view/zmi/theme.py:67
-msgid "View tags settings"
-msgstr "Paramétrage des tags de la vue"
-
-#: src/pyams_content/shared/view/zmi/theme.py:113
-msgid "View themes settings"
-msgstr "Paramétrage des thèmes de la vue"
-
-#: src/pyams_content/shared/view/zmi/theme.py:159
-msgid "View collections settings"
-msgstr "Paramétrage des collections de la vue"
-
-#: src/pyams_content/shared/view/zmi/reference.py:52
-msgid "References..."
-msgstr "Références"
-
-#: src/pyams_content/shared/view/zmi/reference.py:63
-msgid "View internal references settings"
-msgstr "Références internes de la vue"
-
-#: src/pyams_content/shared/view/portlet/__init__.py:89
-msgid "View items"
-msgstr "Contenu d'une vue"
-
-#: src/pyams_content/shared/view/portlet/interfaces.py:41
-msgid "Display context"
-msgstr "Contexte d'affichage"
-
-#: src/pyams_content/shared/view/portlet/interfaces.py:42
-msgid "Content context"
-msgstr "Contexte du contenu"
-
-#: src/pyams_content/shared/view/portlet/interfaces.py:59
-msgid "Selected views"
-msgstr "Vue(s) sélectionnée(s)"
-
-#: src/pyams_content/shared/view/portlet/interfaces.py:60
-msgid ""
-"Reference to the view(s) from which items are extracted; you can combine "
-"several views together and specify in which order they should be mixed"
-msgstr ""
-"Références des vues dont sont extraits les résultats ; vous pouvez combiner "
-"plusieurs vues ensemble en indiquant la façon dont leurs résultats seront "
-"fusionnés"
-
-#: src/pyams_content/shared/view/portlet/interfaces.py:69
-msgid "Views context"
-msgstr "Contexte des vues"
-
-#: src/pyams_content/shared/view/portlet/interfaces.py:70
-msgid ""
-"When searching for items, a view receives a \"context\" which is the object "
-"from which settings can be extracted; this context can be the \"display\" "
-"context or the \"content\" context: when the portlet is used to display the "
-"site root, a site manager or a site folder, both are identical; when the "
-"portlet is used to display a shared content, the \"content\" context is the "
-"displayed content, while the \"display\" context is the container (site "
-"root, site manager or site folder) into which content is displayed"
-msgstr ""
-"Pour extraire sa liste de résultats, chaque vue est associée à un \"contexte"
-"\", qui est l'objet dont sont extraits les critères de recherche ; ce "
-"contexte peut être le contexte \"d'affichage\" ou le contexte \"du contenu"
-"\" : lorsque ce composant est associé à la page d'accueil, à un site ou à "
-"une rubrique, ces deux contextes sont identiques ; par contre, lorsque ce "
-"composant est associé à un contenu partagé, le contexte de contenu est le "
-"contenu partagé, tandis que le contexte d'affichage est le conteneur (page "
-"d'accueil, site ou rubrique) au sein duquel le contenu est affiché."
-
-#: src/pyams_content/shared/view/portlet/interfaces.py:81
-msgid "Views merge mode"
-msgstr "Mode de fusion des vues"
-
-#: src/pyams_content/shared/view/portlet/interfaces.py:82
-msgid ""
-"If you select several views, you can select \"merge\" mode, which is the way "
-"used to merge items from several views"
-msgstr ""
-"Si vous sélectionnez plusieurs vues, vous devez indiquer la façon dont leurs "
-"résultats seront fusionnés; ce paramètre est sans effet lorsque vous ne "
-"sélectionnez qu'une seule vue, car l'ordre des résultats est alors basé "
-"uniquement sur les paramètres de la vue."
-
-#: src/pyams_content/shared/view/portlet/interfaces.py:91
-#: src/pyams_content/shared/view/interfaces/__init__.py:102
-msgid "Results count limit"
-msgstr "Limite de résultats"
-
-#: src/pyams_content/shared/view/portlet/interfaces.py:92
-msgid ""
-"Maximum number of results that the component may extract from merged views"
-msgstr ""
-"Nombre maximal de résultats que le composant doit extraire des vues "
-"fusionnées"
-
-#: src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:14
-msgid "No result found"
-msgstr "Aucun résultat à afficher."
-
-#: src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:15
-msgid "No selected view"
-msgstr "Aucune vue sélectionnée."
-
 #: src/pyams_content/shared/view/interfaces/__init__.py:34
 msgid "View"
 msgstr "Vue"
@@ -3871,12 +3637,6 @@
 msgid "Include selected internal references only if empty"
 msgstr "Inclure les références internes seulement lorsque la vue est vide"
 
-#: src/pyams_content/shared/view/interfaces/__init__.py:43
-#: src/pyams_content/interfaces/__init__.py:113
-#: src/pyams_content/features/review/interfaces.py:74
-msgid "Creation date"
-msgstr "Date de création"
-
 #: src/pyams_content/shared/view/interfaces/__init__.py:44
 msgid "Last update date"
 msgstr "Date de dernière modification"
@@ -3891,7 +3651,7 @@
 
 #: src/pyams_content/shared/view/interfaces/__init__.py:64
 msgid "Select context type?"
-msgstr "Gabarit du contexte ?"
+msgstr "Même gabarit que le contexte ?"
 
 #: src/pyams_content/shared/view/interfaces/__init__.py:65
 msgid "If 'yes', content type will be extracted from context"
@@ -3911,7 +3671,7 @@
 
 #: src/pyams_content/shared/view/interfaces/__init__.py:77
 msgid "Select context data type?"
-msgstr "Type du contexte ?"
+msgstr "Mëme type que le contexte ?"
 
 #: src/pyams_content/shared/view/interfaces/__init__.py:78
 msgid ""
@@ -3951,6 +3711,11 @@
 "Si 'non', le tri se fera en ordre \"naturel\", donc du plus ancien au plus "
 "récent"
 
+#: src/pyams_content/shared/view/interfaces/__init__.py:102
+#: src/pyams_content/shared/view/portlet/interfaces.py:91
+msgid "Results count limit"
+msgstr "Limite de résultats"
+
 #: src/pyams_content/shared/view/interfaces/__init__.py:103
 msgid "Maximum number of results that the view may retrieve"
 msgstr "Nombre maximal de résultats que la vue doit renvoyer"
@@ -4017,6 +3782,1651 @@
 msgid "Other collections"
 msgstr "Autres collections"
 
+#: src/pyams_content/shared/view/portlet/__init__.py:87
+msgid "View items"
+msgstr "Contenu d'une vue"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:41
+msgid "Display context"
+msgstr "Contexte d'affichage"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:42
+msgid "Content context"
+msgstr "Contexte du contenu"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:59
+msgid "Selected views"
+msgstr "Vue(s) sélectionnée(s)"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:60
+msgid ""
+"Reference to the view(s) from which items are extracted; you can combine "
+"several views together and specify in which order they should be mixed"
+msgstr ""
+"Références des vues dont sont extraits les résultats ; vous pouvez combiner "
+"plusieurs vues ensemble en indiquant la façon dont leurs résultats seront "
+"fusionnés"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:69
+msgid "Views context"
+msgstr "Contexte des vues"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:70
+msgid ""
+"When searching for items, a view receives a \"context\" which is the object "
+"from which settings can be extracted; this context can be the \"display\" "
+"context or the \"content\" context: when the portlet is used to display the "
+"site root, a site manager or a site folder, both are identical; when the "
+"portlet is used to display a shared content, the \"content\" context is the "
+"displayed content, while the \"display\" context is the container (site "
+"root, site manager or site folder) into which content is displayed"
+msgstr ""
+"Pour extraire sa liste de résultats, chaque vue est associée à un \"contexte"
+"\", qui est l'objet dont sont extraits les critères de recherche ; ce "
+"contexte peut être le contexte \"d'affichage\" ou le contexte \"du contenu"
+"\" : lorsque ce composant est associé à la page d'accueil, à un site ou à "
+"une rubrique, ces deux contextes sont identiques ; par contre, lorsque ce "
+"composant est associé à un contenu partagé, le contexte de contenu est le "
+"contenu partagé, tandis que le contexte d'affichage est le conteneur (page "
+"d'accueil, site ou rubrique) au sein duquel le contenu est affiché."
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:81
+msgid "Views merge mode"
+msgstr "Mode de fusion des vues"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:82
+msgid ""
+"If you select several views, you can select \"merge\" mode, which is the way "
+"used to merge items from several views"
+msgstr ""
+"Si vous sélectionnez plusieurs vues, vous devez indiquer la façon dont leurs "
+"résultats seront fusionnés; ce paramètre est sans effet lorsque vous ne "
+"sélectionnez qu'une seule vue, car l'ordre des résultats est alors basé "
+"uniquement sur les paramètres de la vue."
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:92
+msgid ""
+"Maximum number of results that the component may extract from merged views"
+msgstr ""
+"Nombre maximal de résultats que le composant doit extraire des vues "
+"fusionnées"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:95
+msgid "Starting from..."
+msgstr "A partir de"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:96
+msgid "You can skip several results if specifying an integer value here..."
+msgstr ""
+"Vous pouvez écarter un certain nombre de résultats, en indiquant ici la "
+"position du premier élément à prendre en compte"
+
+#: src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:8
+msgid "Selected views:"
+msgstr "Vue(s) sélectionnée(s) : "
+
+#: src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:9
+msgid "none"
+msgstr "aucune"
+
+#: src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:15
+msgid "Extracted contents:"
+msgstr "Contenus extraits :"
+
+#: src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:16
+msgid "none (no selected view)"
+msgstr "aucun (aucune vue sélectionnée)"
+
+#: src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:22
+msgid "No result found"
+msgstr "aucun"
+
+#: src/pyams_content/shared/view/zmi/properties.py:45
+msgid "Main view settings"
+msgstr "Paramètres de la vue"
+
+#: src/pyams_content/shared/view/zmi/__init__.py:44
+msgid "This view"
+msgstr "Cette vue"
+
+#: src/pyams_content/shared/view/zmi/__init__.py:63
+#: src/pyams_content/shared/view/zmi/__init__.py:73
+msgid "Add view"
+msgstr "Ajouter une vue"
+
+#: src/pyams_content/shared/view/zmi/__init__.py:54
+#, python-format
+msgid "View « {title} »"
+msgstr "Vue « {title} »"
+
+#: src/pyams_content/shared/view/zmi/theme.py:67
+msgid "View tags settings"
+msgstr "Paramétrage des tags de la vue"
+
+#: src/pyams_content/shared/view/zmi/theme.py:113
+msgid "View themes settings"
+msgstr "Paramétrage des thèmes de la vue"
+
+#: src/pyams_content/shared/view/zmi/theme.py:159
+msgid "View collections settings"
+msgstr "Paramétrage des collections de la vue"
+
+#: src/pyams_content/shared/view/zmi/reference.py:52
+msgid "References..."
+msgstr "Références"
+
+#: src/pyams_content/shared/view/zmi/reference.py:63
+msgid "View internal references settings"
+msgstr "Références internes de la vue"
+
+#: src/pyams_content/shared/blog/interfaces/__init__.py:30
+msgid "Blog post"
+msgstr "Article (dans un blog)"
+
+#: src/pyams_content/shared/blog/interfaces/__init__.py:68
+#: src/pyams_content/shared/common/interfaces/__init__.py:157
+#: src/pyams_content/shared/site/interfaces/__init__.py:72
+#: src/pyams_content/shared/site/interfaces/__init__.py:117
+msgid "Meta-description"
+msgstr "Méta-description"
+
+#: src/pyams_content/shared/blog/interfaces/__init__.py:69
+msgid ""
+"The blog's description is 'hidden' into HTML's page headers; but it can be "
+"seen, for example, in some search engines results as content's description; "
+"if description is empty, content's header will be used."
+msgstr ""
+"La méta-description du blog est 'masquée' dans les en-têtes des pages HTML ; "
+"mais on peut la retrouver, par exemple, dans les listes de résultats des "
+"moteurs de recherche ; si la description n'est pas renseignée, le chapô "
+"(s'il existe pour ce contenu) sera utilisé."
+
+#: src/pyams_content/shared/blog/interfaces/__init__.py:74
+#: src/pyams_content/shared/common/interfaces/__init__.py:169
+#: src/pyams_content/shared/site/interfaces/__init__.py:78
+#: src/pyams_content/shared/site/interfaces/__init__.py:123
+#: src/pyams_content/shared/site/zmi/folder.py:74
+msgid "Notepad"
+msgstr "Bloc-notes"
+
+#: src/pyams_content/shared/blog/interfaces/__init__.py:75
+#: src/pyams_content/shared/common/interfaces/__init__.py:170
+#: src/pyams_content/shared/site/interfaces/__init__.py:79
+#: src/pyams_content/shared/site/interfaces/__init__.py:124
+#: src/pyams_content/shared/site/zmi/folder.py:75
+msgid "Internal information to be known about this content"
+msgstr ""
+"Pour prendre note d'informations internes utiles ou importantes à propos de "
+"ce contenu ; ces notes ne seront pas publiées sur internet."
+
+#: src/pyams_content/shared/blog/zmi/manager.py:57
+msgid "Blog management"
+msgstr "Gérer ce blog"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:80
+#: src/pyams_content/shared/blog/zmi/manager.py:94
+msgid "Add blog manager"
+msgstr "Ajouter un blog"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:93
+msgid "Blog manager"
+msgstr "Blog"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:148
+msgid "Blog properties"
+msgstr "Propriétés du blog"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:163
+#: src/pyams_content/shared/blog/zmi/manager.py:175
+#: src/pyams_content/shared/site/zmi/container.py:104
+#: src/pyams_content/shared/site/zmi/container.py:116
+msgid "Publication dates..."
+msgstr "Dates de publication"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:189
+#: src/pyams_content/shared/site/zmi/container.py:130
+msgid "Update publication dates"
+msgstr "Dates de publication"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:124
+#: src/pyams_content/shared/site/zmi/manager.py:163
+msgid "You must provide a short name for default server language!"
+msgstr "Vous devez fournir un nom court pour la langue par défaut du serveur !"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:128
+msgid "Specified blog manager name is already used!"
+msgstr "Le nom indiqué pour ce blog existe déjà !"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:132
+msgid "A blog manager is already registered with this name!!"
+msgstr "Un blog est déjà inscrit dans le registre avec ce nom !"
+
+#: src/pyams_content/shared/blog/zmi/__init__.py:52
+msgid "This blog post"
+msgstr "Cet article"
+
+#: src/pyams_content/shared/blog/zmi/__init__.py:71
+#: src/pyams_content/shared/blog/zmi/__init__.py:81
+msgid "Add blog post"
+msgstr "Ajouter un article"
+
+#: src/pyams_content/shared/blog/zmi/__init__.py:62
+#, python-format
+msgid "Blog post « {title} »"
+msgstr "Article « {title} »"
+
+#: src/pyams_content/shared/common/__init__.py:244
+#: src/pyams_content/shared/common/zmi/properties.py:69
+#: src/pyams_content/shared/common/zmi/manager.py:96
+msgid "Properties"
+msgstr "Propriétés"
+
+#: src/pyams_content/shared/common/__init__.py:154
+#: src/pyams_content/shared/common/__init__.py:162
+#, python-format
+msgid "{date} by {principal}"
+msgstr "{date} par {principal}"
+
+#: src/pyams_content/shared/common/__init__.py:267
+#, python-format
+msgid "title length should be between 40 and 66 characters ({length} actually)"
+msgstr ""
+"Le titre devrait être composé de 40 à 66 caractères ({length} actuellement)"
+
+#: src/pyams_content/shared/common/interfaces/types.py:44
+msgid "Name of this data type; must be unique between all data types"
+msgstr "Nom de ce type de donnée ; doit être unique entre tous les types"
+
+#: src/pyams_content/shared/common/interfaces/types.py:50
+msgid "Navigation label"
+msgstr "Libellé de navigation"
+
+#: src/pyams_content/shared/common/interfaces/types.py:51
+msgid "Label used for navigation entries"
+msgstr "Libellé utilisé pour les entrées de navigation"
+
+#: src/pyams_content/shared/common/interfaces/types.py:54
+msgid "Tab-folder label"
+msgstr "Libellé d'un l'onglet"
+
+#: src/pyams_content/shared/common/interfaces/types.py:55
+msgid "Label used to include into tab folder"
+msgstr "Libellé utilisé pour l'affichage du type sous la forme d'un onglet"
+
+#: src/pyams_content/shared/common/interfaces/types.py:58
+msgid "'See also' label"
+msgstr "Libellé 'À voir aussi'"
+
+#: src/pyams_content/shared/common/interfaces/types.py:59
+msgid ""
+"This label can be used when contents of this type will be displayed in a "
+"'See also' entries block"
+msgstr ""
+"Ce libellé peut être utilisé lorsque des contenus de ce type sont affichés "
+"sous la forme d'un bloc 'À voir aussi'"
+
+#: src/pyams_content/shared/common/interfaces/types.py:63
+msgid "'Single value' label"
+msgstr "Libellé 'Valeur unique'"
+
+#: src/pyams_content/shared/common/interfaces/types.py:64
+msgid "Label given to this type when a single value is displayed"
+msgstr "Libellé utilisé pour ce type lorsqu'une seule valeur est affichée"
+
+#: src/pyams_content/shared/common/interfaces/types.py:67
+msgid "'Link to list' label"
+msgstr "Libellé 'Lien vers une liste'"
+
+#: src/pyams_content/shared/common/interfaces/types.py:68
+msgid "Label used to display a link to a list of items of this type"
+msgstr ""
+"Libellé utilisé lorsque l'on crée un lien vers uns liste de contenus de ce "
+"type"
+
+#: src/pyams_content/shared/common/interfaces/types.py:71
+msgid "Next content label"
+msgstr "Libellé du contenu suivant"
+
+#: src/pyams_content/shared/common/interfaces/types.py:72
+msgid "Label used to announce next date for this type"
+msgstr ""
+"Libellé utilisé pour afficher la prochaine occurence d'un contenu de ce type"
+
+#: src/pyams_content/shared/common/interfaces/types.py:76
+msgid "Pictogram associated with this data type"
+msgstr "Pictogramme associé à ce type"
+
+#: src/pyams_content/shared/common/interfaces/types.py:90
+msgid "Field names"
+msgstr "Champs associés"
+
+#: src/pyams_content/shared/common/interfaces/types.py:91
+msgid "List of fields associated with this data type"
+msgstr "Liste des champs de saisie associés à ce type"
+
+#: src/pyams_content/shared/common/interfaces/types.py:125
+msgid "Data type"
+msgstr "Type du contenu"
+
+#: src/pyams_content/shared/common/interfaces/types.py:126
+msgid "Type of content data"
+msgstr "Type du contenu associé à ce gabarit"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:42
+msgid "Webmasters can handle all contents, including published ones"
+msgstr ""
+"Les webmestres peuvent modifier et gérer tous les contenus, y compris ceux "
+"qui sont publiés et hormis ceux qui sont archivés"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:46
+msgid "Pilots"
+msgstr "Pilotes"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:47
+msgid ""
+"Pilots can handle tool configuration, manage access rules, grant users roles "
+"and manage managers restrictions"
+msgstr ""
+"Les pilotes gèrent la configuration des outils, désignent les responsables "
+"et les contributeurs, et limitent si nécessaire l'intervention des "
+"responsables à certains contenus"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:52
+#: src/pyams_content/shared/common/interfaces/__init__.py:196
+msgid "Managers"
+msgstr "Responsables"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:53
+#: src/pyams_content/shared/common/interfaces/__init__.py:197
+msgid ""
+"Managers can handle main operations in tool's workflow, like publish or "
+"retire contents"
+msgstr ""
+"Les responsables peuvent intervenir sur les étapes importantes du workflow "
+"(comme la publication ou le retrait des contenus), dans la limite des "
+"restrictions qui leur sont imposées"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:58
+#: src/pyams_content/shared/common/interfaces/__init__.py:202
+msgid "Contributors"
+msgstr "Contributeurs"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:59
+msgid "Contributors are users which are allowed to create new contents"
+msgstr "Les contributeurs sont autorisés à créer de nouveaux contenus"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:63
+#: src/pyams_content/shared/common/interfaces/__init__.py:208
+msgid "Designers"
+msgstr "Designers"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:64
+#: src/pyams_content/shared/common/interfaces/__init__.py:209
+msgid "Designers are users which are allowed to manage presentation templates"
+msgstr "Les designers sont autorisés à configurer les modèles de présentation"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:90
+msgid "Workflow name"
+msgstr "Nom du workflow"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:91
+msgid "Name of workflow utility used to manage tool contents"
+msgstr "Nom du workflow qui gère le cycle de vie des contenus de cet outil"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:119
+msgid "Content URL"
+msgstr "URL du contenu"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:120
+msgid ""
+"URL used to access this content; this is important for SEO and should "
+"include most important words describing content; spaces and underscores will "
+"be automatically replaced by hyphens"
+msgstr ""
+"<span>Texte utilisé dans l'URL d'accès au contenu ; cette information est "
+"importante pour le référencement : il faut utiliser des mots essentiels pour "
+"décrire ce contenu.</span><br /><strong>Remarque :</strong> le texte saisi "
+"est converti automatiquement en minuscules, les espaces et traits de "
+"soulignement (« underscores ») sont remplacés automatiquement par des traits "
+"d'union, les lettres accentuées par leur équivalent sans accent, et les mots "
+"de moins de trois lettres sont supprimés."
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:127
+msgid "Version creator"
+msgstr "À l'origine de cette version"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:128
+msgid ""
+"Name of content's version creator. The creator of the first version is also "
+"it's owner."
+msgstr ""
+"Nom du créateur de cette version. Le créateur de la première version d'un "
+"contenu est aussi son propriétaire."
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:132
+msgid "First owner"
+msgstr "Premier propriétaire"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:133
+msgid "Name of content's first version owner"
+msgstr "Nom de l'utilisateur ayant créé la première version"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:137
+msgid "Version creation"
+msgstr "Date de création"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:140
+msgid "Version modifiers"
+msgstr "Intervenants"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:141
+msgid "List of principals who modified this content"
+msgstr "Liste des utilisateurs qui sont intervenus sur cette version"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:144
+msgid "Last modifier"
+msgstr "Dernier intervenant"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:145
+msgid "Last principal who modified this content"
+msgstr "Dernier utilisateur étant intervenu sur ce contenu"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:148
+msgid "Last update"
+msgstr "Dernière modification"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:152
+msgid "Content's header is generally displayed in page header"
+msgstr "Le chapô du contenu est généralement affiché en tête de page"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:158
+msgid ""
+"The content's description is 'hidden' into HTML's page headers; but it can "
+"be seen, for example, in some search engines results as content's "
+"description; if description is empty, content's header will be used."
+msgstr ""
+"La méta-description du contenu est 'masquée' dans les en-têtes des pages "
+"HTML ; mais on peut la retrouver, par exemple, dans les listes de résultats "
+"des moteurs de recherche ; si la description n'est pas renseignée, le chapô "
+"(s'il existe pour ce contenu) sera utilisé."
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:165
+msgid "Keywords"
+msgstr "Mots-clés"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:166
+msgid "They will be included into HTML pages metadata"
+msgstr "Ces mots-clés seront intégrés dans les métadonnées des pages HTML"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:189
+msgid "Content owner"
+msgstr "Propriétaire"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:190
+msgid ""
+"The owner is the creator of content's first version, except if it was "
+"transferred afterwards to another owner"
+msgstr ""
+"Le propriétaire est le créateur de la première version d'un contenu, sauf "
+"lorsque cette propriété a été transférée à un autre utilisateur après coup. "
+"Les contenus archivés ne sont plus transférables."
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:203
+msgid ""
+"Contributors are users which are allowed to update this content in addition "
+"to it's owner"
+msgstr ""
+"Les contributeurs sont autorisés, en plus du propriétaire, à modifier ce "
+"contenu"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:213
+msgid "Readers"
+msgstr "Relecteurs"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:214
+msgid ""
+"Readers are users which are asked to verify and comment contents before they "
+"are published"
+msgstr ""
+"Les relecteurs sont des utilisateurs qui sont sollicités pour vérifier et "
+"commenter un contenu avant sa publication"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:219
+msgid "Guests"
+msgstr "Invités"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:220
+msgid ""
+"Guests are users which are allowed to view contents with restricted access"
+msgstr ""
+"Les invités sont autorisés à consulter des contenus dont l'accès a été "
+"restreint"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:243
+msgid "Principal ID"
+msgstr "ID utilisateur"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:282
+#: src/pyams_content/shared/common/interfaces/__init__.py:307
+msgid "Publication checks"
+msgstr "Activer le tunnel de publication"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:283
+msgid ""
+"If 'yes', this contributor will have to confirm that contents have been "
+"previewed and checked before asking for publication"
+msgstr ""
+"Si 'oui', ce contributeur devra confirmer qu'il a bien prévisualisé et "
+"audité chaque contenu avant de pouvoir effectuer une demande de publication"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:308
+msgid ""
+"If 'yes', this manager will have to confirm that contents have been "
+"previewed and checked before publishing a content"
+msgstr ""
+"Si 'oui', ce responsable devra confirmer qu'il a bien prévisualisé et audité "
+"chaque contenu avant de pouvoir effectuer une publication"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:313
+msgid "Restricted contents"
+msgstr "Accès restreints"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:314
+msgid ""
+"If 'yes', this manager will get restricted access to manage contents based "
+"on selected settings"
+msgstr ""
+"Si 'oui', ce responsable n'aura qu'un accès restreint à certains contenus en "
+"fonction de paramètres spécifiques"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:319
+msgid "Selected owners"
+msgstr "Propriétaires"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:320
+msgid "Manager will have access to contents owned by these principals"
+msgstr ""
+"Le responsable n'aura accès qu'aux contenus dont ces utilisateurs sont "
+"propriétaires"
+
+#: src/pyams_content/shared/common/portlet/title.py:38
+msgid "Content title"
+msgstr "Titre du gabarit"
+
+#: src/pyams_content/shared/common/portlet/head.py:46
+msgid "Content header"
+msgstr "En-tête de gabarit"
+
+#: src/pyams_content/shared/common/portlet/interfaces/__init__.py:25
+msgid "Display breadcrumbs?"
+msgstr "Afficher le fil d'Ariane ?"
+
+#: src/pyams_content/shared/common/portlet/interfaces/__init__.py:29
+msgid "Display title?"
+msgstr "Afficher le titre ?"
+
+#: src/pyams_content/shared/common/portlet/interfaces/__init__.py:33
+msgid "Display tags?"
+msgstr "Afficher les tags ?"
+
+#: src/pyams_content/shared/common/portlet/interfaces/__init__.py:37
+msgid "Display header?"
+msgstr "Afficher le chapô ?"
+
+#: src/pyams_content/shared/common/portlet/interfaces/__init__.py:41
+msgid "Display specificities?"
+msgstr "Afficher les spécificités ?"
+
+#: src/pyams_content/shared/common/portlet/interfaces/__init__.py:42
+msgid "If 'no', specific content's informations won't be displayed..."
+msgstr ""
+"Si 'non', les informations spécifiques que le gabarit est susceptible "
+"d'intégrer dans l'en-tête de page ne seront pas affichées"
+
+#: src/pyams_content/shared/common/portlet/zmi/templates/head-preview.pt:4
+msgid "Display breadcrumbs"
+msgstr "Afficher le fil d'Ariane"
+
+#: src/pyams_content/shared/common/portlet/zmi/templates/head-preview.pt:8
+msgid "Display title"
+msgstr "Afficher le titre"
+
+#: src/pyams_content/shared/common/portlet/zmi/templates/head-preview.pt:12
+msgid "Display tags"
+msgstr "Afficher les tags"
+
+#: src/pyams_content/shared/common/portlet/zmi/templates/head-preview.pt:16
+msgid "Display header"
+msgstr "Afficher le chapô"
+
+#: src/pyams_content/shared/common/portlet/zmi/templates/head-preview.pt:20
+msgid "Display specificities"
+msgstr "Afficher les spécificités"
+
+#: src/pyams_content/shared/common/zmi/portal.py:44
+msgid "Edit default template properties"
+msgstr "Modèle de présentation par défaut"
+
+#: src/pyams_content/shared/common/zmi/portal.py:54
+msgid ""
+"**This form allows you to select shared content default template.**\n"
+"\n"
+"If you choose to use a shared template, you can only adjust settings of each "
+"portlet individually but can't change portlets list or page configuration.\n"
+"\n"
+"If you use a local template, you can define a whole custom configuration but "
+"the template definition can't be reused anywhere..."
+msgstr ""
+"Vous pouvez modifier le modèle de présentation qui sera appliqué **par "
+"défaut** à tous les contenus de ce gabarit.\n"
+"\n"
+"Si vous choisissez d'utiliser un modèle de présentation partagé, vous "
+"pourrez ajuster les paramètres de chaque composant mais ne pourrez pas "
+"modifier la liste des composants ou leur position et la configuration de la "
+"page.\n"
+"\n"
+"Si vous choisissez d'utiliser un modèle de présentation \"local\", vous "
+"pourrez définir l'ensemble de la configuration mais le modèle de "
+"présentation ne pourra pas être réutilisé ailleurs que dans les contenus de "
+"ce gabarit."
+
+#: src/pyams_content/shared/common/zmi/portal.py:70
+msgid "Use tool default template"
+msgstr "Utiliser le modèle de présentation par défaut de ce gabarit"
+
+#: src/pyams_content/shared/common/zmi/properties.py:59
+msgid "Composition"
+msgstr "Composition"
+
+#: src/pyams_content/shared/common/zmi/properties.py:82
+msgid "Content properties"
+msgstr "Propriétés élémentaires"
+
+#: src/pyams_content/shared/common/zmi/site.py:38
+#, python-format
+msgid ""
+"SEARCH - Between all contents published into &laquo;&nbsp;{site}&nbsp;&raquo;"
+msgstr ""
+"RECHERCHE - Tous contenus présents dans &laquo;&nbsp;{site}&nbsp;&raquo; "
+"confondus"
+
+#: src/pyams_content/shared/common/zmi/header.py:79
+#, python-format
+msgid "{state} by {principal}"
+msgstr "{state} par {principal}"
+
+#: src/pyams_content/shared/common/zmi/header.py:112
+#, python-format
+msgid "since {date}"
+msgstr "depuis {date}"
+
+#: src/pyams_content/shared/common/zmi/header.py:91
+#: src/pyams_content/shared/common/zmi/dashboard.py:165
+msgid "Content publication start date is not passed yet"
+msgstr "La date de début de publication n'est pas encore atteinte"
+
+#: src/pyams_content/shared/common/zmi/header.py:124
+msgid "access published version"
+msgstr "accéder à la version en ligne"
+
+#: src/pyams_content/shared/common/zmi/header.py:131
+msgid "access new version"
+msgstr "accéder à la version en préparation"
+
+#: src/pyams_content/shared/common/zmi/header.py:141
+msgid "access waiting version"
+msgstr "accéder à la version en attente"
+
+#: src/pyams_content/shared/common/zmi/header.py:152
+msgid "access retired version"
+msgstr "accéder à la version retirée"
+
+#: src/pyams_content/shared/common/zmi/header.py:162
+msgid "access archived version"
+msgstr "accéder à la version archivée"
+
+#: src/pyams_content/shared/common/zmi/manager.py:107
+msgid "Shared tool properties"
+msgstr "Propriétés de l'outil"
+
+#: src/pyams_content/shared/common/zmi/manager.py:125
+msgid "WARNING"
+msgstr "ATTENTION"
+
+#: src/pyams_content/shared/common/zmi/manager.py:127
+msgid ""
+"Workflow shouldn't be modified if this tool already contains any shared "
+"content!"
+msgstr ""
+"Le workflow ne doit pas être modifié si cet outil renferme déjà des contenus "
+"partagés !"
+
+#: src/pyams_content/shared/common/zmi/manager.py:150
+msgid "Languages"
+msgstr "Langues"
+
+#: src/pyams_content/shared/common/zmi/manager.py:162
+msgid "Content languages"
+msgstr "Langues pour la traduction de cet outil"
+
+#: src/pyams_content/shared/common/zmi/manager.py:172
+msgid ""
+"Tool languages are used to translate own tool properties, and newly created "
+"contents will propose these languages by default"
+msgstr ""
+"Les langues sont utilisées pour traduire les propriétés de l'outil.\n"
+"\n"
+"Les nouveaux contenus proposeront également ces langues par défaut."
+
+#: src/pyams_content/shared/common/zmi/manager.py:80
+msgid "Content management"
+msgstr "Gérer ce gabarit"
+
+#: src/pyams_content/shared/common/zmi/manager.py:82
+msgid "Tool management"
+msgstr "Gérer cet outil"
+
+#: src/pyams_content/shared/common/zmi/types.py:69
+msgid "Data types"
+msgstr "Types de contenus"
+
+#: src/pyams_content/shared/common/zmi/types.py:147
+msgid "Data type label"
+msgstr "Libellé du type"
+
+#: src/pyams_content/shared/common/zmi/types.py:187
+#: src/pyams_content/shared/common/zmi/types.py:427
+msgid "Default associations"
+msgstr "Liens et pièces jointes par défaut"
+
+#: src/pyams_content/shared/common/zmi/types.py:203
+msgid "Default themes"
+msgstr "Thèmes par défaut"
+
+#: src/pyams_content/shared/common/zmi/types.py:231
+msgid "Content data types"
+msgstr "Types de contenus"
+
+#: src/pyams_content/shared/common/zmi/types.py:254
+msgid "Add data type"
+msgstr "Ajouter un type"
+
+#: src/pyams_content/shared/common/zmi/types.py:266
+msgid "Add new data type"
+msgstr "Ajout d'un type de contenu"
+
+#: src/pyams_content/shared/common/zmi/types.py:309
+msgid "Data type properties"
+msgstr "Propriétés du type de contenu"
+
+#: src/pyams_content/shared/common/zmi/types.py:390
+msgid "Subtype label"
+msgstr "Libellé du sous-type"
+
+#: src/pyams_content/shared/common/zmi/types.py:471
+msgid "Add subtype"
+msgstr "Ajouter un sous-type"
+
+#: src/pyams_content/shared/common/zmi/types.py:483
+msgid "Add new subtype"
+msgstr "Ajout d'un sous-type de contenu"
+
+#: src/pyams_content/shared/common/zmi/types.py:530
+msgid "Data subtype properties"
+msgstr "Propriétés du fichier standard"
+
+#: src/pyams_content/shared/common/zmi/types.py:572
+msgid "Select content type..."
+msgstr "Sélectionnez un type de contenu..."
+
+#: src/pyams_content/shared/common/zmi/types.py:114
+msgid "No currently defined data type."
+msgstr "Aucun type de contenu n'est actuellement défini."
+
+#: src/pyams_content/shared/common/zmi/types.py:299
+msgid "Specified type name is already used!"
+msgstr "Le nom indiqué pour ce type de contenu est déjà utilisé !"
+
+#: src/pyams_content/shared/common/zmi/types.py:506
+msgid "Subtype was correctly added."
+msgstr "Le sous-type a été ajouté."
+
+#: src/pyams_content/shared/common/zmi/types.py:520
+msgid "Specified subtype name is already used!"
+msgstr "Le nom indiqué pour ce sous-type de contenu est déjà utilisé !"
+
+#: src/pyams_content/shared/common/zmi/types.py:159
+msgid "Click to see subtypes"
+msgstr "Montrer ou caher les sous-types"
+
+#: src/pyams_content/shared/common/zmi/types.py:610
+#, python-format
+msgid "Custom properties for type « {0} »"
+msgstr "Propriétés spécifiques au type « {0} »"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:128
+msgid "Unique ID"
+msgstr "N° IN"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:148
+#: src/pyams_content/shared/common/zmi/search.py:173
+msgid "Status"
+msgstr "Statut"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:175
+msgid "Status date"
+msgstr "En date du"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:192
+#: src/pyams_content/shared/common/zmi/summary.py:165
+msgid "Version"
+msgstr "Version"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:207
+msgid "Status principal"
+msgstr "Intervenant"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:244
+msgid "Last modification"
+msgstr "Dernière modification"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:277
+msgid "Contents dashboard"
+msgstr "Mon tableau de bord"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:476
+#: src/pyams_content/shared/common/zmi/templates/header.pt:23
+msgid "Add/remove from favorites"
+msgstr "Ajouter/enlever des favoris"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:300
+#, python-format
+msgid "SEARCH - Between all contents of type &laquo;&nbsp;{type}&nbsp;&raquo;"
+msgstr "RECHERCHE - Tous contenus &laquo;&nbsp;{type}&nbsp;&raquo; confondus"
+
+#: src/pyams_content/shared/common/zmi/rename.py:62
+msgid "Change URL..."
+msgstr "Changer d'URL"
+
+#: src/pyams_content/shared/common/zmi/rename.py:79
+msgid "Change item URL"
+msgstr "Modification de l'URL"
+
+#: src/pyams_content/shared/common/zmi/rename.py:86
+msgid "Item URL part"
+msgstr "URL du contenu"
+
+#: src/pyams_content/shared/common/zmi/rename.py:87
+msgid "URL part used to access this content"
+msgstr "Portion de l'URL utilisée pour accéder à ce contenu"
+
+#: src/pyams_content/shared/common/zmi/rename.py:121
+msgid "You must provide an URL for this item!"
+msgstr "Vous devez fournir une URL pour ce contenu !"
+
+#: src/pyams_content/shared/common/zmi/security.py:64
+msgid "Contributors restrictions"
+msgstr "Paramètres des contributeurs"
+
+#: src/pyams_content/shared/common/zmi/security.py:73
+msgid "Content contributors restrictions"
+msgstr "Liste des contributeurs"
+
+#: src/pyams_content/shared/common/zmi/security.py:107
+msgid "Contributor name"
+msgstr "Nom du contributeur"
+
+#: src/pyams_content/shared/common/zmi/security.py:118
+#: src/pyams_content/shared/common/zmi/security.py:272
+msgid "Activated publication checks?"
+msgstr "Tunnel de publication activé"
+
+#: src/pyams_content/shared/common/zmi/security.py:219
+msgid "Managers restrictions"
+msgstr "Paramètres des responsables"
+
+#: src/pyams_content/shared/common/zmi/security.py:228
+msgid "Content managers restrictions"
+msgstr "Liste des responsables"
+
+#: src/pyams_content/shared/common/zmi/security.py:261
+msgid "Manager name"
+msgstr "Nom du responsable"
+
+#: src/pyams_content/shared/common/zmi/security.py:289
+msgid "Restricted"
+msgstr "Restrictions"
+
+#: src/pyams_content/shared/common/zmi/security.py:306
+msgid "Owners"
+msgstr "Propriétaires"
+
+#: src/pyams_content/shared/common/zmi/security.py:396
+msgid "Publication workflow"
+msgstr "Workflow de publication"
+
+#: src/pyams_content/shared/common/zmi/security.py:167
+#, python-format
+msgid "Edit contributor restrictions for « {0} »"
+msgstr "Gérer les paramètres d'intervention de « {0} »"
+
+#: src/pyams_content/shared/common/zmi/security.py:355
+#, python-format
+msgid "Edit manager restrictions for « {0} »"
+msgstr "Gérer les paramètres d'intervention de « {0} »"
+
+#: src/pyams_content/shared/common/zmi/security.py:402
+msgid "Apply contents restrictions"
+msgstr "Appliquer des restrictions d'accès"
+
+#: src/pyams_content/shared/common/zmi/security.py:404
+msgid ""
+"You can specify which contents this manager will be able to manage. If you "
+"specify several criteria, the manager will be able to manage contents for "
+"which at least one criteria is matching."
+msgstr ""
+"Vous pouvez indiquer les propriétés des contenus que ce responsable sera "
+"autorisé à gérer. Si vous indiquez plusieurs critères, il pourra gérer les "
+"contenus pour lesquels au moins l'un des critères correspond."
+
+#: src/pyams_content/shared/common/zmi/__init__.py:265
+msgid "Duplicate content..."
+msgstr "Dupliquer le contenu"
+
+#: src/pyams_content/shared/common/zmi/__init__.py:285
+msgid "Duplicate content"
+msgstr "Dupliquer ce contenu"
+
+#: src/pyams_content/shared/common/zmi/__init__.py:86
+msgid "This title can be modified afterwards"
+msgstr "Pourra être modifié ultérieurement"
+
+#: src/pyams_content/shared/common/zmi/__init__.py:276
+msgid "Duplicate this content"
+msgstr "Dupliquer ce contenu"
+
+#: src/pyams_content/shared/common/zmi/__init__.py:332
+#, python-format
+msgid "Clone created from version {source} of {oid} (in « {state} » state)"
+msgstr ""
+"Duplication de la version {source} du contenu {oid} (alors en statut "
+"« {state} »)"
+
+#: src/pyams_content/shared/common/zmi/__init__.py:377
+msgid "Created or modified in this version"
+msgstr "Créé ou modifié dans cette version"
+
+#: src/pyams_content/shared/common/zmi/owner.py:50
+msgid "Change owner..."
+msgstr "Changer de propriétaire"
+
+#: src/pyams_content/shared/common/zmi/owner.py:83
+msgid "Change content's owner"
+msgstr "Changement de propriétaire"
+
+#: src/pyams_content/shared/common/zmi/owner.py:125
+msgid ""
+"All versions of this content which are not archived will be transferred to "
+"newly selected owner"
+msgstr ""
+"Toutes les versions non archivées de ce contenu seront transférées au "
+"nouveau propriétaire sélectionné"
+
+#: src/pyams_content/shared/common/zmi/owner.py:60
+msgid "New owner"
+msgstr "Nouveau propriétaire"
+
+#: src/pyams_content/shared/common/zmi/owner.py:61
+msgid "The selected user will become the new content's owner"
+msgstr "L'utilisateur sélectionné deviendra le nouveau propriétaire du contenu"
+
+#: src/pyams_content/shared/common/zmi/owner.py:63
+msgid "Keep previous owner as contributor"
+msgstr "L'ancien propriétaire reste contributeur"
+
+#: src/pyams_content/shared/common/zmi/owner.py:64
+msgid "If 'yes', the previous owner will still be able to modify this content"
+msgstr ""
+"Si 'oui', l'actuel propriétaire du contenu en restera contributeur et pourra "
+"donc continuer à le mettre à jour"
+
+#: src/pyams_content/shared/common/zmi/owner.py:74
+msgid "Change owner"
+msgstr "Changer le propriétaire"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:847
+msgid "Prior checks"
+msgstr "Contrôles préalables : avez-vous ?"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:124
+msgid "Request publication"
+msgstr "Demander la publication"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:211
+#: src/pyams_content/workflow/__init__.py:316
+msgid "Cancel publication request"
+msgstr "Annuler la demande de publication"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:251
+msgid "Refuse publication request"
+msgstr "Refuser la demande de publication"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:305
+#: src/pyams_content/workflow/basic.py:197
+msgid "Publish"
+msgstr "Publier"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:394
+msgid "Request retire"
+msgstr "Demander le retrait"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:450
+msgid "Cancel retire request"
+msgstr "Annuler la demande de retrait"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:490
+msgid "Retire"
+msgstr "Retirer"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:531
+#: src/pyams_content/workflow/__init__.py:437
+msgid "Request archive"
+msgstr "Demander l'archivage"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:574
+msgid "Cancel archive request"
+msgstr "Annuler la demande d'archivage"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:614
+msgid "Archive"
+msgstr "Archiver"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:655
+#: src/pyams_content/workflow/__init__.py:502
+#: src/pyams_content/workflow/__init__.py:514
+#: src/pyams_content/workflow/__init__.py:526
+#: src/pyams_content/workflow/__init__.py:538
+#: src/pyams_content/workflow/__init__.py:550
+#: src/pyams_content/workflow/basic.py:225
+#: src/pyams_content/workflow/basic.py:237
+msgid "Create new version"
+msgstr "Créer une nouvelle version"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:706
+#: src/pyams_content/workflow/__init__.py:562
+#: src/pyams_content/workflow/basic.py:249
+msgid "Delete version"
+msgstr "Supprimer cette version"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:793
+msgid "Previewed content?"
+msgstr "Prévisualisé ce contenu ?"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:797
+msgid "Verified content?"
+msgstr "Audité ce contenu ?"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:181
+#: src/pyams_content/shared/common/zmi/workflow.py:363
+msgid "Publication start date is required"
+msgstr "La date de début de publication est obligatoire"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:274
+#: src/pyams_content/shared/common/zmi/workflow.py:420
+msgid "A comment is required"
+msgstr "Le commentaire est obligatoire"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:732
+msgid "Delete content"
+msgstr "Supprimer définitivement ce contenu"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:741
+msgid "Delete definitively"
+msgstr "Supprimer définitivement"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:870
+msgid ""
+"You must confirm that you previewed and checked this content before "
+"requesting publication!!"
+msgstr ""
+"Vous devez avoir prévisualisé et audité ce contenu avant de pouvoir le "
+"publier !!"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:88
+#, python-format
+msgid "{state} | by {principal}"
+msgstr "{state} | par {principal}"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:873
+msgid ""
+"You must confirm that you checked this content before requesting "
+"publication!!"
+msgstr "Vous devez avoir audité ce contenu avant de pouvoir le publier !!"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:84
+#: src/pyams_content/workflow/__init__.py:649
+#: src/pyams_content/workflow/__init__.py:620
+#: src/pyams_content/workflow/basic.py:316
+#: src/pyams_content/workflow/basic.py:287
+#, python-format
+msgid "{state} {date}"
+msgstr "{state} {date}"
+
+#: src/pyams_content/shared/common/zmi/reverse.py:57
+msgid "Reverse links"
+msgstr "Liens amont"
+
+#: src/pyams_content/shared/common/zmi/reverse.py:66
+msgid "Content's internal links"
+msgstr "Autres contenus qui pointent vers ce contenu"
+
+#: src/pyams_content/shared/common/zmi/summary.py:51
+msgid "Display content summary"
+msgstr "Récapitulatif pour ce contenu"
+
+#: src/pyams_content/shared/common/zmi/summary.py:75
+msgid "Identity card"
+msgstr "Carte d'identité"
+
+#: src/pyams_content/shared/common/zmi/summary.py:93
+msgid "Requested action"
+msgstr "Évolution demandée"
+
+#: src/pyams_content/shared/common/zmi/summary.py:134
+msgid "Publication and retire dates"
+msgstr "Dates de publication et de retrait planifiées"
+
+#: src/pyams_content/shared/common/zmi/summary.py:153
+msgid "Current version"
+msgstr "À propos de cette version"
+
+#: src/pyams_content/shared/common/zmi/summary.py:183
+msgid "Content history"
+msgstr "Pour mémoire"
+
+#: src/pyams_content/shared/common/zmi/summary.py:124
+msgid "Associated comment"
+msgstr "Commentaire associé"
+
+#: src/pyams_content/shared/common/zmi/summary.py:114
+#, python-format
+msgid "{state} {date} by {principal}"
+msgstr "{state} {date} par {principal}"
+
+#: src/pyams_content/shared/common/zmi/summary.py:171
+#, python-format
+msgid "{state} since {date}, by {principal}"
+msgstr "{state} depuis {date} par {principal}"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-owner-warning.pt:1
+msgid ""
+"RECALL: you are not the owner of the content on which you are intervening."
+msgstr ""
+"ATTENTION : vous intervenez sur un contenu dont vous n'êtes pas le "
+"propriétaire."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:2
+msgid "You are going to duplicate a whole content."
+msgstr ""
+"Vous vous apprêtez à dupliquer une version de ce contenu pour en créer un "
+"nouveau."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:3
+msgid ""
+"The new copy is going to be created in 'draft' mode, so that you can modify "
+"it before publication."
+msgstr ""
+"Cette copie va être créée en statut 'Brouillon' pour vous permettre de la "
+"préparer."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:5
+msgid ""
+"A new unique number is also going to be assigned to it. This number will be "
+"shared by all content's versions."
+msgstr ""
+"Un numéro unique lui sera également attribué ; ce numéro sera conservé "
+"pendant toute la vie du contenu, quelle que soit la version."
+
+#: src/pyams_content/shared/common/zmi/templates/header.pt:6
+msgid "Back to previous page"
+msgstr "Revenir à la page précédente"
+
+#: src/pyams_content/shared/common/zmi/templates/header.pt:20
+msgid "by ${owner}"
+msgstr "de ${owner}"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-operator-warning.pt:1
+msgid ""
+"WARNING: this request was made by a contributor which is not the owner of "
+"this content."
+msgstr ""
+"ATTENTION : cette demande est formulée par un contributeur habilité qui "
+"n'est pas le propriétaire."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-propose-message.pt:1
+msgid ""
+"This publication request is going to be transmitted to a content manager."
+msgstr "Cette demande de publication va être soumise à un responsable."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:2
+msgid ""
+"This new content is going to be created in 'draft' mode, so that you can "
+"complete it before publication."
+msgstr ""
+"Ce nouveau contenu va être créé en statut 'Brouillon' pour vous permettre de "
+"le préparer."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:4
+msgid ""
+"A unique number is also going to be assigned to it. This number will be "
+"shared by all content's versions."
+msgstr ""
+"Un numéro unique va lui être attribué ; il sera permanent, quelle que soit "
+"la version."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-cancel-propose-message.pt:1
+msgid ""
+"After canceling the request, you will be able to update the content again."
+msgstr "En annulant cette demande, ce contenu pourra à nouveau être modifié."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:2
+msgid "You considerate that the currently published must evolve."
+msgstr "Vous considérez que la version actuelle de ce contenu doit évoluer."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:3
+msgid ""
+"By creating a new version, you can update it's content without impacting the "
+"currently published one."
+msgstr ""
+"En créant une nouvelle version, vous pourrez apporter des modifications sans "
+"impacter la version actuelle."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:5
+msgid ""
+"When the new version will be complete, you will be able to make a new "
+"publication request to replace the currently published version (which will "
+"be archived automatically)."
+msgstr ""
+"Lorsque la nouvelle version sera prête, vous demanderez sa publication (et "
+"la version actuelle sera automatiquement archivée)."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:2
+msgid ""
+"You considerate that the currently published version should no more be "
+"publicly visible."
+msgstr ""
+"Vous considérez que la version actuellement en ligne ne doit plus être "
+"consultable."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:3
+msgid ""
+"WARNING: the content will remain visible until a manager validate the "
+"request."
+msgstr ""
+"ATTENTION : ce contenu restera visible jusqu'à ce qu'un responsable prenne "
+"en charge votre demande."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:2
+msgid "This content is already retired and not visible."
+msgstr "Ce contenu est déjà retiré et n'est plus visible des internautes."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:3
+#: src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:3
+msgid ""
+"After archiving, it will be backed up but you will not be able to publish it "
+"again except by creating a new version."
+msgstr ""
+"L'archivage permet de conserver une version d'un contenu dans son état "
+"actuel ; il pourra ensuite à nouveau être publié, en créant une nouvelle "
+"version."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:2
+msgid ""
+"As a manager, you considerate that this content is complete and can be "
+"published 'as is'."
+msgstr ""
+"En tant que responsable, vous considérez que ce contenu peut être publié en "
+"l'état."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:4
+msgid ""
+"This operation will make the content publicly available (except if "
+"restricted access has been set)."
+msgstr ""
+"Cette opération va rendre le contenu visible de tous, sauf si des "
+"restrictions d'accès lui ont été appliquées."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:2
+msgid ""
+"As a content manager, you considerate that this content can't be published "
+"'as is'."
+msgstr ""
+"En tant que responsable, vous considérez que ce contenu ne peut pas être "
+"publié en l'état."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:4
+msgid ""
+"The contributor will be notified of this and will be able to update the "
+"content before doing a new publication request."
+msgstr ""
+"Le contributeur qui vous a sollicité va être notifié de votre refus ; il "
+"pourra modifier ce contenu et effectuer une nouvelle demande de publication."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:2
+msgid "As a manager, you considerate that this content must be archived."
+msgstr ""
+"En tant que responsable, vous considérez que ce contenu doit être archivé."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-cancel-archiving-message.pt:1
+msgid ""
+"After cancelling this request, the content will return to it's previous "
+"retired state."
+msgstr "En annulant cette demande, ce contenu va retourner en statut 'Retiré'."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:2
+msgid ""
+"As a content manager, you considerate that this content should no longer be "
+"published."
+msgstr ""
+"En tant que responsable, vous considérez que ce contenu ne doit plus être "
+"publié."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:4
+msgid ""
+"Retired content won't be visible anymore, but it can be updated and "
+"published again, or archived."
+msgstr ""
+"Après ce retrait, il ne sera plus visible des internautes. Il pourra par "
+"contre être publié à nouveau, archivé, ou modifié en créant une nouvelle "
+"version."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-cancel-retiring-message.pt:1
+msgid ""
+"After cancelling this request, the content will return to it's normal "
+"published state."
+msgstr "En annulant cette demande, ce contenu va retourner en statut 'Publié'."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:2
+msgid "FOR YOUR INFORMATION"
+msgstr "POUR VOTRE INFORMATION"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:5
+msgid "Next step"
+msgstr "Étape suivante"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:7
+msgid "Previous step"
+msgstr "Étape précédente"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:10
+msgid "With this comment:"
+msgstr "Avec ce commentaire :"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:2
+msgid ""
+"This content was never published. If you confirm deletion, it won't be "
+"possible to restore it."
+msgstr ""
+"Ce contenu n'a jamais été publié. Une fois supprimé, il ne pourra pas être "
+"récupéré."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:6
+msgid ""
+"The content version is going to be definitely deleted. Will only remain the "
+"currently published version."
+msgstr ""
+"Cette version va être définitivement supprimée, pour revenir à la version "
+"précédente."
+
+#: src/pyams_content/shared/news/interfaces/__init__.py:29
+msgid "News topic"
+msgstr "Actualité"
+
+#: src/pyams_content/shared/news/zmi/__init__.py:44
+msgid "This news topic"
+msgstr "Cette actualité"
+
+#: src/pyams_content/shared/news/zmi/__init__.py:63
+#: src/pyams_content/shared/news/zmi/__init__.py:74
+msgid "Add news topic"
+msgstr "Ajouter une actualité"
+
+#: src/pyams_content/shared/news/zmi/__init__.py:54
+#, python-format
+msgid "News topic « {title} »"
+msgstr "Actualité « {title} »"
+
+#: src/pyams_content/shared/site/manager.py:66
+#: src/pyams_content/shared/site/zmi/manager.py:121
+msgid "Site manager"
+msgstr "Site"
+
+#: src/pyams_content/shared/site/folder.py:56
+msgid "Site folder"
+msgstr "Rubrique"
+
+#: src/pyams_content/shared/site/link.py:43
+msgid "Content link"
+msgstr "Contenu lié"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:133
+msgid "Site topic"
+msgstr "Article (dans un site)"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:38
+msgid "Redirect to first visible sub-folder or content"
+msgstr "Re-diriger vers le premier contenu publié"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:39
+msgid "Use presentation template"
+msgstr "Afficher le modèle de présentation de la rubrique"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:68
+msgid "Heading"
+msgstr "Chapô"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:69
+msgid "Heading displayed according to presentation template"
+msgstr ""
+"Ce chapô pourra être affiché ou non en fonction du modèle de présentation "
+"retenu"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:73
+msgid ""
+"The folder's description is 'hidden' into HTML's page headers; but it can be "
+"seen, for example, in some search engines results as content's description; "
+"if description is empty, content's header will be used."
+msgstr ""
+"La méta-description de la rubrique est 'masquée' dans les en-têtes des pages "
+"HTML ; mais on peut la retrouver, par exemple, dans les listes de résultats "
+"des moteurs de recherche ; si la description n'est pas renseignée, le chapô "
+"(s'il existe pour ce contenu) sera utilisé."
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:82
+msgid "Visible in folders list"
+msgstr "Visible dans la liste des rubriques ?"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:83
+msgid "If 'no', folder will not be displayed into folders list"
+msgstr ""
+"Si 'non', cette rubrique ne sera pas affichée dans la liste des rubriques "
+"affichée par un composant de navigation"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:87
+#: src/pyams_content/shared/site/interfaces/__init__.py:151
+msgid "Navigation title"
+msgstr "Titre de navigation"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:88
+msgid ""
+"Folder's title displayed in navigation pages; original title will be used if "
+"none is specified"
+msgstr ""
+"Titre de substitution affiché dans les composants de navigation ; si rien "
+"n'est indiqué, le titre original de la rubrique sera utilisé"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:92
+msgid "Navigation mode"
+msgstr "Mode de navigation"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:93
+msgid "Folder behaviour when navigating to folder URL"
+msgstr "Comportement à adopter lorsqu'un internaute accède à cette rubrique"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:118
+msgid ""
+"The site's description is 'hidden' into HTML's page headers; but it can be "
+"seen, for example, in some search engines results as content's description; "
+"if description is empty, content's header will be used."
+msgstr ""
+"La méta-description du site est 'masquée' dans les en-têtes des pages HTML ; "
+"mais on peut la retrouver, par exemple, dans les listes de résultats des "
+"moteurs de recherche ; si la description n'est pas renseignée, le chapô "
+"(s'il existe pour ce contenu) sera utilisé."
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:152
+msgid ""
+"Alternate content's title displayed in navigation pages; original title will "
+"be used if none is specified"
+msgstr ""
+"Libellé utilisé en lieu et place du titre dans les composants de navigation "
+"(notamment dans les pages carrefour) ; si rien n'est indiqué, le titre "
+"original du contenu référencé sera utilisé"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:157
+msgid "If 'no', link is not visible"
+msgstr ""
+"Si 'non', le lien ne sera pas visible même si le contenu référencé est publié"
+
+#: src/pyams_content/shared/site/zmi/container.py:308
+#: src/pyams_content/shared/site/zmi/container.py:154
+msgid "Visible element?"
+msgstr "Élément visible ?"
+
+#: src/pyams_content/shared/site/zmi/container.py:309
+msgid "Switch element visibility"
+msgstr "Cliquez pour rendre l'élément visible ou non"
+
+#: src/pyams_content/shared/site/zmi/container.py:371
+msgid "Folders and topics"
+msgstr "Rubriquage"
+
+#: src/pyams_content/shared/site/zmi/container.py:503
+msgid "Delete site item"
+msgstr "Supprimer ce contenu"
+
+#: src/pyams_content/shared/site/zmi/container.py:380
+msgid "Click to open/close all folders"
+msgstr "Afficher/masquer toutes les rubriques"
+
+#: src/pyams_content/shared/site/zmi/container.py:396
+msgid "Click to show/hide inner folders"
+msgstr "Cliquer pour afficher ou cache les sous-niveaux"
+
+#: src/pyams_content/shared/site/zmi/container.py:265
+msgid "Can't reparent object to one of it's children. Reloading..."
+msgstr ""
+"Impossible de déplacer une rubrique dans l'une de ses sous-rubriques ou "
+"contenus ! Rechargement de la page..."
+
+#: src/pyams_content/shared/site/zmi/manager.py:53
+msgid "Site management"
+msgstr "Gérer ce site"
+
+#: src/pyams_content/shared/site/zmi/manager.py:108
+#: src/pyams_content/shared/site/zmi/manager.py:122
+msgid "Add site manager"
+msgstr "Ajouter un site"
+
+#: src/pyams_content/shared/site/zmi/manager.py:150
+#: src/pyams_content/shared/site/zmi/folder.py:185
+msgid "Site folder properties"
+msgstr "Propriétés de la rubrique"
+
+#: src/pyams_content/shared/site/zmi/manager.py:167
+msgid "Specified site manager name is already used!"
+msgstr "Le nom indiqué pour ce site existe déjà !"
+
+#: src/pyams_content/shared/site/zmi/manager.py:171
+msgid "A site manager is already registered with this name!!"
+msgstr "Un site est déjà inscrit dans le registre avec ce nom !"
+
+#: src/pyams_content/shared/site/zmi/folder.py:57
+msgid "Add site folder..."
+msgstr "Ajouter une rubrique"
+
+#: src/pyams_content/shared/site/zmi/folder.py:89
+msgid "Add site folder"
+msgstr "Ajout d'une rubrique"
+
+#: src/pyams_content/shared/site/zmi/folder.py:156
+msgid "Site folder management"
+msgstr "Gérer cette rubrique"
+
+#: src/pyams_content/shared/site/zmi/folder.py:203
+msgid "Navigation properties"
+msgstr "Propriétés de navigation"
+
+#: src/pyams_content/shared/site/zmi/folder.py:70
+#: src/pyams_content/shared/site/zmi/link.py:65
+#: src/pyams_content/shared/site/zmi/__init__.py:60
+msgid "Parent"
+msgstr "Niveau parent"
+
+#: src/pyams_content/shared/site/zmi/folder.py:71
+#: src/pyams_content/shared/site/zmi/link.py:66
+msgid "Folder's parent"
+msgstr "Niveau de rattachement de cette rubrique"
+
+#: src/pyams_content/shared/site/zmi/folder.py:149
+msgid "You must provide a folder name for default server language!"
+msgstr ""
+"Vous devez fournir un nom pour ce dossier pour la langue par défaut du "
+"serveur !"
+
+#: src/pyams_content/shared/site/zmi/link.py:56
+msgid "Rent content..."
+msgstr "Lier un contenu"
+
+#: src/pyams_content/shared/site/zmi/link.py:76
+msgid "Rent existing content"
+msgstr "Lier un contenu existant"
+
+#: src/pyams_content/shared/site/zmi/link.py:134
+msgid "Edit content link properties"
+msgstr "Propriétés du lien"
+
+#: src/pyams_content/shared/site/zmi/__init__.py:51
+msgid "Add topic..."
+msgstr "Ajouter un article"
+
+#: src/pyams_content/shared/site/zmi/__init__.py:74
+#: src/pyams_content/shared/topic/zmi/__init__.py:57
+#: src/pyams_content/shared/topic/zmi/__init__.py:68
+msgid "Add topic"
+msgstr "Ajout d'un article"
+
+#: src/pyams_content/shared/site/zmi/__init__.py:61
+msgid "Topic's parent"
+msgstr "Niveau parent"
+
+#: src/pyams_content/shared/topic/interfaces/__init__.py:23
+msgid "Topic"
+msgstr "Article"
+
+#: src/pyams_content/shared/topic/zmi/__init__.py:38
+msgid "This topic"
+msgstr "Cet article"
+
+#: src/pyams_content/shared/topic/zmi/__init__.py:48
+#, python-format
+msgid "Topic « {title} »"
+msgstr "Article « {title} »"
+
+#: src/pyams_content/shared/imagemap/__init__.py:152
+msgid "no area defined"
+msgstr "aucune zone définie"
+
 #: src/pyams_content/shared/imagemap/paragraph.py:88
 msgid "no selected image map"
 msgstr "aucune image cliquable sélectionnée"
@@ -4031,96 +5441,16 @@
 msgid "image map '{0}' is not published"
 msgstr "l'image cliquable '{0}' n'est pas publiée"
 
-#: src/pyams_content/shared/imagemap/__init__.py:154
-msgid "no area defined"
-msgstr "aucune zone définie"
-
-#: src/pyams_content/shared/imagemap/zmi/paragraph.py:55
-msgid "Image map..."
-msgstr "Image cliquable"
-
-#: src/pyams_content/shared/imagemap/zmi/paragraph.py:68
-msgid "Add new image map"
-msgstr "Ajout d'une image cliquable"
-
-#: src/pyams_content/shared/imagemap/zmi/paragraph.py:95
-#: src/pyams_content/shared/logo/zmi/paragraph.py:94
-msgid "Edit paragraph properties"
-msgstr "Propriétés de l'image cliquable"
-
-#: src/pyams_content/shared/imagemap/zmi/properties.py:40
-msgid "Background image"
-msgstr "Image de fond"
-
-#: src/pyams_content/shared/imagemap/zmi/__init__.py:44
-msgid "This image map"
-msgstr "Cette image"
-
-#: src/pyams_content/shared/imagemap/zmi/__init__.py:63
-msgid "Add image map"
-msgstr "Ajouter une image"
-
-#: src/pyams_content/shared/imagemap/zmi/__init__.py:73
-msgid "Adding image map"
-msgstr "Ajout d'une image"
-
-#: src/pyams_content/shared/imagemap/zmi/__init__.py:54
-#, python-format
-msgid "Image map « {title} »"
-msgstr "Article de blog « {title} »"
-
-#: src/pyams_content/shared/imagemap/zmi/container.py:54
-msgid "Image areas"
-msgstr "Zones de l'image"
-
-#: src/pyams_content/shared/imagemap/zmi/container.py:65
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:71
-msgid "Image map areas"
-msgstr "Zones cliquables de l'image"
-
-#: src/pyams_content/shared/imagemap/zmi/container.py:140
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:50
-msgid "Link target"
-msgstr "Cible du lien"
-
-#: src/pyams_content/shared/imagemap/zmi/container.py:113
-msgid "No currently defined image."
-msgstr "Aucun image de fond n'est actuellement définie."
-
-#: src/pyams_content/shared/imagemap/zmi/container.py:115
-msgid "No currently defined area."
-msgstr "Aucune zone cliquable n'est actuellement définie."
-
-#: src/pyams_content/shared/imagemap/zmi/container.py:175
-#: src/pyams_content/root/zmi/sites.py:170
-msgid "No provided object_name argument!"
-msgstr "Argument 'object_name' non fourni !"
-
-#: src/pyams_content/shared/imagemap/zmi/container.py:194
-msgid "Given area name doesn't exist!"
-msgstr "La zone indiquée n'existe pas !"
-
-#: src/pyams_content/shared/imagemap/zmi/container.py:186
-msgid "Bad query object_name parameter value!"
-msgstr "Valeur incorrecte du paramètre object_name !"
-
-#: src/pyams_content/shared/imagemap/zmi/area.py:47
-msgid "Add image area"
-msgstr "Ajouter une zone"
-
-#: src/pyams_content/shared/imagemap/zmi/area.py:66
-msgid "Add new image area"
-msgstr "Ajout d'une zone cliquable"
-
-#: src/pyams_content/shared/imagemap/zmi/area.py:107
-msgid "Edit image map properties"
-msgstr "Propriétés de l'image"
-
 #: src/pyams_content/shared/imagemap/interfaces/__init__.py:36
 #: src/pyams_content/shared/imagemap/interfaces/__init__.py:89
 msgid "Image map"
 msgstr "Image cliquable"
 
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:50
+#: src/pyams_content/shared/imagemap/zmi/container.py:140
+msgid "Link target"
+msgstr "Cible du lien"
+
 #: src/pyams_content/shared/imagemap/interfaces/__init__.py:51
 msgid "Internal or external link associated with this map area"
 msgstr "Lien interne ou externe associé à cette zone"
@@ -4141,16 +5471,15 @@
 msgid "Image supporting map areas"
 msgstr "Sélection de l'image qui supportera les zones cliquables"
 
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:71
+#: src/pyams_content/shared/imagemap/zmi/container.py:65
+msgid "Image map areas"
+msgstr "Zones cliquables de l'image"
+
 #: src/pyams_content/shared/imagemap/interfaces/__init__.py:72
 msgid "List of defined map areas"
 msgstr "Liste des zones cliquables définies sur l'image"
 
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:96
-#: src/pyams_content/features/alert/interfaces.py:69
-#: src/pyams_content/features/menu/interfaces/__init__.py:68
-msgid "Internal reference"
-msgstr "Référence interne"
-
 #: src/pyams_content/shared/imagemap/interfaces/__init__.py:97
 msgid "Reference to image map object"
 msgstr ""
@@ -4161,230 +5490,79 @@
 msgid "Image map template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/shared/site/folder.py:62
-msgid "Site folder"
-msgstr "Rubrique"
-
-#: src/pyams_content/shared/site/link.py:49
-msgid "Content link"
-msgstr "Contenu lié"
-
-#: src/pyams_content/shared/site/manager.py:68
-#: src/pyams_content/shared/site/zmi/manager.py:125
-msgid "Site manager"
-msgstr "Site"
-
-#: src/pyams_content/shared/site/zmi/folder.py:62
-msgid "Add site folder..."
-msgstr "Ajouter une rubrique"
-
-#: src/pyams_content/shared/site/zmi/folder.py:94
-msgid "Add site folder"
-msgstr "Ajout d'une rubrique"
-
-#: src/pyams_content/shared/site/zmi/folder.py:161
-msgid "Site folder management"
-msgstr "Gérer cette rubrique"
-
-#: src/pyams_content/shared/site/zmi/folder.py:190
-msgid "Site folder properties"
-msgstr "Propriétés de la rubrique"
-
-#: src/pyams_content/shared/site/zmi/folder.py:208
-msgid "Navigation properties"
-msgstr "Propriétés de navigation"
-
-#: src/pyams_content/shared/site/zmi/folder.py:72
-#: src/pyams_content/interfaces/__init__.py:102
-msgid "Visible label used to display content"
-msgstr "Le titre présenté aux internautes"
-
-#: src/pyams_content/shared/site/zmi/folder.py:75
-#: src/pyams_content/shared/site/zmi/__init__.py:72
-#: src/pyams_content/shared/site/zmi/link.py:65
-msgid "Parent"
-msgstr "Niveau parent"
-
-#: src/pyams_content/shared/site/zmi/folder.py:76
-#: src/pyams_content/shared/site/zmi/link.py:66
-msgid "Folder's parent"
-msgstr "Niveau de rattachement de cette rubrique"
-
-#: src/pyams_content/shared/site/zmi/folder.py:154
-msgid "You must provide a folder name for default server language!"
-msgstr ""
-"Vous devez fournir un nom pour ce dossier pour la langue par défaut du "
-"serveur !"
-
-#: src/pyams_content/shared/site/zmi/__init__.py:55
-msgid "This topic"
-msgstr "Cet article"
-
-#: src/pyams_content/shared/site/zmi/__init__.py:63
-msgid "Add topic..."
-msgstr "Ajouter un article"
-
-#: src/pyams_content/shared/site/zmi/__init__.py:86
-msgid "Add topic"
-msgstr "Ajout d'un article"
-
-#: src/pyams_content/shared/site/zmi/__init__.py:73
-msgid "Topic's parent"
-msgstr "Niveau parent"
-
-#: src/pyams_content/shared/site/zmi/link.py:56
-msgid "Rent content..."
-msgstr "Lier un contenu"
-
-#: src/pyams_content/shared/site/zmi/link.py:76
-msgid "Rent existing content"
-msgstr "Lier un contenu existant"
-
-#: src/pyams_content/shared/site/zmi/link.py:134
-msgid "Edit content link properties"
-msgstr "Propriétés du lien"
-
-#: src/pyams_content/shared/site/zmi/container.py:106
-#: src/pyams_content/shared/site/zmi/container.py:118
-#: src/pyams_content/shared/blog/zmi/manager.py:155
-#: src/pyams_content/shared/blog/zmi/manager.py:167
-msgid "Publication dates..."
-msgstr "Dates de publication"
-
-#: src/pyams_content/shared/site/zmi/container.py:132
-#: src/pyams_content/shared/blog/zmi/manager.py:181
-msgid "Update publication dates"
-msgstr "Dates de publication"
-
-#: src/pyams_content/shared/site/zmi/container.py:178
-#: src/pyams_content/shared/site/zmi/container.py:188
-#: src/pyams_content/root/zmi/sites.py:68
-msgid "Site tree"
-msgstr "Arborescence du site"
-
-#: src/pyams_content/shared/site/zmi/container.py:310
-#: src/pyams_content/shared/site/zmi/container.py:156
-msgid "Visible element?"
-msgstr "Élément visible ?"
-
-#: src/pyams_content/shared/site/zmi/container.py:311
-msgid "Switch element visibility"
-msgstr "Cliquez pour rendre l'élément visible ou non"
-
-#: src/pyams_content/shared/site/zmi/container.py:372
-msgid "Folders and topics"
-msgstr "Rubriquage"
-
-#: src/pyams_content/shared/site/zmi/container.py:408
-#: src/pyams_content/root/zmi/__init__.py:825
-msgid "Content"
-msgstr "Contenu"
-
-#: src/pyams_content/shared/site/zmi/container.py:504
-msgid "Delete site item"
-msgstr "Supprimer ce contenu"
-
-#: src/pyams_content/shared/site/zmi/container.py:381
-msgid "Click to open/close all folders"
-msgstr "Afficher/masquer toutes les rubriques"
-
-#: src/pyams_content/shared/site/zmi/container.py:397
-msgid "Click to show/hide inner folders"
-msgstr "Cliquer pour afficher ou cache les sous-niveaux"
-
-#: src/pyams_content/shared/site/zmi/container.py:267
-msgid "Can't reparent object to one of it's children. Reloading..."
-msgstr ""
-"Impossible de déplacer une rubrique dans l'une de ses sous-rubriques ou "
-"contenus ! Rechargement de la page..."
-
-#: src/pyams_content/shared/site/zmi/manager.py:57
-msgid "Site management"
-msgstr "Gérer ce site"
-
-#: src/pyams_content/shared/site/zmi/manager.py:112
-#: src/pyams_content/shared/site/zmi/manager.py:126
-msgid "Add site manager"
-msgstr "Ajouter un site"
-
-#: src/pyams_content/shared/site/zmi/manager.py:156
-#: src/pyams_content/shared/blog/zmi/manager.py:127
-msgid "You must provide a short name for default server language!"
-msgstr "Vous devez fournir un nom court pour la langue par défaut du serveur !"
-
-#: src/pyams_content/shared/site/zmi/manager.py:160
-msgid "Specified site manager name is already used!"
-msgstr "Le nom indiqué pour ce site existe déjà !"
-
-#: src/pyams_content/shared/site/zmi/manager.py:164
-msgid "A site manager is already registered with this name!!"
-msgstr "Un site est déjà inscrit dans le registre avec ce nom !"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:121
-msgid "Topic"
-msgstr "Article"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:42
-msgid "Redirect to first visible sub-folder or content"
-msgstr "Re-diriger vers le premier contenu publié"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:43
-msgid "Use presentation template"
-msgstr "Afficher le modèle de présentation de la rubrique"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:72
-msgid "Heading"
-msgstr "Chapô"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:73
-msgid "Heading displayed according to presentation template"
-msgstr ""
-"Ce chapô pourra être affiché ou non en fonction du modèle de présentation "
-"retenu"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:80
-msgid "Visible in folders list"
-msgstr "Visible dans la liste des rubriques ?"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:81
-msgid "If 'no', folder will not be displayed into folders list"
-msgstr ""
-"Si 'non', cette rubrique ne sera pas affichée dans la liste des rubriques "
-"affichée par un composant de navigation"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:85
-#: src/pyams_content/shared/site/interfaces/__init__.py:139
-msgid "Navigation title"
-msgstr "Titre de navigation"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:86
-msgid ""
-"Folder's title displayed in navigation pages; original title will be used if "
-"none is specified"
-msgstr ""
-"Titre de substitution affiché dans les composants de navigation ; si rien "
-"n'est indiqué, le titre original de la rubrique sera utilisé"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:90
-msgid "Navigation mode"
-msgstr "Mode de navigation"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:91
-msgid "Folder behaviour when navigating to folder URL"
-msgstr "Comportement à adopter lorsqu'un internaute accède à cette rubrique"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:140
-msgid ""
-"Alternate content's title displayed in navigation pages; original title will "
-"be used if none is specified"
-msgstr ""
-"Titre de substitution affiché dans les composants de navigation ; si rien "
-"n'est indiqué, le titre original du contenu référencé sera utilisé"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:145
-msgid "If 'no', link is not visible"
-msgstr ""
-"Si 'non', le lien ne sera pas visible même si le contenu référencé est publié"
+#: src/pyams_content/shared/imagemap/zmi/properties.py:40
+msgid "Background image"
+msgstr "Image de fond"
+
+#: src/pyams_content/shared/imagemap/zmi/container.py:54
+msgid "Image areas"
+msgstr "Zones de l'image"
+
+#: src/pyams_content/shared/imagemap/zmi/container.py:113
+msgid "No currently defined image."
+msgstr "Aucun image de fond n'est actuellement définie."
+
+#: src/pyams_content/shared/imagemap/zmi/container.py:115
+msgid "No currently defined area."
+msgstr "Aucune zone cliquable n'est actuellement définie."
+
+#: src/pyams_content/shared/imagemap/zmi/container.py:194
+msgid "Given area name doesn't exist!"
+msgstr "La zone indiquée n'existe pas !"
+
+#: src/pyams_content/shared/imagemap/zmi/container.py:186
+msgid "Bad query object_name parameter value!"
+msgstr "Valeur incorrecte du paramètre object_name !"
+
+#: src/pyams_content/shared/imagemap/zmi/area.py:47
+msgid "Add image area"
+msgstr "Ajouter une zone"
+
+#: src/pyams_content/shared/imagemap/zmi/area.py:66
+msgid "Add new image area"
+msgstr "Ajout d'une zone cliquable"
+
+#: src/pyams_content/shared/imagemap/zmi/area.py:107
+msgid "Edit image map properties"
+msgstr "Propriétés de l'image"
+
+#: src/pyams_content/shared/imagemap/zmi/__init__.py:44
+msgid "This image map"
+msgstr "Cette image"
+
+#: src/pyams_content/shared/imagemap/zmi/__init__.py:63
+msgid "Add image map"
+msgstr "Ajouter une image"
+
+#: src/pyams_content/shared/imagemap/zmi/__init__.py:73
+msgid "Adding image map"
+msgstr "Ajout d'une image"
+
+#: src/pyams_content/shared/imagemap/zmi/__init__.py:54
+#, python-format
+msgid "Image map « {title} »"
+msgstr "Article de blog « {title} »"
+
+#: src/pyams_content/shared/imagemap/zmi/paragraph.py:55
+msgid "Image map..."
+msgstr "Image cliquable"
+
+#: src/pyams_content/shared/imagemap/zmi/paragraph.py:68
+msgid "Add new image map"
+msgstr "Ajout d'une image cliquable"
+
+#: src/pyams_content/shared/imagemap/zmi/paragraph.py:95
+#: src/pyams_content/shared/logo/zmi/paragraph.py:94
+msgid "Edit paragraph properties"
+msgstr "Propriétés de l'image cliquable"
+
+#: src/pyams_content/shared/logo/__init__.py:73
+msgid "no image defined"
+msgstr "aucune image définie"
+
+#: src/pyams_content/shared/logo/__init__.py:76
+msgid "no URL defined"
+msgstr "aucune URL définie"
 
 #: src/pyams_content/shared/logo/paragraph.py:95
 msgid "no selected logo"
@@ -4400,25 +5578,55 @@
 msgid "logo '{0}' is not published"
 msgstr "le logo '{0}' n'est pas publié"
 
-#: src/pyams_content/shared/logo/__init__.py:69
-msgid "no image defined"
-msgstr "aucune image définie"
-
-#: src/pyams_content/shared/logo/__init__.py:72
-msgid "no URL defined"
-msgstr "aucune URL définie"
-
-#: src/pyams_content/shared/logo/zmi/paragraph.py:55
-msgid "Logos..."
+#: src/pyams_content/shared/logo/interfaces/__init__.py:32
+msgid "Logo"
+msgstr "Logo"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:77
+msgid "Logos"
 msgstr "Logos"
 
-#: src/pyams_content/shared/logo/zmi/paragraph.py:68
-msgid "Add new logos paragraph"
-msgstr "Ajout d'une sélection de logos"
-
-#: src/pyams_content/shared/logo/zmi/properties.py:40
+#: src/pyams_content/shared/logo/interfaces/__init__.py:47
+msgid "Full name of logo organization"
+msgstr "Nom complet de l'organisme associé au logo"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:50
+msgid "Acronym"
+msgstr "Acronyme"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:51
+msgid "Matching logo acronym, without spaces or separators"
+msgstr "Acronyme de l'organisme, sans espace ni séparateur entre les lettres"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:58
+msgid "Image (colored)"
+msgstr "Image (version couleur)"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:62
+msgid "Image (monochrome)"
+msgstr "Image (version noir et blanc)"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:63
+msgid "An alternate image which can be used by some presentation templates"
+msgstr ""
+"Image de substitution monochrome pouvant être utilisée par certains modes de "
+"rendu"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:84
+msgid "Logos references"
+msgstr "Logos sélectionnés"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:85
+msgid "List of internal logos references"
+msgstr "Liste de références internes vers les logos à afficher"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:88
+msgid "Logos template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/shared/logo/zmi/properties.py:65
 msgid "Main logo settings"
-msgstr "Propriétés du logo"
+msgstr "Autres propriétés"
 
 #: src/pyams_content/shared/logo/zmi/__init__.py:45
 msgid "This logo"
@@ -4434,156 +5642,18 @@
 msgid "Logo « {title} »"
 msgstr "Logo « {title} »"
 
-#: src/pyams_content/shared/logo/interfaces/__init__.py:33
-msgid "Logo"
-msgstr "Logo"
-
-#: src/pyams_content/shared/logo/interfaces/__init__.py:70
-msgid "Logos"
+#: src/pyams_content/shared/logo/zmi/paragraph.py:55
+msgid "Logos..."
 msgstr "Logos"
 
-#: src/pyams_content/shared/logo/interfaces/__init__.py:47
-msgid "Image (colored)"
-msgstr "Image (version couleur)"
-
-#: src/pyams_content/shared/logo/interfaces/__init__.py:51
-msgid "Image (monochrome)"
-msgstr "Image (version noir et blanc)"
-
-#: src/pyams_content/shared/logo/interfaces/__init__.py:52
-msgid "An alternate image which can be used by some presentation templates"
-msgstr ""
-"Image de substitution monochrome pouvant être utilisée par certains modes de "
-"rendu"
-
-#: src/pyams_content/shared/logo/interfaces/__init__.py:77
-msgid "Logos references"
-msgstr "Logos sélectionnés"
-
-#: src/pyams_content/shared/logo/interfaces/__init__.py:78
-msgid "List of internal logos references"
-msgstr "Liste de références internes vers les logos à afficher"
-
-#: src/pyams_content/shared/logo/interfaces/__init__.py:81
-msgid "Logos template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/shared/blog/zmi/__init__.py:53
-msgid "This blog post"
-msgstr "Cet article"
-
-#: src/pyams_content/shared/blog/zmi/__init__.py:72
-#: src/pyams_content/shared/blog/zmi/__init__.py:82
-msgid "Add blog post"
-msgstr "Ajouter un article"
-
-#: src/pyams_content/shared/blog/zmi/__init__.py:63
-#, python-format
-msgid "Blog post « {title} »"
-msgstr "Article de blog « {title} »"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:60
-msgid "Blog management"
-msgstr "Gérer ce blog"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:83
-#: src/pyams_content/shared/blog/zmi/manager.py:97
-msgid "Add blog manager"
-msgstr "Ajouter un blog"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:96
-msgid "Blog manager"
-msgstr "Blog"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:131
-msgid "Specified blog manager name is already used!"
-msgstr "Le nom indiqué pour ce blog existe déjà !"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:135
-msgid "A blog manager is already registered with this name!!"
-msgstr "Un blog est déjà inscrit dans le registre avec ce nom !"
-
-#: src/pyams_content/shared/blog/interfaces/__init__.py:33
-msgid "Blog post"
-msgstr "Article de blog"
-
-#: src/pyams_content/profile/zmi/__init__.py:42
-msgid "Admin. profile"
-msgstr "Profil intervenant"
-
-#: src/pyams_content/profile/interfaces/__init__.py:33
-msgid "User favorites"
-msgstr "Favoris de l'utilisateur"
-
-#: src/pyams_content/profile/interfaces/__init__.py:34
-msgid "List of internal numbers of shared contents stored for quick access"
-msgstr "Liste des numéros internes des contenus mémorisés pour un accès rapide"
-
-#: src/pyams_content/profile/interfaces/__init__.py:37
-msgid "Default table length"
-msgstr "Longueur des tableaux"
-
-#: src/pyams_content/profile/interfaces/__init__.py:38
-msgid "Default length used for inner tables and dashboards"
-msgstr "Longueur par défaut des tableaux internes et des tableaux de bord"
-
-#: src/pyams_content/root/__init__.py:69
-msgid "Site root"
-msgstr "Racine du site"
-
-#: src/pyams_content/root/zmi/sites.py:78
-msgid "Blogs and shared sites"
-msgstr "Blogs et sites partagés"
-
-#: src/pyams_content/root/zmi/sites.py:108
-msgid "Visible site?"
-msgstr "Site visible ?"
-
-#: src/pyams_content/root/zmi/sites.py:133
-msgid "OID"
-msgstr "N° IN"
-
-#: src/pyams_content/root/zmi/sites.py:151
-msgid "Delete shared site"
-msgstr "Supprimer ce site"
-
-#: src/pyams_content/root/zmi/sites.py:179
-msgid "Given element name doesn't exist!"
-msgstr "Le nom de l'élément indiqué n'existe pas !"
-
-#: src/pyams_content/root/zmi/search.py:160
-msgid "Content types"
-msgstr "Types de contenus"
-
-#: src/pyams_content/root/zmi/__init__.py:78
-msgid "Home"
-msgstr "Accueil"
-
-#: src/pyams_content/root/zmi/templates/dashboard.pt:7
-msgid "Your contents dashboard"
-msgstr "Les contenus qui me concernent"
-
-#: src/pyams_content/root/zmi/templates/dashboard.pt:18
-msgid "SEARCH - Between all contents"
-msgstr "RECHERCHE - Tous contenus confondus"
-
-#: src/pyams_content/root/interfaces/__init__.py:39
-msgid "Site managers"
-msgstr "Administrateurs"
-
-#: src/pyams_content/root/interfaces/__init__.py:47
-msgid "Templates managers"
-msgstr "Designers"
-
-#: src/pyams_content/root/interfaces/__init__.py:51
-msgid "Operators group"
-msgstr "Groupe des opérateurs"
-
-#: src/pyams_content/root/interfaces/__init__.py:52
-msgid "Name of group containing all roles owners"
-msgstr ""
-"Tous les utilisateurs auxquels sera attribué un rôle seront placés dans ce "
-"groupe"
+#: src/pyams_content/shared/logo/zmi/paragraph.py:68
+msgid "Add new logos paragraph"
+msgstr "Ajout d'une sélection de logos"
+
+#: src/pyams_content/workflow/task.py:62
+msgid "Automatic contents withdrawal:\n"
+msgstr ""
+"Retrait automatique des contenus après la date de fin de publication :\n"
 
 #: src/pyams_content/workflow/__init__.py:70
 #: src/pyams_content/workflow/basic.py:53
@@ -4660,30 +5730,30 @@
 msgid "archived"
 msgstr "archivé"
 
-#: src/pyams_content/workflow/__init__.py:279
-#: src/pyams_content/workflow/basic.py:190
+#: src/pyams_content/workflow/__init__.py:280
+#: src/pyams_content/workflow/basic.py:191
 msgid "Initialize"
 msgstr "Création"
 
-#: src/pyams_content/workflow/__init__.py:282
-#: src/pyams_content/workflow/basic.py:193
+#: src/pyams_content/workflow/__init__.py:283
+#: src/pyams_content/workflow/basic.py:194
 msgid "Draft creation"
 msgstr "Création du brouillon"
 
-#: src/pyams_content/workflow/__init__.py:285
-#: src/pyams_content/workflow/__init__.py:300
+#: src/pyams_content/workflow/__init__.py:286
+#: src/pyams_content/workflow/__init__.py:301
 msgid "Propose publication"
 msgstr "Demander la publication"
 
-#: src/pyams_content/workflow/__init__.py:292
-#: src/pyams_content/workflow/__init__.py:307
-msgid "Publication request"
-msgstr "Demande de publication"
-
 #: src/pyams_content/workflow/__init__.py:293
 #: src/pyams_content/workflow/__init__.py:308
-#: src/pyams_content/workflow/__init__.py:396
-#: src/pyams_content/workflow/__init__.py:443
+msgid "Publication request"
+msgstr "Demande de publication"
+
+#: src/pyams_content/workflow/__init__.py:294
+#: src/pyams_content/workflow/__init__.py:309
+#: src/pyams_content/workflow/__init__.py:397
+#: src/pyams_content/workflow/__init__.py:444
 msgid ""
 "content managers authorized to take charge of your content are going to be "
 "notified of your request."
@@ -4691,206 +5761,206 @@
 "les responsables habilités à prendre en charge votre demande vont être "
 "sollicités."
 
-#: src/pyams_content/workflow/__init__.py:296
-#: src/pyams_content/workflow/__init__.py:311
+#: src/pyams_content/workflow/__init__.py:297
+#: src/pyams_content/workflow/__init__.py:312
 #, python-format
 msgid "submitted a publication request for content « {0} »"
 msgstr "a demandé la publication du contenu « {0} »"
 
-#: src/pyams_content/workflow/__init__.py:323
+#: src/pyams_content/workflow/__init__.py:324
 msgid "Publication request canceled"
 msgstr "Annulation de la demande de publication"
 
-#: src/pyams_content/workflow/__init__.py:325
+#: src/pyams_content/workflow/__init__.py:326
 #, python-format
 msgid "cancelled the publication request for content « {0} »"
 msgstr "a annulé la demande de publication du contenu « {0} »"
 
-#: src/pyams_content/workflow/__init__.py:329
+#: src/pyams_content/workflow/__init__.py:330
 msgid "Reset canceled publication to draft"
 msgstr "Retour automatique en statut 'brouillon'"
 
-#: src/pyams_content/workflow/__init__.py:333
-#: src/pyams_content/workflow/__init__.py:363
+#: src/pyams_content/workflow/__init__.py:334
+#: src/pyams_content/workflow/__init__.py:364
 msgid "State reset to 'draft' (automatic)"
 msgstr "Retour automatique en statut 'brouillon'"
 
-#: src/pyams_content/workflow/__init__.py:337
+#: src/pyams_content/workflow/__init__.py:338
 msgid "Reset canceled publication to retired"
 msgstr "Retour automatique en statut 'retiré'"
 
-#: src/pyams_content/workflow/__init__.py:341
+#: src/pyams_content/workflow/__init__.py:342
 msgid "State reset to 'retired' (automatic)"
 msgstr "Retour automatique en statut 'retiré'"
 
-#: src/pyams_content/workflow/__init__.py:345
+#: src/pyams_content/workflow/__init__.py:346
 msgid "Refuse publication"
 msgstr "Refuser la publication"
 
-#: src/pyams_content/workflow/__init__.py:353
+#: src/pyams_content/workflow/__init__.py:354
 msgid "Publication refused"
 msgstr "Refus de publication"
 
-#: src/pyams_content/workflow/__init__.py:355
+#: src/pyams_content/workflow/__init__.py:356
 #, python-format
 msgid "refused the publication request for content « {0} »"
 msgstr "a refusé la publication du contenu « {0} »"
 
-#: src/pyams_content/workflow/__init__.py:359
+#: src/pyams_content/workflow/__init__.py:360
 msgid "Reset refused publication to draft"
 msgstr "Publication refusée"
 
-#: src/pyams_content/workflow/__init__.py:367
+#: src/pyams_content/workflow/__init__.py:368
 msgid "Reset refused publication to retired"
 msgstr "Publication refusée"
 
-#: src/pyams_content/workflow/__init__.py:371
+#: src/pyams_content/workflow/__init__.py:372
 msgid "State reset to 'refused' (automatic)"
 msgstr "Retour automatique en status 'refusé'"
 
-#: src/pyams_content/workflow/__init__.py:383
-#: src/pyams_content/workflow/basic.py:204
+#: src/pyams_content/workflow/__init__.py:384
+#: src/pyams_content/workflow/basic.py:205
 msgid "Content published"
 msgstr "Publication"
 
-#: src/pyams_content/workflow/__init__.py:385
-#: src/pyams_content/workflow/basic.py:206
+#: src/pyams_content/workflow/__init__.py:386
+#: src/pyams_content/workflow/basic.py:207
 #, python-format
 msgid "published the content « {0} »"
 msgstr "a publié le contenu « {0} »"
 
-#: src/pyams_content/workflow/__init__.py:389
+#: src/pyams_content/workflow/__init__.py:390
 msgid "Request retiring"
 msgstr "Demander le retrait"
 
-#: src/pyams_content/workflow/__init__.py:395
+#: src/pyams_content/workflow/__init__.py:396
 msgid "Retire request"
 msgstr "Demande de retrait"
 
-#: src/pyams_content/workflow/__init__.py:399
+#: src/pyams_content/workflow/__init__.py:400
 #, python-format
 msgid "submitted a retire request for content « {0} »"
 msgstr "a demandé le retrait du contenu « {0} »"
 
-#: src/pyams_content/workflow/__init__.py:403
+#: src/pyams_content/workflow/__init__.py:404
 msgid "Retired content"
 msgstr "Contenu retiré"
 
-#: src/pyams_content/workflow/__init__.py:407
+#: src/pyams_content/workflow/__init__.py:408
 msgid "Content retired after passed expiration date"
 msgstr "Retrait automatique après la date de fin de publication"
 
-#: src/pyams_content/workflow/__init__.py:410
+#: src/pyams_content/workflow/__init__.py:411
 msgid "Cancel retiring request"
 msgstr "Annuler la demande de retrait"
 
-#: src/pyams_content/workflow/__init__.py:417
+#: src/pyams_content/workflow/__init__.py:418
 msgid "Retire request canceled"
 msgstr "Annulation de la demande de retrait"
 
-#: src/pyams_content/workflow/__init__.py:419
+#: src/pyams_content/workflow/__init__.py:420
 #, python-format
 msgid "cancelled the retiring request for content « {0} »"
 msgstr "a annulé la demande de retrait du contenu « {0} »"
 
-#: src/pyams_content/workflow/__init__.py:423
+#: src/pyams_content/workflow/__init__.py:424
 msgid "Retire content"
 msgstr "Retirer"
 
-#: src/pyams_content/workflow/__init__.py:430
+#: src/pyams_content/workflow/__init__.py:431
 msgid "Content retired"
 msgstr "Retrait"
 
-#: src/pyams_content/workflow/__init__.py:432
+#: src/pyams_content/workflow/__init__.py:433
 #, python-format
 msgid "retired content « {0} »"
 msgstr "a retiré le contenu « {0} »"
 
-#: src/pyams_content/workflow/__init__.py:442
+#: src/pyams_content/workflow/__init__.py:443
 msgid "Archive request"
 msgstr "Demande d'archivage"
 
-#: src/pyams_content/workflow/__init__.py:446
+#: src/pyams_content/workflow/__init__.py:447
 #, python-format
 msgid "submitted an archive request for content « {0} »"
 msgstr "a demandé l'archivage du contenu « {0} »"
 
-#: src/pyams_content/workflow/__init__.py:450
+#: src/pyams_content/workflow/__init__.py:451
 msgid "Cancel archiving request"
 msgstr "Annuler la demande d'archivage"
 
-#: src/pyams_content/workflow/__init__.py:457
+#: src/pyams_content/workflow/__init__.py:458
 msgid "Archive request canceled"
 msgstr "Annulation de la demande d'archivage"
 
-#: src/pyams_content/workflow/__init__.py:459
+#: src/pyams_content/workflow/__init__.py:460
 #, python-format
 msgid "cancelled the archive request for content « {0} »"
 msgstr "a annulé la demande d'archivage du contenu « {0} »"
 
-#: src/pyams_content/workflow/__init__.py:463
-#: src/pyams_content/workflow/basic.py:210
+#: src/pyams_content/workflow/__init__.py:464
+#: src/pyams_content/workflow/basic.py:211
 msgid "Archive content"
 msgstr "Archiver"
 
-#: src/pyams_content/workflow/__init__.py:471
-#: src/pyams_content/workflow/basic.py:218
+#: src/pyams_content/workflow/__init__.py:472
+#: src/pyams_content/workflow/basic.py:219
 msgid "Content archived"
 msgstr "Archivage"
 
-#: src/pyams_content/workflow/__init__.py:473
-#: src/pyams_content/workflow/basic.py:220
+#: src/pyams_content/workflow/__init__.py:474
+#: src/pyams_content/workflow/basic.py:221
 #, python-format
 msgid "archived content « {0} »"
 msgstr "a archivé le contenu « {0} »"
 
-#: src/pyams_content/workflow/__init__.py:477
+#: src/pyams_content/workflow/__init__.py:478
 msgid "Archive published content"
 msgstr "Archivage automatique d'un contenu publié"
 
-#: src/pyams_content/workflow/__init__.py:481
-#: src/pyams_content/workflow/__init__.py:489
-#: src/pyams_content/workflow/__init__.py:497
+#: src/pyams_content/workflow/__init__.py:482
+#: src/pyams_content/workflow/__init__.py:490
+#: src/pyams_content/workflow/__init__.py:498
 msgid "Content archived after version publication"
 msgstr "Archivage automatique après publication"
 
-#: src/pyams_content/workflow/__init__.py:485
+#: src/pyams_content/workflow/__init__.py:486
 msgid "Archive retiring content"
 msgstr "Archivage automatique d'un contenu en attente de retrait"
 
-#: src/pyams_content/workflow/__init__.py:493
+#: src/pyams_content/workflow/__init__.py:494
 msgid "Archive retired content"
 msgstr "Archivage automatique d'un contenu retiré"
 
-#: src/pyams_content/workflow/__init__.py:509
-#: src/pyams_content/workflow/__init__.py:521
-#: src/pyams_content/workflow/__init__.py:533
-#: src/pyams_content/workflow/__init__.py:545
-#: src/pyams_content/workflow/__init__.py:557
-#: src/pyams_content/workflow/basic.py:232
-#: src/pyams_content/workflow/basic.py:244
+#: src/pyams_content/workflow/__init__.py:510
+#: src/pyams_content/workflow/__init__.py:522
+#: src/pyams_content/workflow/__init__.py:534
+#: src/pyams_content/workflow/__init__.py:546
+#: src/pyams_content/workflow/__init__.py:558
+#: src/pyams_content/workflow/basic.py:233
+#: src/pyams_content/workflow/basic.py:245
 msgid "New version created"
 msgstr "Création d'une nouvelle version"
 
-#: src/pyams_content/workflow/__init__.py:569
-#: src/pyams_content/workflow/basic.py:256
+#: src/pyams_content/workflow/__init__.py:570
+#: src/pyams_content/workflow/basic.py:257
 msgid "Version deleted"
 msgstr "Version supprimée"
 
-#: src/pyams_content/workflow/__init__.py:622
-#: src/pyams_content/workflow/__init__.py:644
-#: src/pyams_content/workflow/basic.py:289
-#: src/pyams_content/workflow/basic.py:311
+#: src/pyams_content/workflow/__init__.py:623
+#: src/pyams_content/workflow/__init__.py:645
+#: src/pyams_content/workflow/basic.py:290
+#: src/pyams_content/workflow/basic.py:312
 msgid "Unknown state"
 msgstr "(statut inconnu)"
 
-#: src/pyams_content/workflow/__init__.py:646
-#: src/pyams_content/workflow/basic.py:313
+#: src/pyams_content/workflow/__init__.py:647
+#: src/pyams_content/workflow/basic.py:314
 msgid "publication refused"
 msgstr "publication refusée"
 
-#: src/pyams_content/workflow/__init__.py:642
-#: src/pyams_content/workflow/basic.py:309
+#: src/pyams_content/workflow/__init__.py:643
+#: src/pyams_content/workflow/basic.py:310
 msgid "new version created"
 msgstr "nouvelle version en préparation"
 
@@ -4900,11 +5970,6 @@
 msgid "Published version {0}"
 msgstr "Version {0} publiée"
 
-#: src/pyams_content/workflow/task.py:62
-msgid "Automatic contents withdrawal:\n"
-msgstr ""
-"Retrait automatique des contenus après la date de fin de publication :\n"
-
 #: src/pyams_content/workflow/zmi/task.py:42
 msgid "Add content archiver task..."
 msgstr "Ajouter une tâche d'archivage automatique"
@@ -4913,849 +5978,39 @@
 msgid "Add automatic content archiver"
 msgstr "Ajout d'une tâche d'archivage automatique"
 
-#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:46
-msgid "Shared sites"
-msgstr "Sites et blogs"
-
-#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:67
-msgid "Shared contents"
-msgstr "Gabarits"
-
-#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:90
-msgid "Shared tools"
-msgstr "Outils"
-
-#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:113
-msgid "My roles"
-msgstr "Mes rôles"
-
-#: src/pyams_content/skin/zmi/viewlet/toplinks/templates/user-addings.pt:7
-msgid "Create new content"
-msgstr "Créer un nouveau contenu"
-
-#: src/pyams_content/interfaces/__init__.py:95
-msgid "Unique key"
-msgstr "Clé unique"
-
-#: src/pyams_content/interfaces/__init__.py:96
-msgid ""
-"WARNING: this key can't be modified after creation!!! Spaces, uppercase "
-"letters ou accentuated characters will be replaced automatically."
-msgstr ""
-"ATTENTION : cette clé ne pourra plus être modifiée après sa création. Les "
-"espaces, les majuscules, les lettres accentuées et les caractères spéciaux "
-"seront remplacées automatiquement."
-
-#: src/pyams_content/interfaces/__init__.py:105
-msgid "Short name"
-msgstr "Fil d'Ariane"
-
-#: src/pyams_content/interfaces/__init__.py:106
-msgid "Short name used in breadcrumbs"
-msgstr "Libellé utilisé dans le fil d'Ariane"
-
-#: src/pyams_content/interfaces/__init__.py:117
-msgid "Modification date"
-msgstr "Dernière modification apportée"
-
-#: src/pyams_content/reference/zmi/table.py:73
-msgid "Contents"
-msgstr "Contenu"
-
-#: src/pyams_content/reference/zmi/table.py:83
-msgid "Table contents"
-msgstr "Contenu de la table"
-
-#: src/pyams_content/reference/zmi/table.py:129
-#: src/pyams_content/reference/zmi/__init__.py:69
-msgid "References tables"
-msgstr "Tables de références"
-
-#: src/pyams_content/reference/zmi/table.py:143
-msgid "Properties..."
-msgstr "Propriétés"
-
-#: src/pyams_content/reference/zmi/table.py:157
-msgid "Edit table properties"
-msgstr "Propriétés de la table"
-
-#: src/pyams_content/reference/zmi/table.py:167
-msgid "Table management"
-msgstr "Gérer cette table"
-
-#: src/pyams_content/reference/zmi/__init__.py:51
-msgid "References"
-msgstr "Tables de réf."
-
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:169
-#: src/pyams_content/reference/pictograms/zmi/widget.py:55
-msgid "Default header: --"
-msgstr "En-tête par défaut : --"
-
-#: src/pyams_content/reference/pictograms/zmi/manager.py:51
-msgid "Pictograms selection..."
-msgstr "Sélection de pictogrammes"
-
-#: src/pyams_content/reference/pictograms/zmi/manager.py:63
-#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:34
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:73
-msgid "Selected pictograms"
-msgstr "Pictogrammes sélectionnés"
-
-#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:7
-msgid "Available pictograms"
-msgstr "Pictogrammes disponibles"
-
-#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:21
-#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:48
-msgid "Display pictogram properties"
-msgstr "Propriétés du pictogramme"
-
-#: src/pyams_content/reference/pictograms/zmi/templates/pictogram-header.pt:6
-msgid "Default header: ${header}"
-msgstr "En-tête par défaut : ${header}"
-
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:45
-msgid "Pictogram content"
-msgstr "Utilisez le bouton \"Parcourir\" pour modifier le contenu de l'image"
-
-#. Default: Header
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:52
-msgid "pictogram-header"
-msgstr "En-tête par défaut"
-
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:53
-msgid "Default header associated with this pictogram"
-msgstr "En-tête par défaut associé à ce pictogramme"
-
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:74
-msgid "List of selected pictograms which will be available to shared contents"
-msgstr "Liste des pictogrammes proposés dans les contenus partagés"
-
-#: src/pyams_content/features/renderer/zmi/__init__.py:71
-#: src/pyams_content/features/renderer/zmi/templates/renderer-input.pt:4
-msgid "Edit renderer properties"
-msgstr "Propriétés de ce mode de rendu"
-
-#: src/pyams_content/features/renderer/skin/__init__.py:71
-msgid "Hidden content"
-msgstr "NON affiché"
-
-#: src/pyams_content/features/checker/interfaces.py:27
-#, python-format
-msgid " - {field}: <span class=\"text-danger\">no value</span>"
-msgstr " - {field} : <span class=\"text-danger\">non renseigné</span>"
-
-#: src/pyams_content/features/checker/interfaces.py:28
-#, python-format
-msgid " - {field} ({lang}): <span class=\"text-danger\">no value</span>"
-msgstr " - {field} ({lang}) : <span class=\"text-danger\">non renseigné</span>"
-
-#: src/pyams_content/features/checker/interfaces.py:29
-#, python-format
-msgid " - {field}: <span class=\"text-danger\">{message}</span>"
-msgstr " - {field} : <span class=\"text-danger\">{message}</span>"
-
-#: src/pyams_content/features/checker/zmi/__init__.py:58
-msgid "Content check"
-msgstr "Audit du contenu"
-
-#: src/pyams_content/features/checker/zmi/__init__.py:82
-msgid "No checker available. This content is clean!"
-msgstr "Pas de vérificateur disponible pour ce contenu."
-
-#: src/pyams_content/features/checker/zmi/__init__.py:78
-#, python-format
-msgid "{0}:"
-msgstr "{0} :"
-
-#: src/pyams_content/features/preview/zmi/__init__.py:62
-msgid "Content preview"
-msgstr "Aperçu du contenu"
-
-#: src/pyams_content/features/preview/zmi/__init__.py:67
-#, python-format
-msgid "{title} ({preview})"
-msgstr "{title} ({preview})"
-
-#: src/pyams_content/features/preview/zmi/__init__.py:68
-msgid "preview"
-msgstr "aperçu"
-
-#: src/pyams_content/features/alert/interfaces.py:39
-msgid "Alert"
-msgstr "Alerte"
-
-#: src/pyams_content/features/alert/interfaces.py:40
-msgid "End of alert"
-msgstr "Levée d'alerte"
-
-#: src/pyams_content/features/alert/interfaces.py:41
-msgid "Information"
-msgstr "Information"
-
-#: src/pyams_content/features/alert/interfaces.py:42
-msgid "Warning"
-msgstr "Avertissement"
-
-#: src/pyams_content/features/alert/interfaces.py:43
-msgid "Recommendation"
-msgstr "Recommandation"
-
-#: src/pyams_content/features/alert/interfaces.py:55
-msgid "Is this alert visible in front-office?"
-msgstr "Si 'non', cette alerte ne sera pas présentée aux internautes"
-
-#: src/pyams_content/features/alert/interfaces.py:59
-msgid "Alert gravity"
-msgstr "Niveau de gravité"
-
-#: src/pyams_content/features/alert/interfaces.py:60
-msgid "Alert gravity will affect rendered alert style"
-msgstr "Le niveau de gravité choisi affectera le style de rendu de l'alerte"
-
-#: src/pyams_content/features/alert/interfaces.py:65
-#: src/pyams_content/features/alert/zmi/container.py:145
-msgid "Message"
-msgstr "Message"
-
-#: src/pyams_content/features/alert/interfaces.py:66
-msgid "Alert message"
-msgstr "Le message d'alerte doit être assez court et explicite"
-
-#: src/pyams_content/features/alert/interfaces.py:70
-msgid ""
-"Internal link target reference. You can search a reference using '+' "
-"followed by internal number, of by entering text matching content title."
-msgstr ""
-"Référence interne vers la cible du lien. Vous pouvez la rechercher par des "
-"mots de son titre, ou par son numéro interne (précédé d'un '+') ; le titre "
-"d'origine peut être modifié en utilisant le titre de substitution."
-
-#: src/pyams_content/features/alert/interfaces.py:75
-msgid "Display start date"
-msgstr "Date d'affichage"
-
-#: src/pyams_content/features/alert/interfaces.py:76
-msgid "First date at which alert should be displayed"
-msgstr ""
-"Première date à laquelle l'alerte sera affichée. Laissez la zone vide pour "
-"qu'elle soit affichée immédiatement."
-
-#: src/pyams_content/features/alert/interfaces.py:79
-msgid "Display end date"
-msgstr "Date de retrait"
-
-#: src/pyams_content/features/alert/interfaces.py:80
-msgid "Last date at which alert should be displayed"
-msgstr ""
-"Dernière date à laquelle l'alerte sera affichée. Laissez la zone vide pour "
-"qu'elle ne soit pas retirée."
-
-#: src/pyams_content/features/alert/interfaces.py:83
-msgid "Maximum interval"
-msgstr "Intervalle d'affichage"
-
-#: src/pyams_content/features/alert/interfaces.py:84
-msgid ""
-"Maximum interval between alert displays on a given device, given in hours; "
-"set to 0 to always display the alert"
-msgstr ""
-"Cet intervalle est donné en heures ; passé ce délai, pour un internaute "
-"donné, l'alerte apparaîtra à nouveau. Si aucun intervalle n'est indiqué, "
-"l'alerte s'affichera en permanence."
-
-#: src/pyams_content/features/alert/zmi/__init__.py:45
-msgid "Add alert"
-msgstr "Ajouter une alerte"
-
-#: src/pyams_content/features/alert/zmi/__init__.py:56
-msgid "Add new alert"
-msgstr "Ajout d'une alerte"
-
-#: src/pyams_content/features/alert/zmi/__init__.py:79
-msgid "Edit alert properties"
-msgstr "Propriétés de l'alerte"
-
-#: src/pyams_content/features/alert/zmi/container.py:55
-msgid "Alerts"
-msgstr "Alertes"
-
-#: src/pyams_content/features/alert/zmi/container.py:167
-msgid "Alert list"
-msgstr "Liste des alertes"
-
-#: src/pyams_content/features/alert/zmi/container.py:97
-msgid "No currently defined alert."
-msgstr "Aucune alerte n'est définie actuellement."
-
-#: src/pyams_content/features/redirect/container.py:81
-msgid "not matching"
-msgstr "pas de correspondance"
-
-#: src/pyams_content/features/redirect/zmi/__init__.py:50
-msgid "Add rule"
-msgstr "Ajouter une règle"
-
-#: src/pyams_content/features/redirect/zmi/__init__.py:63
-msgid "Add new redirection rule"
-msgstr "Ajout d'une règle de redirection"
-
-#: src/pyams_content/features/redirect/zmi/__init__.py:88
-msgid "Edit redirection rule properties"
-msgstr "Propriétés de la règle de redirection"
-
-#: src/pyams_content/features/redirect/zmi/__init__.py:109
-msgid ""
-"URL pattern and target URL are defined by *regular expressions* (see |"
-"regexp|).\n"
-"    \n"
-"In URL pattern, you can use any valid regular expression element, notably:\n"
-"\n"
-"- « .* » to match any list of characters \n"
-"\n"
-"- « ( ) » to \"memorize\" parts of the URL which can be replaced into target "
-"URL\n"
-"\n"
-"- special characters (like \"+\") must be escaped with an « \\\\ ».\n"
-"\n"
-"In target URL, memorized parts can be reused using « \\\\1 », « \\\\2 » and "
-"so on, where given number is\n"
-"the order of the matching pattern element.\n"
-"\n"
-".. |regexp| raw:: html\n"
-"\n"
-"    <a href=\"https://docs.python.org/3/library/re.html\" target=\"_blank"
-"\">Python Regular Expressions</a>\n"
-msgstr ""
-"Le schéma d'URL et l'URL cible sont définis en tant que « expressions "
-"rationelles » (voir |regexp|).\n"
-"\n"
-"Dans le schéma d'URL utilisé pour identifier les requêtes en entrée, vous "
-"pouvez utiliser tout élément d'une expression rationnelle valide, "
-"notamment :\n"
-"\n"
-"- « .* » pour rechercher n'importe quelle suite de caractères\n"
-"\n"
-"- « ^ » et « $ » pour identifier le début ou la fin de l'URL\n"
-"\n"
-"- « ( ) » pour \"mémoriser\" certains éléments de l'URL qui pourront être "
-"repris dans l'URL cible\n"
-"\n"
-"- les caractères spéciaux (comme les \"+\") doivent être protégés par un "
-"caractère « \\\\ ».\n"
-"\n"
-"For exemple : dans le schéma « ^/.*?oid=([a-z0-9]+)$ », toute URL contenant "
-"un paramètre \"oid\" composé de minuscules et/ou de chiffres sera mémorisé "
-"pour pouvoir être réutilisé dans l'URL cible.\n"
-"\n"
-"Dans l'URL cible, les éléments mémorisés peuvent être réutilisés en "
-"utilisant une expression comme « \\\\1 », « \\\\2 » (et ainsi de suite), le "
-"chiffre indiquant la position de l'élément dans la liste des éléments "
-"mémorisés.\n"
-"\n"
-".. |regexp| raw:: html\n"
-"\n"
-"    <a href=\"https://docs.python.org/fr/3/library/re.html\" target=\"_blank"
-"\">Expressions rationnelles en Python</a>\n"
-
-#: src/pyams_content/features/redirect/zmi/container.py:67
-msgid "Redirections"
-msgstr "Redirections"
-
-#: src/pyams_content/features/redirect/zmi/container.py:161
-msgid "Enable/disable rule"
-msgstr "Activer/désactiver la règle"
-
-#: src/pyams_content/features/redirect/zmi/container.py:188
-msgid "Chain/unchain rule"
-msgstr "Enchaîner la règle avec la suivante"
-
-#: src/pyams_content/features/redirect/zmi/container.py:210
-#: src/pyams_content/features/redirect/zmi/container.py:366
-#: src/pyams_content/features/redirect/interfaces/__init__.py:56
-msgid "URL pattern"
-msgstr "Schéma d'URL"
-
-#: src/pyams_content/features/redirect/zmi/container.py:220
-msgid "Target"
-msgstr "Cible"
-
-#: src/pyams_content/features/redirect/zmi/container.py:246
-msgid "Redirections list"
-msgstr "Liste des règles de redirection"
-
-#: src/pyams_content/features/redirect/zmi/container.py:261
-msgid "Redirection rules"
-msgstr "Règles de redirection"
-
-#: src/pyams_content/features/redirect/zmi/container.py:262
-msgid ""
-"Redirection rules are use to handle redirections responses when a request "
-"generates \n"
-"a famous « 404 NotFound » error.\n"
-"\n"
-"Redirections are particularly useful when you are migrating from a previous "
-"site and don't want to lose \n"
-"your SEO.\n"
-"\n"
-"You can define a set of rules which will be applied to every \"NotFound\" "
-"request; rules are based on \n"
-"regular expressions which are applied to input URL: if the rule is \"matching"
-"\", the target URL is rewritten\n"
-"and a \"Redirect\" response is send.\n"
-"\n"
-"You can chain rules together: when a rule is chained, it's rewritten URL is "
-"passed as input URL to the \n"
-"next rule, until a matching rule is found.\n"
-msgstr ""
-"Les règles de redirection sont utilisées pour transmettre des réponses de "
-"redirection au lieu de la fameuse erreur « 404 - Page non trouvée ».\n"
-"\n"
-"La gestion des redirections est particulièrement importante en phase de "
-"migration d'un site web, pour éviter les liens cassés, ne pas perdre votre "
-"référencement et faciliter la mise à jour des moteurs de recherche.\n"
-"\n"
-"Vous pouvez définir un ensemble de règles qui seront appliquées dès lors "
-"qu'une requête adressée au serveur génère une erreur de page non trouvée ; "
-"les règles sont basées sur des expressions rationnelles que l'on applique à "
-"l'URL de la requête reçue : si la règle correspond, l'URL est réécrite et "
-"une réponse de redirection vers cette nouvelle URL est renvoyée.\n"
-"\n"
-"Vous pouvez également enchaîner les règles : lorsqu'une règle est \"chaînée"
-"\", la nouvelle URL qu'elle génère est passée aux règles suivantes, jusqu'à "
-"ce qu'une règle s'applique à cette nouvelle URL.\n"
-
-#: src/pyams_content/features/redirect/zmi/container.py:288
-msgid "Test"
-msgstr "Tester !"
-
-#: src/pyams_content/features/redirect/zmi/container.py:323
-msgid "Test redirection rules"
-msgstr "Test des règles de redirection"
-
-#: src/pyams_content/features/redirect/zmi/container.py:301
-msgid "Test URL"
-msgstr "URL à tester"
-
-#: src/pyams_content/features/redirect/zmi/container.py:304
-msgid "Check inactive rules?"
-msgstr "Tester les règles inactive ?"
-
-#: src/pyams_content/features/redirect/zmi/container.py:305
-msgid "If 'yes', inactive rules will also be tested"
-msgstr "Si 'oui', les règles inactives seront également testées"
-
-#: src/pyams_content/features/redirect/zmi/container.py:313
-msgid "Close"
-msgstr "Fermer"
-
-#: src/pyams_content/features/redirect/zmi/container.py:314
-msgid "Test rules"
-msgstr "Tester cette URL"
-
-#: src/pyams_content/features/redirect/zmi/container.py:123
-msgid "No currently defined redirection rule."
-msgstr "Aucune règle de redirection n'est définie actuellement."
-
-#: src/pyams_content/features/redirect/zmi/container.py:371
-msgid "No matching rule!"
-msgstr "Aucune règle ne correspond !"
-
-#: src/pyams_content/features/redirect/zmi/container.py:365
-msgid "Input URL"
-msgstr "URL en entrée"
-
-#: src/pyams_content/features/redirect/zmi/container.py:367
-msgid "Output URL"
-msgstr "URL générée"
-
-#: src/pyams_content/features/redirect/interfaces/__init__.py:39
-msgid "Active rule?"
-msgstr "Règle active ?"
-
-#: src/pyams_content/features/redirect/interfaces/__init__.py:40
-msgid "If 'no', selected rule is inactive"
-msgstr "Si 'non', la règle est inactive"
-
-#: src/pyams_content/features/redirect/interfaces/__init__.py:44
-msgid "Chained rule?"
-msgstr "Règle chaînée ?"
-
-#: src/pyams_content/features/redirect/interfaces/__init__.py:45
-msgid ""
-"If 'no', and if this rule is matching received request URL, the rule returns "
-"a redirection response; otherwise, the rule just rewrites the input URL "
-"which is forwarded to the next rule"
-msgstr ""
-"Si 'non', et si cette règle correspond à l'URL reçue en entrée, une réponde "
-"de redirection est renvoyée directement ; dans le cas contraire, l'URL "
-"générée par cette règle est passée en entrée de la règle suivante"
-
-#: src/pyams_content/features/redirect/interfaces/__init__.py:51
-msgid "Permanent redirect?"
-msgstr "Redirection permanente ?"
-
-#: src/pyams_content/features/redirect/interfaces/__init__.py:52
-msgid "Define if this redirection should be permanent or temporary"
-msgstr ""
-"Indique si cette redirection doit être considérée comme permanente ou "
-"temporaire"
-
-#: src/pyams_content/features/redirect/interfaces/__init__.py:57
-msgid "Regexp pattern of matching URLs for this redirection rule"
-msgstr "Modèle de l'URL d'origine de cette règle de redirection"
-
-#: src/pyams_content/features/redirect/interfaces/__init__.py:62
-msgid "Internal redirection target"
-msgstr "Redirection interne"
-
-#: src/pyams_content/features/redirect/interfaces/__init__.py:63
-msgid ""
-"Internal redirection reference. You can search a reference using '+' "
-"followed by internal number, of by entering text matching content title."
-msgstr ""
-"Référence interne vers une cible de redirection. Vous pouvez la rechercher "
-"par des mots de son titre, ou par son numéro interne (précédé d'un '+')"
-
-#: src/pyams_content/features/redirect/interfaces/__init__.py:69
-msgid "URL to which source URL should be redirected"
-msgstr "URL vers laquelle l'URL d'origine doit être redirigée"
-
-#: src/pyams_content/features/redirect/interfaces/__init__.py:75
-msgid "You can only provide an internal reference OR a target URL"
-msgstr ""
-"Vous ne pouvez fournir qu'une référence interne OU une URL de redirection !"
-
-#: src/pyams_content/features/redirect/interfaces/__init__.py:77
-msgid "You must provide an internal reference OR a target URL"
-msgstr "Vous devez fournir une référence interne OU une URL de redirection !"
-
-#: src/pyams_content/features/menu/zmi/__init__.py:81
-msgid "Add menu..."
-msgstr "Ajouter un menu"
-
-#: src/pyams_content/features/menu/zmi/__init__.py:92
-msgid "Add new menu"
-msgstr "Ajout d'un menu"
-
-#: src/pyams_content/features/menu/zmi/__init__.py:123
-msgid "Edit menu properties"
-msgstr "Propriétés du menu"
-
-#: src/pyams_content/features/menu/zmi/__init__.py:110
-msgid "Menu was correctly added."
-msgstr "Le menu a été ajouté."
-
-#: src/pyams_content/features/menu/zmi/__init__.py:395
-msgid "Link was correctly added."
-msgstr "Le lien a été ajouté."
-
-#: src/pyams_content/features/menu/zmi/templates/menu-name-cell.pt:7
-msgid "Click to see menu items"
-msgstr "Montrer ou cacher les éléments du menu"
-
-#: src/pyams_content/features/menu/portlet/navigation/simple.py:67
-msgid "Simple navigation"
-msgstr "Navigation à un niveau"
-
-#: src/pyams_content/features/menu/portlet/navigation/double.py:67
-msgid "Double navigation"
-msgstr "Navigation à deux niveaux"
-
-#: src/pyams_content/features/menu/portlet/navigation/zmi/simple.py:69
-msgid "Navigation links"
-msgstr "Liens de navigation"
-
-#: src/pyams_content/features/menu/portlet/navigation/zmi/double.py:69
-msgid "Navigation menus"
-msgstr "Menus de navigation"
-
-#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:14
-#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:11
-msgid "Link has no illustration"
-msgstr "Le lien n'a pas d'illustration"
-
-#: src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:32
-#: src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:32
-msgid "Portlet main title"
-msgstr "Titre du composant"
-
-#: src/pyams_content/features/menu/interfaces/__init__.py:64
-msgid "Menu title"
-msgstr "Libellé"
-
-#: src/pyams_content/features/menu/interfaces/__init__.py:65
-msgid "Displayed menu label"
-msgstr "Libellé du menu"
-
-#: src/pyams_content/features/menu/interfaces/__init__.py:69
-msgid "Direct reference to menu target"
-msgstr ""
-"Lorsque le menu est utilisé dans l'en-tête de page, référence interne vers "
-"la cible du menu (site ou rubrique) permettant de mettre en évidence le menu "
-"actif ; un lien sera également créé vers cette référence si le menu ne "
-"contient aucun lien."
-
-#: src/pyams_content/features/footer/zmi/__init__.py:60
-msgid "Page footer"
-msgstr "Pied de pages"
-
-#: src/pyams_content/features/footer/zmi/__init__.py:78
-msgid "Edit footer settings"
-msgstr "Paramétrage des pieds de pages"
-
-#: src/pyams_content/features/footer/zmi/__init__.py:152
-msgid ""
-"WARNING: Footer properties are saved automatically when changing inherit "
-"mode!!"
-msgstr ""
-"ATTENTION : les propriétés du pied de page sont enregistrées automatiquement "
-"lorsque vous modifiez le mode d'héritage !!"
-
-#: src/pyams_content/features/footer/zmi/__init__.py:220
-msgid "Footer renderer settings"
-msgstr "Propriétés de ce mode de rendu"
-
-#: src/pyams_content/features/footer/zmi/__init__.py:107
-msgid "Don't inherit parent footer"
-msgstr "Ne pas hériter du pied de pages du parent"
-
-#: src/pyams_content/features/footer/skin/__init__.py:94
-msgid "Hidden footer"
-msgstr "Ne pas afficher de pied de pages"
-
-#: src/pyams_content/features/footer/interfaces/__init__.py:39
-msgid "Footer template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/features/footer/interfaces/__init__.py:40
-msgid "Presentation template used for this footer"
-msgstr "Mode de rendu utilisé par ce pied de page"
-
-#: src/pyams_content/features/review/__init__.py:181
-#, python-format
-msgid "Request comment: {comment}"
-msgstr "Commentaire joint : {comment}"
-
-#: src/pyams_content/features/review/__init__.py:211
-#, python-format
-msgid "A new comment was added on content « {0} »"
-msgstr "Un nouveau commentaire a été ajouté pour le contenu « {0} »"
-
-#: src/pyams_content/features/review/__init__.py:168
-#, python-format
-msgid "[{service_name}] A content review is requested"
-msgstr "[{service_name}] Demande de relecture"
-
-#: src/pyams_content/features/review/interfaces.py:32
-msgid "Review request"
-msgstr "Demande de relecture"
-
-#: src/pyams_content/features/review/interfaces.py:33
-msgid "Reviewer comment"
-msgstr "Commentaire"
-
-#: src/pyams_content/features/review/interfaces.py:56
-msgid "Comment writer"
-msgstr "Rédacteur"
-
-#: src/pyams_content/features/review/interfaces.py:59
-msgid "Content reviewers"
-msgstr "Relecteurs sollicités"
-
-#: src/pyams_content/features/review/interfaces.py:62
-msgid "Comment type"
-msgstr "Type de commentaire"
-
-#: src/pyams_content/features/review/interfaces.py:67
-msgid "Comment body"
-msgstr "Commentaire"
-
-#: src/pyams_content/features/review/interfaces.py:70
-msgid "Reviewer comment?"
-msgstr "Commentaire d'un relecteur ?"
-
-#: src/pyams_content/features/review/interfaces.py:86
-msgid "Reviewers list"
-msgstr "Liste des relecteurs"
-
-#: src/pyams_content/features/review/interfaces.py:87
-msgid "List of principals which reviewed the comment"
-msgstr "Liste des utilisateurs qui ont apporté des commentaires sur ce contenu"
-
-#: src/pyams_content/features/review/zmi/__init__.py:61
-msgid "Ask for review..."
-msgstr "Demander une relecture"
-
-#: src/pyams_content/features/review/zmi/__init__.py:100
-msgid "Content review request"
-msgstr "Demande de relecture"
-
-#: src/pyams_content/features/review/zmi/__init__.py:165
-msgid "Comments"
-msgstr "Commentaires"
-
-#: src/pyams_content/features/review/zmi/__init__.py:185
-msgid "Review comments"
-msgstr "Commentaires associés à cette version"
-
-#: src/pyams_content/features/review/zmi/__init__.py:71
-msgid "Sought principals"
-msgstr "Relecteurs sollicités"
-
-#: src/pyams_content/features/review/zmi/__init__.py:72
-msgid "List of principals from which a review is requested"
-msgstr ""
-"Liste des utilisateurs que vous souhaitez solliciter par mail pour relire ce "
-"contenu"
-
-#: src/pyams_content/features/review/zmi/__init__.py:75
-msgid "Comment"
-msgstr "Commentaire"
-
-#: src/pyams_content/features/review/zmi/__init__.py:76
-msgid "Comment associated with this request"
-msgstr ""
-"Ce commentaire associé à cette demande sera également transmis par mail"
-
-#: src/pyams_content/features/review/zmi/__init__.py:79
-msgid "Notify all reviewers"
-msgstr "Notifier tous les relecteurs"
-
-#: src/pyams_content/features/review/zmi/__init__.py:80
-msgid ""
-"If 'yes', selected reviewers will be notified by mail of your request, even "
-"if they were already members of the reviewers group. Otherwise, only new "
-"reviewers will be notified"
-msgstr ""
-"Si 'oui', tous les relecteurs sollicités seront notifiés par mail de votre "
-"demande, même s'ils avaient déjà été sollicités auparavant. Dans le cas "
-"contraire, seuls les nouveaux relecteurs seront notifiés."
-
-#: src/pyams_content/features/review/zmi/__init__.py:91
-msgid "Ask for content review"
-msgstr "Demander la relecture"
-
-#: src/pyams_content/features/review/zmi/__init__.py:146
-msgid "Request successful. No new notification have been sent"
-msgstr ""
-"Votre demande a été transmise. Aucune nouvelle notification n'a été envoyée."
-
-#: src/pyams_content/features/review/zmi/__init__.py:259
-msgid "Message is mandatory!"
-msgstr "Un commentaire est obligatoire !"
-
-#: src/pyams_content/features/review/zmi/__init__.py:134
-#, python-format
-msgid "Request successful. {count} new notification(s) have been sent"
-msgstr "Votre demande a été transmise. {count} notification(s) envoyée(s)."
-
-#: src/pyams_content/features/review/zmi/templates/review-comments.pt:32
-#: src/pyams_content/features/review/zmi/templates/review-comments-json.pt:15
-#: src/pyams_content/features/review/zmi/templates/review-add-comment.pt:14
-msgid "Review query from"
-msgstr "Demande de relecture de "
-
-#: src/pyams_content/features/review/zmi/templates/review-comments.pt:38
-#: src/pyams_content/features/review/zmi/templates/review-comments-json.pt:21
-#: src/pyams_content/features/review/zmi/templates/review-add-comment.pt:20
-msgid "(as reviewer)"
-msgstr "(relecteur)"
-
-#: src/pyams_content/features/review/zmi/templates/review-comments.pt:47
-#: src/pyams_content/features/review/zmi/templates/review-comments-json.pt:30
-msgid "Selected reviewers:"
-msgstr "Auprès de :"
-
-#: src/pyams_content/features/review/zmi/templates/review-comments.pt:64
-msgid "Add comment"
-msgstr "Déposer un commentaire"
-
-#: src/pyams_content/features/review/zmi/templates/review-comments.pt:67
-msgid "Add a comment..."
-msgstr "Votre commentaire..."
-
-#: src/pyams_content/features/review/zmi/templates/review-comments.pt:73
-msgid "Add this comment"
-msgstr "Ajouter ce commentaire"
-
-#: src/pyams_content/features/review/zmi/templates/review-add-comment.pt:22
-msgid "just now"
-msgstr "À l'instant !"
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:4
-msgid "[${service_name}] You are requested for a content review"
-msgstr "[${service_name}] Demande de relecture"
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:30
-msgid "Hello,"
-msgstr "Bonjour,"
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:31
-msgid ""
-"You have been requested by ${sender}, contributor of « ${service_name} » "
-"website, to make a review of a content."
-msgstr ""
-"Vous êtes sollicité par ${sender}, contributeur du site internet "
-"${service_name}, qui souhaite recueillir votre commentaire à propos d'un "
-"contenu."
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:36
-msgid "${sender} added the following message to his request:"
-msgstr "${sender} a accompagné sa demande de relecture du message suivant :"
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:41
-msgid ""
-"To review and comment this publication, please use the following link: "
-"${target}."
-msgstr "Pour accéder à cette contribution, cliquer ici : ${target}."
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:44
-msgid "After reading this content, please use the « Comments » menu entry."
-msgstr ""
-"Lorsque vous aurez pris connaissance du contenu, cliquez sur « Commentaires "
-"» dans le menu en colonne de gauche."
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:45
-msgid ""
-"If you don't want to reply to this request, please contact ${sender} "
-"directly by replying to this mail."
-msgstr ""
-"Si vous ne souhaitez pas donner suite à cette demande, vous pouvez répondre "
-"directement à ${sender} en lui adressant un message dans ce sens."
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:47
-msgid "Thank you."
-msgstr "Merci."
-
-#: src/pyams_content/features/header/zmi/__init__.py:66
-msgid "Page header"
-msgstr "En-tête de pages"
-
-#: src/pyams_content/features/header/zmi/__init__.py:84
-msgid "Edit header settings"
-msgstr "Paramétrage des en-têtes de pages"
-
-#: src/pyams_content/features/header/zmi/__init__.py:161
-msgid ""
-"WARNING: Header properties are saved automatically when changing inherit "
-"mode!!"
-msgstr ""
-"ATTENTION : les propriétés de l'en-tête sont enregistrées automatiquement "
-"lorsque vous modifiez le mode d'héritage !!"
-
-#: src/pyams_content/features/header/zmi/__init__.py:229
-msgid "Header renderer settings"
-msgstr "Propriétés de ce mode de rendu"
-
-#: src/pyams_content/features/header/zmi/__init__.py:113
-msgid "Don't inherit parent header"
-msgstr "Ne pas hériter de l'en-tête de pages du parent"
-
-#: src/pyams_content/features/header/skin/__init__.py:100
-msgid "Hidden header"
-msgstr "Ne pas afficher d'en-tête de pages"
+#~ msgid "Display content title"
+#~ msgstr "Afficher le titre"
+
+#~ msgid "Display content title?"
+#~ msgstr "Afficher le titre ?"
+
+#~ msgid ""
+#~ "If 'no', content's title will not be repeated into navigation portlet"
+#~ msgstr ""
+#~ "Si 'non', le titre du gabarit ne sera pas répété dans le composant de "
+#~ "navigation"
+
+#~ msgid "({0} medias)"
+#~ msgstr "({0} médias dans la galerie)"
+
+#~ msgid "Author comments"
+#~ msgstr "À propos de l'auteur"
+
+#~ msgid "Comments relatives to author's rights management"
+#~ msgstr ""
+#~ "Commentaires (non publiés mais à conserver) relatifs à l'auteur et à la "
+#~ "gestion de ses droits"
+
+#~ msgid "Author's comments"
+#~ msgstr "À propos de l'auteur"
+
+#~ msgid "Source ID"
+#~ msgstr "ID source"
+
+#~ msgid "Number used to identify media into it's original source"
+#~ msgstr ""
+#~ "Identifiant ou référence de ce média dans la base de données dont elle "
+#~ "est issue ; au besoin, préciser le nom de cette base"
 
 #~ msgid "Context content"
 #~ msgstr "Contenu partagé"
@@ -6009,9 +6264,6 @@
 #~ msgid "Images data"
 #~ msgstr "Image(s) à ajouter"
 
-#~ msgid "Content type"
-#~ msgstr "Type de contenu"
-
 #~ msgid "A publication request has been submitted for content « {0} »"
 #~ msgstr "Une demande de publication a été soumise pour le contenu « {0} »"
 
--- a/src/pyams_content/locales/pyams_content.pot	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/locales/pyams_content.pot	Fri Oct 05 10:44:32 2018 +0200
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-09-06 16:56+0200\n"
+"POT-Creation-Date: 2018-10-03 10:57+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -41,7 +41,7 @@
 msgstr ""
 
 #: ./src/pyams_content/__init__.py:49
-#: ./src/pyams_content/workflow/__init__.py:375
+#: ./src/pyams_content/workflow/__init__.py:376
 msgid "Publish content"
 msgstr ""
 
@@ -81,425 +81,240 @@
 msgid "Guest user (role)"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/__init__.py:154
-msgid "Gallery"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/file.py:60
-#: ./src/pyams_content/component/gallery/zmi/file.py:72
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:155
-msgid "Add media(s)"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/file.py:182
-msgid "Update media properties"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/file.py:236
-msgid "Remove media..."
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/file.py:146
-msgid "Show/hide media"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/file.py:203
-msgid "Audio content"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:57
-msgid "Medias gallery..."
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:70
-msgid "Add new gallery"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:92
-msgid "Edit gallery properties"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/__init__.py:63
-msgid "Update gallery properties"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/__init__.py:90
-msgid "Update gallery contents"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/interfaces.py:36
-msgid "Images or videos data"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/interfaces.py:37
-msgid "You can upload a single file or choose to upload a whole ZIP archive"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/interfaces.py:40
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:61
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:44
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:68
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:52
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:52
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:44
-#: ./src/pyams_content/component/video/interfaces/__init__.py:52
-msgid "Author"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/interfaces.py:41
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:62
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:45
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:53
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:53
-#: ./src/pyams_content/component/video/interfaces/__init__.py:53
-msgid "Name of document's author"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/interfaces.py:44
-msgid "Author comments"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/interfaces.py:45
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:66
-msgid "Comments relatives to author's rights management"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:12
-msgid "Gallery medias"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:18
-msgid "Download medias"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:42
-msgid "Zoom image"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:133
-msgid "Medias gallery"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:47
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:46
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:105
-msgid "Image or video data"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:48
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:47
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:106
-msgid "Image or video content"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:51
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:53
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:45
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:45
-#: ./src/pyams_content/component/video/interfaces/__init__.py:75
-msgid "Legend"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:54
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:56
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:48
-msgid "Accessibility title"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:55
-msgid "Alternate title used to describe media content"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:58
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:101
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:40
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:48
-#: ./src/pyams_content/component/links/interfaces/__init__.py:39
-#: ./src/pyams_content/shared/form/interfaces/__init__.py:64
-msgid "Description"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:65
-msgid "Author's comments"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:69
-msgid "Source ID"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:70
-msgid "Number used to identify media into it's original source"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:73
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:89
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:41
-msgid "Audio data"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:74
-msgid "Sound file associated with the current media"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:77
-msgid "Sound title"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:78
-msgid "Title of associated sound file"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:81
-msgid "Sound description"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:82
-msgid "Short description of associated sound file"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:85
-msgid "Visible media?"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:86
-msgid "If 'no', this media won't be displayed in front office"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:97
-#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:31
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:239
-#: ./src/pyams_content/component/paragraph/zmi/container.py:270
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:45
-#: ./src/pyams_content/shared/common/zmi/reverse.py:73
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:109
-#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:200
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:56
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:123
-#: ./src/pyams_content/shared/site/zmi/folder.py:71
-#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:197
-#: ./src/pyams_content/interfaces/__init__.py:101
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:150
-#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:31
-#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:31
-msgid "Title"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:98
-msgid "Gallery title, as shown in front-office"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:102
-msgid "Gallery description displayed by front-office template"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:105
-msgid "Gallery template"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:106
-msgid "Presentation template used for this gallery"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/__init__.py:172
-#: ./src/pyams_content/component/extfile/__init__.py:176
-msgid "Standard file"
-msgstr ""
-
+#: ./src/pyams_content/reference/zmi/__init__.py:50
+msgid "References"
+msgstr ""
+
+#: ./src/pyams_content/reference/zmi/__init__.py:68
+#: ./src/pyams_content/reference/zmi/table.py:129
+msgid "References tables"
+msgstr ""
+
+#: ./src/pyams_content/reference/zmi/table.py:73
+msgid "Contents"
+msgstr ""
+
+#: ./src/pyams_content/reference/zmi/table.py:83
+msgid "Table contents"
+msgstr ""
+
+#: ./src/pyams_content/reference/zmi/table.py:143
+msgid "Properties..."
+msgstr ""
+
+#: ./src/pyams_content/reference/zmi/table.py:157
+msgid "Edit table properties"
+msgstr ""
+
+#: ./src/pyams_content/reference/zmi/table.py:167
+msgid "Table management"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:44
 #: ./src/pyams_content/component/extfile/__init__.py:223
 #: ./src/pyams_content/component/extfile/__init__.py:238
 #: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:67
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:44
 msgid "Image"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/__init__.py:253
-#: ./src/pyams_content/component/extfile/__init__.py:257
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:34
-msgid "Video"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/__init__.py:272
-#: ./src/pyams_content/component/extfile/__init__.py:276
-msgid "Audio file"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:74
-msgid "External files"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:89
-msgid "Add external file"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:103
-msgid "Add new external file"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:133
-msgid "Update file properties"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:161
-msgid "Images"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:176
-msgid "Add image"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:190
-msgid "Add new image"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:221
-msgid "Update image properties"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:254
-msgid "Videos"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:269
-msgid "Add video"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:283
-msgid "Add new video"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:307
-msgid "Update video properties"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:333
-msgid "Audios files"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:348
-msgid "Add audio file"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:362
-msgid "Add new audio file"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:386
-msgid "Update audio file properties"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:50
-msgid "External file type"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:36
-#: ./src/pyams_content/component/links/interfaces/__init__.py:35
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:55
-msgid "Alternate title"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:37
-msgid "File title, as shown in front-office"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:41
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:49
-msgid "File description displayed by front-office template"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:48
-#: ./src/pyams_content/component/links/interfaces/__init__.py:65
-msgid "Language"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:49
-msgid "File's content language"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:53
-msgid "Save file as..."
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:54
-msgid "Name under which the file will be saved"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:61
-msgid "File data"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:62
-msgid "File content"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:73
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:48
-msgid "Image data"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:74
-msgid "Image content"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:81
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:41
-msgid "Video data"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:82
-msgid "Video content"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:90
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:42
-msgid "Audio file content"
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:45
+msgid "Pictogram content"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:48
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:49
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:50
+msgid "Accessibility title"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:49
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:51
+msgid "Alternate title used to describe image content"
+msgstr ""
+
+#. Default: Header
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:52
+msgid "pictogram-header"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:53
+msgid "Default header associated with this pictogram"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:73
+#: ./src/pyams_content/reference/pictograms/zmi/manager.py:62
+#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:34
+msgid "Selected pictograms"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:74
+msgid "List of selected pictograms which will be available to shared contents"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/widget.py:36
+msgid "No selected pictogram"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/widget.py:55
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:169
+msgid "Default header: --"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/manager.py:50
+msgid "Pictograms selection..."
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:59
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:313
+msgid "Add pictogram"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:71
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:326
+msgid "Add new pictogram"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:95
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:368
+msgid "Edit pictogram properties"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:150
+#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:31
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:106
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:43
+#: ./src/pyams_content/component/paragraph/zmi/container.py:270
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:238
+#: ./src/pyams_content/interfaces/__init__.py:101
+#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:31
+#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:31
+#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:197
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:56
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:103
+#: ./src/pyams_content/shared/common/zmi/reverse.py:73
+#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:200
+#: ./src/pyams_content/shared/site/zmi/folder.py:66
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:123
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:46
+msgid "Title"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:7
+msgid "Available pictograms"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:21
+#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:48
+msgid "Display pictogram properties"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/templates/pictogram-header.pt:6
+msgid "Default header: ${header}"
 msgstr ""
 
 #: ./src/pyams_content/component/keynumber/__init__.py:189
-#: ./src/pyams_content/component/keynumber/zmi/__init__.py:212
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:83
 #: ./src/pyams_content/component/keynumber/portlet/zmi/__init__.py:74
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:83
+#: ./src/pyams_content/component/keynumber/zmi/__init__.py:212
 msgid "Key numbers"
 msgstr ""
 
-#: ./src/pyams_content/component/keynumber/zmi/paragraph.py:53
-msgid "Key numbers..."
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/zmi/paragraph.py:66
-msgid "Add new key number paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/zmi/paragraph.py:94
-msgid "Edit key number paragraph properties"
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:40
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:41
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:38
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:42
+#: ./src/pyams_content/component/association/interfaces/__init__.py:42
+#: ./src/pyams_content/features/alert/interfaces.py:54
+#: ./src/pyams_content/features/menu/interfaces/__init__.py:59
+#: ./src/pyams_content/shared/form/interfaces/__init__.py:85
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:156
+msgid "Visible?"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:41
+msgid "Is this key number visible in front-office?"
 msgstr ""
 
 #. Default: Header
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:45
 #: ./src/pyams_content/component/keynumber/zmi/__init__.py:160
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:45
 msgid "key-number-label"
 msgstr ""
 
-#: ./src/pyams_content/component/keynumber/zmi/__init__.py:172
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:46
+msgid ""
+"Small text to be displayed above number (according to selected renderer)"
+msgstr ""
+
 #: ./src/pyams_content/component/keynumber/interfaces/__init__.py:50
+#: ./src/pyams_content/component/keynumber/zmi/__init__.py:172
 msgid "Number"
 msgstr ""
 
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:51
+msgid "Key number value"
+msgstr ""
+
 #. Default: Unit
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:54
 #: ./src/pyams_content/component/keynumber/zmi/__init__.py:181
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:54
 msgid "key-number-unit"
 msgstr ""
 
-#: ./src/pyams_content/component/keynumber/zmi/__init__.py:193
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:55
+msgid "Displayed unit"
+msgstr ""
+
 #: ./src/pyams_content/component/keynumber/interfaces/__init__.py:58
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:64
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:277
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:48
+#: ./src/pyams_content/component/keynumber/zmi/__init__.py:193
+#: ./src/pyams_content/component/video/interfaces/__init__.py:46
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:50
 #: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:58
-#: ./src/pyams_content/component/video/interfaces/__init__.py:48
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:81
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:276
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:62
 msgid "Associated text"
 msgstr ""
 
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:59
+msgid "The way this text will be rendered depends on presentation template"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:94
+msgid "Key numbers template"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:95
+msgid "Presentation template used for key numbers"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/portlet/__init__.py:71
+msgid "Key Numbers"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:32
+msgid "Portlet title"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:35
+msgid "Teaser"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:36
+msgid "Short text displayed above key numbers"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/portlet/zmi/__init__.py:97
+#: ./src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:26
+msgid "Associated links"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:31
+#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:10
+#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:7
+msgid "Link target is not published!"
+msgstr ""
+
 #: ./src/pyams_content/component/keynumber/zmi/__init__.py:231
 msgid "Add keynumber"
 msgstr ""
@@ -516,1100 +331,253 @@
 msgid "Key number was correctly added"
 msgstr ""
 
-#: ./src/pyams_content/component/keynumber/portlet/__init__.py:71
-msgid "Key Numbers"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/portlet/zmi/__init__.py:97
-#: ./src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:26
-msgid "Associated links"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:31
-#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:10
-#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:7
-msgid "Link target is not published!"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:32
-msgid "Portlet title"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:35
-msgid "Teaser"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:36
-msgid "Short text displayed above key numbers"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:40
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:40
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:44
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:41
-#: ./src/pyams_content/component/association/interfaces/__init__.py:42
-#: ./src/pyams_content/shared/form/interfaces/__init__.py:85
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:144
-#: ./src/pyams_content/features/alert/interfaces.py:54
-#: ./src/pyams_content/features/menu/interfaces/__init__.py:59
-msgid "Visible?"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:41
-msgid "Is this key number visible in front-office?"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:46
-msgid ""
-"Small text to be displayed above number (according to selected renderer)"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:51
-msgid "Key number value"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:55
-msgid "Displayed unit"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:59
-msgid "The way this text will be rendered depends on presentation template"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:94
-msgid "Key numbers template"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:95
-msgid "Presentation template used for key numbers"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/__init__.py:177
-#: ./src/pyams_content/component/illustration/thesaurus.py:32
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:158
-#: ./src/pyams_content/component/illustration/zmi/__init__.py:56
-#: ./src/pyams_content/component/illustration/zmi/__init__.py:117
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:99
-msgid "Illustration"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:60
-msgid "Illustration..."
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:73
-msgid "Add new illustration"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:98
-#: ./src/pyams_content/component/illustration/zmi/thesaurus.py:42
-msgid "Edit illustration properties"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/zmi/__init__.py:151
-msgid "Navigation link illustration"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/zmi/__init__.py:119
-msgid "Header illustration"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:57
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:49
-msgid "Alternate title used to describe image content"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:65
-msgid "Illustration description displayed in front-office templates"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:69
-msgid "Name of picture's author"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:72
-msgid "Illustration template"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:73
-msgid "Presentation template used for illustration"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/milestone.py:140
-msgid "Selected paragraph is missing"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/milestone.py:143
-msgid "Selected paragraph is not visible"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/container.py:97
-msgid "Paragraphs"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/container.py:119
-msgid "no visible paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/pictogram.py:135
-msgid "Selected pictogram is missing"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/header.py:62
-msgid "This paragraph type is deprecated and should be removed!"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:78
-msgid "Milestones..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:91
-msgid "Add new milestone paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:118
-msgid "Edit milestone paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:251
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:49
-msgid "Associated label"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:263
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:53
-msgid "Anchor"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:292
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:76
-msgid "Milestones"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:307
-msgid "Add milestone"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:320
-msgid "Add new milestone"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:347
-msgid "Edit milestone properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:335
-msgid "Milestone was correctly added"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:278
-msgid "(missing paragraph)"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:52
-msgid "Key points..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:65
-msgid "Add new key points paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:92
-msgid "Edit key points paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:64
-msgid "Content block types..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:78
-msgid "Content block types"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:88
-msgid ""
-"You can define which types of paragraphs are allowed in this container.\n"
-"\n"
-"Default paragraphs will be added automatically (in selected order) to any new created content.\n"
-"\n"
-"NOTICE: removing types from allowed types list will have no effect on already created contents!"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:206
-#: ./src/pyams_content/shared/common/zmi/templates/preview-input.pt:39
-#: ./src/pyams_content/features/preview/zmi/__init__.py:45
-msgid "Preview"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:211
-#: ./src/pyams_content/shared/common/zmi/workflow.py:123
-#: ./src/pyams_content/shared/common/zmi/workflow.py:210
-#: ./src/pyams_content/shared/common/zmi/workflow.py:250
-#: ./src/pyams_content/shared/common/zmi/workflow.py:304
-#: ./src/pyams_content/shared/common/zmi/workflow.py:393
-#: ./src/pyams_content/shared/common/zmi/workflow.py:449
-#: ./src/pyams_content/shared/common/zmi/workflow.py:489
-#: ./src/pyams_content/shared/common/zmi/workflow.py:530
-#: ./src/pyams_content/shared/common/zmi/workflow.py:573
-#: ./src/pyams_content/shared/common/zmi/workflow.py:613
-#: ./src/pyams_content/shared/common/zmi/workflow.py:654
-#: ./src/pyams_content/shared/common/zmi/workflow.py:705
-#: ./src/pyams_content/shared/common/zmi/__init__.py:273
-#: ./src/pyams_content/shared/common/zmi/owner.py:73
-#: ./src/pyams_content/features/review/zmi/__init__.py:90
-msgid "Cancel"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:213
-msgid "Submit"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:194
-msgid "Paragraph was correctly added."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:253
-msgid ""
-"You changed renderer selection. Don't omit to update new renderer "
-"properties..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/map.py:55
-msgid "Location map..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/map.py:68
-msgid "Add new location map"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/map.py:91
-msgid "Edit location map properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/video.py:54
-msgid "Video paragraph..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/video.py:67
-msgid "Add new video paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/video.py:90
-#: ./src/pyams_content/component/video/zmi/paragraph.py:189
-msgid "Edit video properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:74
-msgid "Contents..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:215
-msgid "Set navigation anchor"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:286
-msgid "Show/hide all paragraphs"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:334
-#: ./src/pyams_content/component/paragraph/zmi/container.py:343
-#: ./src/pyams_content/component/paragraph/zmi/container.py:356
-msgid "Content blocks"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:413
-msgid "Links and attachments..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:425
-msgid "Content blocks links and attachments"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:145
-msgid "No currently defined paragraph."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:295
-msgid "Click to open/close all paragraphs editors"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:308
-msgid "Click to open/close paragraph editor"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:151
-msgid "Check allowed paragraph types to be able to create new paragraphs."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:83
-msgid "Pictograms..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:96
-msgid "Add new pictogram paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:123
-msgid "Edit pictogram paragraph properties"
-msgstr ""
-
-#. Default: Header
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:260
-msgid "pictogram-item-header"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:299
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:80
-msgid "Pictograms"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:314
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:59
-msgid "Add pictogram"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:327
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:71
-msgid "Add new pictogram"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:369
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:95
-msgid "Edit pictogram properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:349
-msgid "Pictogram was correctly added"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:359
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:397
-msgid "You must select a pictogram!"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/audio.py:54
-msgid "Audio paragraph..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/audio.py:67
-msgid "Add new audio paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/audio.py:89
-msgid "Edit audio properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/frame.py:86
-msgid "Framed text..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/frame.py:100
-msgid "Add new framed text paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/frame.py:126
-msgid "Edit framed text paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:57
-msgid "Verbatim..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:70
-msgid "Add new verbatim paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:92
-msgid "Edit verbatim paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/html.py:76
-msgid "Raw HTML..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/html.py:89
-msgid "Add new raw HTML paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/html.py:119
-msgid "Edit raw HTML paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/html.py:159
-msgid "Rich text..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/html.py:172
-msgid "Add new rich text paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/html.py:197
-msgid "Edit rich text paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/contact.py:53
-msgid "Contact card..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/contact.py:66
-msgid "Add new contact card"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/contact.py:89
-msgid "Edit contact card properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/header.py:49
-msgid "Edit header paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/__init__.py:79
-msgid "Content paragraphs"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/zmi/__init__.py:68
-msgid "No filter, all paragraphs selected"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/zmi/__init__.py:75
-msgid "No filter, all paragraph types selected"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/zmi/templates/preview.pt:4
-msgid "Selected paragraphs:"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/zmi/templates/preview.pt:10
-msgid "Paragraphs filters:"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/zmi/templates/preview.pt:13
-msgid "Selected paragraph types:"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/zmi/templates/preview.pt:18
-msgid "Only display anchors"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:31
-msgid "Selected paragraphs"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:32
-msgid ""
-"List of selected paragraphs; an empty selection means that all paragraphs "
-"will be selectable by following filters; otherwise, this selection will have "
-"priority"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:38
-msgid "Paragraph types"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:39
-msgid ""
-"Select list of paragraph types you want to include; an empty selection means "
-"that all paragraphs types will be selected"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:44
-msgid "Anchors only?"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:45
-msgid "If 'yes', only paragraphs set as 'anchors' will be selected"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:41
-msgid "Is this milestone visible in front-office?"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:46
-msgid "Milestone title"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:50
-msgid "The way this label will be rendered depends on presentation template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:54
-msgid "Paragraph to which this milestone should lead"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:83
-msgid "Milestones template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:84
-msgid "Presentation template used for milestones"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:33
-#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:40
-msgid "Key points"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:41
-msgid "Enter one key point by line, without hyphen or prefix"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:44
-msgid "Presentation template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:45
-#: ./src/pyams_content/component/paragraph/interfaces/frame.py:44
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:53
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:46
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:67
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:101
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:82
-msgid "Presentation template used for this paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:45
-msgid "Is this paragraph visible in front-office?"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:49
-msgid "Anchor?"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:50
-msgid "Is this paragraph a navigation anchor?"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:54
-msgid "§ Title"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:94
-msgid "Allowed paragraphs"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:95
-msgid "List of paragraphs allowed for this content type"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:99
-#: ./src/pyams_content/shared/common/zmi/types.py:172
-#: ./src/pyams_content/shared/common/zmi/types.py:412
-msgid "Default paragraphs"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:100
-msgid "List of paragraphs automatically added to a new content"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/map.py:41
-msgid "Location map"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/map.py:48
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:72
-msgid "GPS location"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/map.py:49
-msgid "GPS coordinates used to locate map"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/map.py:52
-msgid "Display location mark?"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/map.py:53
-msgid "If 'yes', a location marker will be displayed on map"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/map.py:57
-msgid "Map template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/map.py:58
-msgid "Presentation template used for this map"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:42
-msgid "Video file content"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:49
-#: ./src/pyams_content/component/video/interfaces/__init__.py:49
+#: ./src/pyams_content/component/keynumber/zmi/paragraph.py:53
+msgid "Key numbers..."
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/zmi/paragraph.py:66
+msgid "Add new key number paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/zmi/paragraph.py:94
+msgid "Edit key number paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/__init__.py:155
+msgid "Gallery"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/paragraph.py:45
+msgid "(gallery contains 1 media)"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/paragraph.py:47
+msgid "(empty gallery)"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/paragraph.py:43
+#, python-format
+msgid "(gallery contains {0} medias)"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:120
+msgid "Medias gallery"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:42
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:40
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:103
+msgid "Image or video data"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:43
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:41
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:104
+msgid "Image or video content"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:46
+#: ./src/pyams_content/component/video/interfaces/__init__.py:69
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:43
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:43
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:47
+msgid "Legend"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:50
+msgid "Alternate title used to describe media content"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:53
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:110
+#: ./src/pyams_content/component/links/interfaces/__init__.py:39
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:50
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:40
+#: ./src/pyams_content/shared/form/interfaces/__init__.py:64
+msgid "Description"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:56
+#: ./src/pyams_content/component/gallery/zmi/interfaces.py:39
+#: ./src/pyams_content/component/video/interfaces/__init__.py:42
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:46
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:44
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:46
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:44
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:54
+msgid "Author"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:57
+#: ./src/pyams_content/component/gallery/zmi/interfaces.py:40
+#: ./src/pyams_content/component/video/interfaces/__init__.py:43
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:47
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:47
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:45
+msgid "Name of document's author"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:60
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:39
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:89
+msgid "Audio data"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:61
+msgid "Sound file associated with the current media"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:64
+msgid "Sound title"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:65
+msgid "Title of associated sound file"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:68
+msgid "Sound description"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:69
+msgid "Short description of associated sound file"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:72
+msgid "Visible media?"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:73
+msgid "If 'no', this media won't be displayed in front office"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:84
+msgid "Gallery template"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:85
+msgid "Presentation template used for this gallery"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:107
+msgid "Gallery title, as shown in front-office"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:111
+msgid "Gallery description displayed by front-office template"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/file.py:57
+#: ./src/pyams_content/component/gallery/zmi/file.py:69
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:148
+msgid "Add media(s)"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/file.py:178
+msgid "Update media properties"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/file.py:227
+msgid "Remove media..."
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/file.py:142
+msgid "Show/hide media"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/file.py:194
+msgid "Audio content"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/__init__.py:57
+msgid "Update gallery properties"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/__init__.py:84
+msgid "Update gallery contents"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/interfaces.py:35
+msgid "Images or videos data"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/interfaces.py:36
+msgid "You can upload a single file or choose to upload a whole ZIP archive"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:60
+msgid "Medias gallery..."
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:73
+msgid "Add new gallery"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:95
+msgid "Edit gallery properties"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:169
+msgid "Media(s) successfully added"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:12
+msgid "Gallery medias"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:18
+msgid "Download medias"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:42
+#: ./src/pyams_content/component/gallery/zmi/templates/gallery-media.pt:9
+msgid "Zoom image"
+msgstr ""
+
+#: ./src/pyams_content/component/video/__init__.py:67
+#: ./src/pyams_content/component/video/interfaces/__init__.py:62
+msgid "External video"
+msgstr ""
+
+#: ./src/pyams_content/component/video/interfaces/__init__.py:47
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:51
 msgid "Video description displayed by front-office template"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:56
-#: ./src/pyams_content/component/video/interfaces/__init__.py:78
+#: ./src/pyams_content/component/video/interfaces/__init__.py:50
+msgid "Video provider"
+msgstr ""
+
+#: ./src/pyams_content/component/video/interfaces/__init__.py:51
+msgid "Name of external platform providing selected video"
+msgstr ""
+
+#: ./src/pyams_content/component/video/interfaces/__init__.py:72
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:54
 msgid "Video template"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:57
-#: ./src/pyams_content/component/video/interfaces/__init__.py:79
+#: ./src/pyams_content/component/video/interfaces/__init__.py:73
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:55
 msgid "Presentation template used for this video"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:42
-msgid "Is this pictogram visible in front-office?"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:46
-#: ./src/pyams_content/component/links/interfaces/__init__.py:43
-#: ./src/pyams_content/shared/common/interfaces/types.py:75
-msgid "Pictogram"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:47
-msgid "Name of the pictogram to select"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:53
-msgid "Alternate header"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:54
-msgid ""
-"Alternate pictogram label; if not specified, the pictogram header will be "
-"used"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:59
-msgid "Additional text associated to this pictogram"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:87
-msgid "Pictograms template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:88
-msgid "Presentation template used for pictograms"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:34
-msgid "Audio"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:56
-msgid "Audio template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:57
-msgid "Presentation template used for this audio file"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/frame.py:33
-msgid "Framed text"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/frame.py:40
-msgid "Frame body"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/frame.py:43
-msgid "Text template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:33
-msgid "Verbatim"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:40
-msgid "Quoted text"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:41
-msgid "Quotation marks will be added automatically by presentation template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:45
-msgid "Name of the quote author"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:48
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:54
-msgid "In charge of"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:49
-msgid "Label of author function"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:52
-msgid "Verbatim template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:33
-msgid "Raw HTML "
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:56
-msgid "Rich text"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:40
-msgid "Raw HTML code"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:41
-msgid ""
-"This HTML code will be used 'as is', without any transformation. Use with "
-"care!!"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:45
-msgid "Raw HTML code template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:63
-msgid "Body"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:66
-msgid "Body template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:43
-msgid "Contact card"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:50
-msgid "Contact identity"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:51
-msgid "Name of the contact"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:55
-msgid "Label of contact function"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:58
-msgid "Email address"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:59
-msgid "Contact email address"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:62
-msgid "Contact form"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:63
-msgid "Reference of contact form"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:67
-msgid "Photo"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:68
-msgid "Use 'browse' button to select contact picture"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:76
-msgid "Address"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:79
-msgid "Contact template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:80
-msgid "Presentation template used for this contact"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:73
-msgid "GPS coordinates used to locate contact"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/header.py:33
-#: ./src/pyams_content/component/paragraph/interfaces/header.py:40
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:153
-msgid "Header"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/header.py:43
-#: ./src/pyams_content/features/header/interfaces/__init__.py:39
-msgid "Header template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/header.py:44
-#: ./src/pyams_content/features/header/interfaces/__init__.py:40
-msgid "Presentation template used for this header"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/__init__.py:71
-#: ./src/pyams_content/component/theme/zmi/portlet.py:40
-#: ./src/pyams_content/component/theme/interfaces/__init__.py:47
-#: ./src/pyams_content/component/theme/interfaces/__init__.py:61
-#: ./src/pyams_content/shared/common/zmi/search.py:189
-#: ./src/pyams_content/root/zmi/search.py:179
-#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:181
-msgid "Tags"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/__init__.py:119
-#: ./src/pyams_content/component/theme/zmi/portlet.py:55
-#: ./src/pyams_content/component/theme/interfaces/__init__.py:88
-#: ./src/pyams_content/component/theme/interfaces/__init__.py:102
-#: ./src/pyams_content/shared/common/zmi/search.py:192
-msgid "Themes"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/__init__.py:167
-#: ./src/pyams_content/component/theme/zmi/portlet.py:70
-#: ./src/pyams_content/component/theme/interfaces/__init__.py:129
-#: ./src/pyams_content/component/theme/interfaces/__init__.py:143
-#: ./src/pyams_content/shared/common/zmi/search.py:195
-msgid "Collections"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/__init__.py:80
-msgid "no defined tag"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/__init__.py:128
-msgid "no defined theme"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/__init__.py:176
-msgid "no defined collection"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/__init__.py:55
-#: ./src/pyams_content/shared/view/zmi/theme.py:56
-msgid "Tags..."
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/__init__.py:66
-msgid "Content tags"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/__init__.py:99
-#: ./src/pyams_content/shared/view/zmi/theme.py:102
-msgid "Themes..."
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/__init__.py:107
-msgid "Content themes"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/__init__.py:159
-#: ./src/pyams_content/shared/view/zmi/theme.py:148
-msgid "Collections..."
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/__init__.py:172
-msgid "Content collections"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/manager.py:58
-msgid "Tags settings..."
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/manager.py:72
-msgid "Selected tags"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/manager.py:108
-msgid "Themes settings..."
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/manager.py:122
-msgid "Selected themes"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/manager.py:158
-msgid "Collections settings..."
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/manager.py:172
-msgid "Selected collections"
-msgstr ""
-
-#: ./src/pyams_content/component/association/container.py:91
-#: ./src/pyams_content/component/association/zmi/__init__.py:303
-#: ./src/pyams_content/component/association/interfaces/__init__.py:93
-msgid "Associations"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/paragraph.py:54
-#: ./src/pyams_content/component/association/zmi/__init__.py:96
-msgid "Associations..."
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/paragraph.py:67
-msgid "Add new association paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/paragraph.py:93
-msgid "Edit association paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/__init__.py:205
-msgid "Public title"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/__init__.py:223
-msgid "Inner title"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/__init__.py:239
-msgid "Size"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/__init__.py:280
-#: ./src/pyams_content/component/association/zmi/__init__.py:290
-msgid "Associations list"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/__init__.py:66
-msgid "Association was correctly added."
-msgstr ""
-
-#: ./src/pyams_content/component/association/interfaces/__init__.py:43
-#: ./src/pyams_content/features/menu/interfaces/__init__.py:60
-msgid "Is this item visible in front-office?"
-msgstr ""
-
-#: ./src/pyams_content/component/association/interfaces/__init__.py:100
-msgid "Associations template"
-msgstr ""
-
-#: ./src/pyams_content/component/association/interfaces/__init__.py:101
-msgid "Presentation template used for associations"
-msgstr ""
-
-#: ./src/pyams_content/component/links/__init__.py:144
-msgid "Internal link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/__init__.py:230
-msgid "External link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/__init__.py:283
-msgid "Mailto link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/__init__.py:217
-msgid "target is not published"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:60
-msgid "Internal links"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:75
-msgid "Add internal link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:89
-msgid "Add new internal link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:120
-msgid "Edit internal link properties"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:149
-msgid "External links"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:164
-msgid "Add external link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:178
-msgid "Add new external link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:209
-msgid "Edit external link properties"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:238
-msgid "Mailto links"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:253
-msgid "Add mailto link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:267
-msgid "Add new mailto link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:298
-msgid "Edit mailto link properties"
-msgstr ""
-
-#: ./src/pyams_content/component/links/interfaces/__init__.py:36
-msgid "Link title, as shown in front-office"
-msgstr ""
-
-#: ./src/pyams_content/component/links/interfaces/__init__.py:40
-msgid "Link description displayed by front-office template"
-msgstr ""
-
-#: ./src/pyams_content/component/links/interfaces/__init__.py:44
-msgid "Name of the pictogram associated with this link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/interfaces/__init__.py:61
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:56
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:68
-msgid "Target URL"
-msgstr ""
-
-#: ./src/pyams_content/component/links/interfaces/__init__.py:62
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:57
-msgid "URL used to access external resource"
-msgstr ""
-
-#: ./src/pyams_content/component/links/interfaces/__init__.py:66
-msgid "Language used in this remote resource"
-msgstr ""
-
-#: ./src/pyams_content/component/links/interfaces/__init__.py:74
-msgid "Target address"
-msgstr ""
-
-#: ./src/pyams_content/component/links/interfaces/__init__.py:75
-msgid "Target email address"
-msgstr ""
-
-#: ./src/pyams_content/component/links/interfaces/__init__.py:78
-msgid "Address name"
-msgstr ""
-
-#: ./src/pyams_content/component/links/interfaces/__init__.py:79
-msgid "Address as displayed in address book"
-msgstr ""
-
-#: ./src/pyams_content/component/video/__init__.py:73
-#: ./src/pyams_content/component/video/interfaces/__init__.py:68
-msgid "External video"
-msgstr ""
-
 #: ./src/pyams_content/component/video/provider/dailymotion.py:94
 msgid "Dailymotion settings"
 msgstr ""
 
-#: ./src/pyams_content/component/video/provider/__init__.py:70
-msgid "Other provider"
-msgstr ""
-
-#: ./src/pyams_content/component/video/provider/__init__.py:94
-msgid "Custom video settings"
-msgstr ""
-
 #: ./src/pyams_content/component/video/provider/vimeo.py:92
 msgid "Vimeo settings"
 msgstr ""
 
+#: ./src/pyams_content/component/video/provider/__init__.py:63
+msgid "Other provider"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/__init__.py:87
+msgid "Custom video settings"
+msgstr ""
+
 #: ./src/pyams_content/component/video/provider/interfaces.py:31
 msgid "Integration code"
 msgstr ""
@@ -1830,1401 +798,2325 @@
 msgid "Youtube settings"
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:62
+#: ./src/pyams_content/component/video/zmi/paragraph.py:55
 msgid "External video..."
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:75
+#: ./src/pyams_content/component/video/zmi/paragraph.py:68
 msgid "Add new external video..."
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:124
+#: ./src/pyams_content/component/video/zmi/paragraph.py:182
+#: ./src/pyams_content/component/paragraph/zmi/video.py:90
+msgid "Edit video properties"
+msgstr ""
+
+#: ./src/pyams_content/component/video/zmi/paragraph.py:117
 msgid "Video provider is required"
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:172
-#: ./src/pyams_content/component/video/zmi/paragraph.py:223
+#: ./src/pyams_content/component/video/zmi/paragraph.py:165
+#: ./src/pyams_content/component/video/zmi/paragraph.py:216
 msgid "Video provider settings"
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:152
+#: ./src/pyams_content/component/video/zmi/paragraph.py:145
 msgid "Other settings"
 msgstr ""
 
-#: ./src/pyams_content/component/video/interfaces/__init__.py:56
-msgid "Video provider"
-msgstr ""
-
-#: ./src/pyams_content/component/video/interfaces/__init__.py:57
-msgid "Name of external platform providing selected video"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/__init__.py:242
-#: ./src/pyams_content/shared/common/zmi/properties.py:69
-#: ./src/pyams_content/shared/common/zmi/manager.py:96
-msgid "Properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/__init__.py:152
-#: ./src/pyams_content/shared/common/__init__.py:160
-#, python-format
-msgid "{date} by {principal}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/__init__.py:265
+#: ./src/pyams_content/component/links/__init__.py:144
+msgid "Internal link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/__init__.py:230
+msgid "External link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/__init__.py:283
+msgid "Mailto link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/__init__.py:217
+msgid "target is not published"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:35
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:36
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:55
+msgid "Alternate title"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:36
+msgid "Link title, as shown in front-office"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:40
+msgid "Link description displayed by front-office template"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:43
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:46
+#: ./src/pyams_content/shared/common/interfaces/types.py:75
+msgid "Pictogram"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:44
+msgid "Name of the pictogram associated with this link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:61
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:68
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:54
+msgid "Target URL"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:62
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:55
+msgid "URL used to access external resource"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:65
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:48
+msgid "Language"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:66
+msgid "Language used in this remote resource"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:74
+msgid "Target address"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:75
+msgid "Target email address"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:78
+msgid "Address name"
+msgstr ""
+
+#: ./src/pyams_content/component/links/interfaces/__init__.py:79
+msgid "Address as displayed in address book"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:60
+msgid "Internal links"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:75
+msgid "Add internal link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:89
+msgid "Add new internal link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:120
+msgid "Edit internal link properties"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:149
+msgid "External links"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:164
+msgid "Add external link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:178
+msgid "Add new external link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:209
+msgid "Edit external link properties"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:238
+msgid "Mailto links"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:253
+msgid "Add mailto link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:267
+msgid "Add new mailto link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:298
+msgid "Edit mailto link properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/header.py:62
+msgid "This paragraph type is deprecated and should be removed!"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/container.py:94
+msgid "Paragraphs"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/container.py:116
+msgid "no visible paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/pictogram.py:135
+msgid "Selected pictogram is missing"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/milestone.py:138
+msgid "Selected paragraph is missing"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/milestone.py:141
+msgid "Selected paragraph is not visible"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/header.py:33
+#: ./src/pyams_content/component/paragraph/interfaces/header.py:40
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:151
+msgid "Header"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/header.py:43
+#: ./src/pyams_content/features/header/interfaces/__init__.py:39
+msgid "Header template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/header.py:44
+#: ./src/pyams_content/features/header/interfaces/__init__.py:40
+msgid "Presentation template used for this header"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:44
+msgid "Contact card"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:51
+msgid "Contact identity"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:52
+msgid "Name of the contact"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:55
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:48
+msgid "In charge of"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:56
+msgid "Label of contact function"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:59
+msgid "Email address"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:60
+msgid "Contact email address"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:63
+msgid "Contact form"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:64
+msgid "Reference of contact form"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:68
+msgid "Photo"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:69
+msgid "Use 'browse' button to select contact picture"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:77
+msgid "Address"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:80
+msgid "Contact template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:81
+msgid "Presentation template used for this contact"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:73
+#: ./src/pyams_content/component/paragraph/interfaces/map.py:48
+msgid "GPS location"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:74
+msgid "GPS coordinates used to locate contact"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:32
+#: ./src/pyams_content/component/extfile/__init__.py:253
+#: ./src/pyams_content/component/extfile/__init__.py:257
+msgid "Video"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:39
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:81
+msgid "Video data"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:40
+msgid "Video file content"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:80
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:298
+msgid "Pictograms"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:42
+msgid "Is this pictogram visible in front-office?"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:47
+msgid "Name of the pictogram to select"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:53
+msgid "Alternate header"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:54
+msgid ""
+"Alternate pictogram label; if not specified, the pictogram header will be "
+"used"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:59
+msgid "Additional text associated to this pictogram"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:87
+msgid "Pictograms template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:88
+msgid "Presentation template used for pictograms"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:74
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:291
+msgid "Milestones"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:39
+msgid "Is this milestone visible in front-office?"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:44
+msgid "Milestone title"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:47
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:250
+msgid "Associated label"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:48
+msgid "The way this label will be rendered depends on presentation template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:51
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:262
+msgid "Anchor"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:52
+msgid "Paragraph to which this milestone should lead"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:82
+msgid "Additional text associated to this milestone paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:85
+msgid "Milestones template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:86
+msgid "Presentation template used for milestones"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:33
+msgid "Raw HTML "
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:56
+msgid "Rich text"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:40
+msgid "Raw HTML code"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:41
+msgid ""
+"This HTML code will be used 'as is', without any transformation. Use with "
+"care!!"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:45
+msgid "Raw HTML code template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:46
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:67
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:53
+#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:45
+#: ./src/pyams_content/component/paragraph/interfaces/frame.py:44
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:101
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:89
+msgid "Presentation template used for this paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:63
+msgid "Body"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:66
+msgid "Body template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:33
+msgid "Verbatim"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:40
+msgid "Quoted text"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:41
+msgid "Quotation marks will be added automatically by presentation template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:45
+msgid "Name of the quote author"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:49
+msgid "Label of author function"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:52
+msgid "Verbatim template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:43
+msgid "Is this paragraph visible in front-office?"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:47
+msgid "Anchor?"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:48
+msgid "Is this paragraph a navigation anchor?"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:52
+msgid "§ Title"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:92
+msgid "Allowed paragraphs"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:93
+msgid "List of paragraphs allowed for this content type"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:97
+#: ./src/pyams_content/shared/common/zmi/types.py:171
+#: ./src/pyams_content/shared/common/zmi/types.py:411
+msgid "Default paragraphs"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:98
+msgid "List of paragraphs automatically added to a new content"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/map.py:41
+msgid "Location map"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/map.py:49
+msgid "GPS coordinates used to locate map"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/map.py:52
+msgid "Display location mark?"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/map.py:53
+msgid "If 'yes', a location marker will be displayed on map"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/map.py:57
+msgid "Map template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/map.py:58
+msgid "Presentation template used for this map"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:33
+#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:40
+msgid "Key points"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:41
+msgid "Enter one key point by line, without hyphen or prefix"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:44
+msgid "Presentation template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/frame.py:33
+msgid "Framed text"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/frame.py:40
+msgid "Frame body"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/frame.py:43
+msgid "Text template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:32
+msgid "Audio"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:40
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:90
+msgid "Audio file content"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:51
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:41
+msgid "File description displayed by front-office template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:54
+msgid "Audio template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:55
+msgid "Presentation template used for this audio file"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/__init__.py:83
+msgid "Content paragraphs"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/__init__.py:135
+msgid "Paragraphs navigation anchors"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:30
+#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:52
+msgid "Selected paragraphs"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:31
+msgid ""
+"List of selected paragraphs; an empty selection means that all paragraphs "
+"will be selectable by following filters; otherwise, this selection will have "
+"priority"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:37
+#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:59
+msgid "Paragraph types"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:38
+msgid ""
+"Select list of paragraph types you want to include; an empty selection means "
+"that all paragraphs types will be selected"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:43
+#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:65
+msgid "Anchors only?"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:44
+msgid "If 'yes', only paragraphs set as 'anchors' will be selected"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:53
+msgid ""
+"List of paragraphs selected for navigation; an empty selection means that all"
+" paragraphs will be selectable by following filters; otherwise, this "
+"selection will have priority"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:60
+msgid ""
+"Select list of paragraph types you want to use for navigation; an empty "
+"selection means that all paragraphs types will be selected"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/interfaces/__init__.py:66
+msgid "If 'no', all paragraphs will be used as navigation anchors"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/zmi/__init__.py:67
+#: ./src/pyams_content/component/paragraph/portlet/zmi/__init__.py:122
+msgid "No filter, all paragraphs selected"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/zmi/__init__.py:74
+#: ./src/pyams_content/component/paragraph/portlet/zmi/__init__.py:129
+msgid "No filter, all paragraph types selected"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/zmi/templates/navigation-preview.pt:4
+#: ./src/pyams_content/component/paragraph/portlet/zmi/templates/container-preview.pt:4
+msgid "Selected paragraphs:"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/zmi/templates/navigation-preview.pt:10
+#: ./src/pyams_content/component/paragraph/portlet/zmi/templates/container-preview.pt:10
+msgid "Paragraphs filters:"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/zmi/templates/navigation-preview.pt:13
+#: ./src/pyams_content/component/paragraph/portlet/zmi/templates/container-preview.pt:13
+msgid "Selected paragraph types:"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/portlet/zmi/templates/navigation-preview.pt:18
+#: ./src/pyams_content/component/paragraph/portlet/zmi/templates/container-preview.pt:18
+msgid "Only display anchors"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/header.py:49
+msgid "Edit header paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:74
+msgid "Contents..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:215
+msgid "Set navigation anchor"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:286
+msgid "Show/hide all paragraphs"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:334
+#: ./src/pyams_content/component/paragraph/zmi/container.py:343
+#: ./src/pyams_content/component/paragraph/zmi/container.py:356
+msgid "Content blocks"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:413
+msgid "Links and attachments..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:425
+msgid "Content blocks links and attachments"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:145
+msgid "No currently defined paragraph."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:295
+msgid "Click to open/close all paragraphs editors"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:308
+msgid "Click to open/close paragraph editor"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:151
+msgid "Check allowed paragraph types to be able to create new paragraphs."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/contact.py:53
+msgid "Contact card..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/contact.py:66
+msgid "Add new contact card"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/contact.py:89
+msgid "Edit contact card properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/video.py:54
+msgid "Video paragraph..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/video.py:67
+msgid "Add new video paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:82
+msgid "Pictograms..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:95
+msgid "Add new pictogram paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:122
+msgid "Edit pictogram paragraph properties"
+msgstr ""
+
+#. Default: Header
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:259
+msgid "pictogram-item-header"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:348
+msgid "Pictogram was correctly added"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:358
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:396
+msgid "You must select a pictogram!"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:77
+msgid "Milestones..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:90
+msgid "Add new milestone paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:117
+msgid "Edit milestone paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:306
+msgid "Add milestone"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:319
+msgid "Add new milestone"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:346
+msgid "Edit milestone properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:334
+msgid "Milestone was correctly added"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:277
+msgid "(missing paragraph)"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/html.py:76
+msgid "Raw HTML..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/html.py:89
+msgid "Add new raw HTML paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/html.py:119
+msgid "Edit raw HTML paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/html.py:159
+msgid "Rich text..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/html.py:172
+msgid "Add new rich text paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/html.py:197
+msgid "Edit rich text paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:57
+msgid "Verbatim..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:70
+msgid "Add new verbatim paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:92
+msgid "Edit verbatim paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:64
+msgid "Content block types..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:78
+msgid "Content block types"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:88
+msgid ""
+"You can define which types of paragraphs are allowed in this container.\n"
+"\n"
+"Default paragraphs will be added automatically (in selected order) to any new created content.\n"
+"\n"
+"NOTICE: removing types from allowed types list will have no effect on already created contents!"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:208
+#: ./src/pyams_content/features/preview/zmi/__init__.py:45
+#: ./src/pyams_content/shared/common/zmi/templates/preview-input.pt:39
+msgid "Preview"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:213
+#: ./src/pyams_content/features/review/zmi/__init__.py:84
+#: ./src/pyams_content/shared/common/zmi/__init__.py:275
+#: ./src/pyams_content/shared/common/zmi/owner.py:73
+#: ./src/pyams_content/shared/common/zmi/workflow.py:123
+#: ./src/pyams_content/shared/common/zmi/workflow.py:210
+#: ./src/pyams_content/shared/common/zmi/workflow.py:250
+#: ./src/pyams_content/shared/common/zmi/workflow.py:304
+#: ./src/pyams_content/shared/common/zmi/workflow.py:393
+#: ./src/pyams_content/shared/common/zmi/workflow.py:449
+#: ./src/pyams_content/shared/common/zmi/workflow.py:489
+#: ./src/pyams_content/shared/common/zmi/workflow.py:530
+#: ./src/pyams_content/shared/common/zmi/workflow.py:573
+#: ./src/pyams_content/shared/common/zmi/workflow.py:613
+#: ./src/pyams_content/shared/common/zmi/workflow.py:654
+#: ./src/pyams_content/shared/common/zmi/workflow.py:705
+msgid "Cancel"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:215
+msgid "Submit"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:196
+msgid "Paragraph was correctly added."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:255
+msgid ""
+"You changed renderer selection. Don't omit to update new renderer "
+"properties..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/map.py:55
+msgid "Location map..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/map.py:68
+msgid "Add new location map"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/map.py:91
+msgid "Edit location map properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:51
+msgid "Key points..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:64
+msgid "Add new key points paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:91
+msgid "Edit key points paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/frame.py:86
+msgid "Framed text..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/frame.py:100
+msgid "Add new framed text paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/frame.py:126
+msgid "Edit framed text paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/audio.py:54
+msgid "Audio paragraph..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/audio.py:67
+msgid "Add new audio paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/audio.py:89
+msgid "Edit audio properties"
+msgstr ""
+
+#: ./src/pyams_content/component/association/container.py:91
+#: ./src/pyams_content/component/association/interfaces/__init__.py:93
+#: ./src/pyams_content/component/association/zmi/__init__.py:313
+msgid "Associations"
+msgstr ""
+
+#: ./src/pyams_content/component/association/interfaces/__init__.py:43
+#: ./src/pyams_content/features/menu/interfaces/__init__.py:60
+msgid "Is this item visible in front-office?"
+msgstr ""
+
+#: ./src/pyams_content/component/association/interfaces/__init__.py:100
+msgid "Associations template"
+msgstr ""
+
+#: ./src/pyams_content/component/association/interfaces/__init__.py:101
+msgid "Presentation template used for associations"
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/__init__.py:96
+#: ./src/pyams_content/component/association/zmi/paragraph.py:54
+msgid "Associations..."
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/__init__.py:209
+msgid "Public title"
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/__init__.py:229
+msgid "Inner title"
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/__init__.py:247
+msgid "Size"
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/__init__.py:290
+#: ./src/pyams_content/component/association/zmi/__init__.py:300
+msgid "Associations list"
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/__init__.py:66
+msgid "Association was correctly added."
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/paragraph.py:67
+msgid "Add new association paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/paragraph.py:93
+msgid "Edit association paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/__init__.py:172
+#: ./src/pyams_content/component/extfile/__init__.py:176
+msgid "Standard file"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/__init__.py:272
+#: ./src/pyams_content/component/extfile/__init__.py:276
+msgid "Audio file"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:37
+msgid "File title, as shown in front-office"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:49
+msgid "File's content language"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:53
+msgid "Save file as..."
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:54
+msgid "Name under which the file will be saved"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:61
+msgid "File data"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:62
+msgid "File content"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:73
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:59
+msgid "Image data"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:74
+msgid "Image content"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:82
+msgid "Video content"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:74
+msgid "External files"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:89
+msgid "Add external file"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:103
+msgid "Add new external file"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:133
+msgid "Update file properties"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:161
+msgid "Images"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:176
+msgid "Add image"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:190
+msgid "Add new image"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:221
+msgid "Update image properties"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:254
+msgid "Videos"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:269
+msgid "Add video"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:283
+msgid "Add new video"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:307
+msgid "Update video properties"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:333
+msgid "Audios files"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:348
+msgid "Add audio file"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:362
+msgid "Add new audio file"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:386
+msgid "Update audio file properties"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:50
+msgid "External file type"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/__init__.py:171
+#: ./src/pyams_content/component/illustration/thesaurus.py:32
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:97
+#: ./src/pyams_content/component/illustration/zmi/__init__.py:51
+#: ./src/pyams_content/component/illustration/zmi/__init__.py:112
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:153
+msgid "Illustration"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:55
+msgid "Name of picture's author"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:63
+msgid "Illustration description displayed in front-office templates"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:66
+msgid "Illustration template"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:67
+msgid "Presentation template used for illustration"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/zmi/__init__.py:146
+msgid "Navigation link illustration"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/zmi/__init__.py:114
+msgid "Header illustration"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/zmi/thesaurus.py:42
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:93
+msgid "Edit illustration properties"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:55
+msgid "Illustration..."
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:68
+msgid "Add new illustration"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/__init__.py:74
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:64
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:78
+#: ./src/pyams_content/component/theme/zmi/portlet.py:40
+#: ./src/pyams_content/root/zmi/search.py:179
+#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:181
+#: ./src/pyams_content/shared/common/zmi/search.py:189
+msgid "Tags"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/__init__.py:122
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:105
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:119
+#: ./src/pyams_content/component/theme/zmi/portlet.py:55
+#: ./src/pyams_content/shared/common/zmi/search.py:192
+msgid "Themes"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/__init__.py:170
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:146
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:160
+#: ./src/pyams_content/component/theme/zmi/portlet.py:70
+#: ./src/pyams_content/shared/common/zmi/search.py:195
+msgid "Collections"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/__init__.py:83
+msgid "no defined tag"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/__init__.py:131
+msgid "no defined theme"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/__init__.py:179
+msgid "no defined collection"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:41
+msgid "Enable search by tag?"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:42
+msgid ""
+"If 'yes', displayed tags will lead to a search engine displaying contents "
+"matching given tag"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:47
+msgid "Tags search target"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:48
+msgid "Site or folder where tags search is displayed"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:54
+msgid "You must specify search target when activating search by tags!"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/manager.py:58
+msgid "Tags settings..."
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/manager.py:72
+msgid "Selected tags"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/manager.py:109
+msgid "Themes settings..."
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/manager.py:123
+msgid "Selected themes"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/manager.py:159
+msgid "Collections settings..."
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/manager.py:173
+msgid "Selected collections"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/__init__.py:55
+#: ./src/pyams_content/shared/view/zmi/theme.py:56
+msgid "Tags..."
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/__init__.py:66
+msgid "Content tags"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/__init__.py:99
+#: ./src/pyams_content/shared/view/zmi/theme.py:102
+msgid "Themes..."
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/__init__.py:107
+msgid "Content themes"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/__init__.py:159
+#: ./src/pyams_content/shared/view/zmi/theme.py:148
+msgid "Collections..."
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/__init__.py:172
+msgid "Content collections"
+msgstr ""
+
+#: ./src/pyams_content/interfaces/__init__.py:95
+msgid "Unique key"
+msgstr ""
+
+#: ./src/pyams_content/interfaces/__init__.py:96
+msgid ""
+"WARNING: this key can't be modified after creation!!! Spaces, uppercase "
+"letters ou accentuated characters will be replaced automatically."
+msgstr ""
+
+#: ./src/pyams_content/interfaces/__init__.py:102
+#: ./src/pyams_content/shared/site/zmi/folder.py:67
+msgid "Visible label used to display content"
+msgstr ""
+
+#: ./src/pyams_content/interfaces/__init__.py:105
+msgid "Short name"
+msgstr ""
+
+#: ./src/pyams_content/interfaces/__init__.py:106
+msgid "Short name used in breadcrumbs"
+msgstr ""
+
+#: ./src/pyams_content/interfaces/__init__.py:113
+#: ./src/pyams_content/features/review/interfaces.py:74
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:43
+msgid "Creation date"
+msgstr ""
+
+#: ./src/pyams_content/interfaces/__init__.py:117
+msgid "Modification date"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:39
+msgid "Alert"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:40
+msgid "End of alert"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:41
+msgid "Information"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:42
+msgid "Warning"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:43
+msgid "Recommendation"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:55
+msgid "Is this alert visible in front-office?"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:59
+msgid "Alert gravity"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:60
+msgid "Alert gravity will affect rendered alert style"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:65
+#: ./src/pyams_content/features/alert/zmi/container.py:143
+msgid "Message"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:66
+msgid "Alert message"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:69
+#: ./src/pyams_content/features/menu/interfaces/__init__.py:68
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:96
+msgid "Internal reference"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:70
+msgid ""
+"Internal link target reference. You can search a reference using '+' followed"
+" by internal number, of by entering text matching content title."
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:75
+msgid "Display start date"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:76
+msgid "First date at which alert should be displayed"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:79
+msgid "Display end date"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:80
+msgid "Last date at which alert should be displayed"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:83
+msgid "Maximum interval"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:84
+msgid ""
+"Maximum interval between alert displays on a given device, given in hours; "
+"set to 0 to always display the alert"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/zmi/container.py:53
+msgid "Alerts"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/zmi/container.py:165
+msgid "Alert list"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/zmi/container.py:95
+msgid "No currently defined alert."
+msgstr ""
+
+#: ./src/pyams_content/features/alert/zmi/__init__.py:45
+msgid "Add alert"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/zmi/__init__.py:56
+msgid "Add new alert"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/zmi/__init__.py:79
+msgid "Edit alert properties"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/container.py:81
+msgid "not matching"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:39
+msgid "Active rule?"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:40
+msgid "If 'no', selected rule is inactive"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:44
+msgid "Chained rule?"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:45
+msgid ""
+"If 'no', and if this rule is matching received request URL, the rule returns "
+"a redirection response; otherwise, the rule just rewrites the input URL which"
+" is forwarded to the next rule"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:51
+msgid "Permanent redirect?"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:52
+msgid "Define if this redirection should be permanent or temporary"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:56
+#: ./src/pyams_content/features/redirect/zmi/container.py:210
+#: ./src/pyams_content/features/redirect/zmi/container.py:366
+msgid "URL pattern"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:57
+msgid "Regexp pattern of matching URLs for this redirection rule"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:62
+msgid "Internal redirection target"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:63
+msgid ""
+"Internal redirection reference. You can search a reference using '+' followed"
+" by internal number, of by entering text matching content title."
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:69
+msgid "URL to which source URL should be redirected"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:75
+msgid "You can only provide an internal reference OR a target URL"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/interfaces/__init__.py:77
+msgid "You must provide an internal reference OR a target URL"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:67
+msgid "Redirections"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:161
+msgid "Enable/disable rule"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:188
+msgid "Chain/unchain rule"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:220
+msgid "Target"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:246
+msgid "Redirections list"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:261
+msgid "Redirection rules"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:262
+msgid ""
+"Redirection rules are use to handle redirections responses when a request generates \n"
+"a famous « 404 NotFound » error.\n"
+"\n"
+"Redirections are particularly useful when you are migrating from a previous site and don't want to lose \n"
+"your SEO.\n"
+"\n"
+"You can define a set of rules which will be applied to every \"NotFound\" request; rules are based on \n"
+"regular expressions which are applied to input URL: if the rule is \"matching\", the target URL is rewritten\n"
+"and a \"Redirect\" response is send.\n"
+"\n"
+"You can chain rules together: when a rule is chained, it's rewritten URL is passed as input URL to the \n"
+"next rule, until a matching rule is found.\n"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:288
+msgid "Test"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:323
+msgid "Test redirection rules"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:301
+msgid "Test URL"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:304
+msgid "Check inactive rules?"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:305
+msgid "If 'yes', inactive rules will also be tested"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:313
+msgid "Close"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:314
+msgid "Test rules"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:123
+msgid "No currently defined redirection rule."
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:371
+msgid "No matching rule!"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:365
+msgid "Input URL"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/container.py:367
+msgid "Output URL"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/__init__.py:50
+msgid "Add rule"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/__init__.py:63
+msgid "Add new redirection rule"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/__init__.py:88
+msgid "Edit redirection rule properties"
+msgstr ""
+
+#: ./src/pyams_content/features/redirect/zmi/__init__.py:109
+msgid ""
+"URL pattern and target URL are defined by *regular expressions* (see |regexp|).\n"
+"    \n"
+"In URL pattern, you can use any valid regular expression element, notably:\n"
+"\n"
+"- « .* » to match any list of characters \n"
+"\n"
+"- « ( ) » to \"memorize\" parts of the URL which can be replaced into target URL\n"
+"\n"
+"- special characters (like \"+\") must be escaped with an « \\\\ ».\n"
+"\n"
+"In target URL, memorized parts can be reused using « \\\\1 », « \\\\2 » and so on, where given number is\n"
+"the order of the matching pattern element.\n"
+"\n"
+".. |regexp| raw:: html\n"
+"\n"
+"    <a href=\"https://docs.python.org/3/library/re.html\" target=\"_blank\">Python Regular Expressions</a>\n"
+msgstr ""
+
+#: ./src/pyams_content/features/review/__init__.py:181
 #, python-format
-msgid "title length should be between 40 and 66 characters ({length} actually)"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/search.py:96
-#: ./src/pyams_content/root/zmi/search.py:95
-msgid "Quick search results"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/search.py:162
-#: ./src/pyams_content/shared/common/zmi/search.py:204
-#: ./src/pyams_content/root/zmi/search.py:152
-#: ./src/pyams_content/root/zmi/search.py:188
-msgid "Advanced search"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/search.py:332
-#: ./src/pyams_content/root/zmi/search.py:280
-msgid "Advanced search results"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/search.py:170
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:231
-#: ./src/pyams_content/root/zmi/search.py:164
-msgid "Owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/search.py:173
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:154
-msgid "Status"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/search.py:177
-#: ./src/pyams_content/root/zmi/search.py:167
-msgid "Created after..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/search.py:180
-#: ./src/pyams_content/root/zmi/search.py:170
-msgid "Created before..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/search.py:183
-#: ./src/pyams_content/root/zmi/search.py:173
-msgid "Modified after..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/search.py:186
-#: ./src/pyams_content/root/zmi/search.py:176
-msgid "Modified before..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/properties.py:59
-msgid "Composition"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/properties.py:82
-msgid "Content properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:70
-msgid "Data types"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:148
-msgid "Data type label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:188
-#: ./src/pyams_content/shared/common/zmi/types.py:428
-msgid "Default associations"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:204
-msgid "Default themes"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:232
-msgid "Content data types"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:255
-msgid "Add data type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:267
-msgid "Add new data type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:310
-msgid "Data type properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:391
-msgid "Subtype label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:472
-msgid "Add subtype"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:484
-msgid "Add new subtype"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:531
-msgid "Data subtype properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:573
-msgid "Select content type..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:115
-msgid "No currently defined data type."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:300
-msgid "Specified type name is already used!"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:507
-msgid "Subtype was correctly added."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:521
-msgid "Specified subtype name is already used!"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:160
-msgid "Click to see subtypes"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:845
-msgid "Prior checks"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:124
-msgid "Request publication"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:211
-#: ./src/pyams_content/workflow/__init__.py:315
-msgid "Cancel publication request"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:251
-msgid "Refuse publication request"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:305
-#: ./src/pyams_content/workflow/basic.py:196
-msgid "Publish"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:394
-msgid "Request retire"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:450
-msgid "Cancel retire request"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:490
-msgid "Retire"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:531
-#: ./src/pyams_content/workflow/__init__.py:436
-msgid "Request archive"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:574
-msgid "Cancel archive request"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:614
-msgid "Archive"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:655
-#: ./src/pyams_content/workflow/__init__.py:501
-#: ./src/pyams_content/workflow/__init__.py:513
-#: ./src/pyams_content/workflow/__init__.py:525
-#: ./src/pyams_content/workflow/__init__.py:537
-#: ./src/pyams_content/workflow/__init__.py:549
-#: ./src/pyams_content/workflow/basic.py:224
-#: ./src/pyams_content/workflow/basic.py:236
-msgid "Create new version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:706
-#: ./src/pyams_content/workflow/__init__.py:561
-#: ./src/pyams_content/workflow/basic.py:248
-msgid "Delete version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:791
-msgid "Previewed content?"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:795
-msgid "Verified content?"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:181
-#: ./src/pyams_content/shared/common/zmi/workflow.py:363
-msgid "Publication start date is required"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:274
-#: ./src/pyams_content/shared/common/zmi/workflow.py:420
-msgid "A comment is required"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:730
-msgid "Delete content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:739
-msgid "Delete definitively"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:868
+msgid "Request comment: {comment}"
+msgstr ""
+
+#: ./src/pyams_content/features/review/__init__.py:211
+#, python-format
+msgid "A new comment was added on content « {0} »"
+msgstr ""
+
+#: ./src/pyams_content/features/review/__init__.py:168
+#, python-format
+msgid "[{service_name}] A content review is requested"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:32
+msgid "Review request"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:33
+msgid "Reviewer comment"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:56
+msgid "Comment writer"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:59
+msgid "Content reviewers"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:62
+msgid "Comment type"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:67
+msgid "Comment body"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:70
+msgid "Reviewer comment?"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:86
+msgid "Reviewers list"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:87
+msgid "List of principals which reviewed the comment"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:55
+msgid "Ask for review..."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:94
+msgid "Content review request"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:159
+msgid "Comments"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:179
+msgid "Review comments"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:65
+msgid "Sought principals"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:66
+msgid "List of principals from which a review is requested"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:69
+msgid "Comment"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:70
+msgid "Comment associated with this request"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:73
+msgid "Notify all reviewers"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:74
 msgid ""
-"You must confirm that you previewed and checked this content before "
-"requesting publication!!"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:88
+"If 'yes', selected reviewers will be notified by mail of your request, even "
+"if they were already members of the reviewers group. Otherwise, only new "
+"reviewers will be notified"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:85
+msgid "Ask for content review"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:140
+msgid "Request successful. No new notification have been sent"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:256
+msgid "Message is mandatory!"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:128
+#, python-format
+msgid "Request successful. {count} new notification(s) have been sent"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-comments-json.pt:15
+#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:32
+#: ./src/pyams_content/features/review/zmi/templates/review-add-comment.pt:14
+msgid "Review query from"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-comments-json.pt:21
+#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:38
+#: ./src/pyams_content/features/review/zmi/templates/review-add-comment.pt:20
+msgid "(as reviewer)"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-comments-json.pt:30
+#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:47
+msgid "Selected reviewers:"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:64
+msgid "Add comment"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:67
+msgid "Add a comment..."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:73
+msgid "Add this comment"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:4
+msgid "[${service_name}] You are requested for a content review"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:30
+msgid "Hello,"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:31
+msgid ""
+"You have been requested by ${sender}, contributor of « ${service_name} » "
+"website, to make a review of a content."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:36
+msgid "${sender} added the following message to his request:"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:41
+msgid ""
+"To review and comment this publication, please use the following link: "
+"${target}."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:44
+msgid "After reading this content, please use the « Comments » menu entry."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:45
+msgid ""
+"If you don't want to reply to this request, please contact ${sender} directly"
+" by replying to this mail."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:47
+msgid "Thank you."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-add-comment.pt:22
+msgid "just now"
+msgstr ""
+
+#: ./src/pyams_content/features/renderer/zmi/__init__.py:71
+#: ./src/pyams_content/features/renderer/zmi/templates/renderer-input.pt:4
+msgid "Edit renderer properties"
+msgstr ""
+
+#: ./src/pyams_content/features/renderer/skin/__init__.py:65
+msgid "Hidden content"
+msgstr ""
+
+#: ./src/pyams_content/features/preview/zmi/__init__.py:62
+msgid "Content preview"
+msgstr ""
+
+#: ./src/pyams_content/features/preview/zmi/__init__.py:67
 #, python-format
-msgid "{state} | by {principal}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:871
-msgid ""
-"You must confirm that you checked this content before requesting "
-"publication!!"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:84
-#: ./src/pyams_content/workflow/__init__.py:648
-#: ./src/pyams_content/workflow/__init__.py:619
-#: ./src/pyams_content/workflow/basic.py:315
-#: ./src/pyams_content/workflow/basic.py:286
-#, python-format
-msgid "{state} {date}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/__init__.py:263
-msgid "Duplicate content..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/__init__.py:283
-msgid "Duplicate content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/__init__.py:84
-msgid "This title can be modified afterwards"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/__init__.py:274
-msgid "Duplicate this content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/__init__.py:330
-#, python-format
-msgid "Clone created from version {source} of {oid} (in « {state} » state)"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/__init__.py:375
-msgid "Created or modified in this version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:52
-msgid "Display content summary"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:76
-msgid "Identity card"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:94
-msgid "Requested action"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:135
-msgid "Publication and retire dates"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:154
-msgid "Current version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:184
-msgid "Content history"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:125
-msgid "Associated comment"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:166
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:198
-msgid "Version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:115
-#, python-format
-msgid "{state} {date} by {principal}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:172
-#, python-format
-msgid "{state} since {date}, by {principal}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:107
-msgid "Shared tool properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:125
-msgid "WARNING"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:127
-msgid ""
-"Workflow shouldn't be modified if this tool already contains any shared "
-"content!"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:150
-msgid "Languages"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:162
-msgid "Content languages"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:172
+msgid "{title} ({preview})"
+msgstr ""
+
+#: ./src/pyams_content/features/preview/zmi/__init__.py:68
+msgid "preview"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/interfaces/__init__.py:39
+msgid "Footer template"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/interfaces/__init__.py:40
+msgid "Presentation template used for this footer"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/zmi/__init__.py:60
+msgid "Page footer"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/zmi/__init__.py:78
+msgid "Edit footer settings"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/zmi/__init__.py:152
 msgid ""
-"Tool languages are used to translate own tool properties, and newly created "
-"contents will propose these languages by default"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:80
-msgid "Content management"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:82
-msgid "Tool management"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:50
-msgid "Change owner..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:83
-msgid "Change content's owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:125
+"WARNING: Footer properties are saved automatically when changing inherit "
+"mode!!"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/zmi/__init__.py:220
+msgid "Footer renderer settings"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/zmi/__init__.py:107
+msgid "Don't inherit parent footer"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/skin/__init__.py:94
+msgid "Hidden footer"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/interfaces/__init__.py:64
+msgid "Menu title"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/interfaces/__init__.py:65
+msgid "Displayed menu label"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/interfaces/__init__.py:69
+msgid "Direct reference to menu target"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/simple.py:67
+msgid "Simple navigation"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/double.py:67
+msgid "Double navigation"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:32
+#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:32
+msgid "Portlet main title"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/zmi/simple.py:69
+msgid "Navigation links"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/zmi/double.py:69
+msgid "Navigation menus"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:14
+#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:11
+msgid "Link has no illustration"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/__init__.py:81
+msgid "Add menu..."
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/__init__.py:92
+msgid "Add new menu"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/__init__.py:123
+msgid "Edit menu properties"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/__init__.py:215
+#: ./src/pyams_content/shared/form/interfaces/__init__.py:60
+#: ./src/pyams_content/shared/form/zmi/field.py:167
+#: ./src/pyams_content/shared/common/interfaces/types.py:47
+#: ./src/pyams_content/shared/common/zmi/templates/preview-input.pt:34
+#: ./src/pyams_content/shared/common/zmi/templates/check-input.pt:34
+msgid "Label"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/__init__.py:110
+msgid "Menu was correctly added."
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/__init__.py:395
+msgid "Link was correctly added."
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/templates/menu-name-cell.pt:7
+msgid "Click to see menu items"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/interfaces.py:27
+#, python-format
+msgid " - {field}: <span class=\"text-danger\">no value</span>"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/interfaces.py:28
+#, python-format
+msgid " - {field} ({lang}): <span class=\"text-danger\">no value</span>"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/interfaces.py:29
+#, python-format
+msgid " - {field}: <span class=\"text-danger\">{message}</span>"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/zmi/__init__.py:43
+#: ./src/pyams_content/shared/common/zmi/templates/check-input.pt:39
+msgid "Audit"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/zmi/__init__.py:58
+msgid "Content check"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/zmi/__init__.py:82
+msgid "No checker available. This content is clean!"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/zmi/__init__.py:78
+#, python-format
+msgid "{0}:"
+msgstr ""
+
+#: ./src/pyams_content/features/header/zmi/__init__.py:66
+msgid "Page header"
+msgstr ""
+
+#: ./src/pyams_content/features/header/zmi/__init__.py:84
+msgid "Edit header settings"
+msgstr ""
+
+#: ./src/pyams_content/features/header/zmi/__init__.py:161
 msgid ""
-"All versions of this content which are not archived will be transferred to "
-"newly selected owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:60
-msgid "New owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:61
-msgid "The selected user will become the new content's owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:63
-msgid "Keep previous owner as contributor"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:64
-msgid "If 'yes', the previous owner will still be able to modify this content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:74
-msgid "Change owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/rename.py:62
-msgid "Change URL..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/rename.py:79
-msgid "Change item URL"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/rename.py:86
-msgid "Item URL part"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/rename.py:87
-msgid "URL part used to access this content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/rename.py:121
-msgid "You must provide an URL for this item!"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/reverse.py:57
-msgid "Reverse links"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/reverse.py:66
-msgid "Content's internal links"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/site.py:38
-#, python-format
-msgid ""
-"SEARCH - Between all contents published into &laquo;&nbsp;{site}&nbsp;&raquo;"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/portal.py:44
-msgid "Edit default template properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/portal.py:54
-msgid ""
-"**This form allows you to select shared content default template.**\n"
-"\n"
-"If you choose to use a shared template, you can only adjust settings of each portlet individually but can't change portlets list or page configuration.\n"
-"\n"
-"If you use a local template, you can define a whole custom configuration but the template definition can't be reused anywhere..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/portal.py:70
-msgid "Use tool default template"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:134
-msgid "Unique ID"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:181
-msgid "Status date"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:213
-msgid "Status principal"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:250
-msgid "Last modification"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:273
+"WARNING: Header properties are saved automatically when changing inherit "
+"mode!!"
+msgstr ""
+
+#: ./src/pyams_content/features/header/zmi/__init__.py:229
+msgid "Header renderer settings"
+msgstr ""
+
+#: ./src/pyams_content/features/header/zmi/__init__.py:113
+msgid "Don't inherit parent header"
+msgstr ""
+
+#: ./src/pyams_content/features/header/skin/__init__.py:100
+msgid "Hidden header"
+msgstr ""
+
+#: ./src/pyams_content/profile/interfaces/__init__.py:33
+msgid "User favorites"
+msgstr ""
+
+#: ./src/pyams_content/profile/interfaces/__init__.py:34
+msgid "List of internal numbers of shared contents stored for quick access"
+msgstr ""
+
+#: ./src/pyams_content/profile/interfaces/__init__.py:37
+msgid "Default table length"
+msgstr ""
+
+#: ./src/pyams_content/profile/interfaces/__init__.py:38
+msgid "Default length used for inner tables and dashboards"
+msgstr ""
+
+#: ./src/pyams_content/profile/zmi/__init__.py:42
+msgid "Admin. profile"
+msgstr ""
+
+#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:43
+msgid "Shared sites"
+msgstr ""
+
+#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:64
+msgid "Shared contents"
+msgstr ""
+
+#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:87
+msgid "Shared tools"
+msgstr ""
+
+#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:110
+msgid "My roles"
+msgstr ""
+
+#: ./src/pyams_content/skin/zmi/viewlet/toplinks/templates/user-addings.pt:7
+msgid "Create new content"
+msgstr ""
+
+#: ./src/pyams_content/root/__init__.py:63
+msgid "Site root"
+msgstr ""
+
+#: ./src/pyams_content/root/interfaces/__init__.py:33
+msgid "Site managers"
+msgstr ""
+
+#: ./src/pyams_content/root/interfaces/__init__.py:37
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:41
+msgid "Webmasters"
+msgstr ""
+
+#: ./src/pyams_content/root/interfaces/__init__.py:41
+msgid "Templates managers"
+msgstr ""
+
+#: ./src/pyams_content/root/interfaces/__init__.py:45
+msgid "Operators group"
+msgstr ""
+
+#: ./src/pyams_content/root/interfaces/__init__.py:46
+msgid "Name of group containing all roles owners"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/sites.py:68
+#: ./src/pyams_content/shared/site/zmi/container.py:176
+#: ./src/pyams_content/shared/site/zmi/container.py:186
+msgid "Site tree"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/sites.py:78
+msgid "Blogs and shared sites"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/sites.py:108
+msgid "Visible site?"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/sites.py:134
+msgid "OID"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/sites.py:152
+msgid "Delete shared site"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/sites.py:171
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:175
+msgid "No provided object_name argument!"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/sites.py:180
+msgid "Given element name doesn't exist!"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/__init__.py:78
+msgid "Home"
+msgstr ""
+
 #: ./src/pyams_content/root/zmi/__init__.py:110
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:267
 msgid "Dashboard"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:283
-msgid "Contents dashboard"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:329
 #: ./src/pyams_content/root/zmi/__init__.py:159
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:323
 #, python-format
 msgid "MANAGER - {0} content waiting for your action"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:330
 #: ./src/pyams_content/root/zmi/__init__.py:160
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:324
 #, python-format
 msgid "MANAGER - {0} contents waiting for your action"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:371
 #: ./src/pyams_content/root/zmi/__init__.py:204
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:365
 #, python-format
 msgid "CONTRIBUTOR - {0} content waiting for action"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:372
 #: ./src/pyams_content/root/zmi/__init__.py:205
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:366
 #, python-format
 msgid "CONTRIBUTOR - {0} contents waiting for action"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:404
 #: ./src/pyams_content/root/zmi/__init__.py:240
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:398
 #, python-format
 msgid "CONTRIBUTOR - {0} modified content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:445
 #: ./src/pyams_content/root/zmi/__init__.py:283
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:439
 msgid "My contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:460
-#: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:8
 #: ./src/pyams_content/root/zmi/__init__.py:298
 #: ./src/pyams_content/root/zmi/templates/dashboard.pt:8
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:454
+#: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:8
 msgid "My favorites"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:469
 #: ./src/pyams_content/root/zmi/__init__.py:307
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:463
 #, python-format
 msgid "CONTRIBUTOR - {0} favorite"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:470
 #: ./src/pyams_content/root/zmi/__init__.py:308
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:464
 #, python-format
 msgid "CONTRIBUTOR - {0} favorites"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:482
-#: ./src/pyams_content/shared/common/zmi/templates/header.pt:23
-msgid "Add/remove from favorites"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:545
 #: ./src/pyams_content/root/zmi/__init__.py:346
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:539
 msgid "Your favorite contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:558
 #: ./src/pyams_content/root/zmi/__init__.py:359
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:552
 msgid "My preparations"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:567
 #: ./src/pyams_content/root/zmi/__init__.py:368
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:561
 #, python-format
 msgid "CONTRIBUTOR - {0} prepared content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:568
 #: ./src/pyams_content/root/zmi/__init__.py:369
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:562
 #, python-format
 msgid "CONTRIBUTOR - {0} prepared contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:608
 #: ./src/pyams_content/root/zmi/__init__.py:408
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:603
 msgid "Your prepared contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:621
 #: ./src/pyams_content/root/zmi/__init__.py:421
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:616
 msgid "My submissions"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:630
 #: ./src/pyams_content/root/zmi/__init__.py:430
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:625
 #, python-format
 msgid "CONTRIBUTOR - {0} submitted content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:631
 #: ./src/pyams_content/root/zmi/__init__.py:431
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:626
 #, python-format
 msgid "CONTRIBUTOR - {0} submitted contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:671
 #: ./src/pyams_content/root/zmi/__init__.py:470
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:667
 msgid "Your submitted contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:684
 #: ./src/pyams_content/root/zmi/__init__.py:483
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:680
 msgid "My publications"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:693
 #: ./src/pyams_content/root/zmi/__init__.py:492
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:689
 #, python-format
 msgid "CONTRIBUTOR - {0} published content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:694
 #: ./src/pyams_content/root/zmi/__init__.py:493
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:690
 #, python-format
 msgid "CONTRIBUTOR - {0} published contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:734
 #: ./src/pyams_content/root/zmi/__init__.py:532
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:731
 msgid "Your published contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:747
 #: ./src/pyams_content/root/zmi/__init__.py:545
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:744
 msgid "My retired contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:756
 #: ./src/pyams_content/root/zmi/__init__.py:554
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:753
 #, python-format
 msgid "CONTRIBUTOR - {0} retired content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:757
 #: ./src/pyams_content/root/zmi/__init__.py:555
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:754
 #, python-format
 msgid "CONTRIBUTOR - {0} retired contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:798
 #: ./src/pyams_content/root/zmi/__init__.py:595
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:795
 msgid "Your retired contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:811
 #: ./src/pyams_content/root/zmi/__init__.py:608
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:808
 msgid "My archived contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:820
 #: ./src/pyams_content/root/zmi/__init__.py:617
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:817
 #, python-format
 msgid "CONTRIBUTOR - {0} archived content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:821
 #: ./src/pyams_content/root/zmi/__init__.py:618
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:818
 #, python-format
 msgid "CONTRIBUTOR - {0} archived contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:868
 #: ./src/pyams_content/root/zmi/__init__.py:664
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:865
 msgid "Your archived contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:882
 #: ./src/pyams_content/root/zmi/__init__.py:678
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:879
 msgid "Other interventions"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:897
 #: ./src/pyams_content/root/zmi/__init__.py:693
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:894
 msgid "Last publications"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:906
 #: ./src/pyams_content/root/zmi/__init__.py:702
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:903
 #, python-format
 msgid "CONTRIBUTORS - {0} published content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:953
 #: ./src/pyams_content/root/zmi/__init__.py:748
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:950
 msgid "Last published contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:966
 #: ./src/pyams_content/root/zmi/__init__.py:761
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:963
 msgid "Last updates"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:975
 #: ./src/pyams_content/root/zmi/__init__.py:770
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:972
 #, python-format
 msgid "CONTRIBUTORS - {0} updated content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:1020
 #: ./src/pyams_content/root/zmi/__init__.py:814
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:1017
 msgid "Last updated contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:409
+#: ./src/pyams_content/root/zmi/__init__.py:825
+#: ./src/pyams_content/shared/site/zmi/container.py:407
+msgid "Content"
+msgstr ""
+
 #: ./src/pyams_content/root/zmi/__init__.py:245
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:403
 #, python-format
 msgid "CONTRIBUTOR - {0} modified contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:411
 #: ./src/pyams_content/root/zmi/__init__.py:247
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:405
 #, python-format
 msgid "CONTRIBUTOR - Last {0} modified contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:911
 #: ./src/pyams_content/root/zmi/__init__.py:707
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:908
 #, python-format
 msgid "CONTRIBUTORS - Last {0} published contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:913
 #: ./src/pyams_content/root/zmi/__init__.py:709
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:910
 msgid "CONTRIBUTORS - Last published contents (in the limit of 50)"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:980
 #: ./src/pyams_content/root/zmi/__init__.py:775
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:977
 #, python-format
 msgid "CONTRIBUTORS - Last {0} updated contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:982
 #: ./src/pyams_content/root/zmi/__init__.py:777
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:979
 msgid "CONTRIBUTORS - Last updated contents (in the limit of 50)"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:306
-#, python-format
-msgid "SEARCH - Between all contents of type &laquo;&nbsp;{type}&nbsp;&raquo;"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:171
-#: ./src/pyams_content/shared/common/zmi/header.py:96
-msgid "Content publication start date is not passed yet"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:64
-msgid "Contributors restrictions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:73
-msgid "Content contributors restrictions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:107
-msgid "Contributor name"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:118
-#: ./src/pyams_content/shared/common/zmi/security.py:270
-msgid "Activated publication checks?"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:218
-msgid "Managers restrictions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:227
-msgid "Content managers restrictions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:259
-msgid "Manager name"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:287
-msgid "Restricted"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:304
-msgid "Owners"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:394
-msgid "Publication workflow"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:167
-#, python-format
-msgid "Edit contributor restrictions for « {0} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:353
-#, python-format
-msgid "Edit manager restrictions for « {0} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:400
-msgid "Apply contents restrictions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:402
-msgid ""
-"You can specify which contents this manager will be able to manage. If you "
-"specify several criteria, the manager will be able to manage contents for "
-"which at least one criteria is matching."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:85
-#, python-format
-msgid "{state} by {principal}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:116
-#, python-format
-msgid "since {date}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:128
-msgid "access published version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:135
-msgid "access new version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:145
-msgid "access waiting version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:156
-msgid "access retired version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:166
-msgid "access archived version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:2
-msgid ""
-"You considerate that the currently published version should no more be "
-"publicly visible."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:3
-msgid ""
-"WARNING: the content will remain visible until a manager validate the "
-"request."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/header.pt:6
-msgid "Back to previous page"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/header.pt:20
-msgid "by ${owner}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:2
-msgid "As a manager, you considerate that this content must be archived."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:3
-#: ./src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:3
-msgid ""
-"After archiving, it will be backed up but you will not be able to publish it "
-"again except by creating a new version."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/check-input.pt:34
-#: ./src/pyams_content/shared/common/zmi/templates/preview-input.pt:34
-#: ./src/pyams_content/shared/common/interfaces/types.py:47
-#: ./src/pyams_content/shared/form/zmi/field.py:167
-#: ./src/pyams_content/shared/form/interfaces/__init__.py:60
-#: ./src/pyams_content/features/menu/zmi/__init__.py:215
-msgid "Label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/check-input.pt:39
-#: ./src/pyams_content/features/checker/zmi/__init__.py:43
-msgid "Audit"
-msgstr ""
-
+#: ./src/pyams_content/root/zmi/search.py:95
+#: ./src/pyams_content/shared/common/zmi/search.py:96
+msgid "Quick search results"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/search.py:152
+#: ./src/pyams_content/root/zmi/search.py:188
+#: ./src/pyams_content/shared/common/zmi/search.py:162
+#: ./src/pyams_content/shared/common/zmi/search.py:204
+msgid "Advanced search"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/search.py:280
+#: ./src/pyams_content/shared/common/zmi/search.py:332
+msgid "Advanced search results"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/search.py:160
+msgid "Content types"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/search.py:164
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:225
+#: ./src/pyams_content/shared/common/zmi/search.py:170
+msgid "Owner"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/search.py:167
+#: ./src/pyams_content/shared/common/zmi/search.py:177
+msgid "Created after..."
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/search.py:170
+#: ./src/pyams_content/shared/common/zmi/search.py:180
+msgid "Created before..."
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/search.py:173
+#: ./src/pyams_content/shared/common/zmi/search.py:183
+msgid "Modified after..."
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/search.py:176
+#: ./src/pyams_content/shared/common/zmi/search.py:186
+msgid "Modified before..."
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/templates/dashboard.pt:7
+msgid "Your contents dashboard"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/templates/dashboard.pt:18
+msgid "SEARCH - Between all contents"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/templates/dashboard.pt:29
 #: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:29
-#: ./src/pyams_content/root/zmi/templates/dashboard.pt:29
 msgid "Quick search..."
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:35
 #: ./src/pyams_content/root/zmi/templates/dashboard.pt:35
+#: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:35
 msgid "Advanced search..."
 msgstr ""
 
+#: ./src/pyams_content/root/zmi/templates/dashboard.pt:49
 #: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:49
-#: ./src/pyams_content/root/zmi/templates/dashboard.pt:49
 msgid "You are not actually concerned by any content."
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:2
-msgid ""
-"As a manager, you considerate that this content is complete and can be "
-"published 'as is'."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:4
-msgid ""
-"This operation will make the content publicly available (except if restricted"
-" access has been set)."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:2
-msgid ""
-"This new content is going to be created in 'draft' mode, so that you can "
-"complete it before publication."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:4
-msgid ""
-"A unique number is also going to be assigned to it. This number will be "
-"shared by all content's versions."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-operator-warning.pt:1
-msgid ""
-"WARNING: this request was made by a contributor which is not the owner of "
-"this content."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:2
-msgid "You considerate that the currently published must evolve."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:3
-msgid ""
-"By creating a new version, you can update it's content without impacting the "
-"currently published one."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:5
-msgid ""
-"When the new version will be complete, you will be able to make a new "
-"publication request to replace the currently published version (which will be"
-" archived automatically)."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-propose-message.pt:1
-msgid ""
-"This publication request is going to be transmitted to a content manager."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:2
-msgid "You are going to duplicate a whole content."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:3
-msgid ""
-"The new copy is going to be created in 'draft' mode, so that you can modify "
-"it before publication."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:5
-msgid ""
-"A new unique number is also going to be assigned to it. This number will be "
-"shared by all content's versions."
-msgstr ""
-
+#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:130
 #: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:130
-#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:130
 msgid "Created between"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:142
-#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:168
 #: ./src/pyams_content/root/zmi/templates/advanced-search.pt:142
 #: ./src/pyams_content/root/zmi/templates/advanced-search.pt:168
+#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:142
+#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:168
 msgid "and"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:156
 #: ./src/pyams_content/root/zmi/templates/advanced-search.pt:156
+#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:156
 msgid "Modified between"
 msgstr ""
 
+#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:211
 #: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:214
-#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:211
 msgid "Tab label"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:2
-msgid ""
-"As a content manager, you considerate that this content can't be published "
-"'as is'."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:4
-msgid ""
-"The contributor will be notified of this and will be able to update the "
-"content before doing a new publication request."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-cancel-archiving-message.pt:1
-msgid ""
-"After cancelling this request, the content will return to it's previous "
-"retired state."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-cancel-retiring-message.pt:1
-msgid ""
-"After cancelling this request, the content will return to it's normal "
-"published state."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:2
-msgid ""
-"As a content manager, you considerate that this content should no longer be "
-"published."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:4
-msgid ""
-"Retired content won't be visible anymore, but it can be updated and published"
-" again, or archived."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-cancel-propose-message.pt:1
-msgid ""
-"After canceling the request, you will be able to update the content again."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:2
-msgid ""
-"This content was never published. If you confirm deletion, it won't be "
-"possible to restore it."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:6
-msgid ""
-"The content version is going to be definitely deleted. Will only remain the "
-"currently published version."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-owner-warning.pt:1
-msgid ""
-"RECALL: you are not the owner of the content on which you are intervening."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:2
-msgid "FOR YOUR INFORMATION"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:5
-msgid "Next step"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:7
-msgid "Previous step"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:10
-msgid "With this comment:"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:2
-msgid "This content is already retired and not visible."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:43
-#: ./src/pyams_content/shared/form/zmi/field.py:156
-msgid "Name"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:44
-msgid "Name of this data type; must be unique between all data types"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:50
-msgid "Navigation label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:51
-msgid "Label used for navigation entries"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:54
-msgid "Tab-folder label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:55
-msgid "Label used to include into tab folder"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:58
-msgid "'See also' label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:59
-msgid ""
-"This label can be used when contents of this type will be displayed in a 'See"
-" also' entries block"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:63
-msgid "'Single value' label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:64
-msgid "Label given to this type when a single value is displayed"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:67
-msgid "'Link to list' label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:68
-msgid "Label used to display a link to a list of items of this type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:71
-msgid "Next content label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:72
-msgid "Label used to announce next date for this type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:76
-msgid "Pictogram associated with this data type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:90
-msgid "Field names"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:91
-msgid "List of fields associated with this data type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:125
-msgid "Data type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:126
-msgid "Type of content data"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:45
-#: ./src/pyams_content/root/interfaces/__init__.py:43
-msgid "Webmasters"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:46
-msgid "Webmasters can handle all contents, including published ones"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:50
-msgid "Pilots"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:51
-msgid ""
-"Pilots can handle tool configuration, manage access rules, grant users roles "
-"and manage managers restrictions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:56
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:196
-msgid "Managers"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:57
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:197
-msgid ""
-"Managers can handle main operations in tool's workflow, like publish or "
-"retire contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:62
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:202
-msgid "Contributors"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:63
-msgid "Contributors are users which are allowed to create new contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:67
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:208
-msgid "Designers"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:68
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:209
-msgid "Designers are users which are allowed to manage presentation templates"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:94
-msgid "Workflow name"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:95
-msgid "Name of workflow utility used to manage tool contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:123
-msgid "Content URL"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:124
-msgid ""
-"URL used to access this content; this is important for SEO and should include"
-" most important words describing content; spaces and underscores will be "
-"automatically replaced by hyphens"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:129
-msgid "Version creator"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:130
-msgid ""
-"Name of content's version creator. The creator of the first version is also "
-"it's owner."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:134
-msgid "First owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:135
-msgid "Name of content's first version owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:139
-msgid "Version creation"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:142
-msgid "Version modifiers"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:143
-msgid "List of principals who modified this content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:146
-msgid "Last modifier"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:147
-msgid "Last principal who modified this content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:150
-msgid "Last update"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:154
-msgid "Content's header is generally displayed in page header"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:159
-msgid "Meta-description"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:160
-msgid ""
-"The content's description is 'hidden' into HTML's page headers; but it can be"
-" seen, for example, in some search engines results as content's description; "
-"if description is empty, content's header will be used."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:165
-msgid "Keywords"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:166
-msgid "They will be included into HTML pages metadata"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:169
-#: ./src/pyams_content/shared/site/zmi/folder.py:79
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:76
-msgid "Notepad"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:170
-#: ./src/pyams_content/shared/site/zmi/folder.py:80
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:77
-msgid "Internal information to be known about this content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:189
-msgid "Content owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:190
-msgid ""
-"The owner is the creator of content's first version, except if it was "
-"transferred afterwards to another owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:203
-msgid ""
-"Contributors are users which are allowed to update this content in addition "
-"to it's owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:213
-msgid "Readers"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:214
-msgid ""
-"Readers are users which are asked to verify and comment contents before they "
-"are published"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:219
-msgid "Guests"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:220
-msgid ""
-"Guests are users which are allowed to view contents with restricted access"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:243
-msgid "Principal ID"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:282
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:307
-msgid "Publication checks"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:283
-msgid ""
-"If 'yes', this contributor will have to confirm that contents have been "
-"previewed and checked before asking for publication"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:308
-msgid ""
-"If 'yes', this manager will have to confirm that contents have been previewed"
-" and checked before publishing a content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:313
-msgid "Restricted contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:314
-msgid ""
-"If 'yes', this manager will get restricted access to manage contents based on"
-" selected settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:319
-msgid "Selected owners"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:320
-msgid "Manager will have access to contents owned by these principals"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/__init__.py:97
-msgid "Form fields"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/__init__.py:98
-msgid "no field defined"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/handler.py:80
-msgid "Mailto form handler"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/handler.py:44
-msgid "No selected handler..."
-msgstr ""
-
 #: ./src/pyams_content/shared/form/field.py:146
 msgid "Text"
 msgstr ""
@@ -3265,60 +3157,20 @@
 msgid "List"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/properties.py:41
-msgid "Main form settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/properties.py:65
-msgid "Form handler settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/__init__.py:44
-msgid "This form"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/__init__.py:63
-#: ./src/pyams_content/shared/form/zmi/__init__.py:74
-msgid "Add form"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/__init__.py:54
-#, python-format
-msgid "Form « {title} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:69
-msgid "Form fields..."
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:178
-#: ./src/pyams_content/shared/form/interfaces/__init__.py:55
-msgid "Field type"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:211
-msgid "Form fields list"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:234
-#: ./src/pyams_content/shared/form/zmi/field.py:247
-msgid "Add form field"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:285
-msgid "Edit form field properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:187
-msgid "-- unknown field type --"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:122
-msgid "No currently defined form field."
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:269
-msgid "Specified name is already used!"
+#: ./src/pyams_content/shared/form/handler.py:80
+msgid "Mailto form handler"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/handler.py:44
+msgid "No selected handler..."
+msgstr ""
+
+#: ./src/pyams_content/shared/form/__init__.py:97
+msgid "Form fields"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/__init__.py:98
+msgid "no field defined"
 msgstr ""
 
 #: ./src/pyams_content/shared/form/interfaces/__init__.py:33
@@ -3333,6 +3185,11 @@
 msgid "Field internal name; must be unique for a given form"
 msgstr ""
 
+#: ./src/pyams_content/shared/form/interfaces/__init__.py:55
+#: ./src/pyams_content/shared/form/zmi/field.py:178
+msgid "Field type"
+msgstr ""
+
 #: ./src/pyams_content/shared/form/interfaces/__init__.py:56
 msgid "Selected field type"
 msgstr ""
@@ -3449,22 +3306,60 @@
 msgid "Name of data recipient"
 msgstr ""
 
-#: ./src/pyams_content/shared/news/zmi/__init__.py:44
-msgid "This news topic"
-msgstr ""
-
-#: ./src/pyams_content/shared/news/zmi/__init__.py:63
-#: ./src/pyams_content/shared/news/zmi/__init__.py:74
-msgid "Add news topic"
-msgstr ""
-
-#: ./src/pyams_content/shared/news/zmi/__init__.py:54
+#: ./src/pyams_content/shared/form/zmi/properties.py:41
+msgid "Main form settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/properties.py:65
+msgid "Form handler settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:69
+msgid "Form fields..."
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:156
+#: ./src/pyams_content/shared/common/interfaces/types.py:43
+msgid "Name"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:211
+msgid "Form fields list"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:234
+#: ./src/pyams_content/shared/form/zmi/field.py:247
+msgid "Add form field"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:285
+msgid "Edit form field properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:187
+msgid "-- unknown field type --"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:122
+msgid "No currently defined form field."
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:269
+msgid "Specified name is already used!"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/__init__.py:44
+msgid "This form"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/__init__.py:63
+#: ./src/pyams_content/shared/form/zmi/__init__.py:74
+msgid "Add form"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/__init__.py:54
 #, python-format
-msgid "News topic « {title} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/news/interfaces/__init__.py:29
-msgid "News topic"
+msgid "Form « {title} »"
 msgstr ""
 
 #: ./src/pyams_content/shared/view/merge.py:59
@@ -3499,109 +3394,6 @@
 msgid "Sort all results by first publication date"
 msgstr ""
 
-#: ./src/pyams_content/shared/view/zmi/properties.py:45
-msgid "Main view settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/__init__.py:44
-msgid "This view"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/__init__.py:63
-#: ./src/pyams_content/shared/view/zmi/__init__.py:73
-msgid "Add view"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/__init__.py:54
-#, python-format
-msgid "View « {title} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/theme.py:67
-msgid "View tags settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/theme.py:113
-msgid "View themes settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/theme.py:159
-msgid "View collections settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/reference.py:52
-msgid "References..."
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/reference.py:63
-msgid "View internal references settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/__init__.py:89
-msgid "View items"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:41
-msgid "Display context"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:42
-msgid "Content context"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:59
-msgid "Selected views"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:60
-msgid ""
-"Reference to the view(s) from which items are extracted; you can combine "
-"several views together and specify in which order they should be mixed"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:69
-msgid "Views context"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:70
-msgid ""
-"When searching for items, a view receives a \"context\" which is the object "
-"from which settings can be extracted; this context can be the \"display\" "
-"context or the \"content\" context: when the portlet is used to display the "
-"site root, a site manager or a site folder, both are identical; when the "
-"portlet is used to display a shared content, the \"content\" context is the "
-"displayed content, while the \"display\" context is the container (site root,"
-" site manager or site folder) into which content is displayed"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:81
-msgid "Views merge mode"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:82
-msgid ""
-"If you select several views, you can select \"merge\" mode, which is the way "
-"used to merge items from several views"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:91
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:102
-msgid "Results count limit"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:92
-msgid ""
-"Maximum number of results that the component may extract from merged views"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:14
-msgid "No result found"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:15
-msgid "No selected view"
-msgstr ""
-
 #: ./src/pyams_content/shared/view/interfaces/__init__.py:34
 msgid "View"
 msgstr ""
@@ -3614,12 +3406,6 @@
 msgid "Include selected internal references only if empty"
 msgstr ""
 
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:43
-#: ./src/pyams_content/interfaces/__init__.py:113
-#: ./src/pyams_content/features/review/interfaces.py:74
-msgid "Creation date"
-msgstr ""
-
 #: ./src/pyams_content/shared/view/interfaces/__init__.py:44
 msgid "Last update date"
 msgstr ""
@@ -3681,6 +3467,11 @@
 msgid "If 'yes', items order will be reversed"
 msgstr ""
 
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:102
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:91
+msgid "Results count limit"
+msgstr ""
+
 #: ./src/pyams_content/shared/view/interfaces/__init__.py:103
 msgid "Maximum number of results that the view may retrieve"
 msgstr ""
@@ -3737,6 +3528,1483 @@
 msgid "Other collections"
 msgstr ""
 
+#: ./src/pyams_content/shared/view/portlet/__init__.py:87
+msgid "View items"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:41
+msgid "Display context"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:42
+msgid "Content context"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:59
+msgid "Selected views"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:60
+msgid ""
+"Reference to the view(s) from which items are extracted; you can combine "
+"several views together and specify in which order they should be mixed"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:69
+msgid "Views context"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:70
+msgid ""
+"When searching for items, a view receives a \"context\" which is the object "
+"from which settings can be extracted; this context can be the \"display\" "
+"context or the \"content\" context: when the portlet is used to display the "
+"site root, a site manager or a site folder, both are identical; when the "
+"portlet is used to display a shared content, the \"content\" context is the "
+"displayed content, while the \"display\" context is the container (site root,"
+" site manager or site folder) into which content is displayed"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:81
+msgid "Views merge mode"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:82
+msgid ""
+"If you select several views, you can select \"merge\" mode, which is the way "
+"used to merge items from several views"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:92
+msgid ""
+"Maximum number of results that the component may extract from merged views"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:95
+msgid "Starting from..."
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:96
+msgid "You can skip several results if specifying an integer value here..."
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:8
+msgid "Selected views:"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:9
+msgid "none"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:15
+msgid "Extracted contents:"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:16
+msgid "none (no selected view)"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:22
+msgid "No result found"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/properties.py:45
+msgid "Main view settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/__init__.py:44
+msgid "This view"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/__init__.py:63
+#: ./src/pyams_content/shared/view/zmi/__init__.py:73
+msgid "Add view"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/__init__.py:54
+#, python-format
+msgid "View « {title} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/theme.py:67
+msgid "View tags settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/theme.py:113
+msgid "View themes settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/theme.py:159
+msgid "View collections settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/reference.py:52
+msgid "References..."
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/reference.py:63
+msgid "View internal references settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/interfaces/__init__.py:30
+msgid "Blog post"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/interfaces/__init__.py:68
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:157
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:72
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:117
+msgid "Meta-description"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/interfaces/__init__.py:69
+msgid ""
+"The blog's description is 'hidden' into HTML's page headers; but it can be "
+"seen, for example, in some search engines results as content's description; "
+"if description is empty, content's header will be used."
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/interfaces/__init__.py:74
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:169
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:78
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:123
+#: ./src/pyams_content/shared/site/zmi/folder.py:74
+msgid "Notepad"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/interfaces/__init__.py:75
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:170
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:79
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:124
+#: ./src/pyams_content/shared/site/zmi/folder.py:75
+msgid "Internal information to be known about this content"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:57
+msgid "Blog management"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:80
+#: ./src/pyams_content/shared/blog/zmi/manager.py:94
+msgid "Add blog manager"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:93
+msgid "Blog manager"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:148
+msgid "Blog properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:163
+#: ./src/pyams_content/shared/blog/zmi/manager.py:175
+#: ./src/pyams_content/shared/site/zmi/container.py:104
+#: ./src/pyams_content/shared/site/zmi/container.py:116
+msgid "Publication dates..."
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:189
+#: ./src/pyams_content/shared/site/zmi/container.py:130
+msgid "Update publication dates"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:124
+#: ./src/pyams_content/shared/site/zmi/manager.py:163
+msgid "You must provide a short name for default server language!"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:128
+msgid "Specified blog manager name is already used!"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:132
+msgid "A blog manager is already registered with this name!!"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/__init__.py:52
+msgid "This blog post"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/__init__.py:71
+#: ./src/pyams_content/shared/blog/zmi/__init__.py:81
+msgid "Add blog post"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/__init__.py:62
+#, python-format
+msgid "Blog post « {title} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/__init__.py:244
+#: ./src/pyams_content/shared/common/zmi/properties.py:69
+#: ./src/pyams_content/shared/common/zmi/manager.py:96
+msgid "Properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/__init__.py:154
+#: ./src/pyams_content/shared/common/__init__.py:162
+#, python-format
+msgid "{date} by {principal}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/__init__.py:267
+#, python-format
+msgid "title length should be between 40 and 66 characters ({length} actually)"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:44
+msgid "Name of this data type; must be unique between all data types"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:50
+msgid "Navigation label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:51
+msgid "Label used for navigation entries"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:54
+msgid "Tab-folder label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:55
+msgid "Label used to include into tab folder"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:58
+msgid "'See also' label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:59
+msgid ""
+"This label can be used when contents of this type will be displayed in a 'See"
+" also' entries block"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:63
+msgid "'Single value' label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:64
+msgid "Label given to this type when a single value is displayed"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:67
+msgid "'Link to list' label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:68
+msgid "Label used to display a link to a list of items of this type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:71
+msgid "Next content label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:72
+msgid "Label used to announce next date for this type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:76
+msgid "Pictogram associated with this data type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:90
+msgid "Field names"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:91
+msgid "List of fields associated with this data type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:125
+msgid "Data type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:126
+msgid "Type of content data"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:42
+msgid "Webmasters can handle all contents, including published ones"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:46
+msgid "Pilots"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:47
+msgid ""
+"Pilots can handle tool configuration, manage access rules, grant users roles "
+"and manage managers restrictions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:52
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:196
+msgid "Managers"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:53
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:197
+msgid ""
+"Managers can handle main operations in tool's workflow, like publish or "
+"retire contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:58
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:202
+msgid "Contributors"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:59
+msgid "Contributors are users which are allowed to create new contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:63
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:208
+msgid "Designers"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:64
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:209
+msgid "Designers are users which are allowed to manage presentation templates"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:90
+msgid "Workflow name"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:91
+msgid "Name of workflow utility used to manage tool contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:119
+msgid "Content URL"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:120
+msgid ""
+"URL used to access this content; this is important for SEO and should include"
+" most important words describing content; spaces and underscores will be "
+"automatically replaced by hyphens"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:127
+msgid "Version creator"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:128
+msgid ""
+"Name of content's version creator. The creator of the first version is also "
+"it's owner."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:132
+msgid "First owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:133
+msgid "Name of content's first version owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:137
+msgid "Version creation"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:140
+msgid "Version modifiers"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:141
+msgid "List of principals who modified this content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:144
+msgid "Last modifier"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:145
+msgid "Last principal who modified this content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:148
+msgid "Last update"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:152
+msgid "Content's header is generally displayed in page header"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:158
+msgid ""
+"The content's description is 'hidden' into HTML's page headers; but it can be"
+" seen, for example, in some search engines results as content's description; "
+"if description is empty, content's header will be used."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:165
+msgid "Keywords"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:166
+msgid "They will be included into HTML pages metadata"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:189
+msgid "Content owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:190
+msgid ""
+"The owner is the creator of content's first version, except if it was "
+"transferred afterwards to another owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:203
+msgid ""
+"Contributors are users which are allowed to update this content in addition "
+"to it's owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:213
+msgid "Readers"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:214
+msgid ""
+"Readers are users which are asked to verify and comment contents before they "
+"are published"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:219
+msgid "Guests"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:220
+msgid ""
+"Guests are users which are allowed to view contents with restricted access"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:243
+msgid "Principal ID"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:282
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:307
+msgid "Publication checks"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:283
+msgid ""
+"If 'yes', this contributor will have to confirm that contents have been "
+"previewed and checked before asking for publication"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:308
+msgid ""
+"If 'yes', this manager will have to confirm that contents have been previewed"
+" and checked before publishing a content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:313
+msgid "Restricted contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:314
+msgid ""
+"If 'yes', this manager will get restricted access to manage contents based on"
+" selected settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:319
+msgid "Selected owners"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:320
+msgid "Manager will have access to contents owned by these principals"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/title.py:38
+msgid "Content title"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/head.py:46
+msgid "Content header"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/interfaces/__init__.py:25
+msgid "Display breadcrumbs?"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/interfaces/__init__.py:29
+msgid "Display title?"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/interfaces/__init__.py:33
+msgid "Display tags?"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/interfaces/__init__.py:37
+msgid "Display header?"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/interfaces/__init__.py:41
+msgid "Display specificities?"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/interfaces/__init__.py:42
+msgid "If 'no', specific content's informations won't be displayed..."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/zmi/templates/head-preview.pt:4
+msgid "Display breadcrumbs"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/zmi/templates/head-preview.pt:8
+msgid "Display title"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/zmi/templates/head-preview.pt:12
+msgid "Display tags"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/zmi/templates/head-preview.pt:16
+msgid "Display header"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/zmi/templates/head-preview.pt:20
+msgid "Display specificities"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/portal.py:44
+msgid "Edit default template properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/portal.py:54
+msgid ""
+"**This form allows you to select shared content default template.**\n"
+"\n"
+"If you choose to use a shared template, you can only adjust settings of each portlet individually but can't change portlets list or page configuration.\n"
+"\n"
+"If you use a local template, you can define a whole custom configuration but the template definition can't be reused anywhere..."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/portal.py:70
+msgid "Use tool default template"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/properties.py:59
+msgid "Composition"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/properties.py:82
+msgid "Content properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/site.py:38
+#, python-format
+msgid ""
+"SEARCH - Between all contents published into &laquo;&nbsp;{site}&nbsp;&raquo;"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:79
+#, python-format
+msgid "{state} by {principal}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:112
+#, python-format
+msgid "since {date}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:91
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:165
+msgid "Content publication start date is not passed yet"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:124
+msgid "access published version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:131
+msgid "access new version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:141
+msgid "access waiting version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:152
+msgid "access retired version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:162
+msgid "access archived version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:107
+msgid "Shared tool properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:125
+msgid "WARNING"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:127
+msgid ""
+"Workflow shouldn't be modified if this tool already contains any shared "
+"content!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:150
+msgid "Languages"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:162
+msgid "Content languages"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:172
+msgid ""
+"Tool languages are used to translate own tool properties, and newly created "
+"contents will propose these languages by default"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:80
+msgid "Content management"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:82
+msgid "Tool management"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:69
+msgid "Data types"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:147
+msgid "Data type label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:187
+#: ./src/pyams_content/shared/common/zmi/types.py:427
+msgid "Default associations"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:203
+msgid "Default themes"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:231
+msgid "Content data types"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:254
+msgid "Add data type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:266
+msgid "Add new data type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:309
+msgid "Data type properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:390
+msgid "Subtype label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:471
+msgid "Add subtype"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:483
+msgid "Add new subtype"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:530
+msgid "Data subtype properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:572
+msgid "Select content type..."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:114
+msgid "No currently defined data type."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:299
+msgid "Specified type name is already used!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:506
+msgid "Subtype was correctly added."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:520
+msgid "Specified subtype name is already used!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:159
+msgid "Click to see subtypes"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:610
+#, python-format
+msgid "Custom properties for type « {0} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:128
+msgid "Unique ID"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:148
+#: ./src/pyams_content/shared/common/zmi/search.py:173
+msgid "Status"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:175
+msgid "Status date"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:192
+#: ./src/pyams_content/shared/common/zmi/summary.py:165
+msgid "Version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:207
+msgid "Status principal"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:244
+msgid "Last modification"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:277
+msgid "Contents dashboard"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:476
+#: ./src/pyams_content/shared/common/zmi/templates/header.pt:23
+msgid "Add/remove from favorites"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:300
+#, python-format
+msgid "SEARCH - Between all contents of type &laquo;&nbsp;{type}&nbsp;&raquo;"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/rename.py:62
+msgid "Change URL..."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/rename.py:79
+msgid "Change item URL"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/rename.py:86
+msgid "Item URL part"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/rename.py:87
+msgid "URL part used to access this content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/rename.py:121
+msgid "You must provide an URL for this item!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:64
+msgid "Contributors restrictions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:73
+msgid "Content contributors restrictions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:107
+msgid "Contributor name"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:118
+#: ./src/pyams_content/shared/common/zmi/security.py:272
+msgid "Activated publication checks?"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:219
+msgid "Managers restrictions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:228
+msgid "Content managers restrictions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:261
+msgid "Manager name"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:289
+msgid "Restricted"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:306
+msgid "Owners"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:396
+msgid "Publication workflow"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:167
+#, python-format
+msgid "Edit contributor restrictions for « {0} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:355
+#, python-format
+msgid "Edit manager restrictions for « {0} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:402
+msgid "Apply contents restrictions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:404
+msgid ""
+"You can specify which contents this manager will be able to manage. If you "
+"specify several criteria, the manager will be able to manage contents for "
+"which at least one criteria is matching."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/__init__.py:265
+msgid "Duplicate content..."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/__init__.py:285
+msgid "Duplicate content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/__init__.py:86
+msgid "This title can be modified afterwards"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/__init__.py:276
+msgid "Duplicate this content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/__init__.py:332
+#, python-format
+msgid "Clone created from version {source} of {oid} (in « {state} » state)"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/__init__.py:377
+msgid "Created or modified in this version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:50
+msgid "Change owner..."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:83
+msgid "Change content's owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:125
+msgid ""
+"All versions of this content which are not archived will be transferred to "
+"newly selected owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:60
+msgid "New owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:61
+msgid "The selected user will become the new content's owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:63
+msgid "Keep previous owner as contributor"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:64
+msgid "If 'yes', the previous owner will still be able to modify this content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:74
+msgid "Change owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:847
+msgid "Prior checks"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:124
+msgid "Request publication"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:211
+#: ./src/pyams_content/workflow/__init__.py:316
+msgid "Cancel publication request"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:251
+msgid "Refuse publication request"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:305
+#: ./src/pyams_content/workflow/basic.py:197
+msgid "Publish"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:394
+msgid "Request retire"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:450
+msgid "Cancel retire request"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:490
+msgid "Retire"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:531
+#: ./src/pyams_content/workflow/__init__.py:437
+msgid "Request archive"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:574
+msgid "Cancel archive request"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:614
+msgid "Archive"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:655
+#: ./src/pyams_content/workflow/__init__.py:502
+#: ./src/pyams_content/workflow/__init__.py:514
+#: ./src/pyams_content/workflow/__init__.py:526
+#: ./src/pyams_content/workflow/__init__.py:538
+#: ./src/pyams_content/workflow/__init__.py:550
+#: ./src/pyams_content/workflow/basic.py:225
+#: ./src/pyams_content/workflow/basic.py:237
+msgid "Create new version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:706
+#: ./src/pyams_content/workflow/__init__.py:562
+#: ./src/pyams_content/workflow/basic.py:249
+msgid "Delete version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:793
+msgid "Previewed content?"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:797
+msgid "Verified content?"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:181
+#: ./src/pyams_content/shared/common/zmi/workflow.py:363
+msgid "Publication start date is required"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:274
+#: ./src/pyams_content/shared/common/zmi/workflow.py:420
+msgid "A comment is required"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:732
+msgid "Delete content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:741
+msgid "Delete definitively"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:870
+msgid ""
+"You must confirm that you previewed and checked this content before "
+"requesting publication!!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:88
+#, python-format
+msgid "{state} | by {principal}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:873
+msgid ""
+"You must confirm that you checked this content before requesting "
+"publication!!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:84
+#: ./src/pyams_content/workflow/__init__.py:649
+#: ./src/pyams_content/workflow/__init__.py:620
+#: ./src/pyams_content/workflow/basic.py:316
+#: ./src/pyams_content/workflow/basic.py:287
+#, python-format
+msgid "{state} {date}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/reverse.py:57
+msgid "Reverse links"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/reverse.py:66
+msgid "Content's internal links"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:51
+msgid "Display content summary"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:75
+msgid "Identity card"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:93
+msgid "Requested action"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:134
+msgid "Publication and retire dates"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:153
+msgid "Current version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:183
+msgid "Content history"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:124
+msgid "Associated comment"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:114
+#, python-format
+msgid "{state} {date} by {principal}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:171
+#, python-format
+msgid "{state} since {date}, by {principal}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-owner-warning.pt:1
+msgid ""
+"RECALL: you are not the owner of the content on which you are intervening."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:2
+msgid "You are going to duplicate a whole content."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:3
+msgid ""
+"The new copy is going to be created in 'draft' mode, so that you can modify "
+"it before publication."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:5
+msgid ""
+"A new unique number is also going to be assigned to it. This number will be "
+"shared by all content's versions."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/header.pt:6
+msgid "Back to previous page"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/header.pt:20
+msgid "by ${owner}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-operator-warning.pt:1
+msgid ""
+"WARNING: this request was made by a contributor which is not the owner of "
+"this content."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-propose-message.pt:1
+msgid ""
+"This publication request is going to be transmitted to a content manager."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:2
+msgid ""
+"This new content is going to be created in 'draft' mode, so that you can "
+"complete it before publication."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:4
+msgid ""
+"A unique number is also going to be assigned to it. This number will be "
+"shared by all content's versions."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-cancel-propose-message.pt:1
+msgid ""
+"After canceling the request, you will be able to update the content again."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:2
+msgid "You considerate that the currently published must evolve."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:3
+msgid ""
+"By creating a new version, you can update it's content without impacting the "
+"currently published one."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:5
+msgid ""
+"When the new version will be complete, you will be able to make a new "
+"publication request to replace the currently published version (which will be"
+" archived automatically)."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:2
+msgid ""
+"You considerate that the currently published version should no more be "
+"publicly visible."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:3
+msgid ""
+"WARNING: the content will remain visible until a manager validate the "
+"request."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:2
+msgid "This content is already retired and not visible."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:3
+#: ./src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:3
+msgid ""
+"After archiving, it will be backed up but you will not be able to publish it "
+"again except by creating a new version."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:2
+msgid ""
+"As a manager, you considerate that this content is complete and can be "
+"published 'as is'."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:4
+msgid ""
+"This operation will make the content publicly available (except if restricted"
+" access has been set)."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:2
+msgid ""
+"As a content manager, you considerate that this content can't be published "
+"'as is'."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:4
+msgid ""
+"The contributor will be notified of this and will be able to update the "
+"content before doing a new publication request."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:2
+msgid "As a manager, you considerate that this content must be archived."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-cancel-archiving-message.pt:1
+msgid ""
+"After cancelling this request, the content will return to it's previous "
+"retired state."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:2
+msgid ""
+"As a content manager, you considerate that this content should no longer be "
+"published."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:4
+msgid ""
+"Retired content won't be visible anymore, but it can be updated and published"
+" again, or archived."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-cancel-retiring-message.pt:1
+msgid ""
+"After cancelling this request, the content will return to it's normal "
+"published state."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:2
+msgid "FOR YOUR INFORMATION"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:5
+msgid "Next step"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:7
+msgid "Previous step"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:10
+msgid "With this comment:"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:2
+msgid ""
+"This content was never published. If you confirm deletion, it won't be "
+"possible to restore it."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:6
+msgid ""
+"The content version is going to be definitely deleted. Will only remain the "
+"currently published version."
+msgstr ""
+
+#: ./src/pyams_content/shared/news/interfaces/__init__.py:29
+msgid "News topic"
+msgstr ""
+
+#: ./src/pyams_content/shared/news/zmi/__init__.py:44
+msgid "This news topic"
+msgstr ""
+
+#: ./src/pyams_content/shared/news/zmi/__init__.py:63
+#: ./src/pyams_content/shared/news/zmi/__init__.py:74
+msgid "Add news topic"
+msgstr ""
+
+#: ./src/pyams_content/shared/news/zmi/__init__.py:54
+#, python-format
+msgid "News topic « {title} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/manager.py:66
+#: ./src/pyams_content/shared/site/zmi/manager.py:121
+msgid "Site manager"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/folder.py:56
+msgid "Site folder"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/link.py:43
+msgid "Content link"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:133
+msgid "Site topic"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:38
+msgid "Redirect to first visible sub-folder or content"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:39
+msgid "Use presentation template"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:68
+msgid "Heading"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:69
+msgid "Heading displayed according to presentation template"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:73
+msgid ""
+"The folder's description is 'hidden' into HTML's page headers; but it can be "
+"seen, for example, in some search engines results as content's description; "
+"if description is empty, content's header will be used."
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:82
+msgid "Visible in folders list"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:83
+msgid "If 'no', folder will not be displayed into folders list"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:87
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:151
+msgid "Navigation title"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:88
+msgid ""
+"Folder's title displayed in navigation pages; original title will be used if "
+"none is specified"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:92
+msgid "Navigation mode"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:93
+msgid "Folder behaviour when navigating to folder URL"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:118
+msgid ""
+"The site's description is 'hidden' into HTML's page headers; but it can be "
+"seen, for example, in some search engines results as content's description; "
+"if description is empty, content's header will be used."
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:152
+msgid ""
+"Alternate content's title displayed in navigation pages; original title will "
+"be used if none is specified"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:157
+msgid "If 'no', link is not visible"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:308
+#: ./src/pyams_content/shared/site/zmi/container.py:154
+msgid "Visible element?"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:309
+msgid "Switch element visibility"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:371
+msgid "Folders and topics"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:503
+msgid "Delete site item"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:380
+msgid "Click to open/close all folders"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:396
+msgid "Click to show/hide inner folders"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:265
+msgid "Can't reparent object to one of it's children. Reloading..."
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/manager.py:53
+msgid "Site management"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/manager.py:108
+#: ./src/pyams_content/shared/site/zmi/manager.py:122
+msgid "Add site manager"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/manager.py:150
+#: ./src/pyams_content/shared/site/zmi/folder.py:185
+msgid "Site folder properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/manager.py:167
+msgid "Specified site manager name is already used!"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/manager.py:171
+msgid "A site manager is already registered with this name!!"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:57
+msgid "Add site folder..."
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:89
+msgid "Add site folder"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:156
+msgid "Site folder management"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:203
+msgid "Navigation properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:70
+#: ./src/pyams_content/shared/site/zmi/link.py:65
+#: ./src/pyams_content/shared/site/zmi/__init__.py:60
+msgid "Parent"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:71
+#: ./src/pyams_content/shared/site/zmi/link.py:66
+msgid "Folder's parent"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:149
+msgid "You must provide a folder name for default server language!"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/link.py:56
+msgid "Rent content..."
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/link.py:76
+msgid "Rent existing content"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/link.py:134
+msgid "Edit content link properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/__init__.py:51
+msgid "Add topic..."
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/__init__.py:74
+#: ./src/pyams_content/shared/topic/zmi/__init__.py:57
+#: ./src/pyams_content/shared/topic/zmi/__init__.py:68
+msgid "Add topic"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/__init__.py:61
+msgid "Topic's parent"
+msgstr ""
+
+#: ./src/pyams_content/shared/topic/interfaces/__init__.py:23
+msgid "Topic"
+msgstr ""
+
+#: ./src/pyams_content/shared/topic/zmi/__init__.py:38
+msgid "This topic"
+msgstr ""
+
+#: ./src/pyams_content/shared/topic/zmi/__init__.py:48
+#, python-format
+msgid "Topic « {title} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/__init__.py:152
+msgid "no area defined"
+msgstr ""
+
 #: ./src/pyams_content/shared/imagemap/paragraph.py:88
 msgid "no selected image map"
 msgstr ""
@@ -3751,96 +5019,16 @@
 msgid "image map '{0}' is not published"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/__init__.py:154
-msgid "no area defined"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:55
-msgid "Image map..."
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:68
-msgid "Add new image map"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:95
-#: ./src/pyams_content/shared/logo/zmi/paragraph.py:94
-msgid "Edit paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/properties.py:40
-msgid "Background image"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:44
-msgid "This image map"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:63
-msgid "Add image map"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:73
-msgid "Adding image map"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:54
-#, python-format
-msgid "Image map « {title} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:54
-msgid "Image areas"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:65
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:71
-msgid "Image map areas"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:140
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:50
-msgid "Link target"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:113
-msgid "No currently defined image."
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:115
-msgid "No currently defined area."
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:175
-#: ./src/pyams_content/root/zmi/sites.py:170
-msgid "No provided object_name argument!"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:194
-msgid "Given area name doesn't exist!"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:186
-msgid "Bad query object_name parameter value!"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/area.py:47
-msgid "Add image area"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/area.py:66
-msgid "Add new image area"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/area.py:107
-msgid "Edit image map properties"
-msgstr ""
-
 #: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:36
 #: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:89
 msgid "Image map"
 msgstr ""
 
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:50
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:140
+msgid "Link target"
+msgstr ""
+
 #: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:51
 msgid "Internal or external link associated with this map area"
 msgstr ""
@@ -3861,16 +5049,15 @@
 msgid "Image supporting map areas"
 msgstr ""
 
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:71
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:65
+msgid "Image map areas"
+msgstr ""
+
 #: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:72
 msgid "List of defined map areas"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:96
-#: ./src/pyams_content/features/alert/interfaces.py:69
-#: ./src/pyams_content/features/menu/interfaces/__init__.py:68
-msgid "Internal reference"
-msgstr ""
-
 #: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:97
 msgid "Reference to image map object"
 msgstr ""
@@ -3879,216 +5066,78 @@
 msgid "Image map template"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/folder.py:62
-msgid "Site folder"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/link.py:49
-msgid "Content link"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/manager.py:68
-#: ./src/pyams_content/shared/site/zmi/manager.py:125
-msgid "Site manager"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:62
-msgid "Add site folder..."
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:94
-msgid "Add site folder"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:161
-msgid "Site folder management"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:190
-msgid "Site folder properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:208
-msgid "Navigation properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:72
-#: ./src/pyams_content/interfaces/__init__.py:102
-msgid "Visible label used to display content"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:75
-#: ./src/pyams_content/shared/site/zmi/__init__.py:72
-#: ./src/pyams_content/shared/site/zmi/link.py:65
-msgid "Parent"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:76
-#: ./src/pyams_content/shared/site/zmi/link.py:66
-msgid "Folder's parent"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:154
-msgid "You must provide a folder name for default server language!"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/__init__.py:55
-msgid "This topic"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/__init__.py:63
-msgid "Add topic..."
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/__init__.py:86
-msgid "Add topic"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/__init__.py:73
-msgid "Topic's parent"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/link.py:56
-msgid "Rent content..."
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/link.py:76
-msgid "Rent existing content"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/link.py:134
-msgid "Edit content link properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:106
-#: ./src/pyams_content/shared/site/zmi/container.py:118
-#: ./src/pyams_content/shared/blog/zmi/manager.py:155
-#: ./src/pyams_content/shared/blog/zmi/manager.py:167
-msgid "Publication dates..."
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:132
-#: ./src/pyams_content/shared/blog/zmi/manager.py:181
-msgid "Update publication dates"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:178
-#: ./src/pyams_content/shared/site/zmi/container.py:188
-#: ./src/pyams_content/root/zmi/sites.py:68
-msgid "Site tree"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:310
-#: ./src/pyams_content/shared/site/zmi/container.py:156
-msgid "Visible element?"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:311
-msgid "Switch element visibility"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:372
-msgid "Folders and topics"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:408
-#: ./src/pyams_content/root/zmi/__init__.py:825
-msgid "Content"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:504
-msgid "Delete site item"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:381
-msgid "Click to open/close all folders"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:397
-msgid "Click to show/hide inner folders"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:267
-msgid "Can't reparent object to one of it's children. Reloading..."
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/manager.py:57
-msgid "Site management"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/manager.py:112
-#: ./src/pyams_content/shared/site/zmi/manager.py:126
-msgid "Add site manager"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/manager.py:156
-#: ./src/pyams_content/shared/blog/zmi/manager.py:127
-msgid "You must provide a short name for default server language!"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/manager.py:160
-msgid "Specified site manager name is already used!"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/manager.py:164
-msgid "A site manager is already registered with this name!!"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:121
-msgid "Topic"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:42
-msgid "Redirect to first visible sub-folder or content"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:43
-msgid "Use presentation template"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:72
-msgid "Heading"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:73
-msgid "Heading displayed according to presentation template"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:80
-msgid "Visible in folders list"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:81
-msgid "If 'no', folder will not be displayed into folders list"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:85
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:139
-msgid "Navigation title"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:86
-msgid ""
-"Folder's title displayed in navigation pages; original title will be used if "
-"none is specified"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:90
-msgid "Navigation mode"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:91
-msgid "Folder behaviour when navigating to folder URL"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:140
-msgid ""
-"Alternate content's title displayed in navigation pages; original title will "
-"be used if none is specified"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:145
-msgid "If 'no', link is not visible"
+#: ./src/pyams_content/shared/imagemap/zmi/properties.py:40
+msgid "Background image"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:54
+msgid "Image areas"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:113
+msgid "No currently defined image."
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:115
+msgid "No currently defined area."
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:194
+msgid "Given area name doesn't exist!"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:186
+msgid "Bad query object_name parameter value!"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/area.py:47
+msgid "Add image area"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/area.py:66
+msgid "Add new image area"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/area.py:107
+msgid "Edit image map properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:44
+msgid "This image map"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:63
+msgid "Add image map"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:73
+msgid "Adding image map"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:54
+#, python-format
+msgid "Image map « {title} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:55
+msgid "Image map..."
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:68
+msgid "Add new image map"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:95
+#: ./src/pyams_content/shared/logo/zmi/paragraph.py:94
+msgid "Edit paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/__init__.py:73
+msgid "no image defined"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/__init__.py:76
+msgid "no URL defined"
 msgstr ""
 
 #: ./src/pyams_content/shared/logo/paragraph.py:95
@@ -4105,23 +5154,51 @@
 msgid "logo '{0}' is not published"
 msgstr ""
 
-#: ./src/pyams_content/shared/logo/__init__.py:69
-msgid "no image defined"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/__init__.py:72
-msgid "no URL defined"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/zmi/paragraph.py:55
-msgid "Logos..."
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/zmi/paragraph.py:68
-msgid "Add new logos paragraph"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/zmi/properties.py:40
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:32
+msgid "Logo"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:77
+msgid "Logos"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:47
+msgid "Full name of logo organization"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:50
+msgid "Acronym"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:51
+msgid "Matching logo acronym, without spaces or separators"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:58
+msgid "Image (colored)"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:62
+msgid "Image (monochrome)"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:63
+msgid "An alternate image which can be used by some presentation templates"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:84
+msgid "Logos references"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:85
+msgid "List of internal logos references"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:88
+msgid "Logos template"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/zmi/properties.py:65
 msgid "Main logo settings"
 msgstr ""
 
@@ -4139,151 +5216,16 @@
 msgid "Logo « {title} »"
 msgstr ""
 
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:33
-msgid "Logo"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:70
-msgid "Logos"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:47
-msgid "Image (colored)"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:51
-msgid "Image (monochrome)"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:52
-msgid "An alternate image which can be used by some presentation templates"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:77
-msgid "Logos references"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:78
-msgid "List of internal logos references"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:81
-msgid "Logos template"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/__init__.py:53
-msgid "This blog post"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/__init__.py:72
-#: ./src/pyams_content/shared/blog/zmi/__init__.py:82
-msgid "Add blog post"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/__init__.py:63
-#, python-format
-msgid "Blog post « {title} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:60
-msgid "Blog management"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:83
-#: ./src/pyams_content/shared/blog/zmi/manager.py:97
-msgid "Add blog manager"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:96
-msgid "Blog manager"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:131
-msgid "Specified blog manager name is already used!"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:135
-msgid "A blog manager is already registered with this name!!"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/interfaces/__init__.py:33
-msgid "Blog post"
-msgstr ""
-
-#: ./src/pyams_content/profile/zmi/__init__.py:42
-msgid "Admin. profile"
-msgstr ""
-
-#: ./src/pyams_content/profile/interfaces/__init__.py:33
-msgid "User favorites"
-msgstr ""
-
-#: ./src/pyams_content/profile/interfaces/__init__.py:34
-msgid "List of internal numbers of shared contents stored for quick access"
-msgstr ""
-
-#: ./src/pyams_content/profile/interfaces/__init__.py:37
-msgid "Default table length"
-msgstr ""
-
-#: ./src/pyams_content/profile/interfaces/__init__.py:38
-msgid "Default length used for inner tables and dashboards"
-msgstr ""
-
-#: ./src/pyams_content/root/__init__.py:69
-msgid "Site root"
-msgstr ""
-
-#: ./src/pyams_content/root/zmi/sites.py:78
-msgid "Blogs and shared sites"
-msgstr ""
-
-#: ./src/pyams_content/root/zmi/sites.py:108
-msgid "Visible site?"
-msgstr ""
-
-#: ./src/pyams_content/root/zmi/sites.py:133
-msgid "OID"
-msgstr ""
-
-#: ./src/pyams_content/root/zmi/sites.py:151
-msgid "Delete shared site"
-msgstr ""
-
-#: ./src/pyams_content/root/zmi/sites.py:179
-msgid "Given element name doesn't exist!"
-msgstr ""
-
-#: ./src/pyams_content/root/zmi/search.py:160
-msgid "Content types"
-msgstr ""
-
-#: ./src/pyams_content/root/zmi/__init__.py:78
-msgid "Home"
-msgstr ""
-
-#: ./src/pyams_content/root/zmi/templates/dashboard.pt:7
-msgid "Your contents dashboard"
-msgstr ""
-
-#: ./src/pyams_content/root/zmi/templates/dashboard.pt:18
-msgid "SEARCH - Between all contents"
-msgstr ""
-
-#: ./src/pyams_content/root/interfaces/__init__.py:39
-msgid "Site managers"
-msgstr ""
-
-#: ./src/pyams_content/root/interfaces/__init__.py:47
-msgid "Templates managers"
-msgstr ""
-
-#: ./src/pyams_content/root/interfaces/__init__.py:51
-msgid "Operators group"
-msgstr ""
-
-#: ./src/pyams_content/root/interfaces/__init__.py:52
-msgid "Name of group containing all roles owners"
+#: ./src/pyams_content/shared/logo/zmi/paragraph.py:55
+msgid "Logos..."
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/zmi/paragraph.py:68
+msgid "Add new logos paragraph"
+msgstr ""
+
+#: ./src/pyams_content/workflow/task.py:62
+msgid "Automatic contents withdrawal:\n"
 msgstr ""
 
 #: ./src/pyams_content/workflow/__init__.py:70
@@ -4361,235 +5303,235 @@
 msgid "archived"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:279
-#: ./src/pyams_content/workflow/basic.py:190
+#: ./src/pyams_content/workflow/__init__.py:280
+#: ./src/pyams_content/workflow/basic.py:191
 msgid "Initialize"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:282
-#: ./src/pyams_content/workflow/basic.py:193
+#: ./src/pyams_content/workflow/__init__.py:283
+#: ./src/pyams_content/workflow/basic.py:194
 msgid "Draft creation"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:285
-#: ./src/pyams_content/workflow/__init__.py:300
+#: ./src/pyams_content/workflow/__init__.py:286
+#: ./src/pyams_content/workflow/__init__.py:301
 msgid "Propose publication"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:292
-#: ./src/pyams_content/workflow/__init__.py:307
-msgid "Publication request"
-msgstr ""
-
 #: ./src/pyams_content/workflow/__init__.py:293
 #: ./src/pyams_content/workflow/__init__.py:308
-#: ./src/pyams_content/workflow/__init__.py:396
-#: ./src/pyams_content/workflow/__init__.py:443
+msgid "Publication request"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:294
+#: ./src/pyams_content/workflow/__init__.py:309
+#: ./src/pyams_content/workflow/__init__.py:397
+#: ./src/pyams_content/workflow/__init__.py:444
 msgid ""
 "content managers authorized to take charge of your content are going to be "
 "notified of your request."
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:296
-#: ./src/pyams_content/workflow/__init__.py:311
+#: ./src/pyams_content/workflow/__init__.py:297
+#: ./src/pyams_content/workflow/__init__.py:312
 #, python-format
 msgid "submitted a publication request for content « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:323
+#: ./src/pyams_content/workflow/__init__.py:324
 msgid "Publication request canceled"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:325
+#: ./src/pyams_content/workflow/__init__.py:326
 #, python-format
 msgid "cancelled the publication request for content « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:329
+#: ./src/pyams_content/workflow/__init__.py:330
 msgid "Reset canceled publication to draft"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:333
-#: ./src/pyams_content/workflow/__init__.py:363
+#: ./src/pyams_content/workflow/__init__.py:334
+#: ./src/pyams_content/workflow/__init__.py:364
 msgid "State reset to 'draft' (automatic)"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:337
+#: ./src/pyams_content/workflow/__init__.py:338
 msgid "Reset canceled publication to retired"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:341
+#: ./src/pyams_content/workflow/__init__.py:342
 msgid "State reset to 'retired' (automatic)"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:345
+#: ./src/pyams_content/workflow/__init__.py:346
 msgid "Refuse publication"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:353
+#: ./src/pyams_content/workflow/__init__.py:354
 msgid "Publication refused"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:355
+#: ./src/pyams_content/workflow/__init__.py:356
 #, python-format
 msgid "refused the publication request for content « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:359
+#: ./src/pyams_content/workflow/__init__.py:360
 msgid "Reset refused publication to draft"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:367
+#: ./src/pyams_content/workflow/__init__.py:368
 msgid "Reset refused publication to retired"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:371
+#: ./src/pyams_content/workflow/__init__.py:372
 msgid "State reset to 'refused' (automatic)"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:383
-#: ./src/pyams_content/workflow/basic.py:204
+#: ./src/pyams_content/workflow/__init__.py:384
+#: ./src/pyams_content/workflow/basic.py:205
 msgid "Content published"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:385
-#: ./src/pyams_content/workflow/basic.py:206
+#: ./src/pyams_content/workflow/__init__.py:386
+#: ./src/pyams_content/workflow/basic.py:207
 #, python-format
 msgid "published the content « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:389
+#: ./src/pyams_content/workflow/__init__.py:390
 msgid "Request retiring"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:395
+#: ./src/pyams_content/workflow/__init__.py:396
 msgid "Retire request"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:399
+#: ./src/pyams_content/workflow/__init__.py:400
 #, python-format
 msgid "submitted a retire request for content « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:403
+#: ./src/pyams_content/workflow/__init__.py:404
 msgid "Retired content"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:407
+#: ./src/pyams_content/workflow/__init__.py:408
 msgid "Content retired after passed expiration date"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:410
+#: ./src/pyams_content/workflow/__init__.py:411
 msgid "Cancel retiring request"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:417
+#: ./src/pyams_content/workflow/__init__.py:418
 msgid "Retire request canceled"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:419
+#: ./src/pyams_content/workflow/__init__.py:420
 #, python-format
 msgid "cancelled the retiring request for content « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:423
+#: ./src/pyams_content/workflow/__init__.py:424
 msgid "Retire content"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:430
+#: ./src/pyams_content/workflow/__init__.py:431
 msgid "Content retired"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:432
+#: ./src/pyams_content/workflow/__init__.py:433
 #, python-format
 msgid "retired content « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:442
+#: ./src/pyams_content/workflow/__init__.py:443
 msgid "Archive request"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:446
+#: ./src/pyams_content/workflow/__init__.py:447
 #, python-format
 msgid "submitted an archive request for content « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:450
+#: ./src/pyams_content/workflow/__init__.py:451
 msgid "Cancel archiving request"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:457
+#: ./src/pyams_content/workflow/__init__.py:458
 msgid "Archive request canceled"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:459
+#: ./src/pyams_content/workflow/__init__.py:460
 #, python-format
 msgid "cancelled the archive request for content « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:463
-#: ./src/pyams_content/workflow/basic.py:210
+#: ./src/pyams_content/workflow/__init__.py:464
+#: ./src/pyams_content/workflow/basic.py:211
 msgid "Archive content"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:471
-#: ./src/pyams_content/workflow/basic.py:218
+#: ./src/pyams_content/workflow/__init__.py:472
+#: ./src/pyams_content/workflow/basic.py:219
 msgid "Content archived"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:473
-#: ./src/pyams_content/workflow/basic.py:220
+#: ./src/pyams_content/workflow/__init__.py:474
+#: ./src/pyams_content/workflow/basic.py:221
 #, python-format
 msgid "archived content « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:477
+#: ./src/pyams_content/workflow/__init__.py:478
 msgid "Archive published content"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:481
-#: ./src/pyams_content/workflow/__init__.py:489
-#: ./src/pyams_content/workflow/__init__.py:497
+#: ./src/pyams_content/workflow/__init__.py:482
+#: ./src/pyams_content/workflow/__init__.py:490
+#: ./src/pyams_content/workflow/__init__.py:498
 msgid "Content archived after version publication"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:485
+#: ./src/pyams_content/workflow/__init__.py:486
 msgid "Archive retiring content"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:493
+#: ./src/pyams_content/workflow/__init__.py:494
 msgid "Archive retired content"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:509
-#: ./src/pyams_content/workflow/__init__.py:521
-#: ./src/pyams_content/workflow/__init__.py:533
-#: ./src/pyams_content/workflow/__init__.py:545
-#: ./src/pyams_content/workflow/__init__.py:557
-#: ./src/pyams_content/workflow/basic.py:232
-#: ./src/pyams_content/workflow/basic.py:244
+#: ./src/pyams_content/workflow/__init__.py:510
+#: ./src/pyams_content/workflow/__init__.py:522
+#: ./src/pyams_content/workflow/__init__.py:534
+#: ./src/pyams_content/workflow/__init__.py:546
+#: ./src/pyams_content/workflow/__init__.py:558
+#: ./src/pyams_content/workflow/basic.py:233
+#: ./src/pyams_content/workflow/basic.py:245
 msgid "New version created"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:569
-#: ./src/pyams_content/workflow/basic.py:256
+#: ./src/pyams_content/workflow/__init__.py:570
+#: ./src/pyams_content/workflow/basic.py:257
 msgid "Version deleted"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:622
-#: ./src/pyams_content/workflow/__init__.py:644
-#: ./src/pyams_content/workflow/basic.py:289
-#: ./src/pyams_content/workflow/basic.py:311
+#: ./src/pyams_content/workflow/__init__.py:623
+#: ./src/pyams_content/workflow/__init__.py:645
+#: ./src/pyams_content/workflow/basic.py:290
+#: ./src/pyams_content/workflow/basic.py:312
 msgid "Unknown state"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:646
-#: ./src/pyams_content/workflow/basic.py:313
+#: ./src/pyams_content/workflow/__init__.py:647
+#: ./src/pyams_content/workflow/basic.py:314
 msgid "publication refused"
 msgstr ""
 
-#: ./src/pyams_content/workflow/__init__.py:642
-#: ./src/pyams_content/workflow/basic.py:309
+#: ./src/pyams_content/workflow/__init__.py:643
+#: ./src/pyams_content/workflow/basic.py:310
 msgid "new version created"
 msgstr ""
 
@@ -4599,10 +5541,6 @@
 msgid "Published version {0}"
 msgstr ""
 
-#: ./src/pyams_content/workflow/task.py:62
-msgid "Automatic contents withdrawal:\n"
-msgstr ""
-
 #: ./src/pyams_content/workflow/zmi/task.py:42
 msgid "Add content archiver task..."
 msgstr ""
@@ -4610,749 +5548,3 @@
 #: ./src/pyams_content/workflow/zmi/task.py:55
 msgid "Add automatic content archiver"
 msgstr ""
-
-#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:46
-msgid "Shared sites"
-msgstr ""
-
-#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:67
-msgid "Shared contents"
-msgstr ""
-
-#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:90
-msgid "Shared tools"
-msgstr ""
-
-#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:113
-msgid "My roles"
-msgstr ""
-
-#: ./src/pyams_content/skin/zmi/viewlet/toplinks/templates/user-addings.pt:7
-msgid "Create new content"
-msgstr ""
-
-#: ./src/pyams_content/interfaces/__init__.py:95
-msgid "Unique key"
-msgstr ""
-
-#: ./src/pyams_content/interfaces/__init__.py:96
-msgid ""
-"WARNING: this key can't be modified after creation!!! Spaces, uppercase "
-"letters ou accentuated characters will be replaced automatically."
-msgstr ""
-
-#: ./src/pyams_content/interfaces/__init__.py:105
-msgid "Short name"
-msgstr ""
-
-#: ./src/pyams_content/interfaces/__init__.py:106
-msgid "Short name used in breadcrumbs"
-msgstr ""
-
-#: ./src/pyams_content/interfaces/__init__.py:117
-msgid "Modification date"
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/table.py:73
-msgid "Contents"
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/table.py:83
-msgid "Table contents"
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/table.py:129
-#: ./src/pyams_content/reference/zmi/__init__.py:69
-msgid "References tables"
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/table.py:143
-msgid "Properties..."
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/table.py:157
-msgid "Edit table properties"
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/table.py:167
-msgid "Table management"
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/__init__.py:51
-msgid "References"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:169
-#: ./src/pyams_content/reference/pictograms/zmi/widget.py:55
-msgid "Default header: --"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/manager.py:51
-msgid "Pictograms selection..."
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/manager.py:63
-#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:34
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:73
-msgid "Selected pictograms"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:7
-msgid "Available pictograms"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:21
-#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:48
-msgid "Display pictogram properties"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/templates/pictogram-header.pt:6
-msgid "Default header: ${header}"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:45
-msgid "Pictogram content"
-msgstr ""
-
-#. Default: Header
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:52
-msgid "pictogram-header"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:53
-msgid "Default header associated with this pictogram"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:74
-msgid "List of selected pictograms which will be available to shared contents"
-msgstr ""
-
-#: ./src/pyams_content/features/renderer/zmi/__init__.py:71
-#: ./src/pyams_content/features/renderer/zmi/templates/renderer-input.pt:4
-msgid "Edit renderer properties"
-msgstr ""
-
-#: ./src/pyams_content/features/renderer/skin/__init__.py:71
-msgid "Hidden content"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/interfaces.py:27
-#, python-format
-msgid " - {field}: <span class=\"text-danger\">no value</span>"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/interfaces.py:28
-#, python-format
-msgid " - {field} ({lang}): <span class=\"text-danger\">no value</span>"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/interfaces.py:29
-#, python-format
-msgid " - {field}: <span class=\"text-danger\">{message}</span>"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/zmi/__init__.py:58
-msgid "Content check"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/zmi/__init__.py:82
-msgid "No checker available. This content is clean!"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/zmi/__init__.py:78
-#, python-format
-msgid "{0}:"
-msgstr ""
-
-#: ./src/pyams_content/features/preview/zmi/__init__.py:62
-msgid "Content preview"
-msgstr ""
-
-#: ./src/pyams_content/features/preview/zmi/__init__.py:67
-#, python-format
-msgid "{title} ({preview})"
-msgstr ""
-
-#: ./src/pyams_content/features/preview/zmi/__init__.py:68
-msgid "preview"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:39
-msgid "Alert"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:40
-msgid "End of alert"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:41
-msgid "Information"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:42
-msgid "Warning"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:43
-msgid "Recommendation"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:55
-msgid "Is this alert visible in front-office?"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:59
-msgid "Alert gravity"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:60
-msgid "Alert gravity will affect rendered alert style"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:65
-#: ./src/pyams_content/features/alert/zmi/container.py:145
-msgid "Message"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:66
-msgid "Alert message"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:70
-msgid ""
-"Internal link target reference. You can search a reference using '+' followed"
-" by internal number, of by entering text matching content title."
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:75
-msgid "Display start date"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:76
-msgid "First date at which alert should be displayed"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:79
-msgid "Display end date"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:80
-msgid "Last date at which alert should be displayed"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:83
-msgid "Maximum interval"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:84
-msgid ""
-"Maximum interval between alert displays on a given device, given in hours; "
-"set to 0 to always display the alert"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/__init__.py:45
-msgid "Add alert"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/__init__.py:56
-msgid "Add new alert"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/__init__.py:79
-msgid "Edit alert properties"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/container.py:55
-msgid "Alerts"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/container.py:167
-msgid "Alert list"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/container.py:97
-msgid "No currently defined alert."
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/container.py:81
-msgid "not matching"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/__init__.py:50
-msgid "Add rule"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/__init__.py:63
-msgid "Add new redirection rule"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/__init__.py:88
-msgid "Edit redirection rule properties"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/__init__.py:109
-msgid ""
-"URL pattern and target URL are defined by *regular expressions* (see |regexp|).\n"
-"    \n"
-"In URL pattern, you can use any valid regular expression element, notably:\n"
-"\n"
-"- « .* » to match any list of characters \n"
-"\n"
-"- « ( ) » to \"memorize\" parts of the URL which can be replaced into target URL\n"
-"\n"
-"- special characters (like \"+\") must be escaped with an « \\\\ ».\n"
-"\n"
-"In target URL, memorized parts can be reused using « \\\\1 », « \\\\2 » and so on, where given number is\n"
-"the order of the matching pattern element.\n"
-"\n"
-".. |regexp| raw:: html\n"
-"\n"
-"    <a href=\"https://docs.python.org/3/library/re.html\" target=\"_blank\">Python Regular Expressions</a>\n"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:67
-msgid "Redirections"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:161
-msgid "Enable/disable rule"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:188
-msgid "Chain/unchain rule"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:210
-#: ./src/pyams_content/features/redirect/zmi/container.py:366
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:56
-msgid "URL pattern"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:220
-msgid "Target"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:246
-msgid "Redirections list"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:261
-msgid "Redirection rules"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:262
-msgid ""
-"Redirection rules are use to handle redirections responses when a request generates \n"
-"a famous « 404 NotFound » error.\n"
-"\n"
-"Redirections are particularly useful when you are migrating from a previous site and don't want to lose \n"
-"your SEO.\n"
-"\n"
-"You can define a set of rules which will be applied to every \"NotFound\" request; rules are based on \n"
-"regular expressions which are applied to input URL: if the rule is \"matching\", the target URL is rewritten\n"
-"and a \"Redirect\" response is send.\n"
-"\n"
-"You can chain rules together: when a rule is chained, it's rewritten URL is passed as input URL to the \n"
-"next rule, until a matching rule is found.\n"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:288
-msgid "Test"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:323
-msgid "Test redirection rules"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:301
-msgid "Test URL"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:304
-msgid "Check inactive rules?"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:305
-msgid "If 'yes', inactive rules will also be tested"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:313
-msgid "Close"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:314
-msgid "Test rules"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:123
-msgid "No currently defined redirection rule."
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:371
-msgid "No matching rule!"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:365
-msgid "Input URL"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/zmi/container.py:367
-msgid "Output URL"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:39
-msgid "Active rule?"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:40
-msgid "If 'no', selected rule is inactive"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:44
-msgid "Chained rule?"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:45
-msgid ""
-"If 'no', and if this rule is matching received request URL, the rule returns "
-"a redirection response; otherwise, the rule just rewrites the input URL which"
-" is forwarded to the next rule"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:51
-msgid "Permanent redirect?"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:52
-msgid "Define if this redirection should be permanent or temporary"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:57
-msgid "Regexp pattern of matching URLs for this redirection rule"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:62
-msgid "Internal redirection target"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:63
-msgid ""
-"Internal redirection reference. You can search a reference using '+' followed"
-" by internal number, of by entering text matching content title."
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:69
-msgid "URL to which source URL should be redirected"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:75
-msgid "You can only provide an internal reference OR a target URL"
-msgstr ""
-
-#: ./src/pyams_content/features/redirect/interfaces/__init__.py:77
-msgid "You must provide an internal reference OR a target URL"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/__init__.py:81
-msgid "Add menu..."
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/__init__.py:92
-msgid "Add new menu"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/__init__.py:123
-msgid "Edit menu properties"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/__init__.py:110
-msgid "Menu was correctly added."
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/__init__.py:395
-msgid "Link was correctly added."
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/templates/menu-name-cell.pt:7
-msgid "Click to see menu items"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/simple.py:67
-msgid "Simple navigation"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/double.py:67
-msgid "Double navigation"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/zmi/simple.py:69
-msgid "Navigation links"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/zmi/double.py:69
-msgid "Navigation menus"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:14
-#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:11
-msgid "Link has no illustration"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:32
-#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:32
-msgid "Portlet main title"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/interfaces/__init__.py:64
-msgid "Menu title"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/interfaces/__init__.py:65
-msgid "Displayed menu label"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/interfaces/__init__.py:69
-msgid "Direct reference to menu target"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/zmi/__init__.py:60
-msgid "Page footer"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/zmi/__init__.py:78
-msgid "Edit footer settings"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/zmi/__init__.py:152
-msgid ""
-"WARNING: Footer properties are saved automatically when changing inherit "
-"mode!!"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/zmi/__init__.py:220
-msgid "Footer renderer settings"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/zmi/__init__.py:107
-msgid "Don't inherit parent footer"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/skin/__init__.py:94
-msgid "Hidden footer"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/interfaces/__init__.py:39
-msgid "Footer template"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/interfaces/__init__.py:40
-msgid "Presentation template used for this footer"
-msgstr ""
-
-#: ./src/pyams_content/features/review/__init__.py:181
-#, python-format
-msgid "Request comment: {comment}"
-msgstr ""
-
-#: ./src/pyams_content/features/review/__init__.py:211
-#, python-format
-msgid "A new comment was added on content « {0} »"
-msgstr ""
-
-#: ./src/pyams_content/features/review/__init__.py:168
-#, python-format
-msgid "[{service_name}] A content review is requested"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:32
-msgid "Review request"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:33
-msgid "Reviewer comment"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:56
-msgid "Comment writer"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:59
-msgid "Content reviewers"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:62
-msgid "Comment type"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:67
-msgid "Comment body"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:70
-msgid "Reviewer comment?"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:86
-msgid "Reviewers list"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:87
-msgid "List of principals which reviewed the comment"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:61
-msgid "Ask for review..."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:100
-msgid "Content review request"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:165
-msgid "Comments"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:185
-msgid "Review comments"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:71
-msgid "Sought principals"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:72
-msgid "List of principals from which a review is requested"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:75
-msgid "Comment"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:76
-msgid "Comment associated with this request"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:79
-msgid "Notify all reviewers"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:80
-msgid ""
-"If 'yes', selected reviewers will be notified by mail of your request, even "
-"if they were already members of the reviewers group. Otherwise, only new "
-"reviewers will be notified"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:91
-msgid "Ask for content review"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:146
-msgid "Request successful. No new notification have been sent"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:259
-msgid "Message is mandatory!"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:134
-#, python-format
-msgid "Request successful. {count} new notification(s) have been sent"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:32
-#: ./src/pyams_content/features/review/zmi/templates/review-comments-json.pt:15
-#: ./src/pyams_content/features/review/zmi/templates/review-add-comment.pt:14
-msgid "Review query from"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:38
-#: ./src/pyams_content/features/review/zmi/templates/review-comments-json.pt:21
-#: ./src/pyams_content/features/review/zmi/templates/review-add-comment.pt:20
-msgid "(as reviewer)"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:47
-#: ./src/pyams_content/features/review/zmi/templates/review-comments-json.pt:30
-msgid "Selected reviewers:"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:64
-msgid "Add comment"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:67
-msgid "Add a comment..."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:73
-msgid "Add this comment"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-add-comment.pt:22
-msgid "just now"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:4
-msgid "[${service_name}] You are requested for a content review"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:30
-msgid "Hello,"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:31
-msgid ""
-"You have been requested by ${sender}, contributor of « ${service_name} » "
-"website, to make a review of a content."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:36
-msgid "${sender} added the following message to his request:"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:41
-msgid ""
-"To review and comment this publication, please use the following link: "
-"${target}."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:44
-msgid "After reading this content, please use the « Comments » menu entry."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:45
-msgid ""
-"If you don't want to reply to this request, please contact ${sender} directly"
-" by replying to this mail."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:47
-msgid "Thank you."
-msgstr ""
-
-#: ./src/pyams_content/features/header/zmi/__init__.py:66
-msgid "Page header"
-msgstr ""
-
-#: ./src/pyams_content/features/header/zmi/__init__.py:84
-msgid "Edit header settings"
-msgstr ""
-
-#: ./src/pyams_content/features/header/zmi/__init__.py:161
-msgid ""
-"WARNING: Header properties are saved automatically when changing inherit "
-"mode!!"
-msgstr ""
-
-#: ./src/pyams_content/features/header/zmi/__init__.py:229
-msgid "Header renderer settings"
-msgstr ""
-
-#: ./src/pyams_content/features/header/zmi/__init__.py:113
-msgid "Don't inherit parent header"
-msgstr ""
-
-#: ./src/pyams_content/features/header/skin/__init__.py:100
-msgid "Hidden header"
-msgstr ""
--- a/src/pyams_content/profile/admin.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/profile/admin.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,22 +12,17 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
-# import interfaces
-from pyams_content.profile.interfaces import IAdminProfile, ADMIN_PROFILE_KEY
-from pyams_security.interfaces import IPrincipalInfo
-from pyams_utils.interfaces import PUBLIC_PERMISSION
-
-# import packages
 from persistent import Persistent
-from pyams_utils.adapter import adapter_config, get_annotation_adapter
-from pyams_utils.request import check_request, query_request
 from pyramid.security import Allow, ALL_PERMISSIONS, Everyone
 from zope.interface import implementer, Interface
 from zope.schema.fieldproperty import FieldProperty
 
+from pyams_content.profile.interfaces import IAdminProfile, ADMIN_PROFILE_KEY
+from pyams_security.interfaces import IPrincipalInfo
+from pyams_utils.adapter import adapter_config, get_annotation_adapter
+from pyams_utils.interfaces import PUBLIC_PERMISSION
+from pyams_utils.request import check_request, query_request
+
 
 @implementer(IAdminProfile)
 class AdminProfile(Persistent):
@@ -36,7 +31,8 @@
     favorites = FieldProperty(IAdminProfile['favorites'])
     table_page_length = FieldProperty(IAdminProfile['table_page_length'])
 
-    def __acl__(self):
+    @staticmethod
+    def __acl__():
         result = [(Allow, 'system:admin', ALL_PERMISSIONS)]
         request = query_request()
         if request is not None:
--- a/src/pyams_content/reference/pictograms/zmi/manager.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/reference/pictograms/zmi/manager.py	Fri Oct 05 10:44:32 2018 +0200
@@ -27,7 +27,7 @@
 from pyams_zmi.layer import IAdminLayer
 
 # import packages
-from pyams_form.form import AJAXEditForm, ajax_config
+from pyams_form.form import ajax_config
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.viewlet.menu import MenuItem
 from pyams_template.template import template_config
@@ -35,7 +35,6 @@
 from pyams_utils.traversing import get_parent
 from pyams_viewlet.viewlet import viewlet_config, Viewlet
 from pyams_zmi.form import AdminEditForm
-from pyramid.view import view_config
 from z3c.form import field, button
 from z3c.form.util import changedField
 from zope.interface import implementer, Interface
--- a/src/pyams_content/reference/pictograms/zmi/templates/pictogram-header.pt	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/reference/pictograms/zmi/templates/pictogram-header.pt	Fri Oct 05 10:44:32 2018 +0200
@@ -4,6 +4,6 @@
 			 content="structure tales:thumbnail(image, 32, 32)" />
 	<span class="padding-left-5" tal:define="header i18n:context.header"
 		  i18n:translate="">Default header:
-		<strong i18n:name="header" tal:content="header or '--'" />
+		<strong i18n:name="header">${header or '--'}</strong>
 	</span>
 </div>
--- a/src/pyams_content/reference/pictograms/zmi/widget.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/reference/pictograms/zmi/widget.py	Fri Oct 05 10:44:32 2018 +0200
@@ -10,31 +10,31 @@
 # FOR A PARTICULAR PURPOSE.
 #
 
-
 __docformat__ = 'restructuredtext'
 
 
 # import standard library
 
-# import interfaces
-from pyams_content.reference.pictograms import IPictogramTable
-from pyams_utils.interfaces.data import IObjectData
-
-# import packages
-from pyams_content.reference.pictograms.zmi import get_pictogram_header
-from pyams_utils.registry import query_utility
-from pyams_utils.url import absolute_url
-from z3c.form.browser.select import SelectWidget
 from z3c.form.widget import FieldWidget
 from zope.interface import implementer
 
 from pyams_content import _
+# import interfaces
+from pyams_content.reference.pictograms import IPictogramTable
+# import packages
+from pyams_content.reference.pictograms.zmi import get_pictogram_header
+from pyams_form.widget import Select2Widget
+from pyams_utils.interfaces.data import IObjectData
+from pyams_utils.registry import query_utility
+from pyams_utils.url import absolute_url
 
 
 @implementer(IObjectData)
-class PictogramSelectWidget(SelectWidget):
+class PictogramSelectWidget(Select2Widget):
     """Pictogram selection widget"""
 
+    noValueMessage = _("No selected pictogram")
+
     pictograms = None
     label_id = None
     after_widget_notice = None
--- a/src/pyams_content/reference/zmi/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/reference/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -21,7 +21,6 @@
 from pyams_i18n.interfaces import II18n
 from pyams_skin.interfaces.container import ITableElementName
 from pyams_skin.interfaces.viewlet import ITopLinksViewletManager, IBreadcrumbItem
-from pyams_skin.layer import IPyAMSLayer
 from pyams_zmi.layer import IAdminLayer
 
 # import packages
@@ -29,7 +28,7 @@
 from pyams_content.reference.zmi.table import ReferenceTableContentsTable
 from pyams_form.form import AJAXEditForm
 from pyams_skin.event import get_json_table_row_refresh_event
-from pyams_skin.viewlet.breadcrumb import BreadcrumbItem
+from pyams_skin.viewlet.breadcrumb import BreadcrumbAdminLayerItem
 from pyams_skin.viewlet.toplinks import TopLinksViewlet, TopLinksMenu
 from pyams_utils.adapter import adapter_config, ContextRequestAdapter
 from pyams_utils.registry import get_local_registry
@@ -62,8 +61,8 @@
                 self.viewlets.append(menu)
 
 
-@adapter_config(context=(IReferenceManager, IPyAMSLayer), provides=IBreadcrumbItem)
-class ReferenceManagerBreadcrumbAdapter(BreadcrumbItem):
+@adapter_config(context=(IReferenceManager, IAdminLayer), provides=IBreadcrumbItem)
+class ReferenceManagerBreadcrumbAdapter(BreadcrumbAdminLayerItem):
     """References tables manager breadcrumb adapter"""
 
     label = _("References tables")
--- a/src/pyams_content/reference/zmi/table.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/reference/zmi/table.py	Fri Oct 05 10:44:32 2018 +0200
@@ -28,12 +28,12 @@
 from z3c.table.interfaces import IValues, IColumn
 
 # import packages
-from pyams_form.form import AJAXEditForm, ajax_config
+from pyams_form.form import ajax_config
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.container import ContainerView, delete_container_element
 from pyams_skin.page import DefaultPageHeaderAdapter
 from pyams_skin.table import BaseTable, TrashColumn
-from pyams_skin.viewlet.breadcrumb import BreadcrumbItem
+from pyams_skin.viewlet.breadcrumb import BreadcrumbAdminLayerItem
 from pyams_skin.viewlet.menu import MenuItem
 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextRequestAdapter
 from pyams_utils.url import absolute_url
@@ -52,8 +52,8 @@
 # Table properties
 #
 
-@adapter_config(context=(IReferenceTable, IPyAMSLayer), provides=IBreadcrumbItem)
-class ReferenceTableBreadcrumbAdapter(BreadcrumbItem):
+@adapter_config(context=(IReferenceTable, IAdminLayer), provides=IBreadcrumbItem)
+class ReferenceTableBreadcrumbAdapter(BreadcrumbAdminLayerItem):
     """References table breadcrumb adapter"""
 
     @property
--- a/src/pyams_content/root/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/root/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -14,10 +14,11 @@
 
 __docformat__ = 'restructuredtext'
 
+from persistent import Persistent
+from pyramid.events import subscriber
+from zope.interface import implementer
 
-# import standard library
-
-# import interfaces
+from pyams_content import _
 from pyams_content.component.illustration.interfaces import IIllustrationTarget
 from pyams_content.component.theme.interfaces import ITagsManagerTarget
 from pyams_content.features.alert.interfaces import IAlertTarget
@@ -25,30 +26,23 @@
 from pyams_content.features.header.interfaces import IHeaderTarget
 from pyams_content.features.preview.interfaces import IPreviewTarget
 from pyams_content.features.redirect.interfaces import IRedirectionManagerTarget
-from pyams_content.interfaces import WEBMASTER_ROLE, OPERATOR_ROLE, MANAGE_SITE_ROOT_PERMISSION
-from pyams_content.root.interfaces import ISiteRootRoles, ISiteRootConfiguration, ISiteRoot, \
-    ISiteRootToolsConfiguration, ISiteRootBackOfficeConfiguration
+from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION, OPERATOR_ROLE, WEBMASTER_ROLE
+from pyams_content.root.interfaces import ISiteRoot, ISiteRootBackOfficeConfiguration, ISiteRootConfiguration, \
+    ISiteRootRoles, ISiteRootToolsConfiguration
 from pyams_form.interfaces.form import IFormContextPermissionChecker
-from pyams_portal.interfaces import IPortalContext, DESIGNER_ROLE
+from pyams_portal.interfaces import DESIGNER_ROLE, IPortalContext
 from pyams_security.interfaces import IDefaultProtectionPolicy, IGrantedRoleEvent, ISecurityManager, SYSTEM_ADMIN_ROLE
-from pyams_skin.interfaces.configuration import IConfiguration, IBackOfficeConfiguration
-from pyams_utils.interfaces.site import ISiteRootFactory
-
-# import packages
-from persistent import Persistent
 from pyams_security.property import RolePrincipalsFieldProperty
 from pyams_security.security import ProtectedObject
-from pyams_skin.configuration import Configuration, BackOfficeConfiguration
+from pyams_skin.configuration import BackOfficeConfiguration, Configuration
+from pyams_skin.interfaces.configuration import IBackOfficeConfiguration, IConfiguration
 from pyams_skin.skin import UserSkinnableContent
-from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
+from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter
 from pyams_utils.factory import factory_config
+from pyams_utils.interfaces.site import ISiteRootFactory
 from pyams_utils.registry import get_utility, utility_config
 from pyams_utils.site import BaseSiteRoot
 from pyams_utils.traversing import get_parent
-from pyramid.events import subscriber
-from zope.interface import implementer
-
-from pyams_content import _
 
 
 @implementer(IDefaultProtectionPolicy, ISiteRoot, ISiteRootRoles, IPortalContext, ITagsManagerTarget,
@@ -132,7 +126,9 @@
     forms_tool_name = None
     imagemaps_tool_name = None
     logos_tool_name = None
+
     news_tool_name = None
+    topics_tool_name = None
 
 
 SITEROOT_TOOLS_CONFIGURATION_KEY = 'pyams_config.tools.configuration'
--- a/src/pyams_content/root/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/root/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,22 +12,16 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
+from zope.interface import Attribute, Interface
 
-# import interfaces
-from pyams_content.interfaces import WEBMASTER_ROLE, OPERATOR_ROLE
+from pyams_content import _
+from pyams_content.interfaces import OPERATOR_ROLE, WEBMASTER_ROLE
 from pyams_portal.interfaces import DESIGNER_ROLE
 from pyams_security.interfaces import SYSTEM_ADMIN_ROLE
-from pyams_skin.interfaces.configuration import IConfiguration, IBackOfficeConfiguration
+from pyams_security.schema import Principal, PrincipalsSet
+from pyams_skin.interfaces.configuration import IBackOfficeConfiguration, IConfiguration
 from pyams_utils.interfaces.site import ISiteRoot as ISiteRootBase
 
-# import packages
-from pyams_security.schema import PrincipalsSet, Principal
-from zope.interface import Interface, Attribute
-
-from pyams_content import _
-
 
 class ISiteRoot(ISiteRootBase):
     """Main site root interface"""
@@ -71,7 +65,9 @@
     forms_tool_name = Attribute("Forms tool name")
     imagemaps_tool_name = Attribute("Image maps tool name")
     logos_tool_name = Attribute("Logos tool name")
+
     news_tool_name = Attribute("News tool name")
+    topics_tool_name = Attribute("Topics tool name")
 
 
 class ISiteRootBackOfficeConfiguration(IBackOfficeConfiguration):
--- a/src/pyams_content/root/zmi/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/root/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -47,7 +47,7 @@
 from pyams_skin.container import ContainerView
 from pyams_skin.page import DefaultPageHeaderAdapter
 from pyams_skin.table import I18nColumn, DefaultElementEditorAdapter
-from pyams_skin.viewlet.breadcrumb import BreadcrumbItem
+from pyams_skin.viewlet.breadcrumb import BreadcrumbAdminLayerItem
 from pyams_skin.viewlet.menu import MenuItem
 from pyams_template.template import template_config
 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextRequestAdapter
@@ -71,8 +71,8 @@
 # Site root breadcrumbs
 #
 
-@adapter_config(context=(ISiteRoot, IPyAMSLayer), provides=IBreadcrumbItem)
-class SiteRootBreadcrumbAdapter(BreadcrumbItem):
+@adapter_config(context=(ISiteRoot, IAdminLayer), provides=IBreadcrumbItem)
+class SiteRootBreadcrumbAdapter(BreadcrumbAdminLayerItem):
     """Site root breadcrumb adapter"""
 
     label = _("Home")
@@ -172,8 +172,8 @@
         for tool in get_all_utilities_registered_for(IBaseSharedTool):
             workflow = IWorkflow(tool)
             query = Eq(catalog['parents'], intids.register(tool)) & \
-                    Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
-                    Any(catalog['workflow_state'], workflow.waiting_states)
+                Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                Any(catalog['workflow_state'], workflow.waiting_states)
             params = params | query if params else query
         yield from filter(self.check_access,
                           unique_iter(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
@@ -219,9 +219,9 @@
         for tool in get_all_utilities_registered_for(IBaseSharedTool):
             workflow = IWorkflow(tool)
             query = Eq(catalog['parents'], intids.register(tool)) & \
-                    Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
-                    Any(catalog['workflow_state'], workflow.waiting_states) & \
-                    Eq(catalog['workflow_principal'], self.request.principal.id)
+                Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                Any(catalog['workflow_state'], workflow.waiting_states) & \
+                Eq(catalog['workflow_principal'], self.request.principal.id)
             params = params | query if params else query
         yield from unique_iter(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
                                                     key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0],
@@ -381,7 +381,7 @@
         for tool in get_all_utilities_registered_for(IBaseSharedTool):
             workflow = IWorkflow(tool)
             query = And(Eq(catalog['parents'], intids.register(tool)),
-                        Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                        Any(catalog['content_type'], CONTENT_TYPES.keys()) & 
                         Or(Eq(catalog['role:owner'], self.request.principal.id),
                            Eq(catalog['role:contributor'], self.request.principal.id)),
                         Eq(catalog['workflow_state'], workflow.initial_state))
@@ -443,7 +443,7 @@
         for tool in get_all_utilities_registered_for(IBaseSharedTool):
             workflow = IWorkflow(tool)
             query = And(Eq(catalog['parents'], intids.register(tool)),
-                        Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                        Any(catalog['content_type'], CONTENT_TYPES.keys()) & 
                         Or(Eq(catalog['role:owner'], self.request.principal.id),
                            Eq(catalog['role:contributor'], self.request.principal.id)),
                         Any(catalog['workflow_state'], workflow.waiting_states))
@@ -505,7 +505,7 @@
         for tool in get_all_utilities_registered_for(IBaseSharedTool):
             workflow = IWorkflow(tool)
             query = And(Eq(catalog['parents'], intids.register(tool)),
-                        Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                        Any(catalog['content_type'], CONTENT_TYPES.keys()) & 
                         Or(Eq(catalog['role:owner'], self.request.principal.id),
                            Eq(catalog['role:contributor'], self.request.principal.id)),
                         Any(catalog['workflow_state'], workflow.published_states))
@@ -567,7 +567,7 @@
         for tool in get_all_utilities_registered_for(IBaseSharedTool):
             workflow = IWorkflow(tool)
             query = And(Eq(catalog['parents'], intids.register(tool)),
-                        Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                        Any(catalog['content_type'], CONTENT_TYPES.keys()) & 
                         Or(Eq(catalog['role:owner'], self.request.principal.id),
                            Eq(catalog['role:contributor'], self.request.principal.id)),
                         Any(catalog['workflow_state'], workflow.retired_states))
@@ -631,7 +631,7 @@
         for tool in get_all_utilities_registered_for(IBaseSharedTool):
             workflow = IWorkflow(tool)
             query = And(Eq(catalog['parents'], intids.register(tool)),
-                        Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                        Any(catalog['content_type'], CONTENT_TYPES.keys()) & 
                         Or(Eq(catalog['role:owner'], principal_id),
                            Eq(catalog['role:contributor'], principal_id)),
                         Any(catalog['workflow_state'], workflow.archived_states))
@@ -721,7 +721,7 @@
         for tool in get_all_utilities_registered_for(IBaseSharedTool):
             workflow = IWorkflow(tool)
             query = And(Eq(catalog['parents'], intids.register(tool)),
-                        Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                        Any(catalog['content_type'], CONTENT_TYPES.keys()) & 
                         Any(catalog['workflow_state'], workflow.published_states))
             params = params | query if params else query
         yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
--- a/src/pyams_content/root/zmi/search.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/root/zmi/search.py	Fri Oct 05 10:44:32 2018 +0200
@@ -116,7 +116,7 @@
         intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
         params = Eq(catalog['parents'], intids.register(self.context)) & \
-                 Any(catalog['content_type'], CONTENT_TYPES.keys())
+            Any(catalog['content_type'], CONTENT_TYPES.keys())
         query = self.request.params.get('query')
         if query:
             sequence = get_utility(ISequentialIntIds)
--- a/src/pyams_content/root/zmi/sites.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/root/zmi/sites.py	Fri Oct 05 10:44:32 2018 +0200
@@ -121,9 +121,10 @@
                 icon_class = 'fa-eye opacity-75'
             else:
                 icon_class = 'fa-eye-slash text-danger opaque'
-            return '<i class="fa fa-fw {icon_class} hint align-base" title="{title}" data-ams-hint-gravity="e"></i>'.format(
-                icon_class=icon_class,
-                title=self.request.localizer.translate(self.icon_hint))
+            return '<i class="fa fa-fw {icon_class} hint align-base" title="{title}" ' \
+                   'data-ams-hint-gravity="e"></i>'.format(
+                    icon_class=icon_class,
+                    title=self.request.localizer.translate(self.icon_hint))
 
 
 @adapter_config(name='oid', context=(ISiteRoot, IPyAMSLayer, SiteTreeTable), provides=IColumn)
--- a/src/pyams_content/shared/blog/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/blog/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,19 +12,16 @@
 
 __docformat__ = 'restructuredtext'
 
+from zope.container.constraints import containers, contains
+from zope.container.interfaces import IContainer
+from zope.interface import Attribute, Interface
+from zope.schema import Text
 
-# import standard library
-
-# import interfaces
 from pyams_content.shared.common.interfaces import ISharedSite, IBaseSharedTool, ISharedContent, \
     IDeletableElement, IWfSharedContentPortalContext
+from pyams_i18n.schema import I18nTextField
 from pyams_sequence.interfaces import ISequentialIdTarget
 from pyams_workflow.interfaces import IWorkflowPublicationSupport
-from zope.container.interfaces import IContainer
-
-# import packages
-from zope.container.constraints import containers, contains
-from zope.interface import Attribute, Interface
 
 from pyams_content import _
 
@@ -68,6 +65,16 @@
     topic_content_type = Attribute("Topic content type")
     topic_content_factory = Attribute("Topic content factory")
 
+    description = I18nTextField(title=_("Meta-description"),
+                                description=_("The blog's description is 'hidden' into HTML's page headers; but it "
+                                              "can be seen, for example, in some search engines results as content's "
+                                              "description; if description is empty, content's header will be used."),
+                                required=False)
+
+    notepad = Text(title=_("Notepad"),
+                   description=_("Internal information to be known about this content"),
+                   required=False)
+
 
 class IBlogManagerFactory(Interface):
     """Blog manager factory interface"""
--- a/src/pyams_content/shared/blog/manager.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/blog/manager.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,10 +12,13 @@
 
 __docformat__ = 'restructuredtext'
 
+from pyramid.events import subscriber
+from zope.component.interfaces import ISite
+from zope.container.folder import Folder
+from zope.interface import implementer
+from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectRemovedEvent
+from zope.schema.fieldproperty import FieldProperty
 
-# import standard library
-
-# import interfaces
 from pyams_content.component.illustration import IIllustrationTarget, ILinkIllustrationTarget
 from pyams_content.component.paragraph.interfaces import IParagraphFactorySettings
 from pyams_content.component.theme.interfaces import IThemesManagerTarget
@@ -24,22 +27,14 @@
 from pyams_content.features.preview.interfaces import IPreviewTarget
 from pyams_content.reference.pictograms.interfaces import IPictogramManagerTarget
 from pyams_content.root.interfaces import ISiteRoot
+from pyams_content.shared.blog import BlogPost
 from pyams_content.shared.blog.interfaces import IBlogManager, IBlogFolder, IBlogFolderFactory, IBlogManagerFactory
 from pyams_content.shared.common.interfaces import ISharedContentFactory
+from pyams_content.shared.common.manager import BaseSharedTool
 from pyams_portal.interfaces import IPortalContext
-from zope.component.interfaces import ISite
-from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectRemovedEvent
-
-# import packages
-from pyams_content.shared.blog import BlogPost
-from pyams_content.shared.common.manager import BaseSharedTool
 from pyams_skin.skin import UserSkinnableContent
 from pyams_utils.adapter import adapter_config
 from pyams_utils.traversing import get_parent
-from pyramid.events import subscriber
-from zope.container.folder import Folder
-from zope.interface import implementer
-from zope.schema.fieldproperty import FieldProperty
 
 
 @implementer(IBlogFolder)
@@ -58,6 +53,9 @@
 class BlogManager(Folder, BaseSharedTool, UserSkinnableContent):
     """Nlog manager class"""
 
+    description = FieldProperty(IBlogManager['description'])
+    notepad = FieldProperty(IBlogManager['notepad'])
+
     allowed_paragraphs = FieldProperty(IParagraphFactorySettings['allowed_paragraphs'])
     auto_created_paragraphs = FieldProperty(IParagraphFactorySettings['auto_created_paragraphs'])
 
--- a/src/pyams_content/shared/blog/zmi/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/blog/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -16,20 +16,23 @@
 # import standard library
 from datetime import datetime
 
+from pyramid.decorator import reify
+from pyramid.path import DottedNameResolver
+from pyramid.view import view_config
+from zope.interface import Interface
+from zope.lifecycleevent import ObjectCreatedEvent
+
+from pyams_content import _
 # import interfaces
 from pyams_content.interfaces import CREATE_CONTENT_PERMISSION
 from pyams_content.shared.blog.interfaces import IWfBlogPost, IBlogManager
+# import packages
+from pyams_content.shared.common.zmi import SharedContentAddForm, SharedContentAJAXAddForm
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.interfaces import IContentTitle
 from pyams_skin.interfaces.viewlet import IMenuHeader, IWidgetTitleViewletManager
 from pyams_skin.layer import IPyAMSLayer
-from pyams_workflow.interfaces import IWorkflowVersions, IWorkflowInfo
-from pyams_zmi.interfaces.menu import IContentManagementMenu
-from pyams_zmi.layer import IAdminLayer
-
-# import packages
-from pyams_content.shared.common.zmi import SharedContentAddForm, SharedContentAJAXAddForm
-from pyams_pagelet.pagelet import pagelet_config
-from pyams_skin.interfaces import IContentTitle
 from pyams_skin.viewlet.toolbar import ToolbarAction
 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextRequestAdapter
 from pyams_utils.registry import get_utility
@@ -37,13 +40,9 @@
 from pyams_utils.unicode import translate_string
 from pyams_utils.url import absolute_url, generate_url
 from pyams_viewlet.viewlet import viewlet_config
-from pyramid.decorator import reify
-from pyramid.path import DottedNameResolver
-from pyramid.view import view_config
-from zope.interface import Interface
-from zope.lifecycleevent import ObjectCreatedEvent
-
-from pyams_content import _
+from pyams_workflow.interfaces import IWorkflowVersions, IWorkflowInfo
+from pyams_zmi.interfaces.menu import IContentManagementMenu
+from pyams_zmi.layer import IAdminLayer
 
 
 @adapter_config(context=(IWfBlogPost, IContentManagementMenu), provides=IMenuHeader)
@@ -82,6 +81,8 @@
     legend = _("Add blog post")
     content_url = None
 
+    __target = None
+
     @reify
     def content_factory(self):
         registry = self.request.registry
--- a/src/pyams_content/shared/blog/zmi/manager.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/blog/zmi/manager.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,28 +12,27 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
 from datetime import datetime
 
-# import interfaces
-from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION, MANAGE_SITE_PERMISSION
+from pyramid.events import subscriber
+from pyramid.path import DottedNameResolver
+from z3c.form import field
+from z3c.form.interfaces import IDataExtractedEvent
+from zope.interface import Invalid
+
+from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION, MANAGE_SITE_PERMISSION, MANAGE_TOOL_PERMISSION
 from pyams_content.root.interfaces import ISiteRoot
 from pyams_content.shared.blog.interfaces import IBlogManager, IBlogManagerFactory
+from pyams_content.shared.blog.manager import BlogManager
+from pyams_content.shared.common import IBaseSharedTool
+from pyams_content.shared.common.zmi.manager import SharedToolPropertiesEditForm
 from pyams_content.skin.zmi.interfaces import ISiteTreeTable, IUserAddingsMenuLabel
+from pyams_form.form import AJAXAddForm, ajax_config
 from pyams_i18n.interfaces import II18n, INegotiator
+from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.interfaces.container import ITableElementEditor
 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, ITableItemColumnActionsMenu, IMenuHeader
 from pyams_skin.layer import IPyAMSLayer
-from pyams_workflow.interfaces import IWorkflowPublicationInfo
-from pyams_zmi.interfaces.menu import IPropertiesMenu, ISiteManagementMenu
-from pyams_zmi.layer import IAdminLayer
-from z3c.form.interfaces import IDataExtractedEvent
-
-# import packages
-from pyams_content.shared.blog.manager import BlogManager
-from pyams_form.form import AJAXAddForm, ajax_config
-from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.table import DefaultElementEditorAdapter
 from pyams_skin.viewlet.menu import MenuItem
 from pyams_skin.viewlet.toolbar import ToolbarMenuItem
@@ -43,12 +42,10 @@
 from pyams_utils.unicode import translate_string
 from pyams_utils.url import absolute_url
 from pyams_viewlet.viewlet import viewlet_config
+from pyams_workflow.interfaces import IWorkflowPublicationInfo
 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
-from pyramid.events import subscriber
-from pyramid.path import DottedNameResolver
-from pyramid.view import view_config
-from z3c.form import field
-from zope.interface import Invalid
+from pyams_zmi.interfaces.menu import IPropertiesMenu, ISiteManagementMenu
+from pyams_zmi.layer import IAdminLayer
 
 from pyams_content import _
 
@@ -143,6 +140,17 @@
     modal_target = False
 
 
+@pagelet_config(name='properties.html', context=IBlogManager, layer=IPyAMSLayer, permission=MANAGE_TOOL_PERMISSION)
+@ajax_config(name='properties.json', context=IBlogManager, layer=IPyAMSLayer)
+class BlogManagerPropertiesEditForm(SharedToolPropertiesEditForm):
+    """Site folder properties edit form"""
+
+    legend = _("Blog properties")
+
+    fields = field.Fields(IBlogManager).select('title', 'short_name', 'description', 'notepad') + \
+        field.Fields(IBaseSharedTool).select('shared_content_workflow')
+
+
 #
 # Blog manager publication views
 #
--- a/src/pyams_content/shared/common/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -17,7 +17,6 @@
 
 # import interfaces
 from hypatia.interfaces import ICatalog
-# import packages
 from persistent import Persistent
 from pyramid.events import subscriber
 from pyramid.interfaces import IWSGIApplicationCreatedEvent
@@ -32,6 +31,7 @@
 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
 
 from pyams_content import _
+# import packages
 from pyams_content.features.checker import BaseContentChecker
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE, ERROR_VALUE
 from pyams_content.features.review.interfaces import IReviewComments
@@ -127,7 +127,9 @@
     content_type = None
     content_name = None
 
+    handle_content_url = True
     handle_header = True
+    handle_description = True
 
     title = FieldProperty(IWfSharedContent['title'])
     short_name = FieldProperty(IWfSharedContent['short_name'])
--- a/src/pyams_content/shared/common/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,25 +12,21 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
 from zope.container.constraints import containers, contains
 from zope.container.interfaces import IContainer
 from zope.interface import Interface, Attribute
 from zope.schema import Choice, Bool, Text, TextLine
 
-from pyams_content import _
-# import interfaces
 from pyams_content.interfaces import IBaseContent, MANAGE_CONTENT_PERMISSION, OWNER_ROLE, MANAGER_ROLE, \
     READER_ROLE, GUEST_ROLE, WEBMASTER_ROLE, PILOT_ROLE, CONTRIBUTOR_ROLE
-# import packages
 from pyams_i18n.schema import I18nTextField
 from pyams_portal.interfaces import IPortalContext, DESIGNER_ROLE
 from pyams_security.schema import Principal, PrincipalsSet
 from pyams_utils.schema import TextLineListField
 from pyams_workflow.interfaces import IWorkflowManagedContent
 
+from pyams_content import _
+
 
 class IDeletableElement(Interface):
     """Deletable element interface"""
@@ -126,6 +122,8 @@
                                          "underscores will be automatically replaced by hyphens"),
                            required=True)
 
+    handle_content_url = Attribute("Static boolean value to specify if content URL is supported by this content type")
+
     creator = Principal(title=_("Version creator"),
                         description=_("Name of content's version creator. "
                                       "The creator of the first version is also it's owner."),
@@ -162,6 +160,8 @@
                                               "description; if description is empty, content's header will be used."),
                                 required=False)
 
+    handle_description = Attribute("Static boolean value to specify if description is supported by this content type")
+
     keywords = TextLineListField(title=_("Keywords"),
                                  description=_("They will be included into HTML pages metadata"),
                                  required=False)
--- a/src/pyams_content/shared/common/manager.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/manager.py	Fri Oct 05 10:44:32 2018 +0200
@@ -17,8 +17,8 @@
 
 # import interfaces
 from pyams_content.interfaces import WEBMASTER_ROLE, PILOT_ROLE, MANAGER_ROLE, CONTRIBUTOR_ROLE
-from pyams_content.shared.common.interfaces import ISharedToolContainer, IBaseSharedTool, ISharedTool, ISharedToolRoles, \
-    ISharedContentFactory
+from pyams_content.shared.common.interfaces import ISharedToolContainer, IBaseSharedTool, ISharedTool, \
+    ISharedToolRoles, ISharedContentFactory
 from pyams_portal.interfaces import DESIGNER_ROLE
 from pyams_security.interfaces import IDefaultProtectionPolicy
 from pyams_workflow.interfaces import IWorkflow
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/common/portlet/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2008-2017 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+# import standard library
+
+# import interfaces
+
+# import packages
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/common/portlet/head.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,50 @@
+#
+# Copyright (c) 2008-2018 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+from zope.interface import implementer
+from zope.schema.fieldproperty import FieldProperty
+
+from pyams_content.shared.common.portlet.interfaces import ISharedContentHeaderPortletSettings
+from pyams_portal.portlet import PortletSettings, portlet_config, Portlet
+from pyams_utils.factory import factory_config
+from pyams_utils.interfaces import VIEW_PERMISSION
+
+from pyams_content import _
+
+
+SHARED_CONTENT_HEADER_PORTLET_NAME = 'pyams_content.portlet.shared.header'
+
+
+@implementer(ISharedContentHeaderPortletSettings)
+@factory_config(provided=ISharedContentHeaderPortletSettings)
+class SharedContentHeaderPortletSettings(PortletSettings):
+    """Shared content header portlet settings"""
+
+    display_breadcrumbs = FieldProperty(ISharedContentHeaderPortletSettings['display_breadcrumbs'])
+    display_title = FieldProperty(ISharedContentHeaderPortletSettings['display_title'])
+    display_tags = FieldProperty(ISharedContentHeaderPortletSettings['display_tags'])
+    display_header = FieldProperty(ISharedContentHeaderPortletSettings['display_header'])
+    display_specificities = FieldProperty(ISharedContentHeaderPortletSettings['display_specificities'])
+
+
+@portlet_config(permission=VIEW_PERMISSION)
+class SharedContentHeaderPortlet(Portlet):
+    """Shared content header portlet"""
+
+    name = SHARED_CONTENT_HEADER_PORTLET_NAME
+    label = _("Content header")
+
+    toolbar_css_class = 'fa fa-fw fa-2x fa-header'
+
+    settings_factory = ISharedContentHeaderPortletSettings
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/common/portlet/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 2008-2017 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+from zope.interface import Interface
+from zope.schema import Bool
+
+from pyams_content import _
+from pyams_portal.interfaces import IPortletSettings
+
+
+class ISharedContentHeaderPortletSettings(IPortletSettings):
+    """Shared content header portlet settings"""
+
+    display_breadcrumbs = Bool(title=_("Display breadcrumbs?"),
+                               required=True,
+                               default=True)
+
+    display_title = Bool(title=_("Display title?"),
+                         required=True,
+                         default=True)
+
+    display_tags = Bool(title=_("Display tags?"),
+                        required=True,
+                        default=True)
+
+    display_header = Bool(title=_("Display header?"),
+                          required=True,
+                          default=True)
+
+    display_specificities = Bool(title=_("Display specificities?"),
+                                 description=_("If 'no', specific content's informations won't be displayed..."),
+                                 required=True,
+                                 default=True)
+
+
+class ISharedContentHeadViewletManager(Interface):
+    """Shared content head viewlet manager marker interface"""
+
+
+class ISharedContentTitlePortletSettings(IPortletSettings):
+    """Shared content title portlet settings"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/common/portlet/skin/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,25 @@
+#
+# Copyright (c) 2008-2018 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+from zope.interface import Interface, implementer
+
+from pyams_content.shared.common.portlet.interfaces import ISharedContentHeadViewletManager
+from pyams_skin.layer import IPyAMSUserLayer
+from pyams_viewlet.manager import viewletmanager_config, WeightOrderedViewletManager
+
+
+@viewletmanager_config(name='pyams_content.head', layer=IPyAMSUserLayer, view=Interface)
+@implementer(ISharedContentHeadViewletManager)
+class SharedContentHeadViewletManager(WeightOrderedViewletManager):
+    """Shared content head viewlet manager"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/common/portlet/title.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 2008-2018 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+from zope.interface import implementer
+
+from pyams_content import _
+from pyams_content.shared.common.portlet.interfaces import ISharedContentTitlePortletSettings
+from pyams_portal.portlet import Portlet, PortletSettings, portlet_config
+from pyams_utils.factory import factory_config
+from pyams_utils.interfaces import VIEW_PERMISSION
+
+
+SHARED_CONTENT_TITLE_PORTLET_NAME = 'pyams_content.portlet.shared.title'
+
+
+@implementer(ISharedContentTitlePortletSettings)
+@factory_config(provided=ISharedContentTitlePortletSettings)
+class SharedContentTitlePortletSettings(PortletSettings):
+    """Shared content title portlet settings"""
+
+
+@portlet_config(permission=VIEW_PERMISSION)
+class SharedContentTitlePortlet(Portlet):
+    """Shared content title portlet"""
+
+    name = SHARED_CONTENT_TITLE_PORTLET_NAME
+    label = _("Content title")
+
+    toolbar_css_class = 'fa fa-fw fa-2x fa-bold'
+
+    settings_factory = ISharedContentTitlePortletSettings
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/common/portlet/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2008-2018 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+
+# import standard library
+
+# import interfaces
+
+# import packages
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/common/portlet/zmi/head.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2008-2018 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+from zope.interface import Interface
+
+from pyams_content.shared.common.portlet.interfaces import ISharedContentHeaderPortletSettings
+from pyams_form.form import AJAXEditForm
+from pyams_form.interfaces.form import IInnerTabForm
+from pyams_pagelet.interfaces import IPagelet
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_portal.interfaces import IPortletPreviewer
+from pyams_portal.portlet import PortletPreviewer
+from pyams_portal.zmi.portlet import PortletSettingsEditor, PortletSettingsPropertiesEditor
+from pyams_skin.layer import IPyAMSLayer
+from pyams_template.template import template_config
+from pyams_utils.adapter import adapter_config
+from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
+
+
+@pagelet_config(name='properties.html', context=ISharedContentHeaderPortletSettings, layer=IPyAMSLayer,
+                permission=VIEW_SYSTEM_PERMISSION)
+class SharedContentHeaderPortletSettingsEditor(PortletSettingsEditor):
+    """Shared content header portlet settings editor"""
+
+    settings = ISharedContentHeaderPortletSettings
+
+
+@adapter_config(name='properties', context=(Interface, IPyAMSLayer, SharedContentHeaderPortletSettingsEditor),
+                provides=IInnerTabForm)
+class SharedContentHeaderPortletSettingsPropertiesEditor(PortletSettingsPropertiesEditor):
+    """Shared content header portlet settings properties editor"""
+
+
+@adapter_config(name='properties.json', context=(ISharedContentHeaderPortletSettings, IPyAMSLayer),
+                provides=IPagelet)
+class SharedContentHeaderPortletAJAXEditor(AJAXEditForm, SharedContentHeaderPortletSettingsEditor):
+    """Shared content header portlet settings editor, JSON renderer"""
+
+
+@adapter_config(context=(Interface, IPyAMSLayer, Interface, ISharedContentHeaderPortletSettings),
+                provides=IPortletPreviewer)
+@template_config(template='templates/head-preview.pt', layer=IPyAMSLayer)
+class SharedContentHeaderPortletPreviewer(PortletPreviewer):
+    """Shared content header portlet previewer"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/common/portlet/zmi/templates/head-preview.pt	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,22 @@
+<tal:var define="settings view.settings" i18n:domain="pyams_content">
+	<div class="padding-x-10">
+		<i class="fa fa-fw fa-${'check-' if settings.display_breadcrumbs else ''}square-o"></i>
+		<span i18n:translate="">Display breadcrumbs</span>
+	</div>
+	<div class="padding-x-10">
+		<i class="fa fa-fw fa-${'check-' if settings.display_title else ''}square-o"></i>
+		<span i18n:translate="">Display title</span>
+	</div>
+	<div class="padding-x-10">
+		<i class="fa fa-fw fa-${'check-' if settings.display_tags else ''}square-o"></i>
+		<span i18n:translate="">Display tags</span>
+	</div>
+	<div class="padding-x-10">
+		<i class="fa fa-fw fa-${'check-' if settings.display_header else ''}square-o"></i>
+		<span i18n:translate="">Display header</span>
+	</div>
+	<div class="padding-x-10">
+		<i class="fa fa-fw fa-${'check-' if settings.display_specificities else ''}square-o"></i>
+		<span i18n:translate="">Display specificities</span>
+	</div>
+</tal:var>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/common/portlet/zmi/title.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2008-2018 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+from zope.interface import Interface
+
+from pyams_content.shared.common.portlet.interfaces import ISharedContentTitlePortletSettings
+from pyams_form.form import AJAXEditForm
+from pyams_form.interfaces.form import IInnerTabForm
+from pyams_pagelet.interfaces import IPagelet
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_portal.interfaces import IPortletPreviewer
+from pyams_portal.portlet import PortletPreviewer
+from pyams_portal.zmi.portlet import PortletSettingsEditor, PortletSettingsPropertiesEditor
+from pyams_skin.layer import IPyAMSLayer
+from pyams_template.template import template_config
+from pyams_utils.adapter import adapter_config
+from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
+
+
+@pagelet_config(name='properties.html', context=ISharedContentTitlePortletSettings, layer=IPyAMSLayer,
+                permission=VIEW_SYSTEM_PERMISSION)
+class SharedContentTitlePortletSettingsEditor(PortletSettingsEditor):
+    """Shared content title portlet settings editor"""
+
+    settings = ISharedContentTitlePortletSettings
+
+
+@adapter_config(name='properties', context=(Interface, IPyAMSLayer, SharedContentTitlePortletSettingsEditor),
+                provides=IInnerTabForm)
+class SharedContentTitlePortletSettingsPropertiesEditor(PortletSettingsPropertiesEditor):
+    """Shared content title portlet settings properties editor"""
+
+
+@adapter_config(name='properties.json', context=(ISharedContentTitlePortletSettings, IPyAMSLayer),
+                provides=IPagelet)
+class SharedContentTitlePortletAJAXEditor(AJAXEditForm, SharedContentTitlePortletSettingsEditor):
+    """Shared content title portlet settings editor, JSON renderer"""
+
+
+@adapter_config(context=(Interface, IPyAMSLayer, Interface, ISharedContentTitlePortletSettings),
+                provides=IPortletPreviewer)
+@template_config(template='templates/title-preview.pt', layer=IPyAMSLayer)
+class SharedContentTitlePortletPreviewer(PortletPreviewer):
+    """Shared content title portlet previewer"""
--- a/src/pyams_content/shared/common/skin/opengraph.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/skin/opengraph.py	Fri Oct 05 10:44:32 2018 +0200
@@ -90,7 +90,8 @@
             image_size = thumbnail.image_size
             yield PropertyMeta('og:image:width', image_size[0])
             yield PropertyMeta('og:image:height', image_size[1])
-            yield PropertyMeta('og:image:alt', II18n(illustration).query_attribute('alt_title', lang=lang, request=request))
+            yield PropertyMeta('og:image:alt', II18n(illustration).query_attribute('alt_title', lang=lang,
+                                                                                   request=request))
         # locales properties
         yield PropertyMeta('of:locale', lang)
         for lang in II18nManager(context).languages or ():
--- a/src/pyams_content/shared/common/zmi/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -17,51 +17,51 @@
 from datetime import datetime
 from uuid import uuid4
 
+from pyramid.location import lineage
+from z3c.form import field, button
+from zope.copy import copy
+from zope.dublincore.interfaces import IZopeDublinCore
+from zope.interface import Interface
+from zope.lifecycleevent import ObjectCreatedEvent
+from zope.location import locate
+
+from pyams_content import _
+from pyams_content.features.review.interfaces import IReviewComments
 # import interfaces
-from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION, MANAGE_CONTENT_PERMISSION, CREATE_CONTENT_PERMISSION, \
-    PUBLISH_CONTENT_PERMISSION
-from pyams_content.features.review.interfaces import IReviewComments
+from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION, MANAGE_CONTENT_PERMISSION, \
+    CREATE_CONTENT_PERMISSION, PUBLISH_CONTENT_PERMISSION
 from pyams_content.shared.common.interfaces import IWfSharedContent, ISharedContent, IBaseSharedTool, \
     IManagerRestrictions
+# import packages
+from pyams_form.form import AJAXAddForm, ajax_config
 from pyams_form.interfaces.form import IFormContextPermissionChecker, IWidgetsPrefixViewletsManager
+from pyams_form.schema import CloseButton
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
+from pyams_i18n.widget import I18nSEOTextLineFieldWidget
+from pyams_pagelet.pagelet import pagelet_config
 from pyams_sequence.interfaces import ISequentialIdInfo
 from pyams_skin.interfaces import IContentTitle
 from pyams_skin.interfaces.container import ITable, ITableElementEditor
 from pyams_skin.interfaces.viewlet import IContextActions, IMenuHeader, IBreadcrumbItem
 from pyams_skin.layer import IPyAMSLayer
-from pyams_utils.interfaces import FORBIDDEN_PERMISSION
-from pyams_workflow.interfaces import IWorkflowVersions, IWorkflowInfo, IWorkflowState, IWorkflowCommentInfo, IWorkflow, \
-    IWorkflowPublicationInfo
-from pyams_zmi.interfaces.menu import ISiteManagementMenu
-from zope.dublincore.interfaces import IZopeDublinCore
-
-# import packages
-from pyams_form.form import AJAXAddForm, ajax_config
-from pyams_form.schema import CloseButton
-from pyams_i18n.widget import I18nSEOTextLineFieldWidget
-from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.page import DefaultPageHeaderAdapter
 from pyams_skin.table import DefaultElementEditorAdapter
-from pyams_skin.viewlet.breadcrumb import BreadcrumbItem
+from pyams_skin.viewlet.breadcrumb import BreadcrumbAdminLayerItem
 from pyams_skin.viewlet.toolbar import ToolbarMenuItem, ToolbarMenuDivider
 from pyams_template.template import template_config
 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextAdapter, ContextRequestAdapter
+from pyams_utils.interfaces import FORBIDDEN_PERMISSION
 from pyams_utils.registry import get_utility
 from pyams_utils.request import check_request
 from pyams_utils.traversing import get_parent
 from pyams_utils.url import absolute_url, generate_url
 from pyams_viewlet.viewlet import viewlet_config, Viewlet
+from pyams_workflow.interfaces import IWorkflowVersions, IWorkflowInfo, IWorkflowState, IWorkflowCommentInfo, \
+    IWorkflow, IWorkflowPublicationInfo
 from pyams_workflow.versions import WorkflowHistoryItem
 from pyams_zmi.form import AdminDialogAddForm
-from pyramid.location import lineage
-from z3c.form import field, button
-from zope.copy import copy
-from zope.interface import Interface
-from zope.lifecycleevent import ObjectCreatedEvent
-from zope.location import locate
-
-from pyams_content import _
+from pyams_zmi.interfaces.menu import ISiteManagementMenu
+from pyams_zmi.layer import IAdminLayer
 
 
 class SharedContentAddForm(AdminDialogAddForm):
@@ -78,6 +78,8 @@
     ajax_handler = 'add-shared-content.json'
     edit_permission = CREATE_CONTENT_PERMISSION
 
+    __uuid = None
+
     def updateWidgets(self, prefix=None):
         super(SharedContentAddForm, self).updateWidgets(prefix)
         if 'title' in self.widgets:
@@ -133,8 +135,8 @@
 # Shared tools common adapters
 #
 
-@adapter_config(context=(IWfSharedContent, IPyAMSLayer), provides=IBreadcrumbItem)
-class WfSharedContentBreadcrumbAdapter(BreadcrumbItem):
+@adapter_config(context=(IWfSharedContent, IAdminLayer), provides=IBreadcrumbItem)
+class WfSharedContentBreadcrumbAdapter(BreadcrumbAdminLayerItem):
     """Shared content breadcrumb adapter"""
 
     @property
--- a/src/pyams_content/shared/common/zmi/dashboard.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/dashboard.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,39 +12,33 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
+from hypatia.catalog import CatalogQuery
+from hypatia.interfaces import ICatalog
+from hypatia.query import And, Or, Eq, Any
+from z3c.table.column import GetAttrColumn
+from z3c.table.interfaces import IValues, IColumn
+from zope.dublincore.interfaces import IZopeDublinCore
+from zope.interface import implementer, Interface
+from zope.intid.interfaces import IIntIds
 
-# import interfaces
-from hypatia.interfaces import ICatalog
+from pyams_catalog.query import CatalogResultSet
+from pyams_content import _
 from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION, PUBLISH_CONTENT_PERMISSION
 from pyams_content.profile.interfaces import IAdminProfile
+from pyams_content.shared.common import CONTENT_TYPES
 from pyams_content.shared.common.interfaces import IBaseSharedTool, IWfSharedContent, IManagerRestrictions
 from pyams_content.shared.common.interfaces.zmi import IDashboardTable, ISharedToolDashboardTable, \
     IDashboardSearchHeader
+from pyams_content.skin import pyams_content
 from pyams_content.skin.zmi.interfaces import IDashboardMenu, IMyDashboardMenu, IAllContentsMenu
 from pyams_i18n.interfaces import II18n
+from pyams_pagelet.pagelet import pagelet_config
 from pyams_security.interfaces import ISecurityManager
 from pyams_sequence.interfaces import ISequentialIdInfo, ISequentialIdTarget, ISequentialIntIds
+from pyams_skin.container import ContainerView
 from pyams_skin.interfaces import IPageHeader
 from pyams_skin.interfaces.container import ITableElementName
 from pyams_skin.layer import IPyAMSLayer
-from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
-from pyams_workflow.interfaces import IWorkflowState, IWorkflow, IWorkflowVersions, IWorkflowPublicationInfo
-from pyams_zmi.interfaces.menu import IContentManagementMenu
-from pyams_zmi.layer import IAdminLayer
-from z3c.table.interfaces import IValues, IColumn
-from zope.dublincore.interfaces import IZopeDublinCore
-from zope.intid.interfaces import IIntIds
-
-# import packages
-from hypatia.catalog import CatalogQuery
-from hypatia.query import And, Or, Eq, Any
-from pyams_catalog.query import CatalogResultSet
-from pyams_content.shared.common import CONTENT_TYPES
-from pyams_content.skin import pyams_content
-from pyams_pagelet.pagelet import pagelet_config
-from pyams_skin.container import ContainerView
 from pyams_skin.page import DefaultPageHeaderAdapter
 from pyams_skin.table import BaseTable, I18nColumn, NameColumn, JsActionColumn
 from pyams_skin.viewlet.menu import MenuItem
@@ -52,6 +46,7 @@
 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
 from pyams_utils.date import format_datetime, SH_DATETIME_FORMAT
 from pyams_utils.fanstatic import get_resource_path
+from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
 from pyams_utils.list import unique_iter
 from pyams_utils.property import cached_property
 from pyams_utils.registry import get_utility
@@ -59,11 +54,10 @@
 from pyams_utils.traversing import get_parent
 from pyams_viewlet.manager import viewletmanager_config
 from pyams_viewlet.viewlet import viewlet_config
+from pyams_workflow.interfaces import IWorkflowState, IWorkflow, IWorkflowVersions, IWorkflowPublicationInfo
+from pyams_zmi.interfaces.menu import IContentManagementMenu
+from pyams_zmi.layer import IAdminLayer
 from pyams_zmi.view import InnerAdminView
-from z3c.table.column import GetAttrColumn
-from zope.interface import implementer, Interface
-
-from pyams_content import _
 
 
 #
@@ -445,8 +439,8 @@
     label = _("My contents")
     icon_class = 'fa-user'
     url = '#'
-    
-    
+
+
 #
 # My favorites
 # Dashboard of favorites contents
@@ -493,14 +487,14 @@
         oid = ISequentialIdInfo(item).hex_oid
         icon_class = 'fa fa-fw fa-star{0}'.format('' if oid in (self.profile.favorites or ()) else '-o')
         return '<i data-ams-plugins="pyams_content" ' \
-            'data-ams-plugin-pyams_content-src="{path}" ' \
-            'data-ams-click-handler="PyAMS_content.profile.switchFavorite" data-ams-stop-propagation="true" ' \
-            'data-sequence-oid="{oid}" ' \
-            'class="{icon_class}"></i>'.format(
-                path=get_resource_path(pyams_content),
-                oid=oid,
-                title=self.request.localizer.translate(self.icon_hint),
-                icon_class=icon_class)
+               'data-ams-plugin-pyams_content-src="{path}" ' \
+               'data-ams-click-handler="PyAMS_content.profile.switchFavorite" data-ams-stop-propagation="true" ' \
+               'data-sequence-oid="{oid}" ' \
+               'class="{icon_class}"></i>'.format(
+            path=get_resource_path(pyams_content),
+            oid=oid,
+            title=self.request.localizer.translate(self.icon_hint),
+            icon_class=icon_class)
 
     def get_url(self, item):
         return ''
@@ -578,7 +572,7 @@
         catalog = get_utility(ICatalog)
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
         params = And(Eq(catalog['parents'], intids.register(self.context)),
-                     Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                     Any(catalog['content_type'], CONTENT_TYPES.keys()) &
                      Or(Eq(catalog['role:owner'], self.request.principal.id),
                         Eq(catalog['role:contributor'], self.request.principal.id)),
                      Eq(catalog['workflow_state'], workflow.initial_state))
@@ -587,7 +581,8 @@
                                                                             reverse=True)))
 
 
-@pagelet_config(name='my-preparations.html', context=IBaseSharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='my-preparations.html', context=IBaseSharedTool, layer=IPyAMSLayer,
+                permission=VIEW_SYSTEM_PERMISSION)
 class SharedToolPreparationsView(InnerAdminView, ContainerView):
     """Shared tool preparations view"""
 
@@ -641,7 +636,7 @@
         catalog = get_utility(ICatalog)
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
         params = And(Eq(catalog['parents'], intids.register(self.context)),
-                     Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                     Any(catalog['content_type'], CONTENT_TYPES.keys()) &
                      Or(Eq(catalog['role:owner'], self.request.principal.id),
                         Eq(catalog['role:contributor'], self.request.principal.id)),
                      Any(catalog['workflow_state'], workflow.waiting_states))
@@ -650,7 +645,8 @@
                                                                             reverse=True)))
 
 
-@pagelet_config(name='my-submissions.html', context=IBaseSharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='my-submissions.html', context=IBaseSharedTool, layer=IPyAMSLayer,
+                permission=VIEW_SYSTEM_PERMISSION)
 class SharedToolSubmissionsView(InnerAdminView, ContainerView):
     """Shared tool submissions view"""
 
@@ -704,7 +700,7 @@
         catalog = get_utility(ICatalog)
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
         params = And(Eq(catalog['parents'], intids.register(self.context)),
-                     Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                     Any(catalog['content_type'], CONTENT_TYPES.keys()) &
                      Or(Eq(catalog['role:owner'], self.request.principal.id),
                         Eq(catalog['role:contributor'], self.request.principal.id)),
                      Any(catalog['workflow_state'], workflow.published_states))
@@ -713,7 +709,8 @@
                                                                             reverse=True)))
 
 
-@pagelet_config(name='my-publications.html', context=IBaseSharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='my-publications.html', context=IBaseSharedTool, layer=IPyAMSLayer,
+                permission=VIEW_SYSTEM_PERMISSION)
 class SharedToolPublicationsView(InnerAdminView, ContainerView):
     """Shared tool publications view"""
 
@@ -767,7 +764,7 @@
         catalog = get_utility(ICatalog)
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
         params = And(Eq(catalog['parents'], intids.register(self.context)),
-                     Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                     Any(catalog['content_type'], CONTENT_TYPES.keys()) &
                      Or(Eq(catalog['role:owner'], self.request.principal.id),
                         Eq(catalog['role:contributor'], self.request.principal.id)),
                      Any(catalog['workflow_state'], workflow.retired_states))
@@ -832,7 +829,7 @@
         principal_id = self.request.principal.id
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
         params = And(Eq(catalog['parents'], intids.register(self.context)),
-                     Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                     Any(catalog['content_type'], CONTENT_TYPES.keys()) &
                      Or(Eq(catalog['role:owner'], principal_id),
                         Eq(catalog['role:contributor'], principal_id)),
                      Any(catalog['workflow_state'], workflow.archived_states))
@@ -923,7 +920,7 @@
         catalog = get_utility(ICatalog)
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
         params = And(Eq(catalog['parents'], intids.register(self.context)),
-                     Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
+                     Any(catalog['content_type'], CONTENT_TYPES.keys()) &
                      Any(catalog['workflow_state'], workflow.published_states))
         yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
                                                                             limit=50,
--- a/src/pyams_content/shared/common/zmi/header.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/header.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,10 +12,10 @@
 
 __docformat__ = 'restructuredtext'
 
+from pyramid.decorator import reify
+from zope.interface import Interface
 
-# import standard library
-
-# import interfaces
+from pyams_content import _
 from pyams_content.profile.interfaces import IAdminProfile
 from pyams_content.shared.common.interfaces import IWfSharedContent, IBaseSharedTool
 from pyams_form.interfaces.form import IInnerTabForm
@@ -24,10 +24,6 @@
 from pyams_sequence.interfaces import ISequentialIntIds, ISequentialIdInfo
 from pyams_skin.interfaces import IContextTitlePrefix
 from pyams_skin.layer import IPyAMSLayer
-from pyams_workflow.interfaces import IWorkflowState, IWorkflow, IWorkflowStateLabel, IWorkflowVersions, \
-    IWorkflowPublicationInfo
-
-# import packages
 from pyams_skin.site import ContextTitlePrefixAdapter
 from pyams_template.template import template_config
 from pyams_utils.adapter import adapter_config
@@ -36,10 +32,8 @@
 from pyams_utils.traversing import get_parent
 from pyams_utils.url import absolute_url
 from pyams_viewlet.viewlet import contentprovider_config
-from pyramid.decorator import reify
-from zope.interface import Interface
-
-from pyams_content import _
+from pyams_workflow.interfaces import IWorkflowState, IWorkflow, IWorkflowStateLabel, IWorkflowVersions, \
+    IWorkflowPublicationInfo
 
 
 @adapter_config(context=(IWfSharedContent, IPyAMSLayer), provides=IContextTitlePrefix)
@@ -85,7 +79,8 @@
         state_format = translate(_("{state} by {principal}"))
         if state.state_urgency:
             state_format = state_format.replace('{state}',
-                                                '{state} <i class="fa fa-fw fa-exclamation-triangle txt-color-red"></i>');
+                                                '{state} '
+                                                '<i class="fa fa-fw fa-exclamation-triangle txt-color-red"></i>')
         elif state.state in workflow.published_states:
             pub_info = IWorkflowPublicationInfo(context, None)
             if (pub_info is not None) and not pub_info.is_published():
@@ -93,7 +88,8 @@
                                                     '{{state}} <i class="fa fa-fw fa-hourglass-half font-xs '
                                                     'text-danger opacity-75 hint align-base" '
                                                     'data-ams-hint-offset="5" title="{0}"></i>'.format(
-                                                        translate(_("Content publication start date is not passed yet"))))
+                                                        translate(_("Content publication start date is not passed "
+                                                                    "yet"))))
         state_class = 'text-danger'
         state_format = state_format.replace('{state}',
                                             '<span class="{0}">{{state}}</span>'.format(state_class))
@@ -190,5 +186,6 @@
     def update(self):
         pass
 
-    def render(self):
+    @staticmethod
+    def render():
         return ''
--- a/src/pyams_content/shared/common/zmi/manager.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/manager.py	Fri Oct 05 10:44:32 2018 +0200
@@ -34,7 +34,7 @@
 from pyams_form.help import FormHelp
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.page import DefaultPageHeaderAdapter
-from pyams_skin.viewlet.breadcrumb import BreadcrumbItem
+from pyams_skin.viewlet.breadcrumb import BreadcrumbAdminLayerItem
 from pyams_skin.viewlet.menu import MenuItem
 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextRequestAdapter
 from pyams_viewlet.manager import viewletmanager_config
@@ -50,8 +50,8 @@
 # Shared tools common adapters
 #
 
-@adapter_config(context=(IBaseSharedTool, IPyAMSLayer), provides=IBreadcrumbItem)
-class SharedToolBreadcrumbAdapter(BreadcrumbItem):
+@adapter_config(context=(IBaseSharedTool, IAdminLayer), provides=IBreadcrumbItem)
+class SharedToolBreadcrumbAdapter(BreadcrumbAdminLayerItem):
     """Shared tool breadcrumb adapter"""
 
     @property
--- a/src/pyams_content/shared/common/zmi/properties.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/properties.py	Fri Oct 05 10:44:32 2018 +0200
@@ -86,8 +86,12 @@
         fields = field.Fields(IWfSharedContent).select('title', 'short_name', 'content_url',
                                                        'header', 'description', 'notepad')
         fields['title'].widgetFactory = I18nSEOTextLineFieldWidget
+        if not self.context.handle_content_url:
+            fields = fields.omit('content_url')
         if not self.context.handle_header:
             fields = fields.omit('header')
+        if not self.context.handle_description:
+            fields = fields.omit('description')
         return fields
 
     def updateWidgets(self, prefix=None):
@@ -117,7 +121,8 @@
     """Automatically set short_name as title"""
     data = event.data
     data['short_name'] = data['title'].copy()
-    data['content_url'] = generate_url(data['content_url'])
+    if 'content_url' in data:
+        data['content_url'] = generate_url(data['content_url'])
 
 
 @adapter_config(context=(IWfSharedContent, IAdminLayer, SharedContentPropertiesEditForm), provides=IPageHeader)
--- a/src/pyams_content/shared/common/zmi/search.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/search.py	Fri Oct 05 10:44:32 2018 +0200
@@ -117,7 +117,7 @@
         intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
         params = Eq(catalog['parents'], intids.register(self.context)) & \
-                 Any(catalog['content_type'], CONTENT_TYPES.keys())
+            Any(catalog['content_type'], CONTENT_TYPES.keys())
         query = self.request.params.get('query')
         if query:
             sequence = get_utility(ISequentialIntIds)
@@ -253,7 +253,7 @@
         intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
         params = Eq(catalog['parents'], intids.register(self.context)) & \
-                 Any(catalog['content_type'], CONTENT_TYPES.keys())
+            Any(catalog['content_type'], CONTENT_TYPES.keys())
         query = data.get('query')
         if query:
             sequence = get_utility(ISequentialIntIds)
--- a/src/pyams_content/shared/common/zmi/security.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/security.py	Fri Oct 05 10:44:32 2018 +0200
@@ -164,7 +164,8 @@
 
     @property
     def legend(self):
-        return self.request.localizer.translate(_("Edit contributor restrictions for « {0} »")).format(self.principal.title)
+        return self.request.localizer.translate(_("Edit contributor restrictions for « {0} »")).format(
+            self.principal.title)
 
     @cached_property
     def interface(self):
@@ -252,7 +253,8 @@
     modal_target = True
 
 
-@adapter_config(name='name', context=(IBaseSharedTool, IAdminLayer, SharedToolManagersRestrictionsTable), provides=IColumn)
+@adapter_config(name='name', context=(IBaseSharedTool, IAdminLayer, SharedToolManagersRestrictionsTable),
+                provides=IColumn)
 class SharedToolManagerRestrictionsNameColumn(I18nColumn, GetAttrColumn):
     """Shared tool manager restrictions name column"""
 
--- a/src/pyams_content/shared/common/zmi/summary.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/summary.py	Fri Oct 05 10:44:32 2018 +0200
@@ -9,39 +9,38 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
-from pyams_content.shared.common.interfaces.types import IWfTypedSharedContent
-from pyams_sequence.interfaces import ISequentialIdInfo
 
 __docformat__ = 'restructuredtext'
 
 
 # import standard library
 
+from z3c.form import field
+from z3c.form.interfaces import DISPLAY_MODE, IDataConverter
+from zope.interface import implementer, Interface
+
+from pyams_content import _
 # import interfaces
 from pyams_content.shared.common.interfaces import IWfSharedContent, IWfSharedContentRoles, IBaseSharedTool
+from pyams_content.shared.common.interfaces.types import IWfTypedSharedContent
+# import packages
+from pyams_content.shared.common.zmi.header import SharedContentHeaderContentProvider
 from pyams_form.interfaces.form import IWidgetForm, IInnerTabForm, IInnerSubForm
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_security.utility import get_principal
+from pyams_sequence.interfaces import ISequentialIdInfo
 from pyams_skin.interfaces import IInnerPage
 from pyams_skin.layer import IPyAMSLayer
-from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
-from pyams_workflow.interfaces import IWorkflowState, IWorkflow, IWorkflowPublicationInfo, IWorkflowStateHistoryItem, \
-    IWorkflowVersions
-from z3c.form.interfaces import DISPLAY_MODE, IDataConverter
-
-# import packages
-from pyams_content.shared.common.zmi.header import SharedContentHeaderContentProvider
-from pyams_pagelet.pagelet import pagelet_config
-from pyams_security.utility import get_principal
 from pyams_utils.adapter import adapter_config
 from pyams_utils.date import format_datetime
+from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
 from pyams_utils.timezone import tztime
 from pyams_utils.traversing import get_parent
 from pyams_utils.url import absolute_url
 from pyams_viewlet.viewlet import contentprovider_config
+from pyams_workflow.interfaces import IWorkflowState, IWorkflow, IWorkflowPublicationInfo, IWorkflowStateHistoryItem, \
+    IWorkflowVersions
 from pyams_zmi.form import AdminDisplayForm, InnerAdminDisplayForm, InnerAdminAddForm
-from z3c.form import field
-from zope.interface import implementer, Interface
-
-from pyams_content import _
 
 
 @pagelet_config(name='summary.html', context=IWfSharedContent, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
@@ -104,7 +103,7 @@
         return InnerAdminDisplayForm.__new__(cls)
 
     fields = field.Fields(IWorkflowState).select('state', 'state_urgency') + \
-             field.Fields(IWorkflowStateHistoryItem).select('comment')
+        field.Fields(IWorkflowStateHistoryItem).select('comment')
 
     def updateWidgets(self, prefix=None):
         super(SharedContentWorkflowWaitingState, self).updateWidgets(prefix)
@@ -155,10 +154,10 @@
     weight = 30
 
     fields = field.Fields(IWorkflowState).select('version_id', 'state') + \
-             field.Fields(IWfSharedContent).select('creation_label') + \
-             field.Fields(IWfSharedContentRoles).select('owner') + \
-             field.Fields(IWfSharedContent).select('last_update_label') + \
-             field.Fields(IWfSharedContent).select('modifiers')
+        field.Fields(IWfSharedContent).select('creation_label') + \
+        field.Fields(IWfSharedContentRoles).select('owner') + \
+        field.Fields(IWfSharedContent).select('last_update_label') + \
+        field.Fields(IWfSharedContent).select('modifiers')
 
     def updateWidgets(self, prefix=None):
         super(SharedContentWorkflowVersionSummary, self).updateWidgets(prefix)
@@ -184,7 +183,7 @@
     legend = _("Content history")
 
     fields = field.Fields(IWorkflowPublicationInfo).select('first_publication_date') + \
-             field.Fields(IWfSharedContent).select('first_owner')
+        field.Fields(IWfSharedContent).select('first_owner')
 
     weight = 40
 
--- a/src/pyams_content/shared/common/zmi/types.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/types.py	Fri Oct 05 10:44:32 2018 +0200
@@ -10,10 +10,9 @@
 # FOR A PARTICULAR PURPOSE.
 #
 
+
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
 import json
 
 from pyramid.decorator import reify
@@ -22,41 +21,41 @@
 from pyramid.view import view_config
 from z3c.form import field
 from z3c.form.interfaces import DISPLAY_MODE, IDataExtractedEvent
-from z3c.table.interfaces import IValues, IColumn
-from zope.interface import Invalid
+from z3c.table.interfaces import IColumn, IValues
+from zope.interface import Invalid, implementer
 
 from pyams_content import _
-# import interfaces
-from pyams_content.interfaces import MANAGE_TOOL_PERMISSION, MANAGE_CONTENT_PERMISSION
-# import packages
+from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION, MANAGE_TOOL_PERMISSION
 from pyams_content.reference.pictograms.zmi.widget import PictogramSelectFieldWidget
-from pyams_content.shared.common.interfaces.types import ITypedSharedTool, ITypedDataManager, \
-    IBaseDataType, IDataType, ISubType, IWfTypedSharedContent
+from pyams_content.shared.common.interfaces.types import IBaseDataType, IDataType, ISubType, ITypedDataManager, \
+    ITypedSharedTool, IWfTypedSharedContent
 from pyams_content.shared.common.types import DataType, SubType
 from pyams_content.shared.common.zmi import SharedContentAddForm
 from pyams_content.shared.common.zmi.properties import SharedContentPropertiesEditForm
 from pyams_content.skin import pyams_content
 from pyams_form.form import AJAXAddForm, ajax_config
+from pyams_form.interfaces.form import IWidgetForm
 from pyams_form.security import ProtectedFormObjectMixin
 from pyams_i18n.interfaces import II18n
 from pyams_i18n.widget import I18nSEOTextLineFieldWidget
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.container import delete_container_element
 from pyams_skin.event import get_json_table_refresh_event
+from pyams_skin.interfaces import IInnerPage
 from pyams_skin.interfaces.container import ITableElementName
 from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager
 from pyams_skin.layer import IPyAMSLayer
-from pyams_skin.table import BaseTable, SorterColumn, TrashColumn, NameColumn, ActionColumn
+from pyams_skin.table import ActionColumn, BaseTable, NameColumn, SorterColumn, TrashColumn
 from pyams_skin.viewlet.menu import MenuItem
 from pyams_skin.viewlet.toolbar import ToolbarAction
-from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextRequestAdapter
+from pyams_utils.adapter import ContextRequestAdapter, ContextRequestViewAdapter, adapter_config
 from pyams_utils.fanstatic import get_resource_path
 from pyams_utils.traversing import get_parent
 from pyams_utils.unicode import translate_string
 from pyams_utils.url import absolute_url
 from pyams_viewlet.interfaces import IViewletManager
 from pyams_viewlet.viewlet import viewlet_config
-from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
+from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm, AdminEditForm
 from pyams_zmi.interfaces.menu import IPropertiesMenu
 from pyams_zmi.layer import IAdminLayer
 from pyams_zmi.view import ContainerAdminView
@@ -577,9 +576,43 @@
                 permission=MANAGE_CONTENT_PERMISSION)
 @ajax_config(name='properties.json', context=IWfTypedSharedContent, layer=IPyAMSLayer,
              permission=MANAGE_CONTENT_PERMISSION)
-class TypedSharedContentProperteisEditForm(SharedContentPropertiesEditForm):
+class TypedSharedContentPropertiesEditForm(SharedContentPropertiesEditForm):
     """Typed shared content properties edit form"""
 
-    fields = field.Fields(IWfTypedSharedContent).select('title', 'short_name', 'content_url',
-                                                        'data_type', 'description', 'notepad')
-    fields['title'].widgetFactory = I18nSEOTextLineFieldWidget
+    @property
+    def fields(self):
+        fields = field.Fields(IWfTypedSharedContent).select('title', 'short_name', 'content_url',
+                                                            'data_type', 'header', 'description', 'notepad')
+        fields['title'].widgetFactory = I18nSEOTextLineFieldWidget
+        if not self.context.handle_content_url:
+            fields = fields.omit('content_url')
+        if not self.context.handle_header:
+            fields = fields.omit('header')
+        if not self.context.handle_description:
+            fields = fields.omit('description')
+        return fields
+
+
+#
+# Typed shared content custom fields edit form
+#
+
+@implementer(IWidgetForm, IInnerPage)
+class TypedSharedContentTypeFieldsEditForm(AdminEditForm):
+    """Typed shared content type fields properties edit form"""
+
+    prefix = 'type_properties.'
+
+    @property
+    def legend(self):
+        translate = self.request.localizer.translate
+        data_type = self.context.get_data_type()
+        return translate(_("Custom properties for type « {0} »")).format(
+            II18n(data_type).query_attribute('label', request=self.request))
+
+    @property
+    def fields(self):
+        data_type = self.context.get_data_type()
+        if data_type is not None:
+            manager = get_parent(self.context, ITypedSharedTool)
+            return field.Fields(manager.shared_content_types_fields).select(*data_type.field_names)
--- a/src/pyams_content/shared/common/zmi/workflow.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/workflow.py	Fri Oct 05 10:44:32 2018 +0200
@@ -141,9 +141,9 @@
         if state.version_id > 1:
             pub_fields += ('displayed_publication_date', )
         return field.Fields(IWorkflowTransitionInfo) + \
-               field.Fields(IWorkflowPublicationInfo).select(*pub_fields) + \
-               field.Fields(IWorkflowRequestUrgencyInfo) + \
-               field.Fields(IWorkflowCommentInfo)
+            field.Fields(IWorkflowPublicationInfo).select(*pub_fields) + \
+            field.Fields(IWorkflowRequestUrgencyInfo) + \
+            field.Fields(IWorkflowCommentInfo)
 
     buttons = button.Buttons(IPublicationRequestButtons)
 
@@ -322,8 +322,8 @@
         if state.version_id > 1:
             pub_fields += ('displayed_publication_date', )
         return field.Fields(IWorkflowTransitionInfo) + \
-               field.Fields(IWorkflowPublicationInfo).select(*pub_fields) + \
-               field.Fields(IWorkflowCommentInfo)
+            field.Fields(IWorkflowPublicationInfo).select(*pub_fields) + \
+            field.Fields(IWorkflowCommentInfo)
 
     buttons = button.Buttons(IPublicationButtons)
 
@@ -402,8 +402,8 @@
     """Shared content publication request refuse form"""
 
     fields = field.Fields(IWorkflowTransitionInfo) + \
-             field.Fields(IWorkflowRequestUrgencyInfo) + \
-             field.Fields(IWorkflowCommentInfo)
+        field.Fields(IWorkflowRequestUrgencyInfo) + \
+        field.Fields(IWorkflowCommentInfo)
     buttons = button.Buttons(IPublicationRetireRequestButtons)
 
     def updateWidgets(self, prefix=None):
@@ -539,8 +539,8 @@
     """Shared content publication request archive form"""
 
     fields = field.Fields(IWorkflowTransitionInfo) + \
-             field.Fields(IWorkflowRequestUrgencyInfo) + \
-             field.Fields(IWorkflowCommentInfo)
+        field.Fields(IWorkflowRequestUrgencyInfo) + \
+        field.Fields(IWorkflowCommentInfo)
     buttons = button.Buttons(IPublicationArchiveRequestButtons)
 
 
@@ -715,6 +715,8 @@
 
     buttons = button.Buttons(ISharedContentDeleteButtons)
 
+    __target = None
+
     @property
     def fields(self):
         fields = super(SharedContentDeleteForm, self).fields
--- a/src/pyams_content/shared/form/manager.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/form/manager.py	Fri Oct 05 10:44:32 2018 +0200
@@ -18,7 +18,6 @@
 # import interfaces
 from pyams_content.shared.common.interfaces import ISharedContentFactory
 from pyams_content.shared.form.interfaces import IFormsManager, FORM_CONTENT_TYPE, IFormsManagerFactory
-from pyams_portal.interfaces import IPortalContext
 from zope.component.interfaces import ISite
 from zope.lifecycleevent.interfaces import IObjectAddedEvent
 
--- a/src/pyams_content/shared/imagemap/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/imagemap/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,8 +12,6 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
 from persistent import Persistent
 from persistent.mapping import PersistentMapping
 from pyramid.threadlocal import get_current_registry
@@ -27,21 +25,19 @@
 from zope.traversing.interfaces import ITraversable
 
 from pyams_content import _
-# import interfaces
 from pyams_content.component.association.interfaces import IAssociationContainer
 from pyams_content.component.extfile.interfaces import IExtFileContainerTarget
 from pyams_content.component.links.interfaces import ILinkContainerTarget
-from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE, ERROR_VALUE
+from pyams_content.features.checker.interfaces import ERROR_VALUE, IContentChecker, MISSING_LANG_VALUE, MISSING_VALUE
 from pyams_content.features.preview.interfaces import IPreviewTarget
 from pyams_content.features.review.interfaces import IReviewTarget
-# import packages
-from pyams_content.shared.common import WfSharedContent, register_content_type, SharedContent, WfSharedContentChecker, \
-    IWfSharedContentFactory
-from pyams_content.shared.imagemap.interfaces import IMAGEMAP_CONTENT_TYPE, IMAGEMAP_CONTENT_NAME, \
-    IWfImageMap, IImageMap, IImageMapArea, IWfImageMapFactory
+from pyams_content.shared.common import SharedContent, WfSharedContent, WfSharedContentChecker, register_content_type
+from pyams_content.shared.common.interfaces import IWfSharedContentFactory
+from pyams_content.shared.imagemap.interfaces import IImageMap, IImageMapArea, IMAGEMAP_CONTENT_NAME, \
+    IMAGEMAP_CONTENT_TYPE, IWfImageMap, IWfImageMapFactory
 from pyams_i18n.interfaces import II18n, II18nManager
 from pyams_i18n.property import I18nFileProperty
-from pyams_utils.adapter import adapter_config, ContextAdapter
+from pyams_utils.adapter import ContextAdapter, adapter_config
 
 
 @implementer(IImageMapArea)
@@ -61,7 +57,9 @@
     content_type = IMAGEMAP_CONTENT_TYPE
     content_name = IMAGEMAP_CONTENT_NAME
 
+    handle_content_url = False
     handle_header = False
+    handle_description = False
 
     _image = I18nFileProperty(IWfImageMap['image'])
     areas = FieldProperty(IWfImageMap['areas'])
--- a/src/pyams_content/shared/logo/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/logo/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -20,8 +20,9 @@
 
 from pyams_content import _
 # import interfaces
+from pyams_content.component.theme.interfaces import IThemesTarget
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE
-from pyams_content.features.review import IReviewTarget
+from pyams_content.features.review.interfaces import IReviewTarget
 # import packages
 from pyams_content.shared.common import WfSharedContent, register_content_type, SharedContent, WfSharedContentChecker, \
     IWfSharedContentFactory
@@ -30,18 +31,21 @@
 from pyams_utils.adapter import adapter_config
 
 
-@implementer(IWfLogo, IReviewTarget)
+@implementer(IWfLogo, IThemesTarget, IReviewTarget)
 class WfLogo(WfSharedContent):
     """Logo persistent class"""
 
     content_type = LOGO_CONTENT_TYPE
     content_name = LOGO_CONTENT_NAME
 
+    handle_content_url = False
     handle_header = False
+    handle_description = False
 
+    acronym = FieldProperty(IWfLogo['acronym'])
+    url = FieldProperty(IWfLogo['url'])
     image = FileProperty(IWfLogo['image'])
     monochrome_image = FileProperty(IWfLogo['monochrome_image'])
-    url = FieldProperty(IWfLogo['url'])
 
 register_content_type(WfLogo)
 
--- a/src/pyams_content/shared/logo/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/logo/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -15,19 +15,18 @@
 
 # import standard library
 
+from zope.interface import Interface
+from zope.schema import URI, Choice, TextLine
+
+from pyams_content import _
 # import interfaces
 from pyams_content.component.paragraph import IBaseParagraph
 from pyams_content.shared.common.interfaces import ISharedTool, IWfSharedContent, ISharedContent
-from pyams_sequence.interfaces import IInternalReferencesList
-
 # import packages
 from pyams_file.schema import ImageField
+from pyams_i18n.schema import I18nTextLineField
+from pyams_sequence.interfaces import IInternalReferencesList
 from pyams_sequence.schema import InternalReferencesListField
-from zope.interface import Interface
-from zope.schema import URI, Choice
-
-from pyams_content import _
-
 
 LOGO_CONTENT_TYPE = 'logo'
 LOGO_CONTENT_NAME = _("Logo")
@@ -44,6 +43,18 @@
 class IWfLogo(IWfSharedContent):
     """Logo interface"""
 
+    title = I18nTextLineField(title=_("Title"),
+                              description=_("Full name of logo organization"),
+                              required=True)
+
+    acronym = TextLine(title=_("Acronym"),
+                       description=_("Matching logo acronym, without spaces or separators"),
+                       required=False)
+
+    url = URI(title=_("Target URL"),
+              description=_("URL used to access external resource"),
+              required=False)
+
     image = ImageField(title=_("Image (colored)"),
                        description=_("Image data"),
                        required=True)
@@ -53,10 +64,6 @@
                                                 "presentation templates"),
                                   required=False)
 
-    url = URI(title=_("Target URL"),
-              description=_("URL used to access external resource"),
-              required=False)
-
 
 class IWfLogoFactory(Interface):
     """Logo factory interface"""
--- a/src/pyams_content/shared/logo/zmi/properties.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/logo/zmi/properties.py	Fri Oct 05 10:44:32 2018 +0200
@@ -9,6 +9,9 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
+from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
+from pyams_form.form import ajax_config
+from pyams_pagelet.pagelet import pagelet_config
 
 __docformat__ = 'restructuredtext'
 
@@ -17,11 +20,13 @@
 
 # import interfaces
 from pyams_content.shared.logo import IWfLogo
-from pyams_form.interfaces.form import IInnerSubForm
+from pyams_form.interfaces.form import IInnerSubForm, IInnerTabForm
+from pyams_sequence.interfaces import ISequentialIdInfo
 from pyams_skin.layer import IPyAMSLayer
 
 # import packages
 from pyams_content.shared.common.zmi.properties import SharedContentPropertiesEditForm
+from pyams_content.shared.common.zmi.summary import SharedContentSummaryForm, SharedContentDublinCoreSummary
 from pyams_utils.adapter import adapter_config
 from pyams_zmi.form import InnerAdminEditForm
 from z3c.form import field
@@ -29,6 +34,26 @@
 from pyams_content import _
 
 
+@adapter_config(name='dublincore-summary',
+                context=(IWfLogo, IPyAMSLayer, SharedContentSummaryForm),
+                provides=IInnerTabForm)
+class LogoDublinCoreSummary(SharedContentDublinCoreSummary):
+    """Shared content DublinCore summary"""
+
+    fields = field.Fields(IWfLogo).select('title', 'acronym') + \
+        field.Fields(ISequentialIdInfo).select('public_oid')
+
+
+@pagelet_config(name='properties.html', context=IWfLogo, layer=IPyAMSLayer,
+                permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='properties.json', context=IWfLogo, layer=IPyAMSLayer,
+             permission=MANAGE_CONTENT_PERMISSION)
+class LogoMainPropertiesEditForm(SharedContentPropertiesEditForm):
+    """Logo properties edit form"""
+
+    fields = field.Fields(IWfLogo).select('title', 'short_name', 'notepad')
+
+
 @adapter_config(name='logo-settings',
                 context=(IWfLogo, IPyAMSLayer, SharedContentPropertiesEditForm),
                 provides=IInnerSubForm)
@@ -40,7 +65,7 @@
     legend = _("Main logo settings")
     fieldset_class = 'bordered no-x-margin margin-y-10'
 
-    fields = field.Fields(IWfLogo).select('image', 'monochrome_image', 'url')
+    fields = field.Fields(IWfLogo).select('acronym', 'url', 'image', 'monochrome_image')
     weight = 1
 
     def get_ajax_output(self, changes):
--- a/src/pyams_content/shared/news/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/news/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -15,20 +15,20 @@
 
 # import standard library
 
+from zope.interface import implementer, provider
+
 # import interfaces
-from pyams_content.component.illustration import IIllustrationTarget, ILinkIllustrationTarget
+from pyams_content.component.illustration.interfaces import IIllustrationTarget, ILinkIllustrationTarget
 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget
 from pyams_content.component.theme.interfaces import ITagsTarget, IThemesTarget
 from pyams_content.features.preview.interfaces import IPreviewTarget
 from pyams_content.features.review.interfaces import IReviewTarget
+# import packages
+from pyams_content.shared.common import SharedContent, WfSharedContent, register_content_type
 from pyams_content.shared.common.interfaces import IWfSharedContentFactory
 from pyams_content.shared.news.interfaces import INewsEvent, IWfNewsEvent, NEWS_CONTENT_TYPE, NEWS_CONTENT_NAME, \
     IWfNewsEventFactory
-
-# import packages
-from pyams_content.shared.common import SharedContent, WfSharedContent, register_content_type
 from pyams_utils.adapter import adapter_config
-from zope.interface import implementer, provider
 
 
 @implementer(IWfNewsEvent, IIllustrationTarget, ILinkIllustrationTarget, IParagraphContainerTarget,
--- a/src/pyams_content/shared/site/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/site/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,42 +12,38 @@
 
 __docformat__ = 'restructuredtext'
 
+from zope.interface import implementer, provider
 
-# import standard library
-
-# import interfaces
 from pyams_content.component.illustration import IIllustrationTarget, ILinkIllustrationTarget
 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget
 from pyams_content.component.theme.interfaces import ITagsTarget, IThemesTarget
 from pyams_content.features.preview.interfaces import IPreviewTarget
 from pyams_content.features.review.interfaces import IReviewTarget
-from pyams_content.shared.site.interfaces import ITopic, IWfTopic, TOPIC_CONTENT_NAME, \
-    TOPIC_CONTENT_TYPE, IWfTopicFactory
-from pyams_workflow.interfaces import IWorkflow, IWorkflowVersions, IWorkflowState
-
-# import packages
-from pyams_content.shared.common import SharedContent, WfSharedContent, register_content_type, IWfSharedContentFactory
+from pyams_content.shared.common import IWfSharedContentFactory, SharedContent, WfSharedContent, register_content_type
+from pyams_content.shared.site.interfaces import ISiteTopic, IWfSiteTopic, IWfSiteTopicFactory, SITE_TOPIC_CONTENT_NAME, \
+    SITE_TOPIC_CONTENT_TYPE
 from pyams_utils.adapter import adapter_config
-from zope.interface import implementer, provider
+from pyams_workflow.interfaces import IWorkflow, IWorkflowState, IWorkflowVersions
 
 
-@implementer(IWfTopic, IIllustrationTarget, ILinkIllustrationTarget, IParagraphContainerTarget,
+@implementer(IWfSiteTopic, IIllustrationTarget, ILinkIllustrationTarget, IParagraphContainerTarget,
              ITagsTarget, IThemesTarget, IPreviewTarget, IReviewTarget)
-class WfTopic(WfSharedContent):
-    """Base topic"""
+class WfSiteTopic(WfSharedContent):
+    """Base site topic"""
 
-    content_type = TOPIC_CONTENT_TYPE
-    content_name = TOPIC_CONTENT_NAME
-
-register_content_type(WfTopic)
+    content_type = SITE_TOPIC_CONTENT_TYPE
+    content_name = SITE_TOPIC_CONTENT_NAME
 
 
-@provider(IWfTopicFactory)
-@implementer(ITopic)
-class Topic(SharedContent):
-    """WOrkflow managed topic class"""
+register_content_type(WfSiteTopic)
+
 
-    content_name = TOPIC_CONTENT_NAME
+@provider(IWfSiteTopicFactory)
+@implementer(ISiteTopic)
+class SiteTopic(SharedContent):
+    """Workflow managed topic class"""
+
+    content_name = SITE_TOPIC_CONTENT_NAME
 
     def is_deletable(self):
         workflow = IWorkflow(self)
@@ -57,6 +53,6 @@
         return True
 
 
-@adapter_config(context=IWfTopicFactory, provides=IWfSharedContentFactory)
-def topic_content_factory(context):
-    return WfTopic
+@adapter_config(context=IWfSiteTopicFactory, provides=IWfSharedContentFactory)
+def site_topic_content_factory(context):
+    return WfSiteTopic
--- a/src/pyams_content/shared/site/container.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/site/container.py	Fri Oct 05 10:44:32 2018 +0200
@@ -16,19 +16,19 @@
 # import standard library
 import json
 
+from pyramid.location import lineage
+from zope.interface import implementer
+from zope.intid.interfaces import IIntIds
+
 # import interfaces
 from pyams_content.shared.common.interfaces import ISharedContentFactory
+# import packages
+from pyams_content.shared.site import SiteTopic
 from pyams_content.shared.site.interfaces import ISiteContainer, ISiteFolder
 from pyams_i18n.interfaces import II18n
-from zope.intid.interfaces import IIntIds
-
-# import packages
-from pyams_content.shared.site import Topic
 from pyams_utils.adapter import adapter_config
 from pyams_utils.registry import get_utility
 from pyams_utils.request import query_request
-from pyramid.location import lineage
-from zope.interface import implementer
 
 
 @implementer(ISiteContainer)
@@ -89,4 +89,4 @@
 
 @adapter_config(context=ISiteContainer, provides=ISharedContentFactory)
 def site_container_topic_factory(context):
-    return Topic
+    return SiteTopic
--- a/src/pyams_content/shared/site/folder.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/site/folder.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,35 +12,28 @@
 
 __docformat__ = 'restructuredtext'
 
+from zope.container.ordered import OrderedContainer
+from zope.interface import implementer
+from zope.intid.interfaces import IIntIds
+from zope.schema.fieldproperty import FieldProperty
+from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
 
-# import standard library
-
-# import interfaces
 from pyams_content.component.illustration import IIllustrationTarget, ILinkIllustrationTarget
 from pyams_content.features.preview.interfaces import IPreviewTarget
 from pyams_content.interfaces import MANAGE_SITE_PERMISSION
+from pyams_content.shared.common.manager import BaseSharedTool
+from pyams_content.shared.site.container import SiteContainerMixin
 from pyams_content.shared.site.interfaces import ISiteFolder, ISiteManager, ISiteFolderRoles
 from pyams_form.interfaces.form import IFormContextPermissionChecker
 from pyams_i18n.interfaces import II18n
 from pyams_portal.interfaces import IPortalContext
 from pyams_security.interfaces import IDefaultProtectionPolicy
-from zope.intid.interfaces import IIntIds
-
-# import packages
-from pyams_content.shared.common.manager import BaseSharedTool
-from pyams_content.shared.site.container import SiteContainerMixin
 from pyams_utils.adapter import adapter_config, ContextAdapter
 from pyams_utils.container import find_objects_providing
 from pyams_utils.registry import get_local_registry
 from pyams_utils.request import query_request
 from pyams_utils.traversing import get_parent
 from pyams_utils.vocabulary import vocabulary_config
-from zope.container.ordered import OrderedContainer
-from zope.interface import implementer
-from zope.schema.fieldproperty import FieldProperty
-from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
-
-from pyams_content import _
 
 from pyams_content import _
 
@@ -53,6 +46,7 @@
     roles_interface = ISiteFolderRoles
 
     heading = FieldProperty(ISiteFolder['heading'])
+    description = FieldProperty(ISiteFolder['description'])
     notepad = FieldProperty(ISiteFolder['notepad'])
 
     visible_in_list = FieldProperty(ISiteFolder['visible_in_list'])
--- a/src/pyams_content/shared/site/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/site/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,27 +12,23 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
 from collections import OrderedDict
 
-# import interfaces
-from pyams_content.interfaces import IBaseContent
-from pyams_sequence.interfaces import ISequentialIdTarget, IInternalReference
-from pyams_workflow.interfaces import IWorkflowPublicationSupport
 from zope.annotation.interfaces import IAttributeAnnotatable
-from zope.container.interfaces import IContainer, IContained
-
-# import packages
-from pyams_content.shared.common.interfaces import ISharedSite, ISharedContent, \
-    IBaseContentManagerRoles, IBaseSharedTool, IDeletableElement, IWfSharedContentPortalContext
-from pyams_i18n.schema import I18nTextLineField, I18nTextField
 from zope.container.constraints import containers, contains
-from zope.interface import Interface, Attribute
-from zope.schema import Text, Bool, Choice
-from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
+from zope.container.interfaces import IContained, IContainer
+from zope.interface import Attribute, Interface
+from zope.schema import Bool, Choice, Text
+from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
 
 from pyams_content import _
+from pyams_content.interfaces import IBaseContent
+from pyams_content.shared.common.interfaces import IBaseContentManagerRoles, IBaseSharedTool, IDeletableElement, \
+    ISharedSite
+from pyams_content.shared.topic.interfaces import ITopic, IWfTopic, IWfTopicFactory
+from pyams_i18n.schema import I18nTextField, I18nTextLineField
+from pyams_sequence.interfaces import IInternalReference, ISequentialIdTarget
+from pyams_workflow.interfaces import IWorkflowPublicationSupport
 
 
 FOLDER_REDIRECT_DISPLAY_MODE = 'redirect'
@@ -73,6 +69,12 @@
                             description=_("Heading displayed according to presentation template"),
                             required=False)
 
+    description = I18nTextField(title=_("Meta-description"),
+                                description=_("The folder's description is 'hidden' into HTML's page headers; but it "
+                                              "can be seen, for example, in some search engines results as content's "
+                                              "description; if description is empty, content's header will be used."),
+                                required=False)
+
     notepad = Text(title=_("Notepad"),
                    description=_("Internal information to be known about this content"),
                    required=False)
@@ -112,25 +114,35 @@
     topic_content_type = Attribute("Topic content type")
     topic_content_factory = Attribute("Topic content factory")
 
+    description = I18nTextField(title=_("Meta-description"),
+                                description=_("The site's description is 'hidden' into HTML's page headers; but it "
+                                              "can be seen, for example, in some search engines results as content's "
+                                              "description; if description is empty, content's header will be used."),
+                                required=False)
+
+    notepad = Text(title=_("Notepad"),
+                   description=_("Internal information to be known about this content"),
+                   required=False)
+
 
 class ISiteManagerFactory(Interface):
     """Site manager factory interface"""
 
 
-TOPIC_CONTENT_TYPE = 'topic'
-TOPIC_CONTENT_NAME = _("Topic")
+SITE_TOPIC_CONTENT_TYPE = 'site-topic'
+SITE_TOPIC_CONTENT_NAME = _("Site topic")
 
 
-class IWfTopic(IWfSharedContentPortalContext):
-    """Topic interface"""
+class IWfSiteTopic(IWfTopic):
+    """Site topic interface"""
 
 
-class IWfTopicFactory(Interface):
+class IWfSiteTopicFactory(IWfTopicFactory):
     """Topic factory interface"""
 
 
-class ITopic(ISharedContent, ISiteElement):
-    """Workflow managed topic interface"""
+class ISiteTopic(ITopic, ISiteElement):
+    """Workflow managed site topic interface"""
 
 
 class IContentLink(ISiteElement, IInternalReference, IAttributeAnnotatable):
--- a/src/pyams_content/shared/site/link.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/site/link.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,26 +12,20 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
-# import interfaces
-from pyams_content.shared.site.interfaces import IContentLink
-from pyams_utils.interfaces.url import IRelativeURL
-from pyams_workflow.interfaces import IWorkflow, IWorkflowVersion, IWorkflowVersions, IWorkflowPublicationInfo, \
-    IWorkflowState
-
-# import packages
 from persistent import Persistent
-from pyams_sequence.reference import get_reference_target
-from pyams_skin.layer import IPyAMSUserLayer
-from pyams_utils.adapter import adapter_config
-from pyams_utils.zodb import volatile_property
 from zope.container.contained import Contained
 from zope.interface import implementer
 from zope.schema.fieldproperty import FieldProperty
 
 from pyams_content import _
+from pyams_content.shared.site.interfaces import IContentLink
+from pyams_sequence.reference import get_reference_target
+from pyams_skin.layer import IPyAMSUserLayer
+from pyams_utils.adapter import adapter_config
+from pyams_utils.interfaces.url import IRelativeURL
+from pyams_utils.zodb import volatile_property
+from pyams_workflow.interfaces import IWorkflow, IWorkflowVersion, IWorkflowVersions, IWorkflowPublicationInfo, \
+    IWorkflowState
 
 
 @implementer(IContentLink)
@@ -48,7 +42,8 @@
 
     content_name = _("Content link")
 
-    def is_deletable(self):
+    @staticmethod
+    def is_deletable():
         return True
 
     @volatile_property
--- a/src/pyams_content/shared/site/manager.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/site/manager.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,10 +12,14 @@
 
 __docformat__ = 'restructuredtext'
 
+from pyramid.events import subscriber
+from zope.component.interfaces import ISite
+from zope.container.ordered import OrderedContainer
+from zope.interface import implementer
+from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectRemovedEvent
+from zope.schema.fieldproperty import FieldProperty
+from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
 
-# import standard library
-
-# import interfaces
 from pyams_content.component.illustration import IIllustrationTarget, ILinkIllustrationTarget
 from pyams_content.component.paragraph.interfaces import IParagraphFactorySettings
 from pyams_content.component.theme.interfaces import IThemesManagerTarget
@@ -26,29 +30,20 @@
 from pyams_content.reference.pictograms.interfaces import IPictogramManagerTarget
 from pyams_content.root.interfaces import ISiteRoot
 from pyams_content.shared.common.interfaces import ISharedContentFactory
-from pyams_content.shared.site.interfaces import ISiteManager, ISiteManagerFactory, ISiteFolderFactory, ISiteContainer
+from pyams_content.shared.common.manager import BaseSharedTool
+from pyams_content.shared.site import SiteTopic
+from pyams_content.shared.site.container import SiteContainerMixin
+from pyams_content.shared.site.folder import SiteFolder
+from pyams_content.shared.site.interfaces import ISiteContainer, ISiteFolderFactory, ISiteManager, ISiteManagerFactory
 from pyams_form.interfaces.form import IFormContextPermissionChecker
 from pyams_i18n.interfaces import II18n
 from pyams_portal.interfaces import IPortalContext
-from zope.component.interfaces import ISite
-from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectRemovedEvent
-
-# import packages
-from pyams_content.shared.common.manager import BaseSharedTool
-from pyams_content.shared.site import Topic
-from pyams_content.shared.site.container import SiteContainerMixin
-from pyams_content.shared.site.folder import SiteFolder
 from pyams_skin.skin import UserSkinnableContent
-from pyams_utils.adapter import adapter_config, ContextAdapter
+from pyams_utils.adapter import ContextAdapter, adapter_config
 from pyams_utils.registry import get_utilities_for
 from pyams_utils.request import query_request
 from pyams_utils.traversing import get_parent
 from pyams_utils.vocabulary import vocabulary_config
-from pyramid.events import subscriber
-from zope.container.ordered import OrderedContainer
-from zope.interface import implementer
-from zope.schema.fieldproperty import FieldProperty
-from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
 
 from pyams_content import _
 
@@ -59,6 +54,9 @@
 class SiteManager(SiteContainerMixin, OrderedContainer, BaseSharedTool, UserSkinnableContent):
     """Site manager persistent class"""
 
+    description = FieldProperty(ISiteManager['description'])
+    notepad = FieldProperty(ISiteManager['notepad'])
+
     allowed_paragraphs = FieldProperty(IParagraphFactorySettings['allowed_paragraphs'])
     auto_created_paragraphs = FieldProperty(IParagraphFactorySettings['auto_created_paragraphs'])
 
@@ -100,7 +98,7 @@
 
 @adapter_config(context=ISiteContainer, provides=ISharedContentFactory)
 def site_manager_shared_content_factory(context):
-    return Topic
+    return SiteTopic
 
 
 @subscriber(IObjectAddedEvent, context_selector=ISiteManager)
@@ -138,4 +136,4 @@
         request = query_request()
         super(SiteManagerVocabulary, self).__init__([SimpleTerm(v, title=II18n(t).query_attribute('title',
                                                                                                   request=request))
-                                                    for v, t in get_utilities_for(self.interface)])
+                                                     for v, t in get_utilities_for(self.interface)])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/site/skin/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2008-2018 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+
+# import standard library
+
+# import interfaces
+
+# import packages
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/site/skin/breadcrumb.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,35 @@
+#
+# Copyright (c) 2008-2018 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+
+# import standard library
+
+# import interfaces
+from pyams_content.shared.site.interfaces import ISiteContainer
+from pyams_i18n.interfaces import II18n
+from pyams_skin.interfaces.viewlet import IBreadcrumbItem
+from pyams_skin.layer import IPyAMSUserLayer
+
+# import packages
+from pyams_skin.viewlet.breadcrumb import BreadcrumbItem
+from pyams_utils.adapter import adapter_config
+
+
+@adapter_config(context=(ISiteContainer, IPyAMSUserLayer), provides=IBreadcrumbItem)
+class SiteContainerBreadcumbAdapter(BreadcrumbItem):
+    """Site container breadcrumb adapter"""
+
+    @property
+    def label(self):
+        return II18n(self.context).query_attribute('short_name', request=self.request)
--- a/src/pyams_content/shared/site/zmi/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/site/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -13,46 +13,34 @@
 __docformat__ = 'restructuredtext'
 
 
-# import standard library
 from uuid import uuid4
 
-# import interfaces
+from pyramid.decorator import reify
+from pyramid.path import DottedNameResolver
+from z3c.form import field
+from zope.interface import Interface
+from zope.intid.interfaces import IIntIds
+from zope.lifecycleevent import ObjectCreatedEvent
+from zope.schema import Int
+
+from pyams_content import _
 from pyams_content.interfaces import CREATE_CONTENT_PERMISSION
 from pyams_content.shared.common.interfaces import IWfSharedContent
-from pyams_content.shared.site.interfaces import ISiteContainer, ISiteManager, IWfTopic
-from pyams_i18n.interfaces import II18nManager, INegotiator
-from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IMenuHeader
-from pyams_skin.layer import IPyAMSLayer
-from pyams_workflow.interfaces import IWorkflowInfo, IWorkflowVersions
-from pyams_zmi.interfaces.menu import IContentManagementMenu
-from pyams_zmi.layer import IAdminLayer
-from zope.intid.interfaces import IIntIds
-
-# import packages
-from pyams_content.shared.common.zmi import SharedContentAddForm, SharedContentAJAXAddForm
+from pyams_content.shared.common.zmi import SharedContentAJAXAddForm, SharedContentAddForm
+from pyams_content.shared.site.interfaces import ISiteContainer, ISiteManager
 from pyams_content.shared.site.zmi.widget import SiteManagerFoldersSelectorFieldWidget
 from pyams_form.form import ajax_config
+from pyams_i18n.interfaces import II18nManager, INegotiator
 from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
+from pyams_skin.layer import IPyAMSLayer
 from pyams_skin.viewlet.toolbar import ToolbarMenuItem
-from pyams_utils.adapter import adapter_config, ContextRequestAdapter
 from pyams_utils.registry import get_utility
 from pyams_utils.traversing import get_parent
 from pyams_utils.url import absolute_url, generate_url
 from pyams_viewlet.viewlet import viewlet_config
-from pyramid.decorator import reify
-from pyramid.path import DottedNameResolver
-from z3c.form import field
-from zope.interface import Interface
-from zope.lifecycleevent import ObjectCreatedEvent
-from zope.schema import Int
-from pyams_content import _
-
-
-@adapter_config(context=(IWfTopic, IContentManagementMenu), provides=IMenuHeader)
-class TopicContentMenuHeader(ContextRequestAdapter):
-    """Topic content menu header adapter"""
-
-    header = _("This topic")
+from pyams_workflow.interfaces import IWorkflowInfo, IWorkflowVersions
+from pyams_zmi.layer import IAdminLayer
 
 
 @viewlet_config(name='add-topic.menu', context=ISiteContainer, layer=IAdminLayer, view=Interface,
--- a/src/pyams_content/shared/site/zmi/container.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/site/zmi/container.py	Fri Oct 05 10:44:32 2018 +0200
@@ -15,67 +15,65 @@
 
 # import standard library
 import json
-
 from datetime import datetime
 
+from pyramid.exceptions import NotFound
+from pyramid.location import lineage
+from pyramid.view import view_config
+from z3c.form import field
+from z3c.table.column import GetAttrColumn
+from z3c.table.interfaces import IColumn, IValues
+from zope.interface import implementer
+from zope.intid.interfaces import IIntIds
+from zope.lifecycleevent import ObjectMovedEvent
+
+from pyams_content import _
 # import interfaces
-from pyams_content.interfaces import MANAGE_SITE_PERMISSION, MANAGE_CONTENT_PERMISSION
+from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION, MANAGE_SITE_PERMISSION
 from pyams_content.shared.common.interfaces import ISharedContent
 from pyams_content.shared.common.interfaces.zmi import IDashboardTable
-from pyams_content.shared.site.interfaces import ISiteContainer, ISiteManager, IContentLink
+from pyams_content.shared.common.zmi.dashboard import SharedToolDashboardOwnerColumn, SharedToolDashboardSequenceColumn, \
+    SharedToolDashboardStatusColumn, SharedToolDashboardStatusDateColumn, SharedToolDashboardStatusPrincipalColumn, \
+    SharedToolDashboardVersionColumn
+# import packages
+from pyams_content.shared.site import WfSiteTopic
+from pyams_content.shared.site.interfaces import IContentLink, ISiteContainer, ISiteManager
+from pyams_content.skin import pyams_content
 from pyams_content.skin.zmi.interfaces import ISiteTreeMenu, ISiteTreeTable, IUserAddingsMenuLabel
+from pyams_form.form import ajax_config
 from pyams_i18n.interfaces import II18n
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.container import ContainerView, delete_container_element
+from pyams_skin.event import get_json_table_cell_refresh_event
 from pyams_skin.interfaces import IInnerPage, IPageHeader
 from pyams_skin.interfaces.container import ITableElementEditor, ITableElementName, ITableWithActions
 from pyams_skin.interfaces.viewlet import IBreadcrumbItem, ITableItemColumnActionsMenu
 from pyams_skin.layer import IPyAMSLayer
+from pyams_skin.page import DefaultPageHeaderAdapter
+from pyams_skin.table import BaseTable, DefaultElementEditorAdapter, I18nColumn, JsActionColumn, NameColumn, \
+    SorterColumn, TrashColumn
+from pyams_skin.viewlet.breadcrumb import BreadcrumbAdminLayerItem
+from pyams_skin.viewlet.menu import MenuItem
+from pyams_skin.viewlet.toolbar import ToolbarMenuItem
+from pyams_utils.adapter import ContextRequestAdapter, ContextRequestViewAdapter, adapter_config
+from pyams_utils.fanstatic import get_resource_path
 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
 from pyams_utils.interfaces.traversing import IPathElements
-from pyams_workflow.interfaces import IWorkflowVersions, IWorkflowPublicationInfo
-from pyams_zmi.interfaces.menu import ISiteManagementMenu, IPropertiesMenu
-from pyams_zmi.layer import IAdminLayer
-from z3c.table.interfaces import IColumn, IValues
-from zope.intid.interfaces import IIntIds
-
-# import packages
-from pyams_content.shared.site import WfTopic
-from pyams_content.shared.common.zmi.dashboard import SharedToolDashboardSequenceColumn, \
-    SharedToolDashboardStatusColumn, SharedToolDashboardVersionColumn, SharedToolDashboardStatusDateColumn, \
-    SharedToolDashboardStatusPrincipalColumn, SharedToolDashboardOwnerColumn
-from pyams_content.skin import pyams_content
-from pyams_form.form import ajax_config
-from pyams_pagelet.pagelet import pagelet_config
-from pyams_skin.container import ContainerView, delete_container_element
-from pyams_skin.event import get_json_table_cell_refresh_event
-from pyams_skin.page import DefaultPageHeaderAdapter
-from pyams_skin.table import BaseTable, TrashColumn, DefaultElementEditorAdapter, NameColumn, SorterColumn, \
-    JsActionColumn, I18nColumn
-from pyams_skin.viewlet.breadcrumb import BreadcrumbItem
-from pyams_skin.viewlet.menu import MenuItem
-from pyams_skin.viewlet.toolbar import ToolbarMenuItem
-from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextRequestAdapter
-from pyams_utils.fanstatic import get_resource_path
 from pyams_utils.registry import get_utility
 from pyams_utils.timezone import tztime
 from pyams_utils.traversing import get_parent
 from pyams_utils.url import absolute_url
 from pyams_viewlet.manager import viewletmanager_config
 from pyams_viewlet.viewlet import viewlet_config
+from pyams_workflow.interfaces import IWorkflowPublicationInfo, IWorkflowVersions
 from pyams_zmi.form import AdminDialogEditForm
+from pyams_zmi.interfaces.menu import IPropertiesMenu, ISiteManagementMenu
+from pyams_zmi.layer import IAdminLayer
 from pyams_zmi.view import AdminView
-from pyramid.exceptions import NotFound
-from pyramid.location import lineage
-from pyramid.view import view_config
-from z3c.form import field
-from z3c.table.column import GetAttrColumn
-from zope.interface import implementer, Interface
-from zope.lifecycleevent import ObjectMovedEvent
-
-from pyams_content import _
 
 
 @adapter_config(context=(ISiteContainer, IAdminLayer), provides=IBreadcrumbItem)
-class SiteContainerBreadcrumbAdapter(BreadcrumbItem):
+class SiteContainerBreadcrumbAdapter(BreadcrumbAdminLayerItem):
     """Site container breadcrumb adapter"""
 
     @property
@@ -90,7 +88,7 @@
     @property
     def label(self):
         return '{content} ({blog})'.format(
-            content=self.request.localizer.translate(WfTopic.content_name),
+            content=self.request.localizer.translate(WfSiteTopic.content_name),
             blog=II18n(self.context).query_attribute('title', request=self.request))
 
 
@@ -332,9 +330,10 @@
                     icon_class = 'fa-eye opacity-75'
                 else:
                     icon_class = 'fa-eye-slash text-danger opaque'
-            return '<i class="fa fa-fw {icon_class} hint align-base" title="{title}" data-ams-hint-gravity="e"></i>'.format(
-                icon_class=icon_class,
-                title=self.request.localizer.translate(self.get_icon_hint(item)))
+            return '<i class="fa fa-fw {icon_class} hint align-base" title="{title}" ' \
+                   'data-ams-hint-gravity="e"></i>'.format(
+                    icon_class=icon_class,
+                    title=self.request.localizer.translate(self.get_icon_hint(item)))
 
     def get_icon_hint(self, item):
         translate = self.request.localizer.translate
@@ -393,12 +392,12 @@
                '        <i class="fa fa-fw {switch}"></i>' \
                '    </span>&nbsp;&nbsp;<span class="title">{title}</span>' \
                '</div>'.format(
-                   padding='<span class="tree-node-padding"></span>' * depth,
-                   hint=self.request.localizer.translate(_("Click to show/hide inner folders")),
-                   switch='fa-{state}-square-o switch'.format(
-                       state=self.table.rows_state or ('minus' if item in lineage(self.context) else 'plus'))
-                           if ISiteContainer.providedBy(item) else '',
-                   title=name or super(SiteContainerTreeNameColumn, self).renderCell(item))
+                padding='<span class="tree-node-padding"></span>' * depth,
+                hint=self.request.localizer.translate(_("Click to show/hide inner folders")),
+                switch='fa-{state}-square-o switch'.format(
+                    state=self.table.rows_state or ('minus' if item in lineage(self.context) else 'plus'))
+                if ISiteContainer.providedBy(item) else '',
+                title=name or super(SiteContainerTreeNameColumn, self).renderCell(item))
 
 
 @adapter_config(name='content-type', context=(ISiteContainer, IPyAMSLayer, ISiteTreeTable), provides=IColumn)
--- a/src/pyams_content/shared/site/zmi/folder.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/site/zmi/folder.py	Fri Oct 05 10:44:32 2018 +0200
@@ -9,33 +9,31 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
-from pyams_form.group import NamedWidgetsGroup
-from pyams_form.interfaces.form import IInnerSubForm
 
 __docformat__ = 'restructuredtext'
 
+from pyramid.events import subscriber
+from pyramid.path import DottedNameResolver
+from z3c.form import field
+from z3c.form.interfaces import IDataExtractedEvent
+from zope.interface import Interface, Invalid
+from zope.intid.interfaces import IIntIds
+from zope.schema import Text, Int
 
-# import standard library
-
-# import interfaces
 from pyams_content.interfaces import MANAGE_SITE_PERMISSION, MANAGE_TOOL_PERMISSION
 from pyams_content.shared.common.interfaces import IBaseSharedTool
+from pyams_content.shared.common.zmi.manager import SharedToolPropertiesEditForm
 from pyams_content.shared.site.interfaces import ISiteContainer, ISiteManager, ISiteFolder
+from pyams_content.shared.site.zmi.widget import SiteManagerFoldersSelectorFieldWidget
+from pyams_form.form import AJAXAddForm, ajax_config
+from pyams_form.group import NamedWidgetsGroup
+from pyams_form.interfaces.form import IInnerSubForm
 from pyams_i18n.interfaces import INegotiator, II18n
+from pyams_i18n.schema import I18nTextLineField
+from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.interfaces.container import ITableElementName, ITableElementEditor
 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IMenuHeader
 from pyams_skin.layer import IPyAMSLayer
-from pyams_zmi.interfaces.menu import ISiteManagementMenu
-from pyams_zmi.layer import IAdminLayer
-from z3c.form.interfaces import IDataExtractedEvent
-from zope.intid.interfaces import IIntIds
-
-# import packages
-from pyams_content.shared.common.zmi.manager import SharedToolPropertiesEditForm
-from pyams_content.shared.site.zmi.widget import SiteManagerFoldersSelectorFieldWidget
-from pyams_form.form import AJAXAddForm, ajax_config
-from pyams_i18n.schema import I18nTextLineField
-from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.table import DefaultElementEditorAdapter
 from pyams_skin.viewlet.toolbar import ToolbarMenuItem
 from pyams_utils.adapter import adapter_config, ContextRequestAdapter
@@ -45,11 +43,8 @@
 from pyams_utils.url import absolute_url
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm, InnerAdminEditForm
-from pyramid.events import subscriber
-from pyramid.path import DottedNameResolver
-from z3c.form import field
-from zope.interface import Interface, Invalid
-from zope.schema import Text, Int
+from pyams_zmi.interfaces.menu import ISiteManagementMenu
+from pyams_zmi.layer import IAdminLayer
 
 from pyams_content import _
 
@@ -189,8 +184,8 @@
 
     legend = _("Site folder properties")
 
-    fields = field.Fields(ISiteFolder).select('title', 'short_name', 'heading', 'notepad') + \
-             field.Fields(IBaseSharedTool).select('shared_content_workflow')
+    fields = field.Fields(ISiteFolder).select('title', 'short_name', 'heading', 'description', 'notepad') + \
+        field.Fields(IBaseSharedTool).select('shared_content_workflow')
 
 
 @adapter_config(name='navigation', context=(ISiteFolder, IPyAMSLayer, SiteFolderPropertiesEditForm),
@@ -223,5 +218,5 @@
                                          legend=self.main_group_legend,
                                          css_class=self.main_group_class,
                                          switch=True,
-                                         display_mode='auto'))
+                                         display_mode='always'))
         super(SiteFolderNavigationPropertiesEditForm, self).updateGroups()
--- a/src/pyams_content/shared/site/zmi/manager.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/site/zmi/manager.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,42 +12,38 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
+from pyramid.events import subscriber
+from pyramid.path import DottedNameResolver
+from z3c.form import field
+from z3c.form.interfaces import IDataExtractedEvent
+from zope.interface import Interface, Invalid
 
-# import interfaces
-from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION
+from pyams_content import _
+from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION, MANAGE_TOOL_PERMISSION
 from pyams_content.root.interfaces import ISiteRoot
+from pyams_content.shared.common import IBaseSharedTool
+from pyams_content.shared.common.zmi.manager import SharedToolPropertiesEditForm
+from pyams_content.shared.site import WfSiteTopic
 from pyams_content.shared.site.interfaces import ISiteManager, ISiteManagerFactory
+from pyams_content.shared.site.manager import SiteManager
 from pyams_content.skin.zmi.interfaces import ISiteTreeTable, IUserAddingsMenuLabel
+from pyams_form.form import AJAXAddForm, ajax_config
 from pyams_i18n.interfaces import II18n, INegotiator
+from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.interfaces.container import ITableElementEditor, ITableElementName
-from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IBreadcrumbItem, IMenuHeader
+from pyams_skin.interfaces.viewlet import IBreadcrumbItem, IMenuHeader, IToolbarAddingMenu
 from pyams_skin.layer import IPyAMSLayer
-from pyams_zmi.interfaces.menu import ISiteManagementMenu
-from pyams_zmi.layer import IAdminLayer
-from z3c.form.interfaces import IDataExtractedEvent
-
-# import packages
-from pyams_content.shared.site import WfTopic
-from pyams_content.shared.site.manager import SiteManager
-from pyams_form.form import AJAXAddForm, ajax_config
-from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.table import DefaultElementEditorAdapter
-from pyams_skin.viewlet.breadcrumb import BreadcrumbItem
+from pyams_skin.viewlet.breadcrumb import BreadcrumbAdminLayerItem
 from pyams_skin.viewlet.toolbar import ToolbarMenuItem
-from pyams_utils.adapter import adapter_config, ContextRequestAdapter
+from pyams_utils.adapter import ContextRequestAdapter, adapter_config
 from pyams_utils.registry import query_utility
 from pyams_utils.unicode import translate_string
 from pyams_utils.url import absolute_url
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm
-from pyramid.events import subscriber
-from pyramid.path import DottedNameResolver
-from z3c.form import field
-from zope.interface import Invalid, Interface
-
-from pyams_content import _
+from pyams_zmi.interfaces.menu import ISiteManagementMenu
+from pyams_zmi.layer import IAdminLayer
 
 
 @adapter_config(context=(ISiteManager, ISiteManagementMenu), provides=IMenuHeader)
@@ -57,8 +53,8 @@
     header = _("Site management")
 
 
-@adapter_config(context=(ISiteManager, IPyAMSLayer), provides=IBreadcrumbItem)
-class SiteManagerBreadcrumbAdapter(BreadcrumbItem):
+@adapter_config(context=(ISiteManager, IAdminLayer), provides=IBreadcrumbItem)
+class SiteManagerBreadcrumbAdapter(BreadcrumbAdminLayerItem):
     """Site manager breadcrumb adapter"""
 
     @property
@@ -100,7 +96,7 @@
     @property
     def label(self):
         return '{content} ({site})'.format(
-            content=self.request.localizer.translate(WfTopic.content_name),
+            content=self.request.localizer.translate(WfSiteTopic.content_name),
             site=II18n(self.context).query_attribute('title', request=self.request))
 
 
@@ -146,6 +142,17 @@
         return absolute_url(self.context, self.request, 'site-tree.html')
 
 
+@pagelet_config(name='properties.html', context=ISiteManager, layer=IPyAMSLayer, permission=MANAGE_TOOL_PERMISSION)
+@ajax_config(name='properties.json', context=ISiteManager, layer=IPyAMSLayer)
+class SiteManagerPropertiesEditForm(SharedToolPropertiesEditForm):
+    """Site manager properties edit form"""
+
+    legend = _("Site folder properties")
+
+    fields = field.Fields(ISiteManager).select('title', 'short_name', 'description', 'notepad') + \
+        field.Fields(IBaseSharedTool).select('shared_content_workflow')
+
+
 @subscriber(IDataExtractedEvent, form_selector=SiteManagerAddForm)
 def handle_new_site_manager_data_extraction(event):
     """Handle new site manager data extraction"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/topic/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,49 @@
+#
+# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+from zope.interface import implementer, provider
+
+from pyams_content.component.illustration.interfaces import IIllustrationTarget, ILinkIllustrationTarget
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget
+from pyams_content.component.theme.interfaces import ITagsTarget, IThemesTarget
+from pyams_content.features.preview.interfaces import IPreviewTarget
+from pyams_content.features.review.interfaces import IReviewTarget
+from pyams_content.shared.common import SharedContent, WfSharedContent, register_content_type
+from pyams_content.shared.common.interfaces import IWfSharedContentFactory
+from pyams_content.shared.topic.interfaces import ITopic, IWfTopic, IWfTopicFactory, TOPIC_CONTENT_NAME, \
+    TOPIC_CONTENT_TYPE
+from pyams_utils.adapter import adapter_config
+
+
+@implementer(IWfTopic, IIllustrationTarget, ILinkIllustrationTarget, IParagraphContainerTarget,
+             ITagsTarget, IThemesTarget, IPreviewTarget, IReviewTarget)
+class WfTopic(WfSharedContent):
+    """Base topic"""
+
+    content_type = TOPIC_CONTENT_TYPE
+    content_name = TOPIC_CONTENT_NAME
+
+
+register_content_type(WfTopic)
+
+
+@provider(IWfTopicFactory)
+@implementer(ITopic)
+class Topic(SharedContent):
+    """Workflow managed topic class"""
+
+
+@adapter_config(context=IWfTopicFactory, provides=IWfSharedContentFactory)
+def topic_content_factory(context):
+    return WfTopic
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/topic/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+from zope.interface import Interface
+
+from pyams_content import _
+from pyams_content.shared.common.interfaces import ISharedContent, ISharedToolPortalContext, \
+    IWfSharedContentPortalContext
+
+
+TOPIC_CONTENT_TYPE = 'topic'
+TOPIC_CONTENT_NAME = _("Topic")
+
+
+class ITopicManager(ISharedToolPortalContext):
+    """Topic manager interface"""
+
+
+class ITopicManagerFactory(Interface):
+    """Topic manager factory interface"""
+
+
+class IWfTopic(IWfSharedContentPortalContext):
+    """Topic interface"""
+
+
+class IWfTopicFactory(Interface):
+    """Topic parent interface"""
+
+
+class ITopic(ISharedContent):
+    """Workflow managed topic interface"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/topic/manager.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,62 @@
+#
+# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+from pyramid.events import subscriber
+from zope.component.interfaces import ISite
+from zope.interface import implementer
+from zope.lifecycleevent.interfaces import IObjectAddedEvent
+from zope.schema.fieldproperty import FieldProperty
+
+from pyams_content.component.paragraph.interfaces import IParagraphFactorySettings
+from pyams_content.component.theme.interfaces import IThemesManagerTarget
+from pyams_content.reference.pictograms.interfaces import IPictogramManagerTarget
+from pyams_content.shared.common.interfaces import ISharedContentFactory
+from pyams_content.shared.common.manager import SharedTool
+from pyams_content.shared.topic import Topic
+from pyams_content.shared.topic.interfaces import ITopicManager, ITopicManagerFactory, TOPIC_CONTENT_TYPE
+from pyams_utils.adapter import adapter_config
+from pyams_utils.registry import utility_config
+from pyams_utils.traversing import get_parent
+
+
+@implementer(ITopicManager, IParagraphFactorySettings, IThemesManagerTarget, IPictogramManagerTarget)
+class TopicManager(SharedTool):
+    """Topic manager class"""
+
+    shared_content_type = TOPIC_CONTENT_TYPE
+
+    allowed_paragraphs = FieldProperty(IParagraphFactorySettings['allowed_paragraphs'])
+    auto_created_paragraphs = FieldProperty(IParagraphFactorySettings['auto_created_paragraphs'])
+
+
+@utility_config(provides=ITopicManagerFactory)
+class TopicManagerFactory(object):
+    """Default topic manager factory"""
+
+    def __new__(cls):
+        return TopicManager
+
+
+@adapter_config(context=ITopicManager, provides=ISharedContentFactory)
+def topic_manager_content_factory(context):
+    return Topic
+
+
+@subscriber(IObjectAddedEvent, context_selector=ITopicManager)
+def handle_added_topic_manager(event):
+    """Register topic manager when added"""
+    site = get_parent(event.newParent, ISite)
+    registry = site.getSiteManager()
+    if registry is not None:
+        registry.registerUtility(event.object, ITopicManager)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/topic/zmi/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -0,0 +1,74 @@
+#
+# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
+# 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.
+#
+
+__docformat__ = 'restructuredtext'
+
+from pyramid.view import view_config
+from zope.interface import Interface
+
+from pyams_content import _
+from pyams_content.interfaces import CREATE_CONTENT_PERMISSION
+from pyams_content.shared.common.zmi import SharedContentAJAXAddForm, SharedContentAddForm
+from pyams_content.shared.topic.interfaces import ITopicManager, IWfTopic
+from pyams_i18n.interfaces import II18n
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.interfaces import IContentTitle
+from pyams_skin.interfaces.viewlet import IMenuHeader, IWidgetTitleViewletManager
+from pyams_skin.layer import IPyAMSLayer
+from pyams_skin.viewlet.toolbar import ToolbarAction
+from pyams_utils.adapter import ContextRequestAdapter, ContextRequestViewAdapter, adapter_config
+from pyams_viewlet.viewlet import viewlet_config
+from pyams_zmi.interfaces.menu import IContentManagementMenu
+from pyams_zmi.layer import IAdminLayer
+
+
+@adapter_config(context=(IWfTopic, IContentManagementMenu), provides=IMenuHeader)
+class TopicContentMenuHeader(ContextRequestAdapter):
+    """Topic content menu header adapter"""
+
+    header = _("This topic")
+
+
+@adapter_config(context=(IWfTopic, IPyAMSLayer, Interface), provides=IContentTitle)
+class TopicTitleAdapter(ContextRequestViewAdapter):
+    """Topic title adapter"""
+
+    @property
+    def title(self):
+        translate = self.request.localizer.translate
+        return translate(_("Topic « {title} »")).format(
+            title=II18n(self.context).query_attribute('title', request=self.request))
+
+
+@viewlet_config(name='add-shared-content.action', context=ITopicManager, layer=IAdminLayer, view=Interface,
+                manager=IWidgetTitleViewletManager, permission=CREATE_CONTENT_PERMISSION, weight=1)
+class TopicAddAction(ToolbarAction):
+    """Topic adding action"""
+
+    label = _("Add topic")
+    label_css_class = 'fa fa-fw fa-plus'
+    url = 'add-shared-content.html'
+    modal_target = True
+
+
+@pagelet_config(name='add-shared-content.html', context=ITopicManager, layer=IPyAMSLayer,
+                permission=CREATE_CONTENT_PERMISSION)
+class TopicAddForm(SharedContentAddForm):
+    """Topic add form"""
+
+    legend = _("Add topic")
+
+
+@view_config(name='add-shared-content.json', context=ITopicManager, request_type=IPyAMSLayer,
+             permission=CREATE_CONTENT_PERMISSION, renderer='json', xhr=True)
+class TopicAJAXAddForm(SharedContentAJAXAddForm, TopicAddForm):
+    """Topic add form, JSON renderer"""
--- a/src/pyams_content/shared/view/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/view/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,40 +12,36 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
 import logging
 logger = logging.getLogger("PyAMS (content)")
 
 from datetime import datetime
 from itertools import tee
 
-# import interfaces
+from hypatia.catalog import CatalogQuery
 from hypatia.interfaces import ICatalog
+from hypatia.query import Any, Gt, Lt
+from pyramid.events import subscriber
+from pyramid.threadlocal import get_current_registry
+from zope.interface import implementer, provider
+from zope.intid.interfaces import IIntIds
+from zope.lifecycleevent.interfaces import IObjectModifiedEvent
+from zope.schema.fieldproperty import FieldProperty
+
+from pyams_cache.beaker import get_cache
+from pyams_catalog.query import CatalogResultSet, or_
 from pyams_content.features.preview.interfaces import IPreviewTarget
 from pyams_content.features.review.interfaces import IReviewTarget
+from pyams_content.shared.common import WfSharedContent, register_content_type, SharedContent, IWfSharedContentFactory
 from pyams_content.shared.common.interfaces.types import IWfTypedSharedContent
 from pyams_content.shared.view.interfaces import IView, IWfView, IWfViewFactory, IViewQuery, \
     IViewQueryParamsExtension, IViewQueryFilterExtension, VIEW_CONTENT_TYPE, VIEW_CONTENT_NAME, IViewSettings
+from pyams_utils.adapter import adapter_config, ContextAdapter
 from pyams_utils.interfaces import ICacheKeyValue
-from zope.intid.interfaces import IIntIds
-from zope.lifecycleevent.interfaces import IObjectModifiedEvent
-
-# import packages
-from hypatia.catalog import CatalogQuery
-from hypatia.query import Any, Gt, Lt
-from pyams_cache.beaker import get_cache
-from pyams_catalog.query import CatalogResultSet, or_
-from pyams_content.shared.common import WfSharedContent, register_content_type, SharedContent, IWfSharedContentFactory
-from pyams_utils.adapter import adapter_config, ContextAdapter
 from pyams_utils.list import unique_iter
 from pyams_utils.registry import get_utility, get_global_registry
 from pyams_utils.timezone import tztime
 from pyams_workflow.interfaces import IWorkflow
-from pyramid.events import subscriber
-from pyramid.threadlocal import get_current_registry
-from zope.interface import implementer, provider
-from zope.schema.fieldproperty import FieldProperty
 
 
 VIEWS_CACHE_REGION = 'views'
@@ -64,7 +60,9 @@
     content_type = VIEW_CONTENT_TYPE
     content_name = VIEW_CONTENT_NAME
 
+    handle_content_url = False
     handle_header = False
+    handle_description = False
 
     select_context_type = FieldProperty(IWfView['select_context_type'])
     selected_content_types = FieldProperty(IWfView['selected_content_types'])
@@ -138,6 +136,7 @@
             logger.debug("Retrieving view items from cache key {0}".format(cache_key))
         return results
 
+
 register_content_type(WfView)
 
 
--- a/src/pyams_content/shared/view/interfaces/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/view/interfaces/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -24,7 +24,7 @@
 # import packages
 from pyams_thesaurus.schema import ThesaurusTermsListField
 from zope.interface import Interface, Attribute
-from zope.schema import List, Set, Choice, Bool, Int
+from zope.schema import Set, Choice, Bool, Int
 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
 
 from pyams_content import _
@@ -41,7 +41,7 @@
 
 VIEW_ORDERS = (
     {'id': CREATION_DATE_ORDER, 'title': _("Creation date")},
-    {'id': UPDATE_DATE_ORDER,'title': _("Last update date")},
+    {'id': UPDATE_DATE_ORDER, 'title': _("Last update date")},
     {'id': PUBLICATION_DATE_ORDER, 'title': _("Current publication date")},
     {'id': FIRSTPUBLICATION_DATE_ORDER, 'title': _("First publication date")}
 )
--- a/src/pyams_content/shared/view/portlet/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/view/portlet/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,27 +12,23 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
 from itertools import islice
 
-# import interfaces
-from pyams_content.shared.view.interfaces import IViewsMerger, IViewsManager
+from zope.interface import implementer
+from zope.schema.fieldproperty import FieldProperty
+
+from pyams_content.shared.view.interfaces import IViewsManager, IViewsMerger
 from pyams_content.shared.view.portlet.interfaces import IViewItemsPortletSettings, VIEW_DISPLAY_CONTEXT
 from pyams_portal.interfaces import PREVIEW_MODE
+from pyams_portal.portlet import Portlet, PortletSettings, portlet_config
+from pyams_sequence.reference import get_sequence_target
+from pyams_utils.factory import factory_config
 from pyams_utils.interfaces import VIEW_PERMISSION
 from pyams_utils.interfaces.url import DISPLAY_CONTEXT
-from pyams_workflow.interfaces import IWorkflow
-
-# import packages
-from pyams_portal.portlet import PortletSettings, portlet_config, Portlet
-from pyams_sequence.reference import get_sequence_target
-from pyams_utils.factory import factory_config
 from pyams_utils.list import unique_iter
 from pyams_utils.registry import get_utility
 from pyams_utils.request import check_request
-from zope.interface import implementer
-from zope.schema.fieldproperty import FieldProperty
+from pyams_workflow.interfaces import IWorkflow
 
 from pyams_content import _
 
@@ -50,6 +46,7 @@
     views_context = FieldProperty(IViewItemsPortletSettings['views_context'])
     views_merge_mode = FieldProperty(IViewItemsPortletSettings['views_merge_mode'])
     limit = FieldProperty(IViewItemsPortletSettings['limit'])
+    start = FieldProperty(IViewItemsPortletSettings['start'])
 
     def get_views(self):
         views_manager = get_utility(IViewsManager)
@@ -78,6 +75,7 @@
             yield from islice(unique_iter(merger.get_results(self.get_views(),
                                                              context,
                                                              ignore_cache=ignore_cache)),
+                              (self.start or 1) - 1,
                               self.limit)
 
 
--- a/src/pyams_content/shared/view/portlet/interfaces.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/view/portlet/interfaces.py	Fri Oct 05 10:44:32 2018 +0200
@@ -92,5 +92,10 @@
                 description=_("Maximum number of results that the component may extract from merged views"),
                 required=False)
 
+    start = Int(title=_("Starting from..."),
+                description=_("You can skip several results if specifying an integer value here..."),
+                required=False,
+                default=1)
+
     def get_items(self):
         """Get iterator over items returned by selected views, using selected merger"""
--- a/src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt	Fri Oct 05 10:44:32 2018 +0200
@@ -4,14 +4,22 @@
 			tal:condition="title">
 		<tal:var content="title" /><br />
 	</strong>
-	<ul>
-		<li tal:repeat="item settings.get_items(request, ignore_cache=True)">
-			<tal:var content="i18n:item.title" />
-			<tal:var define="global count count+1" />
-		</li>
-	</ul>
-	<tal:if condition="not:count">
-		<tal:if condition="settings.views" i18n:translate="">No result found</tal:if>
-		<tal:if condition="not:settings.views" i18n:translate="">No selected view</tal:if>
-	</tal:if>
+	<div>
+		<span i18n:translate="">Selected views:</span>
+		<tal:if condition="not:settings.views" i18n:translate="">none</tal:if>
+		<tal:loop repeat="view settings.get_views()">
+			${i18n:view.title}<tal:if condition="not:repeat.view.end()">,</tal:if>
+		</tal:loop>
+	</div>
+	<div>
+		<span i18n:translate="">Extracted contents:</span>
+		<tal:if condition="not:settings.views" i18n:translate="">none (no selected view)</tal:if>
+		<ul>
+			<li tal:repeat="item settings.get_items(request, ignore_cache=True)">
+				<tal:var content="i18n:item.title" />
+				<tal:var define="global count count+1" />
+			</li>
+			<span tal:condition="not:count" i18n:translate="">No result found</span>
+		</ul>
+	</div>
 </div>
--- a/src/pyams_content/shared/view/reference.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/shared/view/reference.py	Fri Oct 05 10:44:32 2018 +0200
@@ -24,7 +24,7 @@
 
 # import packages
 from hypatia.catalog import CatalogQuery
-from hypatia.query import Any, Not, NotEq
+from hypatia.query import Any, NotEq
 from pyams_catalog.query import CatalogResultSet, and_
 from pyams_content.workflow import VISIBLE_STATES
 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
@@ -87,6 +87,6 @@
         if (not items) or (settings.references_mode == ALWAYS_REFERENCE_MODE):
             catalog = get_utility(ICatalog)
             params = Any(catalog['oid'], settings.references) & \
-                     Any(catalog['workflow_state'], VISIBLE_STATES)
+                Any(catalog['workflow_state'], VISIBLE_STATES)
             items.prepend(CatalogResultSet(CatalogQuery(catalog).query(params)))
         return items
--- a/src/pyams_content/site.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/site.py	Fri Oct 05 10:44:32 2018 +0200
@@ -12,19 +12,15 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
 import transaction
-
-# import interfaces
+from ZODB.interfaces import IBroken
 from hypatia.interfaces import ICatalog
+from zope.interface import Interface
 from zope.intid.interfaces import IIntIds
 
-# import packages
 from pyams_utils.container import find_objects_providing
 from pyams_utils.registry import set_local_registry, get_utility
 from pyams_utils.site import site_factory
-from zope.interface import Interface
 
 
 def site_index(request):
@@ -38,10 +34,13 @@
             transaction.savepoint()
             intids = get_utility(IIntIds)
             for index, document in enumerate(find_objects_providing(application, Interface)):
-                print("Indexing: {0!r}".format(document))
-                catalog.reindex_doc(intids.register(document), document)
-                if not index % 100:
-                    transaction.savepoint()
+                if IBroken.providedBy(document):
+                    print("Skipping broken object: {0!r}".format(document))
+                else:
+                    print("Indexing: {0!r}".format(document))
+                    catalog.reindex_doc(intids.register(document), document)
+                    if not index % 100:
+                        transaction.savepoint()
         finally:
             set_local_registry(None)
         transaction.commit()
--- a/src/pyams_content/skin/resources/js/pyams_content.js	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/skin/resources/js/pyams_content.js	Fri Oct 05 10:44:32 2018 +0200
@@ -164,6 +164,21 @@
 		 */
 		galleries: {
 
+			addMediaCallback: function(options) {
+				var gallery = $('.gallery', $('[id="' + options.parent + '"]'));
+				var switcher = gallery.siblings('.switcher');
+				if (switcher.parents('fieldset:first').hasClass('switched')) {
+					switcher.click();
+				}
+				for (var i=0; i < options.medias.length; i++) {
+					gallery.append(options.medias[i]);
+				}
+				gallery.sortable({
+					helper: 'clone',
+					stop: PyAMS_content.galleries.setOrder
+				})
+			},
+
 			updateMediaTitle: function(options) {
 				$('img[id="' + options.media_id + '"]').attr('original-title', options.title);
 			},
@@ -215,6 +230,9 @@
 											{object_name: object_name},
 											function(result, status) {
 												media.remove();
+												if (result.handle_json) {
+													MyAMS.ajax.handleJSON(result);
+												}
 											});
 						}
 					});
--- a/src/pyams_content/skin/resources/js/pyams_content.min.js	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/skin/resources/js/pyams_content.min.js	Fri Oct 05 10:44:32 2018 +0200
@@ -1,1 +1,1 @@
-!function(t,e){"use strict";var a=e.MyAMS,i={widget:{treeview:{selectFolder:function(e,a){t(e.target).siblings('input[type="hidden"]').val(a.id)},unselectFolder:function(e,a){t(e.target).siblings('input[type="hidden"]').val(null)}}},TinyMCE:{initEditor:function(t){return tinyMCE.addI18n("fr",{"Link list":"Liste de liens","Toggle h3 header":"En-tête H3","Toggle h4 header":"En-tête H4","Insert internal link":"Insérer un lien interne","Link title":"Texte à afficher","Internal number":"N° interne"}),tinymce.PluginManager.add("internal_links",function(t,e){t.addButton("internal_links",{icon:"cloud-check",tooltip:"Insert internal link",image:"/--static--/pyams_content/img/internal-link.png",onclick:function(){t.windowManager.open({title:"Insert internal link",body:[{type:"textbox",name:"oid",label:"Internal number"},{type:"textbox",name:"title",label:"Link title",value:t.selection.getContent()}],onsubmit:function(e){t.insertContent('<a href="oid://'+e.data.oid+'">'+e.data.title+"</a>")}})}})}),tinyMCE.PluginManager.add("headers",function(t,e){["h3","h4"].forEach(function(e){t.addButton("header-"+e,{tooltip:"Toggle "+e+" header",text:e.toUpperCase(),onClick:function(){t.execCommand("mceToggleFormat",!1,e)},onPostRender:function(){var a=this,i=function(){t.formatter.formatChanged(e,function(t){a.active(t)})};t.formatter?i():t.on("init",i)}})})}),t.image_list=i.TinyMCE.getImagesList,t.link_list=i.TinyMCE.getLinksList,t.style_formats=[{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}],t.plugins+=" internal_links headers",t.toolbar1&&(t.toolbar1="undo redo | header-h3 header-h4 styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent"),t.toolbar2&&(t.toolbar2="forecolor backcolor | charmap internal_links link | fullscreen preview print | code"),t},getImagesList:function(e){var i=t(document.activeElement).parents("form");if(i.exists()){var n=i.attr("data-ams-form-handler")||i.attr("action"),s=n.substr(0,n.lastIndexOf("/")+1);return a.ajax.post(s+"get-images-list.json",{},e)}},getLinksList:function(e){var i=t(document.activeElement).parents("form");if(i.exists()){var n=i.attr("data-ams-form-handler")||i.attr("action"),s=n.substr(0,n.lastIndexOf("/")+1);return a.ajax.post(s+"get-links-list.json",{},e)}}},galleries:{updateMediaTitle:function(e){t('img[id="'+e.media_id+'"]').attr("original-title",e.title)},switchMediaVisibility:function(e){return function(){var e=t(this),i=e.parents(".media"),n=i.parents(".gallery");t("i",e).attr("class","fa fa-fw fa-spinner fa-pulse"),a.ajax.post(n.data("ams-location")+"/set-media-visibility.json",{object_name:i.data("ams-element-name")},function(a,i){a.visible?(t("i",e).attr("class","fa fa-fw fa-eye"),e.parents(".btn-group").siblings("a.fancyimg").removeClass("not-visible")):(t("i",e).attr("class","fa fa-fw fa-eye-slash text-danger"),e.parents(".btn-group").siblings("a.fancyimg").addClass("not-visible"))})}},setOrder:function(e,i){if(!i||!i.item.hasClass("already-dropped")){var n=i.item.parents(".gallery"),s=t(".media",n).listattr("data-ams-element-name");a.ajax.post(n.data("ams-location")+"/set-medias-order.json",{medias:JSON.stringify(s)})}},removeMedia:function(e){return function(){var e=t(this);a.skin.bigBox({title:a.i18n.WARNING,content:'<i class="text-danger fa fa-2x fa-bell shake animated"></i>&nbsp; '+a.i18n.DELETE_WARNING,buttons:a.i18n.BTN_OK_CANCEL},function(t){if(t===a.i18n.BTN_OK){var i=e.parents(".gallery").data("ams-location"),n=e.parents(".media"),s=n.data("ams-element-name");a.ajax.post(i+"/delete-element.json",{object_name:s},function(t,e){n.remove()})}})}},afterFancyboxLoad:function(t,e){t.element.hasClass("not-visible")&&t.inner.prepend('<div class="hidden-mask"></div>')}},paragraphs:{preReload:function(){i.paragraphs.switched=t("i.switch.fa-minus-square-o","#paragraphs_list").parents("tr").listattr("id")},postReload:function(){t(i.paragraphs.switched).each(function(){t("i.switch.fa-plus-square-o",'[id="'+this+'"]').parents("div").first().click()}),delete i.paragraphs.switched},refreshParagraph:function(e){var a=t('tr[id="'+e.object_id+'"]');t("span.title",a).html(e.title||" - - - - - - - -")},switchEditor:function(e){var i=t(this),n=t("i.switch",i),s=i.parents("td"),r=t(".editor",s),o=i.parents("tr");if(n.hasClass("fa-plus-square-o")){var l=o.parents("table");r.html('<h1 class="loading"><i class="fa fa-2x fa-gear fa-spin"></i></h1>'),a.ajax.post(l.data("ams-location")+"/get-paragraph-editor.json",{object_name:o.data("ams-element-name")},function(t){r.html(t),t&&(a.initContent(r),n.removeClass("fa-plus-square-o").addClass("fa-minus-square-o"),o.data("ams-disabled-handlers",!0),a.skin.scrollTo(r,{offset:r.height()-o.height()}))})}else a.skin.cleanContainer(r),r.empty(),n.removeClass("fa-minus-square-o").addClass("fa-plus-square-o"),o.removeData("ams-disabled-handlers")},switchLastEditor:function(e){var a=t('table[id="'+e+'"]'),i=t("tr:last",a);t('[data-ams-click-handler="PyAMS_content.paragraphs.switchEditor"]',i).click()},switchAllEditors:function(e){var i=t(this),n=t("i",i),s=i.parents("table");n.hasClass("fa-plus-square-o")?(n.removeClass("fa-plus-square-o").addClass("fa-cog fa-spin"),a.ajax.post(s.data("ams-location")+"/get-paragraphs-editors.json",{},function(e){for(var i in e)if(e.hasOwnProperty(i)){var r=t('tr[data-ams-element-name="'+i+'"]',s),o=t(".editor",r);o.is(":empty")&&o.html(e[i]),t(".fa-plus-square-o",r).removeClass("fa-plus-square-o").addClass("fa-minus-square-o"),r.data("ams-disabled-handlers",!0)}t("i.fa-plus-square-o",t("tbody",s)).exists()||n.removeClass("fa-cog fa-spin").addClass("fa-minus-square-o"),a.initContent(s)})):(t(".editor",s).each(function(){a.skin.cleanContainer(t(this)),t(this).empty()}),t(".fa-minus-square-o",s).removeClass("fa-minus-square-o").addClass("fa-plus-square-o"),t("tr",s).removeData("ams-disabled-handlers"))},updateToolbar:function(e){var i=t('tr[id="'+e.object_id+'"]'),n=t(".title-toolbar",i);n.replaceWith(e.toolbar_tag),n=t(".title-toolbar",i),a.initContent(n)},updateMarkers:function(e){var i=t('tr[id="'+e.object_id+'"]'),n=t(".title-toolbar",i),s=t("DIV.action."+e.marker_type,n);s.exists()?s.replaceWith(e.marker_tag):t(e.marker_tag).appendTo(n),e.marker_tag&&(s=t("DIV.action."+e.marker_type,n),a.initContent(s)),a.helpers.sort(n,"weight")}},pictograms:{initManagerSelection:function(){var e=t(this),a=t('input[type="hidden"]',t(".selected-pictograms",e)).listattr("value");return{selected:JSON.stringify(a)}},switchPictogram:function(){var e=t(this),a=e.parents(".pictograms"),i=a.parents(".pictograms-manager");a.hasClass("available-pictograms")?t(".selected-pictograms",i).append(e):t(".available-pictograms",i).append(e)}},themes:{initExtracts:function(e){var i=t('select[name="manager_themes.widgets.thesaurus_name:list"]',e).val(),n=t('select[name="manager_themes.widgets.extract_name:list"]',e),s=n.val();i&&a.jsonrpc.post("getExtracts",{thesaurus_name:i},{url:"/api/thesaurus/json"},function(e){n.empty(),t(e.result).each(function(){t("<option></option>").attr("value",this.id).attr("selected",this.id===s).text(this.text).appendTo(n)})})},getExtracts:function(e){var i=t(e.currentTarget).parents("form"),n=t('select[name="manager_themes.widgets.thesaurus_name:list"]',i).val(),s=t('select[name="manager_themes.widgets.extract_name:list"]',i),r=s.data("select2");n&&"--NOVALUE--"!==n?a.jsonrpc.post("getExtracts",{thesaurus_name:n},{url:"/api/thesaurus/json"},function(t){r.results.empty(),r.opts.populateResults.call(r,r.results,t.result,{term:""})}):(s.select2("data",null),r.results.empty(),r.opts.populateResults.call(r,r.results,[],{term:""}))}},fields:{refreshField:function(e){var a=t('table[id="form_fields_list"]'),i=t('tr[data-ams-element-name="'+e.object_name+'"]',a);t("td:nth-child(4)",i).html(e.title)}},imgmap:{init:function(){var e=t(this);a.ajax.check(t.fn.canvasAreaDraw,"/--static--/pyams_content/js/jquery-canvasAreaDraw"+a.devext+".js",function(){e.canvasAreaDraw({imageUrl:e.data("ams-image-url")})})},initPreview:function(){var e=t(this);a.ajax.check(t.fn.mapster,"/--static--/pyams_content/js/jquery-imagemapster-1.2.10"+a.devext+".js",function(){e.mapster({fillColor:"ff0000",fillOpacity:.35,selected:!0,highlight:!0,staticState:!0})})}},site:{switchVisibility:function(){return function(){var e=t(this),i=e.parents("tr").first();a.ajax.post(i.data("ams-location")+"/switch-content-visibility.json",{object_name:i.data("ams-element-name")},function(a,i){var n="fa-eye";a.visible||(n+="-slash"),a.published||(n+=" text-danger"),t("i",e).attr("class","fa fa-fw "+n)})}}},review:{timer:null,timer_duration:{general:3e4,chat:5e3},initComments:function(e){var n=t(".chat-body",e);n.animate({scrollTop:n[0].scrollHeight},1e3),clearInterval(i.review.timer),i.review.timer=setInterval(i.review.updateComments,i.review.timer_duration.chat),a.skin.registerCleanCallback(i.review.cleanCommentsCallback)},cleanCommentsCallback:function(){clearInterval(i.review.timer),i.review.timer=setInterval(i.review.updateComments,i.review.timer_duration.general)},updateComments:function(){var e,i=t(".badge",'nav a[href="#review-comments.html"]'),n=t(".chat-body",".widget-body");e=n.exists()?t(".message",n).length:parseInt(i.text()),a.ajax.post("get-last-review-comments.json",{count:e},function(a){n.exists()&&i.removeClass("bg-color-danger").addClass("bg-color-info"),e!==a.count&&(i.text(a.count).removeClass("hidden"),n.exists()&&(t(".messages",n).append(a.content),n.animate({scrollTop:n[0].scrollHeight},1e3)),n.exists()||i.removeClass("bg-color-info").addClass("bg-color-danger").animate({padding:"3px 12px 2px","margin-right":"9px"},"slow",function(){t(this).animate({padding:"3px 6px 2px","margin-right":"15px"},"slow")}))})},initCommentData:function(e){var a=t(".chat-body",".widget-body");return{count:t(".message",a).length}},addCommentAction:function(){return function(){t('textarea[name="comment"]').focus()}},addCommentCallback:function(e){var a=t(this),i=a.parents(".widget-body");t(".messages",i).append(e.content),t('textarea[name="comment"]',a).val("");var n=t(".chat-body",i);n.animate({scrollTop:n[0].scrollHeight},1e3),t(".badge",'nav a[href="#review-comments.html"]').text(e.count).removeClass("hidden")}},header:{submitEditForm:function(){var e=t(this).parents("form").first();a.form.submit(e,{form_data:{autosubmit:!0}})}},footer:{submitEditForm:function(){var e=t(this).parents("form").first();a.form.submit(e,{form_data:{autosubmit:!0}})}},profile:{switchFavorite:function(){var e=t(this),i=e.data("sequence-oid");a.ajax.post("switch-user-favorite.json",{oid:i},function(t,a){t.favorite?e.removeClass("fa-star-o").addClass("fa-star"):e.removeClass("fa-star").addClass("fa-star-o")})}}};t(".badge",'nav a[href="#review-comments.html"]').exists()&&(i.review.timer=setInterval(i.review.updateComments,i.review.timer_duration.general)),e.PyAMS_content=i}(jQuery,this);
+!function(t,e){"use strict";var a=e.MyAMS,i={widget:{treeview:{selectFolder:function(e,a){t(e.target).siblings('input[type="hidden"]').val(a.id)},unselectFolder:function(e,a){t(e.target).siblings('input[type="hidden"]').val(null)}}},TinyMCE:{initEditor:function(t){return tinyMCE.addI18n("fr",{"Link list":"Liste de liens","Toggle h3 header":"En-tête H3","Toggle h4 header":"En-tête H4","Insert internal link":"Insérer un lien interne","Link title":"Texte à afficher","Internal number":"N° interne"}),tinymce.PluginManager.add("internal_links",function(t,e){t.addButton("internal_links",{icon:"cloud-check",tooltip:"Insert internal link",image:"/--static--/pyams_content/img/internal-link.png",onclick:function(){t.windowManager.open({title:"Insert internal link",body:[{type:"textbox",name:"oid",label:"Internal number"},{type:"textbox",name:"title",label:"Link title",value:t.selection.getContent()}],onsubmit:function(e){t.insertContent('<a href="oid://'+e.data.oid+'">'+e.data.title+"</a>")}})}})}),tinyMCE.PluginManager.add("headers",function(t,e){["h3","h4"].forEach(function(e){t.addButton("header-"+e,{tooltip:"Toggle "+e+" header",text:e.toUpperCase(),onClick:function(){t.execCommand("mceToggleFormat",!1,e)},onPostRender:function(){var a=this,i=function(){t.formatter.formatChanged(e,function(t){a.active(t)})};t.formatter?i():t.on("init",i)}})})}),t.image_list=i.TinyMCE.getImagesList,t.link_list=i.TinyMCE.getLinksList,t.style_formats=[{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}],t.plugins+=" internal_links headers",t.toolbar1&&(t.toolbar1="undo redo | header-h3 header-h4 styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent"),t.toolbar2&&(t.toolbar2="forecolor backcolor | charmap internal_links link | fullscreen preview print | code"),t},getImagesList:function(e){var i=t(document.activeElement).parents("form");if(i.exists()){var n=i.attr("data-ams-form-handler")||i.attr("action"),s=n.substr(0,n.lastIndexOf("/")+1);return a.ajax.post(s+"get-images-list.json",{},e)}},getLinksList:function(e){var i=t(document.activeElement).parents("form");if(i.exists()){var n=i.attr("data-ams-form-handler")||i.attr("action"),s=n.substr(0,n.lastIndexOf("/")+1);return a.ajax.post(s+"get-links-list.json",{},e)}}},galleries:{addMediaCallback:function(e){var a=t(".gallery",t('[id="'+e.parent+'"]')),n=a.siblings(".switcher");n.parents("fieldset:first").hasClass("switched")&&n.click();for(var s=0;s<e.medias.length;s++)a.append(e.medias[s]);a.sortable({helper:"clone",stop:i.galleries.setOrder})},updateMediaTitle:function(e){t('img[id="'+e.media_id+'"]').attr("original-title",e.title)},switchMediaVisibility:function(e){return function(){var e=t(this),i=e.parents(".media"),n=i.parents(".gallery");t("i",e).attr("class","fa fa-fw fa-spinner fa-pulse"),a.ajax.post(n.data("ams-location")+"/set-media-visibility.json",{object_name:i.data("ams-element-name")},function(a,i){a.visible?(t("i",e).attr("class","fa fa-fw fa-eye"),e.parents(".btn-group").siblings("a.fancyimg").removeClass("not-visible")):(t("i",e).attr("class","fa fa-fw fa-eye-slash text-danger"),e.parents(".btn-group").siblings("a.fancyimg").addClass("not-visible"))})}},setOrder:function(e,i){if(!i||!i.item.hasClass("already-dropped")){var n=i.item.parents(".gallery"),s=t(".media",n).listattr("data-ams-element-name");a.ajax.post(n.data("ams-location")+"/set-medias-order.json",{medias:JSON.stringify(s)})}},removeMedia:function(e){return function(){var e=t(this);a.skin.bigBox({title:a.i18n.WARNING,content:'<i class="text-danger fa fa-2x fa-bell shake animated"></i>&nbsp; '+a.i18n.DELETE_WARNING,buttons:a.i18n.BTN_OK_CANCEL},function(t){if(t===a.i18n.BTN_OK){var i=e.parents(".gallery").data("ams-location"),n=e.parents(".media"),s=n.data("ams-element-name");a.ajax.post(i+"/delete-element.json",{object_name:s},function(t,e){n.remove(),t.handle_json&&a.ajax.handleJSON(t)})}})}},afterFancyboxLoad:function(t,e){t.element.hasClass("not-visible")&&t.inner.prepend('<div class="hidden-mask"></div>')}},paragraphs:{preReload:function(){i.paragraphs.switched=t("i.switch.fa-minus-square-o","#paragraphs_list").parents("tr").listattr("id")},postReload:function(){t(i.paragraphs.switched).each(function(){t("i.switch.fa-plus-square-o",'[id="'+this+'"]').parents("div").first().click()}),delete i.paragraphs.switched},refreshParagraph:function(e){var a=t('tr[id="'+e.object_id+'"]');t("span.title",a).html(e.title||" - - - - - - - -")},switchEditor:function(e){var i=t(this),n=t("i.switch",i),s=i.parents("td"),r=t(".editor",s),o=i.parents("tr");if(n.hasClass("fa-plus-square-o")){var l=o.parents("table");r.html('<h1 class="loading"><i class="fa fa-2x fa-gear fa-spin"></i></h1>'),a.ajax.post(l.data("ams-location")+"/get-paragraph-editor.json",{object_name:o.data("ams-element-name")},function(t){r.html(t),t&&(a.initContent(r),n.removeClass("fa-plus-square-o").addClass("fa-minus-square-o"),o.data("ams-disabled-handlers",!0),a.skin.scrollTo(r,{offset:r.height()-o.height()}))})}else a.skin.cleanContainer(r),r.empty(),n.removeClass("fa-minus-square-o").addClass("fa-plus-square-o"),o.removeData("ams-disabled-handlers")},switchLastEditor:function(e){var a=t('table[id="'+e+'"]'),i=t("tr:last",a);t('[data-ams-click-handler="PyAMS_content.paragraphs.switchEditor"]',i).click()},switchAllEditors:function(e){var i=t(this),n=t("i",i),s=i.parents("table");n.hasClass("fa-plus-square-o")?(n.removeClass("fa-plus-square-o").addClass("fa-cog fa-spin"),a.ajax.post(s.data("ams-location")+"/get-paragraphs-editors.json",{},function(e){for(var i in e)if(e.hasOwnProperty(i)){var r=t('tr[data-ams-element-name="'+i+'"]',s),o=t(".editor",r);o.is(":empty")&&o.html(e[i]),t(".fa-plus-square-o",r).removeClass("fa-plus-square-o").addClass("fa-minus-square-o"),r.data("ams-disabled-handlers",!0)}t("i.fa-plus-square-o",t("tbody",s)).exists()||n.removeClass("fa-cog fa-spin").addClass("fa-minus-square-o"),a.initContent(s)})):(t(".editor",s).each(function(){a.skin.cleanContainer(t(this)),t(this).empty()}),t(".fa-minus-square-o",s).removeClass("fa-minus-square-o").addClass("fa-plus-square-o"),t("tr",s).removeData("ams-disabled-handlers"))},updateToolbar:function(e){var i=t('tr[id="'+e.object_id+'"]'),n=t(".title-toolbar",i);n.replaceWith(e.toolbar_tag),n=t(".title-toolbar",i),a.initContent(n)},updateMarkers:function(e){var i=t('tr[id="'+e.object_id+'"]'),n=t(".title-toolbar",i),s=t("DIV.action."+e.marker_type,n);s.exists()?s.replaceWith(e.marker_tag):t(e.marker_tag).appendTo(n),e.marker_tag&&(s=t("DIV.action."+e.marker_type,n),a.initContent(s)),a.helpers.sort(n,"weight")}},pictograms:{initManagerSelection:function(){var e=t(this),a=t('input[type="hidden"]',t(".selected-pictograms",e)).listattr("value");return{selected:JSON.stringify(a)}},switchPictogram:function(){var e=t(this),a=e.parents(".pictograms"),i=a.parents(".pictograms-manager");a.hasClass("available-pictograms")?t(".selected-pictograms",i).append(e):t(".available-pictograms",i).append(e)}},themes:{initExtracts:function(e){var i=t('select[name="manager_themes.widgets.thesaurus_name:list"]',e).val(),n=t('select[name="manager_themes.widgets.extract_name:list"]',e),s=n.val();i&&a.jsonrpc.post("getExtracts",{thesaurus_name:i},{url:"/api/thesaurus/json"},function(e){n.empty(),t(e.result).each(function(){t("<option></option>").attr("value",this.id).attr("selected",this.id===s).text(this.text).appendTo(n)})})},getExtracts:function(e){var i=t(e.currentTarget).parents("form"),n=t('select[name="manager_themes.widgets.thesaurus_name:list"]',i).val(),s=t('select[name="manager_themes.widgets.extract_name:list"]',i),r=s.data("select2");n&&"--NOVALUE--"!==n?a.jsonrpc.post("getExtracts",{thesaurus_name:n},{url:"/api/thesaurus/json"},function(t){r.results.empty(),r.opts.populateResults.call(r,r.results,t.result,{term:""})}):(s.select2("data",null),r.results.empty(),r.opts.populateResults.call(r,r.results,[],{term:""}))}},fields:{refreshField:function(e){var a=t('table[id="form_fields_list"]'),i=t('tr[data-ams-element-name="'+e.object_name+'"]',a);t("td:nth-child(4)",i).html(e.title)}},imgmap:{init:function(){var e=t(this);a.ajax.check(t.fn.canvasAreaDraw,"/--static--/pyams_content/js/jquery-canvasAreaDraw"+a.devext+".js",function(){e.canvasAreaDraw({imageUrl:e.data("ams-image-url")})})},initPreview:function(){var e=t(this);a.ajax.check(t.fn.mapster,"/--static--/pyams_content/js/jquery-imagemapster-1.2.10"+a.devext+".js",function(){e.mapster({fillColor:"ff0000",fillOpacity:.35,selected:!0,highlight:!0,staticState:!0})})}},site:{switchVisibility:function(){return function(){var e=t(this),i=e.parents("tr").first();a.ajax.post(i.data("ams-location")+"/switch-content-visibility.json",{object_name:i.data("ams-element-name")},function(a,i){var n="fa-eye";a.visible||(n+="-slash"),a.published||(n+=" text-danger"),t("i",e).attr("class","fa fa-fw "+n)})}}},review:{timer:null,timer_duration:{general:3e4,chat:5e3},initComments:function(e){var n=t(".chat-body",e);n.animate({scrollTop:n[0].scrollHeight},1e3),clearInterval(i.review.timer),i.review.timer=setInterval(i.review.updateComments,i.review.timer_duration.chat),a.skin.registerCleanCallback(i.review.cleanCommentsCallback)},cleanCommentsCallback:function(){clearInterval(i.review.timer),i.review.timer=setInterval(i.review.updateComments,i.review.timer_duration.general)},updateComments:function(){var e,i=t(".badge",'nav a[href="#review-comments.html"]'),n=t(".chat-body",".widget-body");e=n.exists()?t(".message",n).length:parseInt(i.text()),a.ajax.post("get-last-review-comments.json",{count:e},function(a){n.exists()&&i.removeClass("bg-color-danger").addClass("bg-color-info"),e!==a.count&&(i.text(a.count).removeClass("hidden"),n.exists()&&(t(".messages",n).append(a.content),n.animate({scrollTop:n[0].scrollHeight},1e3)),n.exists()||i.removeClass("bg-color-info").addClass("bg-color-danger").animate({padding:"3px 12px 2px","margin-right":"9px"},"slow",function(){t(this).animate({padding:"3px 6px 2px","margin-right":"15px"},"slow")}))})},initCommentData:function(e){var a=t(".chat-body",".widget-body");return{count:t(".message",a).length}},addCommentAction:function(){return function(){t('textarea[name="comment"]').focus()}},addCommentCallback:function(e){var a=t(this),i=a.parents(".widget-body");t(".messages",i).append(e.content),t('textarea[name="comment"]',a).val("");var n=t(".chat-body",i);n.animate({scrollTop:n[0].scrollHeight},1e3),t(".badge",'nav a[href="#review-comments.html"]').text(e.count).removeClass("hidden")}},header:{submitEditForm:function(){var e=t(this).parents("form").first();a.form.submit(e,{form_data:{autosubmit:!0}})}},footer:{submitEditForm:function(){var e=t(this).parents("form").first();a.form.submit(e,{form_data:{autosubmit:!0}})}},profile:{switchFavorite:function(){var e=t(this),i=e.data("sequence-oid");a.ajax.post("switch-user-favorite.json",{oid:i},function(t,a){t.favorite?e.removeClass("fa-star-o").addClass("fa-star"):e.removeClass("fa-star").addClass("fa-star-o")})}}};t(".badge",'nav a[href="#review-comments.html"]').exists()&&(i.review.timer=setInterval(i.review.updateComments,i.review.timer_duration.general)),e.PyAMS_content=i}(jQuery,this);
--- a/src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -9,32 +9,29 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
+import locale
+
 
 __docformat__ = 'restructuredtext'
 
 
-# import standard library
+from hypatia.catalog import CatalogQuery
+from hypatia.interfaces import ICatalog
+from hypatia.query import And, Any, NotEq, Or
 
-# import interfaces
-from hypatia.interfaces import ICatalog
+from pyams_catalog.query import CatalogResultSet
+from pyams_content import _
 from pyams_content.shared.common.interfaces import IBaseSharedTool, ISharedSite
 from pyams_content.skin.zmi.interfaces import IUserAddingsMenuLabel
 from pyams_i18n.interfaces import II18n
 from pyams_skin.interfaces.viewlet import ITopLinksViewletManager
-from pyams_zmi.layer import IAdminLayer
-
-# import packages
-from hypatia.catalog import CatalogQuery
-from hypatia.query import Any, And, Or, NotEq
-from pyams_catalog.query import CatalogResultSet
-from pyams_skin.viewlet.toplinks import TopLinksViewlet, TopLinksMenu
+from pyams_skin.viewlet.toplinks import TopLinksMenu, TopLinksViewlet
 from pyams_template.template import template_config
 from pyams_utils.list import unique
-from pyams_utils.registry import get_utility, get_all_utilities_registered_for
+from pyams_utils.registry import get_all_utilities_registered_for, get_utility
 from pyams_utils.url import absolute_url
 from pyams_viewlet.viewlet import viewlet_config
-
-from pyams_content import _
+from pyams_zmi.layer import IAdminLayer
 
 
 @viewlet_config(name='shared-sites.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=20)
@@ -51,7 +48,7 @@
         request = self.request
         parent = self.__parent__
         for site in sorted(get_all_utilities_registered_for(ISharedSite),
-                           key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
+                           key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
             menu = TopLinksMenu(context, request, parent, self)
             menu.label = II18n(site).query_attribute('title', request=request) or site.__name__
             menu.url = absolute_url(site, request, 'admin#dashboard.html')
@@ -72,7 +69,7 @@
         request = self.request
         parent = self.__parent__
         for tool in sorted(get_all_utilities_registered_for(IBaseSharedTool),
-                           key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
+                           key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
             if ISharedSite.providedBy(tool) or (not tool.shared_content_menu):
                 continue
             menu = TopLinksMenu(context, request, parent, self)
@@ -95,7 +92,7 @@
         request = self.request
         parent = self.__parent__
         for tool in sorted(get_all_utilities_registered_for(IBaseSharedTool),
-                           key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
+                           key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
             if ISharedSite.providedBy(tool) or tool.shared_content_menu:
                 continue
             menu = TopLinksMenu(context, request, parent, self)
@@ -123,7 +120,7 @@
                         Any(catalog['role:pilot'], {request.principal.id})),
                      NotEq(catalog['content_type'], None))
         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
-                           key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
+                           key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
             menu = TopLinksMenu(context, request, parent, self)
             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
@@ -149,7 +146,7 @@
         params = And(Any(catalog['role:contributor'], {request.principal.id}),
                      NotEq(catalog['content_type'], None))
         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
-                           key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
+                           key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
             content_class = tool.shared_content_factory.content_class
             if content_class is None:
                 continue
--- a/src/pyams_content/tests/test_utilsdocs.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/tests/test_utilsdocs.py	Fri Oct 05 10:44:32 2018 +0200
@@ -23,6 +23,7 @@
 
 current_dir = os.path.dirname(__file__)
 
+
 def doc_suite(test_dir, setUp=None, tearDown=None, globs=None):
     """Returns a test suite, based on doctests found in /doctest."""
     suite = []
@@ -50,10 +51,12 @@
 
     return unittest.TestSuite(suite)
 
+
 def test_suite():
     """returns the test suite"""
     return doc_suite(current_dir)
 
+
 if __name__ == '__main__':
     unittest.main(defaultTest='test_suite')
 
--- a/src/pyams_content/tests/test_utilsdocstrings.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/tests/test_utilsdocstrings.py	Fri Oct 05 10:44:32 2018 +0200
@@ -23,6 +23,7 @@
 
 current_dir = os.path.abspath(os.path.dirname(__file__))
 
+
 def doc_suite(test_dir, globs=None):
     """Returns a test suite, based on doc tests strings found in /*.py"""
     suite = []
@@ -54,9 +55,11 @@
 
     return unittest.TestSuite(suite)
 
+
 def test_suite():
     """returns the test suite"""
     return doc_suite(current_dir)
 
+
 if __name__ == '__main__':
     unittest.main(defaultTest='test_suite')
--- a/src/pyams_content/workflow/__init__.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/workflow/__init__.py	Fri Oct 05 10:44:32 2018 +0200
@@ -152,9 +152,9 @@
     # can't create new version when previous draft already exists
     versions = IWorkflowVersions(context)
     if (versions.has_version(DRAFT) or
-        versions.has_version(PROPOSED) or
-        versions.has_version(CANCELED) or
-        versions.has_version(REFUSED)):
+            versions.has_version(PROPOSED) or
+            versions.has_version(CANCELED) or
+            versions.has_version(REFUSED)):
         return False
     request = check_request()
     # grant access to webmaster
@@ -246,7 +246,8 @@
     for version in IWorkflowVersions(context).get_versions((PUBLISHED, RETIRING, RETIRED, ARCHIVING)):
         if version is not context:
             IWorkflowInfo(version).fire_transition_toward(ARCHIVED,
-                                                          comment=translate(_("Published version {0}")).format(version_id))
+                                                          comment=translate(_("Published version {0}")).format(
+                                                              version_id))
 
 
 def archive_action(wf, context):
--- a/src/pyams_content/workflow/basic.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/workflow/basic.py	Fri Oct 05 10:44:32 2018 +0200
@@ -157,7 +157,8 @@
     for version in IWorkflowVersions(context).get_versions((PUBLISHED, )):
         if version is not context:
             IWorkflowInfo(version).fire_transition_toward(ARCHIVED,
-                                                          comment=translate(_("Published version {0}")).format(version_id))
+                                                          comment=translate(_("Published version {0}")).format(
+                                                              version_id))
 
 
 def archive_action(wf, context):
--- a/src/pyams_content/workflow/task.py	Thu Sep 06 18:10:04 2018 +0200
+++ b/src/pyams_content/workflow/task.py	Fri Oct 05 10:44:32 2018 +0200
@@ -55,8 +55,8 @@
         for tool in get_all_utilities_registered_for(IBaseSharedTool):
             workflow = IWorkflow(tool)
             params = Eq(catalog['parents'], intids.register(tool)) & \
-                     Any(catalog['workflow_state'], workflow.published_states) & \
-                     Lt(catalog['expiration_date'], now)
+                Any(catalog['workflow_state'], workflow.published_states) & \
+                Lt(catalog['expiration_date'], now)
             for content in CatalogResultSet(CatalogQuery(catalog).query(params)):
                 if not has_retired:
                     report.write(translate(_("Automatic contents withdrawal:\n")))