Added label to HTML renderers which can be selected by end-users
authorThierry Florac <tflorac@ulthar.net>
Fri, 18 Jan 2019 13:52:11 +0100
changeset 321 247c4f2948ef
parent 320 8984904dc040
child 322 a7d712e514a0
Added label to HTML renderers which can be selected by end-users
src/pyams_utils/interfaces/text.py
src/pyams_utils/locales/fr/LC_MESSAGES/pyams_utils.mo
src/pyams_utils/locales/fr/LC_MESSAGES/pyams_utils.po
src/pyams_utils/locales/pyams_utils.pot
src/pyams_utils/text.py
--- a/src/pyams_utils/interfaces/text.py	Fri Jan 18 10:24:20 2019 +0100
+++ b/src/pyams_utils/interfaces/text.py	Fri Jan 18 13:52:11 2019 +0100
@@ -18,7 +18,7 @@
 # import interfaces
 
 # import packages
-from zope.interface import Interface, Attribute
+from zope.interface import Attribute, Interface
 
 from pyams_utils import _
 
@@ -31,7 +31,7 @@
     for any object and/or for any request layer.
     """
 
-    title = Attribute(_("Renderer name"))
+    label = Attribute(_("Optional renderer label"))
 
     def render(self, **kwargs):
         """Render adapted text"""
Binary file src/pyams_utils/locales/fr/LC_MESSAGES/pyams_utils.mo has changed
--- a/src/pyams_utils/locales/fr/LC_MESSAGES/pyams_utils.po	Fri Jan 18 10:24:20 2019 +0100
+++ b/src/pyams_utils/locales/fr/LC_MESSAGES/pyams_utils.po	Fri Jan 18 13:52:11 2019 +0100
@@ -4,7 +4,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-11-30 11:17+0100\n"
+"POT-Creation-Date: 2019-01-18 13:52+0100\n"
 "PO-Revision-Date: 2015-01-18 01:01+0100\n"
 "Last-Translator: Thierry Florac <tflorac@ulthar.net>\n"
 "Language-Team: French\n"
@@ -15,6 +15,81 @@
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "Generated-By: Lingua 3.7\n"
 
+#: src/pyams_utils/pygments.py:106
+msgid "Selected lexer"
+msgstr "Format du code"
+
+#: src/pyams_utils/pygments.py:107
+msgid "Lexer used to format source code"
+msgstr "Lexeur utilisé pour analyser le code source"
+
+#: src/pyams_utils/pygments.py:112
+msgid "Display line numbers?"
+msgstr "Numéros de lignes ?"
+
+#: src/pyams_utils/pygments.py:113
+msgid "If 'no', line numbers will be hidden"
+msgstr "Si 'non', les numéros de lignes ne seront pas affichés"
+
+#: src/pyams_utils/pygments.py:117
+msgid "Lines wrap?"
+msgstr "Sauts de lignes ?"
+
+#: src/pyams_utils/pygments.py:118
+msgid ""
+"If 'yes', lines wraps will be enabled; line numbers will not be displayed if "
+"lines wrap is enabled..."
+msgstr ""
+"Si 'oui', les sauts de lignes seront possibles ; dans ce mode, l'affichage "
+"des numéros de lignes n'est pas possible..."
+
+#: src/pyams_utils/pygments.py:123
+msgid "Color style"
+msgstr "Style de couleur"
+
+#: src/pyams_utils/pygments.py:124
+msgid "Selected color style"
+msgstr "Style de mise en forme de la syntaxe"
+
+#: src/pyams_utils/pygments.py:75
+msgid "Automatic detection"
+msgstr "Détection automatique"
+
+#: src/pyams_utils/size.py:69
+msgid "0.0## Gb"
+msgstr "0.0## Go"
+
+#: src/pyams_utils/size.py:61
+msgid "0 bytes"
+msgstr "0 octets"
+
+#: src/pyams_utils/size.py:64
+msgid "0.# Kb"
+msgstr "0.# Ko"
+
+#: src/pyams_utils/size.py:67
+msgid "0.0# Mb"
+msgstr "0.0# Mo"
+
+#: src/pyams_utils/schema.py:181
+msgid ""
+"Email address must be entered as « name@domain.name », without '<' and '>' "
+"characters"
+msgstr ""
+"L'adresse est incorrecte, la saisie ne respecte pas la forme « xxx@yyy.com »."
+
+#: src/pyams_utils/schema.py:115
+msgid "Color length must be 3 or 6 characters"
+msgstr "La longueur d'une couleur doit être de 3 ou 6 caractères"
+
+#: src/pyams_utils/schema.py:118
+msgid ""
+"Color value must contain only valid hexadecimal color codes (numbers or "
+"letters between 'A' end 'F')"
+msgstr ""
+"Une couleur ne doit contenir que des valeurs hexadécimales correctes "
+"(nombres ou lettres de 'A' à 'F')"
+
 #: src/pyams_utils/date.py:94
 msgid "%d/%m/%Y"
 msgstr "%d/%m/%Y"
@@ -107,22 +182,6 @@
 msgid "%d minutes ago"
 msgstr "Il y a %d minutes"
 
-#: src/pyams_utils/size.py:69
-msgid "0.0## Gb"
-msgstr "0.0## Go"
-
-#: src/pyams_utils/size.py:61
-msgid "0 bytes"
-msgstr "0 octets"
-
-#: src/pyams_utils/size.py:64
-msgid "0.# Kb"
-msgstr "0.# Ko"
-
-#: src/pyams_utils/size.py:67
-msgid "0.0# Mb"
-msgstr "0.0# Mo"
-
 #: src/pyams_utils/encoding.py:32
 msgid "English (ASCII)"
 msgstr "Anglais (ASCII)"
@@ -493,72 +552,17 @@
 msgid "all languages (utf_8_sig)"
 msgstr "toutes les langues (utf-8-sig)"
 
-#: src/pyams_utils/schema.py:181
-msgid ""
-"Email address must be entered as « name@domain.name », without '<' and '>' "
-"characters"
-msgstr ""
-"L'adresse est incorrecte, la saisie ne respecte pas la forme « xxx@yyy.com »."
-
-#: src/pyams_utils/schema.py:115
-msgid "Color length must be 3 or 6 characters"
-msgstr "La longueur d'une couleur doit être de 3 ou 6 caractères"
-
-#: src/pyams_utils/schema.py:118
-msgid ""
-"Color value must contain only valid hexadecimal color codes (numbers or "
-"letters between 'A' end 'F')"
-msgstr ""
-"Une couleur ne doit contenir que des valeurs hexadécimales correctes "
-"(nombres ou lettres de 'A' à 'F')"
-
-#: src/pyams_utils/pygments.py:106
-msgid "Selected lexer"
-msgstr "Format du code"
-
-#: src/pyams_utils/pygments.py:107
-msgid "Lexer used to format source code"
-msgstr "Lexeur utilisé pour analyser le code source"
-
-#: src/pyams_utils/pygments.py:112
-msgid "Display line numbers?"
-msgstr "Numéros de lignes ?"
+#: src/pyams_utils/text.py:94
+msgid "Simple text"
+msgstr "Texte simple"
 
-#: src/pyams_utils/pygments.py:113
-msgid "If 'no', line numbers will be hidden"
-msgstr "Si 'non', les numéros de lignes ne seront pas affichés"
-
-#: src/pyams_utils/pygments.py:117
-msgid "Lines wrap?"
-msgstr "Sauts de lignes ?"
-
-#: src/pyams_utils/pygments.py:118
-msgid ""
-"If 'yes', lines wraps will be enabled; line numbers will not be displayed if "
-"lines wrap is enabled..."
-msgstr ""
-"Si 'oui', les sauts de lignes seront possibles ; dans ce mode, l'affichage "
-"des numéros de lignes n'est pas possible..."
+#: src/pyams_utils/text.py:118
+msgid "ReStructured text"
+msgstr "Texte structuré"
 
-#: src/pyams_utils/pygments.py:123
-msgid "Color style"
-msgstr "Style de couleur"
-
-#: src/pyams_utils/pygments.py:124
-msgid "Selected color style"
-msgstr "Style de mise en forme de la syntaxe"
-
-#: src/pyams_utils/pygments.py:75
-msgid "Automatic detection"
-msgstr "Détection automatique"
-
-#: src/pyams_utils/widget/decimal.py:31
-msgid "The entered value is not a valid decimal literal."
-msgstr "La valeur saisie n'est pas une valeur décimale correcte."
-
-#: src/pyams_utils/interfaces/text.py:34
-msgid "Renderer name"
-msgstr "Nom de l'outil de rendu"
+#: src/pyams_utils/text.py:143
+msgid "Markdown text"
+msgstr "Markdown"
 
 #: src/pyams_utils/interfaces/inherit.py:37
 msgid "Inherit from parent?"
@@ -568,6 +572,80 @@
 msgid "Don't inherit from parent?"
 msgstr "Ne pas hériter du parent ?"
 
+#: src/pyams_utils/interfaces/__init__.py:33
+msgid "Wrong contained type"
+msgstr "Type de contenu incorrect"
+
+#: src/pyams_utils/interfaces/__init__.py:34
+msgid "One or more entries of sequence are not unique."
+msgstr "Toutes les entrées de la séquence ne sont pas uniques"
+
+#: src/pyams_utils/interfaces/__init__.py:35
+msgid "Schema not fully implemented"
+msgstr "Schéma non implémenté"
+
+#: src/pyams_utils/interfaces/__init__.py:36
+msgid "Schema not provided"
+msgstr "Schéma non fourni"
+
+#: src/pyams_utils/interfaces/__init__.py:37
+msgid "The specified URI is not valid."
+msgstr ""
+"L'URL indiquée est invalide ; elle doit comprendre le protocole d'accès au "
+"site, comme « http:// » ou « https:// »"
+
+#: src/pyams_utils/interfaces/__init__.py:38
+msgid "The specified id is not valid."
+msgstr "L'ID indiqué est invalide"
+
+#: src/pyams_utils/interfaces/__init__.py:39
+msgid "The specified dotted name is not valid."
+msgstr "Le nom indiqué est invalide"
+
+#: src/pyams_utils/interfaces/__init__.py:40
+msgid "The field is not bound."
+msgstr "Le chanmp n'est pas lié"
+
+#: src/pyams_utils/interfaces/__init__.py:42
+msgid "Required input is missing."
+msgstr "Ce champ est obligatoire"
+
+#: src/pyams_utils/interfaces/__init__.py:43
+msgid "Object is of wrong type."
+msgstr "L'objet est d'un type incorrect"
+
+#: src/pyams_utils/interfaces/__init__.py:44
+msgid "Value is too big"
+msgstr "Valeur trop grande"
+
+#: src/pyams_utils/interfaces/__init__.py:45
+msgid "Value is too small"
+msgstr "Valeur trop petite"
+
+#: src/pyams_utils/interfaces/__init__.py:46
+msgid "Value is too long"
+msgstr "Valeur trop longue"
+
+#: src/pyams_utils/interfaces/__init__.py:47
+msgid "Value is too short"
+msgstr "Valeur trop courte"
+
+#: src/pyams_utils/interfaces/__init__.py:48
+msgid "Invalid value"
+msgstr "Valeur incorrecte"
+
+#: src/pyams_utils/interfaces/__init__.py:49
+msgid "Constraint not satisfied"
+msgstr "Contrainte non satisfaite"
+
+#: src/pyams_utils/interfaces/__init__.py:50
+msgid "Not a container"
+msgstr "Ce n'est pas un conteneur"
+
+#: src/pyams_utils/interfaces/__init__.py:51
+msgid "Not an iterator"
+msgstr "Ce n'est pas un itérateur"
+
 #: src/pyams_utils/interfaces/zeo.py:71
 msgid "Opened ZEO connection"
 msgstr "Connexion ZEO"
@@ -655,6 +733,10 @@
 "partagé avec le serveur ou non ; dans ce cas, les fichiers seront accédés "
 "directement au lieu d'être chargés via ZRPC"
 
+#: src/pyams_utils/interfaces/text.py:34
+msgid "Optional renderer label"
+msgstr "Libellé optionnel du mode de rendu"
+
 #: src/pyams_utils/interfaces/timezone.py:47
 msgid "Server timezone"
 msgstr "Fuseau horaire du serveur"
@@ -663,79 +745,12 @@
 msgid "Default server timezone"
 msgstr "Fuseau horaire par défaut"
 
-#: src/pyams_utils/interfaces/__init__.py:33
-msgid "Wrong contained type"
-msgstr "Type de contenu incorrect"
-
-#: src/pyams_utils/interfaces/__init__.py:34
-msgid "One or more entries of sequence are not unique."
-msgstr "Toutes les entrées de la séquence ne sont pas uniques"
-
-#: src/pyams_utils/interfaces/__init__.py:35
-msgid "Schema not fully implemented"
-msgstr "Schéma non implémenté"
-
-#: src/pyams_utils/interfaces/__init__.py:36
-msgid "Schema not provided"
-msgstr "Schéma non fourni"
-
-#: src/pyams_utils/interfaces/__init__.py:37
-msgid "The specified URI is not valid."
-msgstr ""
-"L'URL indiquée est invalide ; elle doit comprendre le protocole d'accès au "
-"site, comme « http:// » ou « https:// »"
-
-#: src/pyams_utils/interfaces/__init__.py:38
-msgid "The specified id is not valid."
-msgstr "L'ID indiqué est invalide"
-
-#: src/pyams_utils/interfaces/__init__.py:39
-msgid "The specified dotted name is not valid."
-msgstr "Le nom indiqué est invalide"
-
-#: src/pyams_utils/interfaces/__init__.py:40
-msgid "The field is not bound."
-msgstr "Le chanmp n'est pas lié"
+#: src/pyams_utils/widget/decimal.py:31
+msgid "The entered value is not a valid decimal literal."
+msgstr "La valeur saisie n'est pas une valeur décimale correcte."
 
-#: src/pyams_utils/interfaces/__init__.py:42
-msgid "Required input is missing."
-msgstr "Ce champ est obligatoire"
-
-#: src/pyams_utils/interfaces/__init__.py:43
-msgid "Object is of wrong type."
-msgstr "L'objet est d'un type incorrect"
-
-#: src/pyams_utils/interfaces/__init__.py:44
-msgid "Value is too big"
-msgstr "Valeur trop grande"
-
-#: src/pyams_utils/interfaces/__init__.py:45
-msgid "Value is too small"
-msgstr "Valeur trop petite"
-
-#: src/pyams_utils/interfaces/__init__.py:46
-msgid "Value is too long"
-msgstr "Valeur trop longue"
-
-#: src/pyams_utils/interfaces/__init__.py:47
-msgid "Value is too short"
-msgstr "Valeur trop courte"
-
-#: src/pyams_utils/interfaces/__init__.py:48
-msgid "Invalid value"
-msgstr "Valeur incorrecte"
-
-#: src/pyams_utils/interfaces/__init__.py:49
-msgid "Constraint not satisfied"
-msgstr "Contrainte non satisfaite"
-
-#: src/pyams_utils/interfaces/__init__.py:50
-msgid "Not a container"
-msgstr "Ce n'est pas un conteneur"
-
-#: src/pyams_utils/interfaces/__init__.py:51
-msgid "Not an iterator"
-msgstr "Ce n'est pas un itérateur"
+#~ msgid "Renderer name"
+#~ msgstr "Nom de l'outil de rendu"
 
 #~ msgid "Add ZEO connection..."
 #~ msgstr "Ajouter une connexion ZEO..."
--- a/src/pyams_utils/locales/pyams_utils.pot	Fri Jan 18 10:24:20 2019 +0100
+++ b/src/pyams_utils/locales/pyams_utils.pot	Fri Jan 18 13:52:11 2019 +0100
@@ -1,12 +1,12 @@
 #
 # SOME DESCRIPTIVE TITLE
 # This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-11-30 11:17+0100\n"
+"POT-Creation-Date: 2019-01-18 13:52+0100\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"
@@ -16,6 +16,76 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: Lingua 3.10.dev0\n"
 
+#: ./src/pyams_utils/pygments.py:106
+msgid "Selected lexer"
+msgstr ""
+
+#: ./src/pyams_utils/pygments.py:107
+msgid "Lexer used to format source code"
+msgstr ""
+
+#: ./src/pyams_utils/pygments.py:112
+msgid "Display line numbers?"
+msgstr ""
+
+#: ./src/pyams_utils/pygments.py:113
+msgid "If 'no', line numbers will be hidden"
+msgstr ""
+
+#: ./src/pyams_utils/pygments.py:117
+msgid "Lines wrap?"
+msgstr ""
+
+#: ./src/pyams_utils/pygments.py:118
+msgid ""
+"If 'yes', lines wraps will be enabled; line numbers will not be displayed if "
+"lines wrap is enabled..."
+msgstr ""
+
+#: ./src/pyams_utils/pygments.py:123
+msgid "Color style"
+msgstr ""
+
+#: ./src/pyams_utils/pygments.py:124
+msgid "Selected color style"
+msgstr ""
+
+#: ./src/pyams_utils/pygments.py:75
+msgid "Automatic detection"
+msgstr ""
+
+#: ./src/pyams_utils/size.py:69
+msgid "0.0## Gb"
+msgstr ""
+
+#: ./src/pyams_utils/size.py:61
+msgid "0 bytes"
+msgstr ""
+
+#: ./src/pyams_utils/size.py:64
+msgid "0.# Kb"
+msgstr ""
+
+#: ./src/pyams_utils/size.py:67
+msgid "0.0# Mb"
+msgstr ""
+
+#: ./src/pyams_utils/schema.py:181
+msgid ""
+"Email address must be entered as « name@domain.name », without '<' and '>' "
+"characters"
+msgstr ""
+
+#: ./src/pyams_utils/schema.py:115
+msgid "Color length must be 3 or 6 characters"
+msgstr ""
+
+#: ./src/pyams_utils/schema.py:118
+msgid ""
+"Color value must contain only valid hexadecimal color codes (numbers or "
+"letters between 'A' end 'F')"
+msgstr ""
+
 #: ./src/pyams_utils/date.py:94
 msgid "%d/%m/%Y"
 msgstr ""
@@ -108,22 +178,6 @@
 msgid "%d minutes ago"
 msgstr ""
 
-#: ./src/pyams_utils/size.py:69
-msgid "0.0## Gb"
-msgstr ""
-
-#: ./src/pyams_utils/size.py:61
-msgid "0 bytes"
-msgstr ""
-
-#: ./src/pyams_utils/size.py:64
-msgid "0.# Kb"
-msgstr ""
-
-#: ./src/pyams_utils/size.py:67
-msgid "0.0# Mb"
-msgstr ""
-
 #: ./src/pyams_utils/encoding.py:32
 msgid "English (ASCII)"
 msgstr ""
@@ -493,66 +547,16 @@
 msgid "all languages (utf_8_sig)"
 msgstr ""
 
-#: ./src/pyams_utils/schema.py:181
-msgid ""
-"Email address must be entered as « name@domain.name », without '<' and '>' "
-"characters"
-msgstr ""
-
-#: ./src/pyams_utils/schema.py:115
-msgid "Color length must be 3 or 6 characters"
-msgstr ""
-
-#: ./src/pyams_utils/schema.py:118
-msgid ""
-"Color value must contain only valid hexadecimal color codes (numbers or "
-"letters between 'A' end 'F')"
-msgstr ""
-
-#: ./src/pyams_utils/pygments.py:106
-msgid "Selected lexer"
-msgstr ""
-
-#: ./src/pyams_utils/pygments.py:107
-msgid "Lexer used to format source code"
-msgstr ""
-
-#: ./src/pyams_utils/pygments.py:112
-msgid "Display line numbers?"
+#: ./src/pyams_utils/text.py:94
+msgid "Simple text"
 msgstr ""
 
-#: ./src/pyams_utils/pygments.py:113
-msgid "If 'no', line numbers will be hidden"
-msgstr ""
-
-#: ./src/pyams_utils/pygments.py:117
-msgid "Lines wrap?"
-msgstr ""
-
-#: ./src/pyams_utils/pygments.py:118
-msgid ""
-"If 'yes', lines wraps will be enabled; line numbers will not be displayed if "
-"lines wrap is enabled..."
+#: ./src/pyams_utils/text.py:118
+msgid "ReStructured text"
 msgstr ""
 
-#: ./src/pyams_utils/pygments.py:123
-msgid "Color style"
-msgstr ""
-
-#: ./src/pyams_utils/pygments.py:124
-msgid "Selected color style"
-msgstr ""
-
-#: ./src/pyams_utils/pygments.py:75
-msgid "Automatic detection"
-msgstr ""
-
-#: ./src/pyams_utils/widget/decimal.py:31
-msgid "The entered value is not a valid decimal literal."
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/text.py:34
-msgid "Renderer name"
+#: ./src/pyams_utils/text.py:143
+msgid "Markdown text"
 msgstr ""
 
 #: ./src/pyams_utils/interfaces/inherit.py:37
@@ -563,6 +567,78 @@
 msgid "Don't inherit from parent?"
 msgstr ""
 
+#: ./src/pyams_utils/interfaces/__init__.py:33
+msgid "Wrong contained type"
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:34
+msgid "One or more entries of sequence are not unique."
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:35
+msgid "Schema not fully implemented"
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:36
+msgid "Schema not provided"
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:37
+msgid "The specified URI is not valid."
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:38
+msgid "The specified id is not valid."
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:39
+msgid "The specified dotted name is not valid."
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:40
+msgid "The field is not bound."
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:42
+msgid "Required input is missing."
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:43
+msgid "Object is of wrong type."
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:44
+msgid "Value is too big"
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:45
+msgid "Value is too small"
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:46
+msgid "Value is too long"
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:47
+msgid "Value is too short"
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:48
+msgid "Invalid value"
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:49
+msgid "Constraint not satisfied"
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:50
+msgid "Not a container"
+msgstr ""
+
+#: ./src/pyams_utils/interfaces/__init__.py:51
+msgid "Not an iterator"
+msgstr ""
+
 #: ./src/pyams_utils/interfaces/zeo.py:71
 msgid "Opened ZEO connection"
 msgstr ""
@@ -641,6 +717,10 @@
 "instead of transferring blob data over zrpc."
 msgstr ""
 
+#: ./src/pyams_utils/interfaces/text.py:34
+msgid "Optional renderer label"
+msgstr ""
+
 #: ./src/pyams_utils/interfaces/timezone.py:47
 msgid "Server timezone"
 msgstr ""
@@ -649,74 +729,6 @@
 msgid "Default server timezone"
 msgstr ""
 
-#: ./src/pyams_utils/interfaces/__init__.py:33
-msgid "Wrong contained type"
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:34
-msgid "One or more entries of sequence are not unique."
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:35
-msgid "Schema not fully implemented"
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:36
-msgid "Schema not provided"
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:37
-msgid "The specified URI is not valid."
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:38
-msgid "The specified id is not valid."
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:39
-msgid "The specified dotted name is not valid."
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:40
-msgid "The field is not bound."
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:42
-msgid "Required input is missing."
+#: ./src/pyams_utils/widget/decimal.py:31
+msgid "The entered value is not a valid decimal literal."
 msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:43
-msgid "Object is of wrong type."
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:44
-msgid "Value is too big"
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:45
-msgid "Value is too small"
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:46
-msgid "Value is too long"
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:47
-msgid "Value is too short"
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:48
-msgid "Invalid value"
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:49
-msgid "Constraint not satisfied"
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:50
-msgid "Not a container"
-msgstr ""
-
-#: ./src/pyams_utils/interfaces/__init__.py:51
-msgid "Not an iterator"
-msgstr ""
--- a/src/pyams_utils/text.py	Fri Jan 18 10:24:20 2019 +0100
+++ b/src/pyams_utils/text.py	Fri Jan 18 13:52:11 2019 +0100
@@ -20,6 +20,7 @@
 from zope.interface import Interface
 from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
 
+from pyams_utils import _
 from pyams_utils.adapter import ContextRequestAdapter, ContextRequestViewAdapter, adapter_config
 from pyams_utils.interfaces.tales import ITALESExtension
 from pyams_utils.interfaces.text import IHTMLRenderer
@@ -90,6 +91,8 @@
     This renderer only replace newlines with HTML breaks.
     """
 
