Added constants to implement paragraphs names
authorThierry Florac <thierry.florac@onf.fr>
Wed, 06 Jun 2018 11:44:46 +0200
changeset 586 28445044f6e3
parent 585 9fa8e9776bda
child 587 978dc30214ce
Added constants to implement paragraphs names
src/pyams_content/component/association/interfaces/__init__.py
src/pyams_content/component/association/paragraph.py
src/pyams_content/component/gallery/interfaces/__init__.py
src/pyams_content/component/gallery/paragraph.py
src/pyams_content/component/illustration/interfaces/__init__.py
src/pyams_content/component/illustration/paragraph.py
src/pyams_content/component/paragraph/contact.py
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/interfaces/contact.py
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/milestone.py
src/pyams_content/component/paragraph/interfaces/pictogram.py
src/pyams_content/component/paragraph/interfaces/verbatim.py
src/pyams_content/component/paragraph/keynumber.py
src/pyams_content/component/paragraph/keypoint.py
src/pyams_content/component/paragraph/milestone.py
src/pyams_content/component/paragraph/pictogram.py
src/pyams_content/component/paragraph/verbatim.py
src/pyams_content/component/video/interfaces/__init__.py
src/pyams_content/component/video/paragraph.py
src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.mo
src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po
src/pyams_content/locales/pyams_content.pot
src/pyams_content/shared/imagemap/interfaces/__init__.py
src/pyams_content/shared/imagemap/paragraph.py
src/pyams_content/shared/logo/interfaces/__init__.py
src/pyams_content/shared/logo/paragraph.py
--- a/src/pyams_content/component/association/interfaces/__init__.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/association/interfaces/__init__.py	Wed Jun 06 11:44:46 2018 +0200
@@ -83,6 +83,7 @@
 
 
 ASSOCIATION_PARAGRAPH_TYPE = 'Associations'
+ASSOCIATION_PARAGRAPH_NAME = _("Associations")
 ASSOCIATION_PARAGRAPH_RENDERERS = 'PyAMS.associations.renderers'
 
 
--- a/src/pyams_content/component/association/paragraph.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/association/paragraph.py	Wed Jun 06 11:44:46 2018 +0200
@@ -17,7 +17,7 @@
 
 # import interfaces
 from pyams_content.component.association.interfaces import IAssociationParagraph, ASSOCIATION_PARAGRAPH_TYPE, \
-    ASSOCIATION_PARAGRAPH_RENDERERS
+    ASSOCIATION_PARAGRAPH_RENDERERS, ASSOCIATION_PARAGRAPH_NAME
 from pyams_content.component.extfile.interfaces import IExtFileContainerTarget
 from pyams_content.component.links.interfaces import ILinkContainerTarget
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
@@ -36,8 +36,6 @@
 from zope.interface import implementer
 from zope.schema.fieldproperty import FieldProperty
 
-from pyams_content import _
-
 
 @implementer(IAssociationParagraph, IExtFileContainerTarget, ILinkContainerTarget)
 @factory_config(provided=IAssociationParagraph)
@@ -45,7 +43,7 @@
     """Associations paragraph"""
 
     icon_class = 'fa-link'
-    icon_hint = _("Associations paragraph")
+    icon_hint = ASSOCIATION_PARAGRAPH_NAME
 
     renderer = FieldProperty(IAssociationParagraph['renderer'])
 
@@ -54,7 +52,7 @@
 class AssociationParagraphFactory(BaseParagraphFactory):
     """Associations paragraph factory"""
 
-    name = _("Associations paragraph")
+    name = ASSOCIATION_PARAGRAPH_NAME
     content_type = AssociationParagraph
 
 
--- a/src/pyams_content/component/gallery/interfaces/__init__.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/gallery/interfaces/__init__.py	Wed Jun 06 11:44:46 2018 +0200
@@ -127,6 +127,7 @@
 
 
 GALLERY_PARAGRAPH_TYPE = 'Gallery'
+GALLERY_PARAGRAPH_NAME = _("Medias gallery")
 
 
 class IGalleryParagraph(IGallery, IBaseParagraph):
--- a/src/pyams_content/component/gallery/paragraph.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/gallery/paragraph.py	Wed Jun 06 11:44:46 2018 +0200
@@ -16,7 +16,7 @@
 # import standard library
 
 # import interfaces
-from pyams_content.component.gallery.interfaces import IGalleryParagraph, GALLERY_PARAGRAPH_TYPE
+from pyams_content.component.gallery.interfaces import IGalleryParagraph, GALLERY_PARAGRAPH_TYPE, GALLERY_PARAGRAPH_NAME
 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
@@ -29,22 +29,20 @@
 from pyams_utils.traversing import get_parent
 from zope.interface import implementer
 
-from pyams_content import _
-
 
 @implementer(IGalleryParagraph)
 class Gallery(BaseGallery, BaseParagraph):
     """Gallery class"""
 
     icon_class = 'fa-picture-o'
-    icon_hint = _("Medias gallery")
+    icon_hint = GALLERY_PARAGRAPH_NAME
 
 
 @utility_config(name=GALLERY_PARAGRAPH_TYPE, provides=IParagraphFactory)
 class GalleryFactory(BaseParagraphFactory):
     """Gallery paragraph factory"""
 
-    name = _("Medias gallery")
+    name = GALLERY_PARAGRAPH_NAME
     content_type = Gallery
 
 
--- a/src/pyams_content/component/illustration/interfaces/__init__.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/illustration/interfaces/__init__.py	Wed Jun 06 11:44:46 2018 +0200
@@ -68,6 +68,7 @@
 
 
 ILLUSTRATION_PARAGRAPH_TYPE = 'Illustration'
+ILLUSTRATION_PARAGRAPH_NAME = _("Illustration")
 
 
 class IIllustrationParagraph(IIllustration, IBaseParagraph):
--- a/src/pyams_content/component/illustration/paragraph.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/illustration/paragraph.py	Wed Jun 06 11:44:46 2018 +0200
@@ -16,7 +16,8 @@
 # import standard library
 
 # import interfaces
-from pyams_content.component.illustration.interfaces import IIllustrationParagraph, ILLUSTRATION_PARAGRAPH_TYPE
+from pyams_content.component.illustration.interfaces import IIllustrationParagraph, ILLUSTRATION_PARAGRAPH_TYPE, \
+    ILLUSTRATION_PARAGRAPH_NAME
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
 from pyams_content.features.checker.interfaces import IContentChecker
 from pyams_i18n.interfaces import II18n
@@ -29,22 +30,20 @@
 from pyams_utils.request import check_request
 from zope.interface import implementer
 
-from pyams_content import _
-
 
 @implementer(IIllustrationParagraph)
 class Illustration(BaseIllustration, BaseParagraph):
     """Illustration class"""
 
     icon_class = 'fa-file-image-o'
-    icon_hint = _("Illustration")
+    icon_hint = ILLUSTRATION_PARAGRAPH_NAME
 
 
 @utility_config(name=ILLUSTRATION_PARAGRAPH_TYPE, provides=IParagraphFactory)
 class IllustrationFactory(BaseParagraphFactory):
     """Illustration paragraph factory"""
 
-    name = _("Illustration")
+    name = ILLUSTRATION_PARAGRAPH_NAME
     content_type = Illustration
 
 
--- a/src/pyams_content/component/paragraph/contact.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/contact.py	Wed Jun 06 11:44:46 2018 +0200
@@ -18,7 +18,7 @@
 # import interfaces
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
 from pyams_content.component.paragraph.interfaces.contact import have_gis, IContactParagraph, CONTACT_PARAGRAPH_TYPE, \
-    CONTACT_PARAGRAPH_RENDERERS
+    CONTACT_PARAGRAPH_RENDERERS, CONTACT_PARAGRAPH_NAME
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
 from pyams_file.interfaces import IImage, IResponsiveImage
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
@@ -35,8 +35,6 @@
 from zope.interface import implementer, alsoProvides
 from zope.schema.fieldproperty import FieldProperty
 
-from pyams_content import _
-
 
 @implementer(IContactParagraph)
 @factory_config(provided=IContactParagraph)
@@ -44,7 +42,7 @@
     """Contact paragraph"""
 
     icon_class = 'fa-id-card-o'
-    icon_hint = _("Contact card")
+    icon_hint = CONTACT_PARAGRAPH_NAME
 
     name = FieldProperty(IContactParagraph['name'])
     charge = FieldProperty(IContactParagraph['charge'])
@@ -73,7 +71,7 @@
 class ContactParagraphFactory(BaseParagraphFactory):
     """Contact paragraph factory"""
 
-    name = _("Contact card")
+    name = CONTACT_PARAGRAPH_NAME
     content_type = ContactParagraph
     secondary_menu = True
 
--- a/src/pyams_content/component/paragraph/frame.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/frame.py	Wed Jun 06 11:44:46 2018 +0200
@@ -21,7 +21,7 @@
 from pyams_content.component.links.interfaces import ILinkContainerTarget
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
 from pyams_content.component.paragraph.interfaces.frame import IFrameParagraph, FRAME_PARAGRAPH_TYPE, \
-    FRAME_PARAGRAPH_RENDERERS
+    FRAME_PARAGRAPH_RENDERERS, FRAME_PARAGRAPH_NAME
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
 
@@ -36,8 +36,6 @@
 from zope.interface import implementer
 from zope.schema.fieldproperty import FieldProperty
 
-from pyams_content import _
-
 
 #
 # Frame paragraph
@@ -49,7 +47,7 @@
     """Framed text paragraph"""
 
     icon_class = 'fa-list-alt'
-    icon_hint = _("Framed text")
+    icon_hint = FRAME_PARAGRAPH_NAME
 
     body = FieldProperty(IFrameParagraph['body'])
     renderer = FieldProperty(IFrameParagraph['renderer'])
@@ -59,7 +57,7 @@
 class FrameParagraphFactory(BaseParagraphFactory):
     """Framed text paragraph factory"""
 
-    name = _("Framed text paragraph")
+    name = FRAME_PARAGRAPH_NAME
     content_type = FrameParagraph
     secondary_menu = True
 
--- a/src/pyams_content/component/paragraph/header.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/header.py	Wed Jun 06 11:44:46 2018 +0200
@@ -18,7 +18,7 @@
 # import interfaces
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
 from pyams_content.component.paragraph.interfaces.header import IHeaderParagraph, HEADER_PARAGRAPH_TYPE, \
-    HEADER_PARAGRAPH_RENDERERS
+    HEADER_PARAGRAPH_RENDERERS, HEADER_PARAGRAPH_NAME
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
 
@@ -34,8 +34,6 @@
 from zope.interface import implementer
 from zope.schema.fieldproperty import FieldProperty
 
-from pyams_content import _
-
 
 @implementer(IHeaderParagraph)
 @factory_config(provided=IHeaderParagraph)
@@ -43,7 +41,7 @@
     """Header paragraph"""
 
     icon_class = 'fa-download fa-rotate-180'
-    icon_hint = _("Header")
+    icon_hint = HEADER_PARAGRAPH_NAME
 
     @property
     def title(self):
@@ -58,7 +56,7 @@
 class HeaderParagraphFactory(BaseParagraphFactory):
     """Header paragraph factory"""
 
-    name = _("Header paragraph")
+    name = HEADER_PARAGRAPH_NAME
     content_type = HeaderParagraph
 
 
--- a/src/pyams_content/component/paragraph/html.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/html.py	Wed Jun 06 11:44:46 2018 +0200
@@ -22,8 +22,9 @@
 from pyams_content.component.illustration.interfaces import IIllustrationTarget
 from pyams_content.component.links.interfaces import ILinkContainerTarget, IInternalLink, IExternalLink, IMailtoLink
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
-from pyams_content.component.paragraph.interfaces.html import RAW_PARAGRAPH_TYPE, IRawParagraph, HTML_PARAGRAPH_TYPE, \
-    IHTMLParagraph, RAW_PARAGRAPH_RENDERERS, HTML_PARAGRAPH_RENDERERS
+from pyams_content.component.paragraph.interfaces.html import \
+    RAW_PARAGRAPH_TYPE, RAW_PARAGRAPH_NAME, RAW_PARAGRAPH_RENDERERS, IRawParagraph, \
+    HTML_PARAGRAPH_TYPE, HTML_PARAGRAPH_NAME, HTML_PARAGRAPH_RENDERERS, IHTMLParagraph
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
 from pyams_sequence.interfaces import ISequentialIntIds
@@ -47,8 +48,6 @@
 from zope.lifecycleevent import ObjectCreatedEvent
 from zope.schema.fieldproperty import FieldProperty
 
-from pyams_content import _
-
 
 #
 # Raw HTML paragraph
@@ -60,7 +59,7 @@
     """Raw HTML paragraph"""
 
     icon_class = 'fa-code'
-    icon_hint = _("Raw HTML ")
+    icon_hint = RAW_PARAGRAPH_NAME
 
     body = FieldProperty(IRawParagraph['body'])
     renderer = FieldProperty(IRawParagraph['renderer'])
@@ -70,7 +69,7 @@
 class RawParagraphFactory(BaseParagraphFactory):
     """Raw paragraph factory"""
 
-    name = _("Raw HTML paragraph")
+    name = RAW_PARAGRAPH_NAME
     content_type = RawParagraph
 
 
@@ -116,7 +115,7 @@
     """HTML paragraph"""
 
     icon_class = 'fa-font'
-    icon_hint = _("Rich text")
+    icon_hint = HTML_PARAGRAPH_NAME
 
     body = FieldProperty(IHTMLParagraph['body'])
     renderer = FieldProperty(IHTMLParagraph['renderer'])
@@ -126,7 +125,7 @@
 class HTMLParagraphFactory(BaseParagraphFactory):
     """HTML paragraph factory"""
 
-    name = _("Rich text paragraph")
+    name = HTML_PARAGRAPH_NAME
     content_type = HTMLParagraph
 
 
--- a/src/pyams_content/component/paragraph/interfaces/contact.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/contact.py	Wed Jun 06 11:44:46 2018 +0200
@@ -40,6 +40,7 @@
 #
 
 CONTACT_PARAGRAPH_TYPE = 'Contact'
+CONTACT_PARAGRAPH_NAME = _("Contact card")
 CONTACT_PARAGRAPH_RENDERERS = 'PyAMS.paragraph.contact.renderers'
 
 
--- a/src/pyams_content/component/paragraph/interfaces/frame.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/frame.py	Wed Jun 06 11:44:46 2018 +0200
@@ -30,6 +30,7 @@
 #
 
 FRAME_PARAGRAPH_TYPE = 'FramedText'
+FRAME_PARAGRAPH_NAME = _("Framed text")
 FRAME_PARAGRAPH_RENDERERS = 'PyAMS.paragraph.text.renderers'
 
 
--- a/src/pyams_content/component/paragraph/interfaces/header.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/header.py	Wed Jun 06 11:44:46 2018 +0200
@@ -30,6 +30,7 @@
 #
 
 HEADER_PARAGRAPH_TYPE = 'Header'
+HEADER_PARAGRAPH_NAME = _("Header")
 HEADER_PARAGRAPH_RENDERERS = 'PyAMS.paragraph.header.renderers'
 
 
--- a/src/pyams_content/component/paragraph/interfaces/html.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/html.py	Wed Jun 06 11:44:46 2018 +0200
@@ -30,6 +30,7 @@
 #
 
 RAW_PARAGRAPH_TYPE = 'raw'
+RAW_PARAGRAPH_NAME = _("Raw HTML ")
 RAW_PARAGRAPH_RENDERERS = 'PyAMS.paragraph.raw.renderers'
 
 
@@ -52,6 +53,7 @@
 #
 
 HTML_PARAGRAPH_TYPE = 'HTML'