+    label = _("Simple text")
+
     def render(self, **kwargs):
         return html.escape(self.context).replace('\n', '<br />\n')
 
@@ -112,6 +115,8 @@
     This renderer is using *docutils* to convert text to HTML output.
     """
 
+    label = _("ReStructured text")
+
     def render(self, **kwargs):
         """Render reStructuredText to HTML"""
         overrides = {
@@ -135,6 +140,8 @@
     This renderer is converting *Markdown* formatted text to HTML.
     """
 
+    label = _("Markdown text")
+
     def render(self, **kwargs):
         """Render Markdown code to HTML"""
         return markdown(self.context)
@@ -190,16 +197,22 @@
             return str(context)
 
 
-@vocabulary_config(name='PyAMS HTML renderers')
+PYAMS_HTML_RENDERERS_VOCABULARY = 'PyAMS HTML renderers'
+
+
+@vocabulary_config(name=PYAMS_HTML_RENDERERS_VOCABULARY)
 class RenderersVocabulary(SimpleVocabulary):
     """Text renderers vocabulary"""
 
-    def __init__(self):
+    def __init__(self, context=None):
         request = check_request()
         registry = request.registry
-        translate = registry.localizer.translate
-        terms = [SimpleTerm(name, name, translate(adapt.title).label)
-                 for name, adapt in registry.getAdapters(('', request), IHTMLRenderer)]
+        translate = request.localizer.translate
+        terms = []
+        append = terms.append
+        for name, adapter in registry.getAdapters(('', request), IHTMLRenderer):
+            if hasattr(adapter, 'label'):
+                append(SimpleTerm(name, title=translate(adapter.label)))
         super(RenderersVocabulary, self).__init__(terms)