+HTML_PARAGRAPH_NAME = _("Rich text")
 HTML_PARAGRAPH_RENDERERS = 'PyAMS.paragraph.html.renderers'
 
 
--- a/src/pyams_content/component/paragraph/interfaces/keynumber.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/keynumber.py	Wed Jun 06 11:44:46 2018 +0200
@@ -73,6 +73,7 @@
 
 
 KEYNUMBER_PARAGRAPH_TYPE = 'KeyNumbers'
+KEYNUMBER_PARAGRAPH_NAME = _("Key numbers")
 KEYNUMBER_PARAGRAPH_RENDERERS = 'PyAMS.keynumbers.renderers'
 
 
--- a/src/pyams_content/component/paragraph/interfaces/keypoint.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/keypoint.py	Wed Jun 06 11:44:46 2018 +0200
@@ -30,6 +30,7 @@
 #
 
 KEYPOINTS_PARAGRAPH_TYPE = 'Keypoints'
+KEYPOINTS_PARAGRAPH_NAME = _("Key points")
 KEYPOINTS_PARAGRAPH_RENDERERS = 'PyAMS.paragraph.keypoint.renderers'
 
 
--- a/src/pyams_content/component/paragraph/interfaces/milestone.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/milestone.py	Wed Jun 06 11:44:46 2018 +0200
@@ -73,6 +73,7 @@
 
 
 MILESTONE_PARAGRAPH_TYPE = 'Milestones'
+MILESTONE_PARAGRAPH_NAME = _("Milestones")
 MILESTONE_PARAGRAPH_RENDERERS = 'PyAMS.milestones.renderers'
 
 
--- a/src/pyams_content/component/paragraph/interfaces/pictogram.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/pictogram.py	Wed Jun 06 11:44:46 2018 +0200
@@ -77,6 +77,7 @@
 
 
 PICTOGRAM_PARAGRAPH_TYPE = 'Pictograms'
+PICTOGRAM_PARAGRAPH_NAME = _("Pictograms")
 PICTOGRAM_PARAGRAPH_RENDERERS = 'MyAMS.pictograms.renderers'
 
 
--- a/src/pyams_content/component/paragraph/interfaces/verbatim.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/verbatim.py	Wed Jun 06 11:44:46 2018 +0200
@@ -30,6 +30,7 @@
 #
 
 VERBATIM_PARAGRAPH_TYPE = 'Verbatim'
+VERBATIM_PARAGRAPH_NAME = _("Verbatim")
 VERBATIM_PARAGRAPH_RENDERERS = 'PyAMS.paragraph.verbatim.renderers'
 
 
--- a/src/pyams_content/component/paragraph/keynumber.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/keynumber.py	Wed Jun 06 11:44:46 2018 +0200
@@ -20,7 +20,7 @@
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
 from pyams_content.component.paragraph.interfaces.keynumber import IKeyNumber, IKeyNumberContainer, \
     IKeyNumberContainerTarget, KEYNUMBER_CONTAINER_KEY, IKeyNumberParagraph, KEYNUMBER_PARAGRAPH_TYPE, \
-    KEYNUMBER_PARAGRAPH_RENDERERS
+    KEYNUMBER_PARAGRAPH_RENDERERS, KEYNUMBER_PARAGRAPH_NAME
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
 from pyams_form.interfaces.form import IFormContextPermissionChecker
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
@@ -47,8 +47,6 @@
 from zope.location import locate
 from zope.schema.fieldproperty import FieldProperty
 
-from pyams_content import _
-
 
 #
 # Key number class and adapters
@@ -180,7 +178,7 @@
 class KeyNumberContainerContentChecker(BaseContentChecker):
     """Key numbers container content checker"""
 
-    label = _("Key numbers")
+    label = KEYNUMBER_PARAGRAPH_NAME
     sep = '\n'
     weight = 200
 
@@ -204,7 +202,7 @@
     """Key numbers paragraph"""
 
     icon_class = 'fa-list-ol'
-    icon_hint = _("Key numbers")
+    icon_hint = KEYNUMBER_PARAGRAPH_NAME
 
     renderer = FieldProperty(IKeyNumberParagraph['renderer'])
 
@@ -213,7 +211,7 @@
 class KeyNumberParagraphFactory(BaseParagraphFactory):
     """Key numbers paragraph factory"""
 
-    name = _("Key numbers paragraph")
+    name = KEYNUMBER_PARAGRAPH_NAME
     content_type = KeyNumberParagraph
 
 
--- a/src/pyams_content/component/paragraph/keypoint.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/keypoint.py	Wed Jun 06 11:44:46 2018 +0200
@@ -18,7 +18,7 @@
 # import interfaces
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
 from pyams_content.component.paragraph.interfaces.keypoint import IKeypointsParagraph, KEYPOINTS_PARAGRAPH_TYPE, \
-    KEYPOINTS_PARAGRAPH_RENDERERS
+    KEYPOINTS_PARAGRAPH_RENDERERS, KEYPOINTS_PARAGRAPH_NAME
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
 
@@ -34,8 +34,6 @@
 from zope.interface import implementer
 from zope.schema.fieldproperty import FieldProperty
 
-from pyams_content import _
-
 
 @implementer(IKeypointsParagraph)
 @factory_config(provided=IKeypointsParagraph)
@@ -43,7 +41,7 @@
     """Key points paragraph"""
 
     icon_class = 'fa-key'
-    icon_hint = _("Key points")
+    icon_hint = KEYPOINTS_PARAGRAPH_NAME
 
     @property
     def title(self):
@@ -58,7 +56,7 @@
 class KeypointsParagraphFactory(BaseParagraphFactory):
     """Key points paragraph factory"""
 
-    name = _("Key points paragraph")
+    name = KEYPOINTS_PARAGRAPH_NAME
     content_type = KeypointsParagraph
     secondary_menu = True
 
--- a/src/pyams_content/component/paragraph/milestone.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/milestone.py	Wed Jun 06 11:44:46 2018 +0200
@@ -21,7 +21,7 @@
     IParagraphFactory
 from pyams_content.component.paragraph.interfaces.milestone import IMilestone, IMilestoneContainer, \
     IMilestoneContainerTarget, MILESTONE_CONTAINER_KEY, IMilestoneParagraph, MILESTONE_PARAGRAPH_TYPE, \
-    MILESTONE_PARAGRAPH_RENDERERS
+    MILESTONE_PARAGRAPH_RENDERERS, MILESTONE_PARAGRAPH_NAME
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE, ERROR_VALUE
 from pyams_form.interfaces.form import IFormContextPermissionChecker
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
@@ -196,7 +196,7 @@
 class MilestoneContainerContentChecker(BaseContentChecker):
     """Milestones container content checker"""
 
-    label = _("Milestones")
+    label = MILESTONE_PARAGRAPH_NAME
     sep = '\n'
     weight = 200
 
@@ -219,7 +219,7 @@
     """Milestones paragraph"""
 
     icon_class = 'fa-arrows-h'
-    icon_hint = _("Milestones")
+    icon_hint = MILESTONE_PARAGRAPH_NAME
 
     renderer = FieldProperty(IMilestoneParagraph['renderer'])
 
@@ -228,7 +228,7 @@
 class MilestoneParagraphFactory(BaseParagraphFactory):
     """Milestones paragraph factory"""
 
-    name = _("Milestones paragraph")
+    name = MILESTONE_PARAGRAPH_NAME
     content_type = MilestoneParagraph
 
 
--- a/src/pyams_content/component/paragraph/pictogram.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/pictogram.py	Wed Jun 06 11:44:46 2018 +0200
@@ -21,7 +21,7 @@
 from pyams_content.component.paragraph import IParagraphFactory
 from pyams_content.component.paragraph.interfaces.pictogram import IPictogramItem, IPictogramContainerTarget, \
     IPictogramContainer, PICTOGRAM_CONTAINER_KEY, IPictogramParagraph, PICTOGRAM_PARAGRAPH_TYPE, \
-    PICTOGRAM_PARAGRAPH_RENDERERS
+    PICTOGRAM_PARAGRAPH_RENDERERS, PICTOGRAM_PARAGRAPH_NAME
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE, ERROR_VALUE
 from pyams_content.reference.pictograms.interfaces import IPictogramTable
 from pyams_form.interfaces.form import IFormContextPermissionChecker
@@ -186,7 +186,7 @@
 class PictogramContainerContentChecker(BaseContentChecker):
     """Pictogram container content checker"""
 
-    label = _("Pictograms")
+    label = PICTOGRAM_PARAGRAPH_NAME
     sep = '\n'
     weight = 210
 
@@ -209,7 +209,7 @@
     """Pictograms paragraph"""
 
     icon_class = 'fa-linode'
-    icon_hint = _("Pictograms")
+    icon_hint = PICTOGRAM_PARAGRAPH_NAME
 
     renderer = FieldProperty(IPictogramParagraph['renderer'])
 
@@ -218,7 +218,7 @@
 class PictogramParagraphFactory(BaseParagraphFactory):
     """Pictograms paragraph factory"""
 
-    name = _("Pictograms paragraph")
+    name = PICTOGRAM_PARAGRAPH_NAME
     content_type = PictogramParagraph
 
 
--- a/src/pyams_content/component/paragraph/verbatim.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/paragraph/verbatim.py	Wed Jun 06 11:44:46 2018 +0200
@@ -19,7 +19,7 @@
 from pyams_content.component.illustration.interfaces import IIllustrationTarget
 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_RENDERERS, VERBATIM_PARAGRAPH_NAME
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
 
@@ -34,8 +34,6 @@
 from zope.interface import implementer
 from zope.schema.fieldproperty import FieldProperty
 
-from pyams_content import _
-
 
 #
 # Frame paragraph
@@ -47,7 +45,7 @@
     """Verbatim paragraph"""
 
     icon_class = 'fa-quote-right'
-    icon_hint = _("Verbatim")
+    icon_hint = VERBATIM_PARAGRAPH_NAME
 
     quote = FieldProperty(IVerbatimParagraph['quote'])
     author = FieldProperty(IVerbatimParagraph['author'])
@@ -59,7 +57,7 @@
 class VerbatimParagraphFactory(BaseParagraphFactory):
     """Verbatim paragraph factory"""
 
-    name = _("Verbatim paragraph")
+    name = VERBATIM_PARAGRAPH_NAME
     content_type = VerbatimParagraph
     secondary_menu = True
 
--- a/src/pyams_content/component/video/interfaces/__init__.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/video/interfaces/__init__.py	Wed Jun 06 11:44:46 2018 +0200
@@ -65,6 +65,7 @@
 
 
 EXTERNAL_VIDEO_PARAGRAPH_TYPE = 'External video'
+EXTERNAL_VIDEO_PARAGRAPH_NAME = _("External video")
 EXTERNAL_VIDEO_PARAGRAPH_RENDERERS = 'PyAMS.paragraph.video.renderers'
 
 
--- a/src/pyams_content/component/video/paragraph.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/component/video/paragraph.py	Wed Jun 06 11:44:46 2018 +0200
@@ -18,7 +18,7 @@
 # import interfaces
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
 from pyams_content.component.video.interfaces import IExternalVideoParagraph, EXTERNAL_VIDEO_PARAGRAPH_TYPE, \
-    EXTERNAL_VIDEO_PARAGRAPH_RENDERERS
+    EXTERNAL_VIDEO_PARAGRAPH_RENDERERS, EXTERNAL_VIDEO_PARAGRAPH_NAME
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
 
@@ -35,8 +35,6 @@
 from zope.interface import implementer
 from zope.schema.fieldproperty import FieldProperty
 
-from pyams_content import _
-
 
 @implementer(IExternalVideoParagraph)
 @factory_config(provided=IExternalVideoParagraph)
@@ -44,7 +42,7 @@
     """External video paragraph"""
 
     icon_class = 'fa-youtube-play'
-    icon_hint = _("External video")
+    icon_hint = EXTERNAL_VIDEO_PARAGRAPH_NAME
 
     body = FieldProperty(IExternalVideoParagraph['body'])
     renderer = FieldProperty(IExternalVideoParagraph['renderer'])
@@ -54,7 +52,7 @@
 class ExternalVideoParagraphFactory(BaseParagraphFactory):
     """External video paragraph factory"""
 
-    name = _("External video")
+    name = EXTERNAL_VIDEO_PARAGRAPH_NAME
     content_type = ExternalVideoParagraph
 
 
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	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po	Wed Jun 06 11:44:46 2018 +0200
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-06-06 11:02+0200\n"
+"POT-Creation-Date: 2018-06-06 11:42+0200\n"
 "PO-Revision-Date: 2015-09-10 10:42+0200\n"
 "Last-Translator: Thierry Florac <tflorac@ulthar.net>\n"
 "Language-Team: French\n"
@@ -76,11 +76,6 @@
 msgid "Guest user (role)"
 msgstr "Invité (rôle)"
 
-#: src/pyams_content/component/gallery/paragraph.py:40
-#: src/pyams_content/component/gallery/paragraph.py:47
-msgid "Medias gallery"
-msgstr "Galerie de médias"
-
 #: src/pyams_content/component/gallery/__init__.py:154
 msgid "Gallery"
 msgstr "Galerie de médias"
@@ -143,7 +138,7 @@
 #: src/pyams_content/component/illustration/interfaces/__init__.py:56
 #: src/pyams_content/component/paragraph/interfaces/video.py:48
 #: src/pyams_content/component/paragraph/interfaces/audio.py:48
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:43
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:44
 #: src/pyams_content/component/video/interfaces/__init__.py:52
 msgid "Author"
 msgstr "Auteur"
@@ -180,15 +175,19 @@
 msgid "Zoom image"
 msgstr "Agrandir l'image"
 
+#: src/pyams_content/component/gallery/interfaces/__init__.py:130
+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:41
-#: src/pyams_content/component/illustration/interfaces/__init__.py:76
+#: src/pyams_content/component/illustration/interfaces/__init__.py:77
 msgid "Image or video data"
 msgstr "Fichier (image ou vidéo)"
 
 #: src/pyams_content/component/gallery/interfaces/__init__.py:48
 #: src/pyams_content/component/illustration/interfaces/__init__.py:42
-#: src/pyams_content/component/illustration/interfaces/__init__.py:77
+#: src/pyams_content/component/illustration/interfaces/__init__.py:78
 msgid "Image or video content"
 msgstr ""
 "Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu..."
@@ -472,11 +471,10 @@
 msgstr ""
 "Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
 
-#: src/pyams_content/component/illustration/paragraph.py:40
-#: src/pyams_content/component/illustration/paragraph.py:47
 #: src/pyams_content/component/illustration/__init__.py:132
 #: src/pyams_content/component/illustration/zmi/__init__.py:54
 #: src/pyams_content/component/illustration/zmi/__init__.py:81
+#: src/pyams_content/component/illustration/interfaces/__init__.py:71
 msgid "Illustration"
 msgstr "Illustration"
 
@@ -520,16 +518,6 @@
 "><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:199
-#: src/pyams_content/component/paragraph/milestone.py:222
-#: src/pyams_content/component/paragraph/zmi/milestone.py:303
-msgid "Milestones"
-msgstr "Chronologie"
-
-#: src/pyams_content/component/paragraph/milestone.py:231
-msgid "Milestones paragraph"
-msgstr "Chronologie"
-
 #: src/pyams_content/component/paragraph/milestone.py:140
 msgid "Selected paragraph is missing"
 msgstr "le bloc sélectionné est introuvable"
@@ -538,15 +526,6 @@
 msgid "Selected paragraph is not visible"
 msgstr "le bloc sélectionné n'est pas visible"
 
-#: src/pyams_content/component/paragraph/keypoint.py:46
-#: src/pyams_content/component/paragraph/interfaces/keypoint.py:39
-msgid "Key points"
-msgstr "Points clés"
-
-#: src/pyams_content/component/paragraph/keypoint.py:61
-msgid "Key points paragraph"
-msgstr "Points clés"
-
 #: src/pyams_content/component/paragraph/container.py:73
 msgid "Paragraphs"
 msgstr "Blocs de contenu"
@@ -555,78 +534,10 @@
 msgid "no visible paragraph"
 msgstr "aucun bloc de contenu visible"
 
-#: src/pyams_content/component/paragraph/pictogram.py:189
-#: src/pyams_content/component/paragraph/pictogram.py:212
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:305
-msgid "Pictograms"
-msgstr "Pictogrammes"
-
-#: src/pyams_content/component/paragraph/pictogram.py:221
-msgid "Pictograms paragraph"
-msgstr "Pictogrammes"
-
 #: src/pyams_content/component/paragraph/pictogram.py:134
 msgid "Selected pictogram is missing"
 msgstr "le pictogramme sélectionné est introuvable"
 
-#: src/pyams_content/component/paragraph/keynumber.py:183
-#: src/pyams_content/component/paragraph/keynumber.py:207
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:282
-msgid "Key numbers"
-msgstr "Chiffres-clés"
-
-#: src/pyams_content/component/paragraph/keynumber.py:216
-msgid "Key numbers paragraph"
-msgstr "Chiffres-clés"
-
-#: src/pyams_content/component/paragraph/frame.py:52
-msgid "Framed text"
-msgstr "Encadré"
-
-#: src/pyams_content/component/paragraph/frame.py:62
-msgid "Framed text paragraph"
-msgstr "Encadré"
-
-#: src/pyams_content/component/paragraph/verbatim.py:50
-msgid "Verbatim"
-msgstr "Verbatim"
-
-#: src/pyams_content/component/paragraph/verbatim.py:62
-msgid "Verbatim paragraph"
-msgstr "Verbatim"
-
-#: src/pyams_content/component/paragraph/html.py:63
-msgid "Raw HTML "
-msgstr "Code HTML"
-
-#: src/pyams_content/component/paragraph/html.py:73
-msgid "Raw HTML paragraph"
-msgstr "Code HTML"
-
-#: src/pyams_content/component/paragraph/html.py:119
-msgid "Rich text"
-msgstr "Texte enrichi"
-
-#: src/pyams_content/component/paragraph/html.py:129
-msgid "Rich text paragraph"
-msgstr "Texte enrichi"
-
-#: src/pyams_content/component/paragraph/contact.py:47
-#: src/pyams_content/component/paragraph/contact.py:76
-msgid "Contact card"
-msgstr "Fiche contact"
-
-#: src/pyams_content/component/paragraph/header.py:46
-#: src/pyams_content/component/paragraph/interfaces/header.py:39
-#: src/pyams_content/features/alert/interfaces.py:65
-#: src/pyams_content/features/alert/zmi/container.py:158
-msgid "Header"
-msgstr "Chapô"
-
-#: src/pyams_content/component/paragraph/header.py:61
-msgid "Header paragraph"
-msgstr "Chapô"
-
 #: src/pyams_content/component/paragraph/zmi/milestone.py:77
 msgid "Milestones..."
 msgstr "Chronologie"
@@ -649,6 +560,11 @@
 msgid "Anchor"
 msgstr "Ancre"
 
+#: src/pyams_content/component/paragraph/zmi/milestone.py:303
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:76
+msgid "Milestones"
+msgstr "Chronologie"
+
 #: src/pyams_content/component/paragraph/zmi/milestone.py:318
 msgid "Add milestone"
 msgstr "Ajouter un jalon"
@@ -823,6 +739,11 @@
 msgid "Associated text"
 msgstr "Texte associé"
 
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:305
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:80
+msgid "Pictograms"
+msgstr "Pictogrammes"
+
 #: src/pyams_content/component/paragraph/zmi/pictogram.py:320
 #: src/pyams_content/reference/pictograms/zmi/__init__.py:62
 msgid "Add pictogram"
@@ -893,6 +814,11 @@
 msgid "key-number-label"
 msgstr "En-tête"
 
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:282
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:76
+msgid "Key numbers"
+msgstr "Chiffres-clés"
+
 #: src/pyams_content/component/paragraph/zmi/keynumber.py:297
 msgid "Add keynumber"
 msgstr "Ajouter un chiffre-clé"
@@ -1010,31 +936,36 @@
 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
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:83
 msgid "Milestones template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:83
+#: 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:43
+#: src/pyams_content/component/paragraph/interfaces/keypoint.py:44
 msgid "Presentation template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/paragraph/interfaces/keypoint.py:44
-#: src/pyams_content/component/paragraph/interfaces/frame.py:43
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:52
-#: src/pyams_content/component/paragraph/interfaces/html.py:45
-#: src/pyams_content/component/paragraph/interfaces/html.py:65
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:99
-#: src/pyams_content/shared/logo/interfaces/__init__.py:75
+#: 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:100
+#: src/pyams_content/shared/logo/interfaces/__init__.py:76
 msgid "Presentation template used for this paragraph"
 msgstr "Mode de rendu utilisé par ce bloc de contenu"
 
@@ -1066,8 +997,8 @@
 
 #: src/pyams_content/component/paragraph/interfaces/video.py:41
 #: src/pyams_content/component/paragraph/interfaces/audio.py:41
-#: src/pyams_content/component/paragraph/interfaces/html.py:61
-#: src/pyams_content/component/video/interfaces/__init__.py:74
+#: src/pyams_content/component/paragraph/interfaces/html.py:63
+#: src/pyams_content/component/video/interfaces/__init__.py:75
 msgid "Body"
 msgstr "Contenu HTML"
 
@@ -1077,12 +1008,12 @@
 "Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
 
 #: src/pyams_content/component/paragraph/interfaces/video.py:56
-#: src/pyams_content/component/video/interfaces/__init__.py:77
+#: src/pyams_content/component/video/interfaces/__init__.py:78
 msgid "Video template"
 msgstr "Mode de rendu"
 
 #: src/pyams_content/component/paragraph/interfaces/video.py:57
-#: src/pyams_content/component/video/interfaces/__init__.py:78
+#: src/pyams_content/component/video/interfaces/__init__.py:79
 msgid "Presentation template used for this video"
 msgstr "Mode de rendu utilisé par cette vidéo"
 
@@ -1117,11 +1048,11 @@
 msgid "Additional text associated to this pictogram"
 msgstr "Texte complémentaire associé à ce pictogramme"
 
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:86
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:87
 msgid "Pictograms template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:87
+#: 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"
 
@@ -1157,52 +1088,68 @@
 "La présentation de cette information peut varier en fonction du mode de "
 "rendu choisi"
 
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:82
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:83
 msgid "Key numbers template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:83
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:84
 msgid "Presentation template used for key numbers"
 msgstr "Modèle de présentation utilisé par ce bloc de contenu"
 
-#: src/pyams_content/component/paragraph/interfaces/frame.py:39
+#: 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:42
+#: src/pyams_content/component/paragraph/interfaces/frame.py:43
 msgid "Text template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:39
+#: 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:40
+#: 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:44
+#: 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:47
-#: src/pyams_content/component/paragraph/interfaces/contact.py:53
-msgid "In charge of"
-msgstr "Fonction"
-
 #: 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:51
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:52
 msgid "Verbatim template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/paragraph/interfaces/html.py:39
+#: 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:40
+#: src/pyams_content/component/paragraph/interfaces/html.py:41
 msgid ""
 "This HTML code will be used 'as is', without any transformation. Use with "
 "care!!"
@@ -1210,76 +1157,87 @@
 "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:44
+#: 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:64
+#: src/pyams_content/component/paragraph/interfaces/html.py:66
 msgid "Body template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/paragraph/interfaces/contact.py:49
+#: 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:50
+#: 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:54
+#: 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:57
+#: src/pyams_content/component/paragraph/interfaces/contact.py:58
 msgid "Email address"
 msgstr "Adresse de messagerie"
 
-#: src/pyams_content/component/paragraph/interfaces/contact.py:58
+#: 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:61
-msgid "Contact form"
-msgstr "Formulaire de contact"
-
 #: 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:66
+#: src/pyams_content/component/paragraph/interfaces/contact.py:67
 msgid "Photo"
 msgstr "Photo"
 
-#: src/pyams_content/component/paragraph/interfaces/contact.py:67
+#: 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:75
+#: src/pyams_content/component/paragraph/interfaces/contact.py:76
 msgid "Address"
 msgstr "Adresse"
 
-#: src/pyams_content/component/paragraph/interfaces/contact.py:78
+#: src/pyams_content/component/paragraph/interfaces/contact.py:79
 msgid "Contact template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/paragraph/interfaces/contact.py:79
+#: 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:71
+#: src/pyams_content/component/paragraph/interfaces/contact.py:72
 msgid "GPS location"
 msgstr "Position GPS"
 
-#: src/pyams_content/component/paragraph/interfaces/contact.py:72
+#: 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:42
+#: src/pyams_content/component/paragraph/interfaces/header.py:33
+#: src/pyams_content/component/paragraph/interfaces/header.py:40
+#: src/pyams_content/features/alert/interfaces.py:65
+#: src/pyams_content/features/alert/zmi/container.py:158
+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:43
+#: 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ô"
@@ -1311,13 +1269,9 @@
 msgid "Selected themes"
 msgstr "Thèmes sélectionnés"
 
-#: src/pyams_content/component/association/paragraph.py:48
-#: src/pyams_content/component/association/paragraph.py:57
-msgid "Associations paragraph"
-msgstr "Liens et pièces jointes"
-
 #: src/pyams_content/component/association/container.py:88
 #: src/pyams_content/component/association/zmi/__init__.py:296
+#: src/pyams_content/component/association/interfaces/__init__.py:86
 msgid "Associations"
 msgstr "Liens et pièces jointes"
 
@@ -1359,11 +1313,11 @@
 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:92
+#: src/pyams_content/component/association/interfaces/__init__.py:93
 msgid "Associations template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/association/interfaces/__init__.py:93
+#: src/pyams_content/component/association/interfaces/__init__.py:94
 msgid "Presentation template used for associations"
 msgstr "Modèle de présentation utilisé par ce bloc de contenu"
 
@@ -1485,9 +1439,8 @@
 "Nom de la boîte aux lettres, tel qu'il sera affiché dans l'application de "
 "messagerie."
 
-#: src/pyams_content/component/video/paragraph.py:47
-#: src/pyams_content/component/video/paragraph.py:57
 #: src/pyams_content/component/video/__init__.py:73
+#: src/pyams_content/component/video/interfaces/__init__.py:68
 msgid "External video"
 msgstr "Vidéo externe"
 
@@ -3570,12 +3523,6 @@
 msgid "Other terms"
 msgstr "Autres thèmes"
 
-#: src/pyams_content/shared/imagemap/paragraph.py:47
-#: src/pyams_content/shared/imagemap/paragraph.py:60
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:35
-msgid "Image map"
-msgstr "Image cliquable"
-
 #: src/pyams_content/shared/imagemap/paragraph.py:91
 msgid "no selected image map"
 msgstr "aucune image cliquable sélectionnée"
@@ -3675,6 +3622,11 @@
 msgid "Edit image map properties"
 msgstr "Propriétés de l'image"
 
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:35
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:88
+msgid "Image map"
+msgstr "Image cliquable"
+
 #: src/pyams_content/shared/imagemap/interfaces/__init__.py:50
 msgid "Internal or external link associated with this map area"
 msgstr "Lien interne ou externe associé à cette zone"
@@ -3699,18 +3651,18 @@
 msgid "List of defined map areas"
 msgstr "Liste des zones cliquables définies sur l'image"
 
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:94
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:95
 #: src/pyams_content/features/alert/interfaces.py:73
 msgid "Internal reference"
 msgstr "Référence interne"
 
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:95
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:96
 msgid "Reference to image map object"
 msgstr ""
 "Référence interne de l'image cliquable. Vous pouvez la rechercher par des "
 "mots de son titre, ou par son numéro interne (précédé d'un '+')."
 
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:98
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:99
 msgid "Image map template"
 msgstr "Mode de rendu"
 
@@ -3900,21 +3852,16 @@
 msgid "If 'no', link is not visible"
 msgstr "Si 'non', le lien ne sera pas visible"
 
-#: src/pyams_content/shared/logo/paragraph.py:46
-#: src/pyams_content/shared/logo/paragraph.py:63
-msgid "Logos"
-msgstr "Logos"
-
-#: src/pyams_content/shared/logo/paragraph.py:94
+#: src/pyams_content/shared/logo/paragraph.py:95
 msgid "no selected logo"
 msgstr "aucun logo sélectionné"
 
-#: src/pyams_content/shared/logo/paragraph.py:100
+#: src/pyams_content/shared/logo/paragraph.py:101
 #, python-format
 msgid "logo '{0}' can't be found"
 msgstr "le logo '{0}' est introuvable"
 
-#: src/pyams_content/shared/logo/paragraph.py:108
+#: src/pyams_content/shared/logo/paragraph.py:109
 #, python-format
 msgid "logo '{0}' is not published"
 msgstr "le logo '{0}' n'est pas publié"
@@ -3957,15 +3904,19 @@
 msgid "Logo"
 msgstr "Logo"
 
-#: src/pyams_content/shared/logo/interfaces/__init__.py:70
-msgid "Logos references"
-msgstr "Logos sélectionnés"
+#: src/pyams_content/shared/logo/interfaces/__init__.py:64
+msgid "Logos"
+msgstr "Logos"
 
 #: src/pyams_content/shared/logo/interfaces/__init__.py:71
+msgid "Logos references"
+msgstr "Logos sélectionnés"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:72
 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:74
+#: src/pyams_content/shared/logo/interfaces/__init__.py:75
 msgid "Logos template"
 msgstr "Mode de rendu"
 
@@ -4916,6 +4867,36 @@
 msgid "Hidden header"
 msgstr "Ne pas afficher d'en-tête de pages"
 
+#~ msgid "Milestones paragraph"
+#~ msgstr "Chronologie"
+
+#~ msgid "Key points paragraph"
+#~ msgstr "Points clés"
+
+#~ msgid "Pictograms paragraph"
+#~ msgstr "Pictogrammes"
+
+#~ msgid "Key numbers paragraph"
+#~ msgstr "Chiffres-clés"
+
+#~ msgid "Framed text paragraph"
+#~ msgstr "Encadré"
+
+#~ msgid "Verbatim paragraph"
+#~ msgstr "Verbatim"
+
+#~ msgid "Raw HTML paragraph"
+#~ msgstr "Code HTML"
+
+#~ msgid "Rich text paragraph"
+#~ msgstr "Texte enrichi"
+
+#~ msgid "Header paragraph"
+#~ msgstr "Chapô"
+
+#~ msgid "Associations paragraph"
+#~ msgstr "Liens et pièces jointes"
+
 #~ msgid "File legend, as shown in front-office"
 #~ msgstr "Titre du fichier, tel que présenté aux internautes"
 
--- a/src/pyams_content/locales/pyams_content.pot	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/locales/pyams_content.pot	Wed Jun 06 11:44:46 2018 +0200
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-06-06 11:02+0200\n"
+"POT-Creation-Date: 2018-06-06 11:42+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"
@@ -77,11 +77,6 @@
 msgid "Guest user (role)"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/paragraph.py:40
-#: ./src/pyams_content/component/gallery/paragraph.py:47
-msgid "Medias gallery"
-msgstr ""
-
 #: ./src/pyams_content/component/gallery/__init__.py:154
 msgid "Gallery"
 msgstr ""
@@ -142,7 +137,7 @@
 #: ./src/pyams_content/component/illustration/interfaces/__init__.py:56
 #: ./src/pyams_content/component/paragraph/interfaces/video.py:48
 #: ./src/pyams_content/component/paragraph/interfaces/audio.py:48
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:43
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:44
 #: ./src/pyams_content/component/video/interfaces/__init__.py:52
 msgid "Author"
 msgstr ""
@@ -177,15 +172,19 @@
 msgid "Zoom image"
 msgstr ""
 
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:130
+msgid "Medias gallery"
+msgstr ""
+
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:47
 #: ./src/pyams_content/component/illustration/interfaces/__init__.py:41
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:76
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:77
 msgid "Image or video data"
 msgstr ""
 
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:48
 #: ./src/pyams_content/component/illustration/interfaces/__init__.py:42
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:77
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:78
 msgid "Image or video content"
 msgstr ""
 
@@ -452,11 +451,10 @@
 msgid "Audio file content"
 msgstr ""
 
-#: ./src/pyams_content/component/illustration/paragraph.py:40
-#: ./src/pyams_content/component/illustration/paragraph.py:47
 #: ./src/pyams_content/component/illustration/__init__.py:132
 #: ./src/pyams_content/component/illustration/zmi/__init__.py:54
 #: ./src/pyams_content/component/illustration/zmi/__init__.py:81
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:71
 msgid "Illustration"
 msgstr ""
 
@@ -493,16 +491,6 @@
 msgid "Presentation template used for illustration"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/milestone.py:199
-#: ./src/pyams_content/component/paragraph/milestone.py:222
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:303
-msgid "Milestones"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/milestone.py:231
-msgid "Milestones paragraph"
-msgstr ""
-
 #: ./src/pyams_content/component/paragraph/milestone.py:140
 msgid "Selected paragraph is missing"
 msgstr ""
@@ -511,15 +499,6 @@
 msgid "Selected paragraph is not visible"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/keypoint.py:46
-#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:39
-msgid "Key points"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/keypoint.py:61
-msgid "Key points paragraph"
-msgstr ""
-
 #: ./src/pyams_content/component/paragraph/container.py:73
 msgid "Paragraphs"
 msgstr ""
@@ -528,78 +507,10 @@
 msgid "no visible paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/pictogram.py:189
-#: ./src/pyams_content/component/paragraph/pictogram.py:212
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:305
-msgid "Pictograms"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/pictogram.py:221
-msgid "Pictograms paragraph"
-msgstr ""
-
 #: ./src/pyams_content/component/paragraph/pictogram.py:134
 msgid "Selected pictogram is missing"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/keynumber.py:183
-#: ./src/pyams_content/component/paragraph/keynumber.py:207
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:282
-msgid "Key numbers"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/keynumber.py:216
-msgid "Key numbers paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/frame.py:52
-msgid "Framed text"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/frame.py:62
-msgid "Framed text paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/verbatim.py:50
-msgid "Verbatim"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/verbatim.py:62
-msgid "Verbatim paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/html.py:63
-msgid "Raw HTML "
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/html.py:73
-msgid "Raw HTML paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/html.py:119
-msgid "Rich text"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/html.py:129
-msgid "Rich text paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/contact.py:47
-#: ./src/pyams_content/component/paragraph/contact.py:76
-msgid "Contact card"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/header.py:46
-#: ./src/pyams_content/component/paragraph/interfaces/header.py:39
-#: ./src/pyams_content/features/alert/interfaces.py:65
-#: ./src/pyams_content/features/alert/zmi/container.py:158
-msgid "Header"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/header.py:61
-msgid "Header paragraph"
-msgstr ""
-
 #: ./src/pyams_content/component/paragraph/zmi/milestone.py:77
 msgid "Milestones..."
 msgstr ""
@@ -622,6 +533,11 @@
 msgid "Anchor"
 msgstr ""
 
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:303
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:76
+msgid "Milestones"
+msgstr ""
+
 #: ./src/pyams_content/component/paragraph/zmi/milestone.py:318
 msgid "Add milestone"
 msgstr ""
@@ -784,6 +700,11 @@
 msgid "Associated text"
 msgstr ""
 
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:305
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:80
+msgid "Pictograms"
+msgstr ""
+
 #: ./src/pyams_content/component/paragraph/zmi/pictogram.py:320
 #: ./src/pyams_content/reference/pictograms/zmi/__init__.py:62
 msgid "Add pictogram"
@@ -854,6 +775,11 @@
 msgid "key-number-label"
 msgstr ""
 
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:282
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:76
+msgid "Key numbers"
+msgstr ""
+
 #: ./src/pyams_content/component/paragraph/zmi/keynumber.py:297
 msgid "Add keynumber"
 msgstr ""
@@ -969,29 +895,34 @@
 msgid "Paragraph to which this milestone should lead"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:82
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:83
 msgid "Milestones template"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:83
+#: ./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:43
-msgid "Presentation template"
-msgstr ""
-
 #: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:44
-#: ./src/pyams_content/component/paragraph/interfaces/frame.py:43
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:52
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:45
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:65
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:99
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:75
+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:100
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:76
 msgid "Presentation template used for this paragraph"
 msgstr ""
 
@@ -1023,8 +954,8 @@
 
 #: ./src/pyams_content/component/paragraph/interfaces/video.py:41
 #: ./src/pyams_content/component/paragraph/interfaces/audio.py:41
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:61
-#: ./src/pyams_content/component/video/interfaces/__init__.py:74
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:63
+#: ./src/pyams_content/component/video/interfaces/__init__.py:75
 msgid "Body"
 msgstr ""
 
@@ -1033,12 +964,12 @@
 msgstr ""
 
 #: ./src/pyams_content/component/paragraph/interfaces/video.py:56
-#: ./src/pyams_content/component/video/interfaces/__init__.py:77
+#: ./src/pyams_content/component/video/interfaces/__init__.py:78
 msgid "Video template"
 msgstr ""
 
 #: ./src/pyams_content/component/paragraph/interfaces/video.py:57
-#: ./src/pyams_content/component/video/interfaces/__init__.py:78
+#: ./src/pyams_content/component/video/interfaces/__init__.py:79
 msgid "Presentation template used for this video"
 msgstr ""
 
@@ -1071,11 +1002,11 @@
 msgid "Additional text associated to this pictogram"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:86
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:87
 msgid "Pictograms template"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:87
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:88
 msgid "Presentation template used for pictograms"
 msgstr ""
 
@@ -1108,127 +1039,154 @@
 msgid "The way this text will be rendered depends on presentation template"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:82
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:83
 msgid "Key numbers template"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:83
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:84
 msgid "Presentation template used for key numbers"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/frame.py:39
+#: ./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:42
+#: ./src/pyams_content/component/paragraph/interfaces/frame.py:43
 msgid "Text template"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:39
-msgid "Quoted text"
+#: ./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:44
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:45
 msgid "Name of the quote author"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:47
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:53
-msgid "In charge of"
-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:51
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:52
 msgid "Verbatim template"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:39
-msgid "Raw HTML code"
+#: ./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:44
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:45
 msgid "Raw HTML code template"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:64
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:66
 msgid "Body template"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:49
-msgid "Contact identity"
+#: ./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:54
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:55
 msgid "Label of contact function"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:57
-msgid "Email address"
-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:61
-msgid "Contact form"
-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:66
-msgid "Photo"
-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:75
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:76
 msgid "Address"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:78
-msgid "Contact template"
-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:71
-msgid "GPS location"
-msgstr ""
-
 #: ./src/pyams_content/component/paragraph/interfaces/contact.py:72
+msgid "GPS location"
+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:42
-#: ./src/pyams_content/features/header/interfaces/__init__.py:39
-msgid "Header template"
+#: ./src/pyams_content/component/paragraph/interfaces/header.py:33
+#: ./src/pyams_content/component/paragraph/interfaces/header.py:40
+#: ./src/pyams_content/features/alert/interfaces.py:65
+#: ./src/pyams_content/features/alert/zmi/container.py:158
+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 ""
@@ -1260,13 +1218,9 @@
 msgid "Selected themes"
 msgstr ""
 
-#: ./src/pyams_content/component/association/paragraph.py:48
-#: ./src/pyams_content/component/association/paragraph.py:57
-msgid "Associations paragraph"
-msgstr ""
-
 #: ./src/pyams_content/component/association/container.py:88
 #: ./src/pyams_content/component/association/zmi/__init__.py:296
+#: ./src/pyams_content/component/association/interfaces/__init__.py:86
 msgid "Associations"
 msgstr ""
 
@@ -1308,11 +1262,11 @@
 msgid "Is this item visible in front-office?"
 msgstr ""
 
-#: ./src/pyams_content/component/association/interfaces/__init__.py:92
+#: ./src/pyams_content/component/association/interfaces/__init__.py:93
 msgid "Associations template"
 msgstr ""
 
-#: ./src/pyams_content/component/association/interfaces/__init__.py:93
+#: ./src/pyams_content/component/association/interfaces/__init__.py:94
 msgid "Presentation template used for associations"
 msgstr ""
 
@@ -1426,9 +1380,8 @@
 msgid "Address as displayed in address book"
 msgstr ""
 
-#: ./src/pyams_content/component/video/paragraph.py:47
-#: ./src/pyams_content/component/video/paragraph.py:57
 #: ./src/pyams_content/component/video/__init__.py:73
+#: ./src/pyams_content/component/video/interfaces/__init__.py:68
 msgid "External video"
 msgstr ""
 
@@ -3359,12 +3312,6 @@
 msgid "Other terms"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/paragraph.py:47
-#: ./src/pyams_content/shared/imagemap/paragraph.py:60
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:35
-msgid "Image map"
-msgstr ""
-
 #: ./src/pyams_content/shared/imagemap/paragraph.py:91
 msgid "no selected image map"
 msgstr ""
@@ -3464,6 +3411,11 @@
 msgid "Edit image map properties"
 msgstr ""
 
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:35
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:88
+msgid "Image map"
+msgstr ""
+
 #: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:50
 msgid "Internal or external link associated with this map area"
 msgstr ""
@@ -3488,16 +3440,16 @@
 msgid "List of defined map areas"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:94
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:95
 #: ./src/pyams_content/features/alert/interfaces.py:73
 msgid "Internal reference"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:95
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:96
 msgid "Reference to image map object"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:98
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:99
 msgid "Image map template"
 msgstr ""
 
@@ -3679,21 +3631,16 @@
 msgid "If 'no', link is not visible"
 msgstr ""
 
-#: ./src/pyams_content/shared/logo/paragraph.py:46
-#: ./src/pyams_content/shared/logo/paragraph.py:63
-msgid "Logos"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/paragraph.py:94
+#: ./src/pyams_content/shared/logo/paragraph.py:95
 msgid "no selected logo"
 msgstr ""
 
-#: ./src/pyams_content/shared/logo/paragraph.py:100
+#: ./src/pyams_content/shared/logo/paragraph.py:101
 #, python-format
 msgid "logo '{0}' can't be found"
 msgstr ""
 
-#: ./src/pyams_content/shared/logo/paragraph.py:108
+#: ./src/pyams_content/shared/logo/paragraph.py:109
 #, python-format
 msgid "logo '{0}' is not published"
 msgstr ""
@@ -3736,15 +3683,19 @@
 msgid "Logo"
 msgstr ""
 
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:70
-msgid "Logos references"
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:64
+msgid "Logos"
 msgstr ""
 
 #: ./src/pyams_content/shared/logo/interfaces/__init__.py:71
+msgid "Logos references"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:72
 msgid "List of internal logos references"
 msgstr ""
 
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:74
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:75
 msgid "Logos template"
 msgstr ""
 
--- a/src/pyams_content/shared/imagemap/interfaces/__init__.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/shared/imagemap/interfaces/__init__.py	Wed Jun 06 11:44:46 2018 +0200
@@ -85,6 +85,7 @@
 
 
 IMAGEMAP_PARAGRAPH_TYPE = 'ImageMap'
+IMAGEMAP_PARAGRAPH_NAME = _("Image map")
 IMAGEMAP_PARAGRAPH_RENDERERS = 'PyAMS.paragraph.imagemap.renderers'
 
 
--- a/src/pyams_content/shared/imagemap/paragraph.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/shared/imagemap/paragraph.py	Wed Jun 06 11:44:46 2018 +0200
@@ -19,7 +19,7 @@
 from pyams_content.component.paragraph.interfaces import IParagraphFactory
 from pyams_content.features.checker.interfaces import IContentChecker, ERROR_VALUE, MISSING_VALUE, MISSING_LANG_VALUE
 from pyams_content.shared.imagemap.interfaces import IImageMapParagraph, IMAGEMAP_PARAGRAPH_TYPE, \
-    IMAGEMAP_PARAGRAPH_RENDERERS
+    IMAGEMAP_PARAGRAPH_RENDERERS, IMAGEMAP_PARAGRAPH_NAME
 from pyams_i18n.interfaces import II18nManager, INegotiator, II18n
 from pyams_workflow.interfaces import IWorkflow, IWorkflowState
 
@@ -44,7 +44,7 @@
     """Image map paragraph"""
 
     icon_class = 'fa-location-arrow'
-    icon_hint = _("Image map")
+    icon_hint = IMAGEMAP_PARAGRAPH_NAME
 
     reference = FieldProperty(IImageMapParagraph['reference'])
     renderer = FieldProperty(IImageMapParagraph['renderer'])
@@ -57,7 +57,7 @@
 class ImageMapParagraphFactory(BaseParagraphFactory):
     """Image map paragraph factory"""
 
-    name = _("Image map")
+    name = IMAGEMAP_PARAGRAPH_NAME
     content_type = ImageMapParagraph
     secondary_menu = True
 
--- a/src/pyams_content/shared/logo/interfaces/__init__.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/shared/logo/interfaces/__init__.py	Wed Jun 06 11:44:46 2018 +0200
@@ -61,6 +61,7 @@
 
 
 LOGOS_PARAGRAPH_TYPE = 'Logos'
+LOGOS_PARAGRAPH_NAME = _("Logos")
 LOGOS_PARAGRAPH_RENDERERS = 'PyAMS.shared.logos.renderers'
 
 
--- a/src/pyams_content/shared/logo/paragraph.py	Wed Jun 06 11:06:51 2018 +0200
+++ b/src/pyams_content/shared/logo/paragraph.py	Wed Jun 06 11:44:46 2018 +0200
@@ -18,7 +18,8 @@
 # import interfaces
 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE, ERROR_VALUE
 from pyams_content.features.renderer.interfaces import IContentRenderer
-from pyams_content.shared.logo.interfaces import ILogosParagraph, LOGOS_PARAGRAPH_TYPE, LOGOS_PARAGRAPH_RENDERERS
+from pyams_content.shared.logo.interfaces import ILogosParagraph, LOGOS_PARAGRAPH_TYPE, LOGOS_PARAGRAPH_RENDERERS, \
+    LOGOS_PARAGRAPH_NAME
 from pyams_i18n.interfaces import II18nManager, INegotiator, II18n
 from pyams_workflow.interfaces import IWorkflow, IWorkflowState
 
@@ -43,7 +44,7 @@
     """Logos paragraph"""
 
     icon_class = 'fa-th-large'
-    icon_hint = _("Logos")
+    icon_hint = LOGOS_PARAGRAPH_NAME
 
     references = FieldProperty(ILogosParagraph['references'])
     renderer = FieldProperty(ILogosParagraph['renderer'])
@@ -60,7 +61,7 @@
 class LogosParagraphFactory(BaseParagraphFactory):
     """Logos paragraph factory"""
 
-    name = _("Logos")
+    name = LOGOS_PARAGRAPH_NAME
     content_type = LogosParagraph
     secondary_menu = True