update translation
authorEmmanuel Garette <egarette@cadoles.com>
Sun, 9 Mar 2014 19:14:17 +0000 (20:14 +0100)
committerEmmanuel Garette <egarette@cadoles.com>
Sun, 9 Mar 2014 19:14:17 +0000 (20:14 +0100)
tiramisu/option.py
translations/fr/tiramisu.po
translations/tiramisu.pot

index 851872d..20cdf86 100644 (file)
@@ -842,7 +842,7 @@ class PortOption(Option):
         if self._allow_range and ":" in str(value):
             value = str(value).split(':')
             if len(value) != 2:
-                raise ValueError(_('invalid part, range must have two values '
+                raise ValueError(_('invalid port, range must have two values '
                                  'only'))
             if not value[0] < value[1]:
                 raise ValueError(_('invalid port, first port in range must be'
index 83a9289..459e281 100644 (file)
@@ -2,19 +2,19 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Tiramisu\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-25 11:30+CET\n"
+"POT-Creation-Date: 2014-03-09 20:13+CET\n"
 "PO-Revision-Date: \n"
 "Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n"
 "Language-Team: Tiramisu's team <egarette@cadoles.com>\n"
+"Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Poedit 1.5.4\n"
-"Language: fr\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "X-Poedit-SourceCharset: UTF-8\n"
 
-#: tiramisu/autolib.py:159
+#: tiramisu/autolib.py:162
 msgid ""
 "unable to carry out a calculation, option {0} has properties: {1} for: {2}"
 msgstr ""
@@ -29,42 +29,65 @@ msgstr "descr doit être une optiondescription pas un {0}"
 msgid "unknown group_type: {0}"
 msgstr "group_type inconnu: {0}"
 
-#: tiramisu/config.py:166 tiramisu/setting.py:339 tiramisu/value.py:57
-#: tiramisu/value.py:427
+#: tiramisu/config.py:164 tiramisu/setting.py:339 tiramisu/value.py:57
+#: tiramisu/value.py:449
 msgid "the context does not exist anymore"
 msgstr "le context n'existe plus"
 
-#: tiramisu/config.py:171
-msgid ""
-"no option description found for this config (may be metaconfig without meta)"
+#: tiramisu/config.py:169
+msgid "no option description found for this config (may be GroupConfig)"
 msgstr ""
-"pas d'option description trouvé pour cette config (peut être une metaconfig "
-"sans meta)"
+"pas d'option description trouvé pour cette config (peut être un GroupConfig)"
 
-#: tiramisu/config.py:197
+#: tiramisu/config.py:195
 msgid "can't assign to an OptionDescription"
 msgstr "ne peut pas attribuer une valeur à une OptionDescription"
 
-#: tiramisu/config.py:330
+#: tiramisu/config.py:325
 msgid "unknown type_ type {0}for _find"
 msgstr "type_ type {0} pour _find inconnu"
 
-#: tiramisu/config.py:369
+#: tiramisu/config.py:364
 msgid "no option found in config with these criteria"
 msgstr "aucune option trouvée dans la config avec ces critères"
 
-#: tiramisu/config.py:419
+#: tiramisu/config.py:414
 msgid "make_dict can't filtering with value without option"
 msgstr "make_dict ne peut filtrer sur une valeur mais sans option"
 
-#: tiramisu/config.py:440
+#: tiramisu/config.py:435
 msgid "unexpected path {0}, should start with {1}"
 msgstr "chemin imprévu {0}, devrait commencer par {1}"
 
-#: tiramisu/config.py:500
+#: tiramisu/config.py:489
 msgid "opt in getowner must be an option not {0}"
 msgstr "opt dans getowner doit être une option pas {0}"
 
+#: tiramisu/config.py:532
+msgid "cannot serialize Config with MetaConfig"
+msgstr "impossible de sérialiser une Config avec une MetaConfig"
+
+#: tiramisu/config.py:546
+msgid "this storage is not serialisable, could be a none persistent storage"
+msgstr "ce storage n'est sérialisable, devrait être une storage non persistant"
+
+#: tiramisu/config.py:609
+msgid "metaconfig's children must be a list"
+msgstr "enfants d'une metaconfig doit être une liste"
+
+#: tiramisu/config.py:703
+msgid "metaconfig's children should be config, not {0}"
+msgstr "enfants d'une metaconfig doit être une config, pas {0}"
+
+#: tiramisu/config.py:707
+msgid "child has already a metaconfig's"
+msgstr "enfant a déjà une metaconfig"
+
+#: tiramisu/config.py:711
+msgid "all config in metaconfig must have the same optiondescription"
+msgstr ""
+"toutes les configs d'une metaconfig doivent avoir la même optiondescription"
+
 #: tiramisu/option.py:67
 msgid "invalid name: {0} for option"
 msgstr "nom invalide : {0} pour l'option"
@@ -77,7 +100,7 @@ msgstr "type des properties invalide {0} pour {1}, doit être un tuple"
 msgid "'{0}' ({1}) object attribute '{2}' is read-only"
 msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule"
 
-#: tiramisu/option.py:141 tiramisu/value.py:376
+#: tiramisu/option.py:141 tiramisu/value.py:395
 msgid "information's item not found: {0}"
 msgstr "aucune config spécifiée alors que c'est nécessaire"
 
@@ -107,242 +130,251 @@ msgstr ""
 "params définis pour une fonction callback mais par de callback encore "
 "définis pour l'option {0}"
 
-#: tiramisu/option.py:359
-msgid "option not in all_cons_opts"
-msgstr "option non présentante dans all_cons_opts"
-
-#: tiramisu/option.py:425 tiramisu/option.py:435
+#: tiramisu/option.py:423 tiramisu/option.py:433
 msgid "invalid value for option {0}: {1}"
 msgstr "valeur invalide pour l'option {0} : {1}"
 
-#: tiramisu/option.py:452
+#: tiramisu/option.py:450
 msgid "invalid value {0} for option {1} which must be a list"
 msgstr "valeur invalide pour l'option {0} : {1} laquelle doit être une liste"
 
-#: tiramisu/option.py:508
+#: tiramisu/option.py:506
 msgid "consistency should be set with an option"
 msgstr "consistency doit être configuré avec une option"
 
-#: tiramisu/option.py:510
+#: tiramisu/option.py:508
 msgid "cannot add consistency with itself"
 msgstr "ne peut ajouter une consistency avec lui même"
 
-#: tiramisu/option.py:512
+#: tiramisu/option.py:510
 msgid "every options in consistency should be multi or none"
 msgstr ""
 "toutes les options d'une consistency devrait être multi ou ne pas l'être"
 
-#: tiramisu/option.py:532
+#: tiramisu/option.py:530
 msgid "same value for {0} and {1}"
 msgstr "même valeur pour {0} et {1}"
 
-#: tiramisu/option.py:641
+#: tiramisu/option.py:623
 msgid "values must be a tuple for {0}"
 msgstr "values doit être un tuple pour {0}"
 
-#: tiramisu/option.py:644
+#: tiramisu/option.py:626
 msgid "open_values must be a boolean for {0}"
 msgstr "open_values doit être un booléen pour {0}"
 
-#: tiramisu/option.py:666
+#: tiramisu/option.py:648
 msgid "value {0} is not permitted, only {1} is allowed"
 msgstr "valeur {0} n'est pas permis, seules {1} sont autorisées"
 
-#: tiramisu/option.py:678
+#: tiramisu/option.py:660
 msgid "invalid boolean"
 msgstr "booléen invalide"
 
-#: tiramisu/option.py:688
+#: tiramisu/option.py:670
 msgid "invalid integer"
 msgstr "nombre invalide"
 
-#: tiramisu/option.py:698
+#: tiramisu/option.py:680
 msgid "invalid float"
 msgstr "invalide nombre flottan"
 
-#: tiramisu/option.py:708
+#: tiramisu/option.py:690
 msgid "invalid string"
 msgstr "invalide caractère"
 
-#: tiramisu/option.py:725
+#: tiramisu/option.py:707
 msgid "invalid unicode"
 msgstr "invalide unicode"
 
-#: tiramisu/option.py:737
+#: tiramisu/option.py:719
 msgid "malformed symlinkoption must be an option for symlink {0}"
 msgstr "symlinkoption mal formé, doit être une option pour symlink {0}"
 
-#: tiramisu/option.py:787 tiramisu/option.py:792
+#: tiramisu/option.py:770 tiramisu/option.py:773 tiramisu/option.py:778
 msgid "invalid IP"
 msgstr "adresse IP invalide"
 
-#: tiramisu/option.py:797
+#: tiramisu/option.py:783
 msgid "invalid IP, mustn't not be in reserved class"
 msgstr "adresse IP invalide, ne doit pas être d'une classe reservée"
 
-#: tiramisu/option.py:799
+#: tiramisu/option.py:785
 msgid "invalid IP, must be in private class"
 msgstr "adresse IP invalide, doit être dans la classe privée"
 
-#: tiramisu/option.py:837
+#: tiramisu/option.py:823
 msgid "inconsistency in allowed range"
 msgstr "inconsistence dans la plage autorisée"
 
-#: tiramisu/option.py:842
+#: tiramisu/option.py:828
 msgid "max value is empty"
 msgstr "la valeur maximum est vide"
 
-#: tiramisu/option.py:882
+#: tiramisu/option.py:845
+msgid "invalid port, range must have two values only"
+msgstr "port invalide, une plage doit avoir deux valeurs seulement"
+
+#: tiramisu/option.py:848
+msgid "invalid port, first port in range must be smaller than the second one"
+msgstr ""
+"port invalide, le premier port d'une plage doit être plus petit que le second"
+
+#: tiramisu/option.py:857
+msgid "invalid port"
+msgstr "port invalide"
+
+#: tiramisu/option.py:859
+msgid "invalid port, must be an between {0} and {1}"
+msgstr "port invalide, port doit être entre {0} et {1}"
+
+#: tiramisu/option.py:873
 msgid "invalid network address"
 msgstr "adresse réseau invalide"
 
-#: tiramisu/option.py:887
+#: tiramisu/option.py:878
 msgid "invalid network address, must not be in reserved class"
 msgstr "adresse réseau invalide, ne doit pas être dans la classe reservée"
 
-#: tiramisu/option.py:899
+#: tiramisu/option.py:890
 msgid "invalid netmask address"
 msgstr "masque de sous-réseau invalide"
 
-#: tiramisu/option.py:915
+#: tiramisu/option.py:906
 msgid "invalid len for opts"
 msgstr "longueur invalide pour opts"
 
-#: tiramisu/option.py:927
-msgid "invalid network {0} ({1}) with netmask {2}, this network is an IP"
-msgstr "réseau invalide {0} ({1}) avec masque {2}, ce réseau est une IP"
-
-#: tiramisu/option.py:932
+#: tiramisu/option.py:920
 msgid "invalid IP {0} ({1}) with netmask {2}, this IP is a network"
 msgstr "IP invalide {0} ({1}) avec masque {2}, cette IP est un réseau"
 
-#: tiramisu/option.py:937
-msgid "invalid IP {0} ({1}) with netmask {2}"
-msgstr "IP invalide {0} ({1}) avec masque {2}"
-
-#: tiramisu/option.py:939
+#: tiramisu/option.py:925
 msgid "invalid network {0} ({1}) with netmask {2}"
 msgstr "réseau invalide {0} ({1}) avec masque {2}"
 
-#: tiramisu/option.py:953
+#: tiramisu/option.py:939
 msgid "invalid broadcast address"
 msgstr "adresse de broadcast invalide"
 
-#: tiramisu/option.py:957
+#: tiramisu/option.py:943
 msgid "invalid len for vals"
 msgstr "longueur invalide pour vals"
 
-#: tiramisu/option.py:962
+#: tiramisu/option.py:948
 msgid ""
 "invalid broadcast {0} ({1}) with network {2} ({3}) and netmask {4} ({5})"
 msgstr ""
 "Broadcast invalide {0} ({1}) avec le réseau {2} ({3}) et le masque {4} ({5})"
 
-#: tiramisu/option.py:984
+#: tiramisu/option.py:970
 msgid "unknown type_ {0} for hostname"
 msgstr "type_ inconnu {0} pour le nom d'hôte"
 
-#: tiramisu/option.py:987
+#: tiramisu/option.py:973
 msgid "allow_ip must be a boolean"
 msgstr "allow_ip doit être un booléen"
 
-#: tiramisu/option.py:989
+#: tiramisu/option.py:975
 msgid "allow_without_dot must be a boolean"
 msgstr "allow_without_dot doit être un booléen"
 
-#: tiramisu/option.py:1028
+#: tiramisu/option.py:1019
 msgid "invalid domainname, must have dot"
 msgstr "nom de domaine invalide, doit avoir un point"
 
-#: tiramisu/option.py:1030
+#: tiramisu/option.py:1021
 msgid "invalid domainname's length (max 255)"
 msgstr "longueur du nom de domaine invalide (maximum {1})"
 
-#: tiramisu/option.py:1032
+#: tiramisu/option.py:1023
 msgid "invalid domainname's length (min 2)"
 msgstr "longueur du nom de domaine invalide (minimum 2)"
 
-#: tiramisu/option.py:1034
+#: tiramisu/option.py:1025
 msgid "invalid domainname"
 msgstr "nom de domaine invalide"
 
-#: tiramisu/option.py:1047
+#: tiramisu/option.py:1038
 msgid "invalid email address, should contains one @"
 msgstr "adresse email invalide, devrait contenir un @"
 
-#: tiramisu/option.py:1050
+#: tiramisu/option.py:1041
 msgid "invalid username in email address"
 msgstr "nom d'utilisateur invalide dans une adresse email"
 
-#: tiramisu/option.py:1063
+#: tiramisu/option.py:1054
 msgid "invalid url, should start with http:// or https://"
 msgstr "URL invalide, devrait démarré avec http:// ou https://"
 
-#: tiramisu/option.py:1082
+#: tiramisu/option.py:1073
 msgid "invalid url, port must be an between 0 and 65536"
 msgstr "URL invalide, port doit être entre 0 et 65536"
 
-#: tiramisu/option.py:1088
+#: tiramisu/option.py:1079
 msgid "invalid url, should ends with filename"
 msgstr "URL invalide, devrait finir avec un nom de fichier"
 
-#: tiramisu/option.py:1099
+#: tiramisu/option.py:1091
+msgid "invalid username"
+msgstr "utilisateur invalide"
+
+#: tiramisu/option.py:1102
 msgid "invalid filename"
 msgstr "nom de fichier invalide"
 
-#: tiramisu/option.py:1126
+#: tiramisu/option.py:1129
 msgid "duplicate option name: {0}"
 msgstr "nom de l'option dupliqué : {0}"
 
-#: tiramisu/option.py:1144
+#: tiramisu/option.py:1147
 msgid "unknown Option {0} in OptionDescription {1}"
 msgstr "Option {0} inconnue pour l'OptionDescription {1}"
 
-#: tiramisu/option.py:1195
+#: tiramisu/option.py:1198
 msgid "duplicate option: {0}"
 msgstr "option dupliquée : {0}"
 
-#: tiramisu/option.py:1225
+#: tiramisu/option.py:1228
 msgid "consistency with option {0} which is not in Config"
 msgstr "consistency avec l'option {0} qui n'est pas dans une Config"
 
-#: tiramisu/option.py:1233
+#: tiramisu/option.py:1236
 msgid "no option for path {0}"
 msgstr "pas d'option pour le chemin {0}"
 
-#: tiramisu/option.py:1239
+#: tiramisu/option.py:1242
 msgid "no option {0} found"
 msgstr "pas d'option {0} trouvée"
 
-#: tiramisu/option.py:1249
+#: tiramisu/option.py:1252
 msgid "cannot change group_type if already set (old {0}, new {1})"
 msgstr "ne peut changer group_type si déjà spécifié (ancien {0}, nouveau {1})"
 
-#: tiramisu/option.py:1261
+#: tiramisu/option.py:1264
 msgid "master group {0} shall not have a subgroup"
 msgstr "groupe maître {0} ne doit pas avoir de sous-groupe"
 
-#: tiramisu/option.py:1264
+#: tiramisu/option.py:1267
 msgid "master group {0} shall not have a symlinkoption"
 msgstr "groupe maître {0} ne doit pas avoir de symlinkoption"
 
-#: tiramisu/option.py:1267
+#: tiramisu/option.py:1270
 msgid "not allowed option {0} in group {1}: this option is not a multi"
 msgstr ""
 "option non autorisée {0} dans le groupe {1} : cette option n'est pas une "
 "multi"
 
-#: tiramisu/option.py:1277
+#: tiramisu/option.py:1280
 msgid "master group with wrong master name for {0}"
 msgstr "le groupe maître avec un nom de maître érroné pour {0}"
 
-#: tiramisu/option.py:1285
+#: tiramisu/option.py:1288
 msgid "callback of master's option shall not refered a slave's ones"
 msgstr ""
 "callback d'une variable maitre ne devrait pas référencer des variables "
 "esclaves"
 
-#: tiramisu/option.py:1293
+#: tiramisu/option.py:1296
 msgid "group_type: {0} not allowed"
 msgstr "group_type : {0} non autorisé"
 
@@ -458,7 +490,7 @@ msgstr "tentative d'accès à une option nommée : {0} avec les propriétés {1}
 msgid "permissive must be a tuple"
 msgstr "permissive doit être un tuple"
 
-#: tiramisu/setting.py:514 tiramisu/value.py:315
+#: tiramisu/setting.py:514 tiramisu/value.py:334
 msgid "invalid generic owner {0}"
 msgstr "invalide owner générique {0}"
 
@@ -495,52 +527,65 @@ msgstr "session déjà utilisée"
 msgid "a dictionary cannot be persistent"
 msgstr "un espace de stockage dictionary ne peut être persistant"
 
-#: tiramisu/value.py:322
+#: tiramisu/value.py:341
 msgid "no value for {0} cannot change owner to {1}"
 msgstr "pas de valeur pour {0} ne peut changer d'utilisateur pour {1}"
 
-#: tiramisu/value.py:442
+#: tiramisu/value.py:426
+msgid "{0} is already a Multi "
+msgstr "{0} est déjà une Multi"
+
+#: tiramisu/value.py:462 tiramisu/value.py:526
 msgid "invalid len for the slave: {0} which has {1} as master"
 msgstr "longueur invalide pour une esclave : {0} qui a {1} comme maître"
 
-#: tiramisu/value.py:466
-msgid "invalid len for the master: {0} which has {1} as slave with greater len"
-msgstr ""
-"longueur invalide pour un maître : {0} qui a {1} une esclave avec une plus "
-"grande longueur"
-
-#: tiramisu/value.py:496
+#: tiramisu/value.py:498
 msgid "cannot append a value on a multi option {0} which is a slave"
 msgstr "ne peut ajouter une valeur sur l'option multi {0} qui est une esclave"
 
-#: tiramisu/value.py:535
+#: tiramisu/value.py:536
 msgid "cannot sort multi option {0} if master or slave"
 msgstr "ne peut trier une option multi {0} pour une maître ou une esclave"
 
-#: tiramisu/value.py:539
+#: tiramisu/value.py:540
 msgid "cmp is not permitted in python v3 or greater"
 msgstr "cmp n'est pas permis en python v3 ou supérieure"
 
-#: tiramisu/value.py:548
+#: tiramisu/value.py:549
 msgid "cannot reverse multi option {0} if master or slave"
 msgstr "ne peut inverser une option multi {0} pour une maître ou une esclave"
 
-#: tiramisu/value.py:556
+#: tiramisu/value.py:557
 msgid "cannot insert multi option {0} if master or slave"
 msgstr "ne peut insérer une option multi {0} pour une maître ou une esclave"
 
-#: tiramisu/value.py:564
+#: tiramisu/value.py:565
 msgid "cannot extend multi option {0} if master or slave"
 msgstr "ne peut étendre une option multi {0} pour une maître ou une esclave"
 
-#: tiramisu/value.py:575
+#: tiramisu/value.py:576
 msgid "invalid value {0} for option {1}: {2}"
 msgstr "valeur invalide {0} pour l'option {1} : {2}"
 
-#: tiramisu/value.py:593
+#: tiramisu/value.py:594
 msgid "cannot pop a value on a multi option {0} which is a slave"
 msgstr "ne peut supprimer une valeur dans l'option multi {0} qui est esclave"
 
+#~ msgid "option not in all_cons_opts"
+#~ msgstr "option non présentante dans all_cons_opts"
+
+#~ msgid "invalid network {0} ({1}) with netmask {2}, this network is an IP"
+#~ msgstr "réseau invalide {0} ({1}) avec masque {2}, ce réseau est une IP"
+
+#~ msgid "invalid IP {0} ({1}) with netmask {2}"
+#~ msgstr "IP invalide {0} ({1}) avec masque {2}"
+
+#~ msgid ""
+#~ "invalid len for the master: {0} which has {1} as slave with greater len"
+#~ msgstr ""
+#~ "longueur invalide pour un maître : {0} qui a {1} une esclave avec une "
+#~ "plus grande longueur"
+
 #~ msgid ""
 #~ "unable to carry out a calculation, option value with multi types must "
 #~ "have same length for: {0}"
@@ -588,17 +633,6 @@ msgstr "ne peut supprimer une valeur dans l'option multi {0} qui est esclave"
 #~ msgid "invalid name: {0} for optiondescription"
 #~ msgstr "nom invalide : {0} pour l'optiondescription"
 
-#~ msgid "metaconfig's children must be config, not {0}"
-#~ msgstr "enfants d'une metaconfig doit être une config, pas {0}"
-
-#~ msgid "all config in metaconfig must have same optiondescription"
-#~ msgstr ""
-#~ "toutes les configs d'une metaconfig doivent avoir la même "
-#~ "optiondescription"
-
-#~ msgid "child has already a metaconfig's"
-#~ msgstr "enfant a déjà une metaconfig"
-
 #~ msgid "not allowed group_type : {0}"
 #~ msgstr "group_type non autorisé : {0}"
 
index e572a40..2a20646 100644 (file)
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2014-01-25 11:30+CET\n"
+"POT-Creation-Date: 2014-03-09 20:13+CET\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"
@@ -15,7 +15,7 @@ msgstr ""
 "Generated-By: pygettext.py 1.5\n"
 
 
-#: tiramisu/autolib.py:159
+#: tiramisu/autolib.py:162
 msgid "unable to carry out a calculation, option {0} has properties: {1} for: {2}"
 msgstr ""
 
@@ -27,39 +27,63 @@ msgstr ""
 msgid "unknown group_type: {0}"
 msgstr ""
 
-#: tiramisu/config.py:166 tiramisu/setting.py:339 tiramisu/value.py:57
-#: tiramisu/value.py:427
+#: tiramisu/config.py:164 tiramisu/setting.py:339 tiramisu/value.py:57
+#: tiramisu/value.py:449
 msgid "the context does not exist anymore"
 msgstr ""
 
-#: tiramisu/config.py:171
-msgid "no option description found for this config (may be metaconfig without meta)"
+#: tiramisu/config.py:169
+msgid "no option description found for this config (may be GroupConfig)"
 msgstr ""
 
-#: tiramisu/config.py:197
+#: tiramisu/config.py:195
 msgid "can't assign to an OptionDescription"
 msgstr ""
 
-#: tiramisu/config.py:330
+#: tiramisu/config.py:325
 msgid "unknown type_ type {0}for _find"
 msgstr ""
 
-#: tiramisu/config.py:369
+#: tiramisu/config.py:364
 msgid "no option found in config with these criteria"
 msgstr ""
 
-#: tiramisu/config.py:419
+#: tiramisu/config.py:414
 msgid "make_dict can't filtering with value without option"
 msgstr ""
 
-#: tiramisu/config.py:440
+#: tiramisu/config.py:435
 msgid "unexpected path {0}, should start with {1}"
 msgstr ""
 
-#: tiramisu/config.py:500
+#: tiramisu/config.py:489
 msgid "opt in getowner must be an option not {0}"
 msgstr ""
 
+#: tiramisu/config.py:532
+msgid "cannot serialize Config with MetaConfig"
+msgstr ""
+
+#: tiramisu/config.py:546
+msgid "this storage is not serialisable, could be a none persistent storage"
+msgstr ""
+
+#: tiramisu/config.py:609
+msgid "metaconfig's children must be a list"
+msgstr ""
+
+#: tiramisu/config.py:703
+msgid "metaconfig's children should be config, not {0}"
+msgstr ""
+
+#: tiramisu/config.py:707
+msgid "child has already a metaconfig's"
+msgstr ""
+
+#: tiramisu/config.py:711
+msgid "all config in metaconfig must have the same optiondescription"
+msgstr ""
+
 #: tiramisu/option.py:67
 msgid "invalid name: {0} for option"
 msgstr ""
@@ -72,7 +96,7 @@ msgstr ""
 msgid "'{0}' ({1}) object attribute '{2}' is read-only"
 msgstr ""
 
-#: tiramisu/option.py:141 tiramisu/value.py:376
+#: tiramisu/option.py:141 tiramisu/value.py:395
 msgid "information's item not found: {0}"
 msgstr ""
 
@@ -96,235 +120,243 @@ msgstr ""
 msgid "params defined for a callback function but no callback defined yet for option {0}"
 msgstr ""
 
-#: tiramisu/option.py:359
-msgid "option not in all_cons_opts"
-msgstr ""
-
-#: tiramisu/option.py:425 tiramisu/option.py:435
+#: tiramisu/option.py:423 tiramisu/option.py:433
 msgid "invalid value for option {0}: {1}"
 msgstr ""
 
-#: tiramisu/option.py:452
+#: tiramisu/option.py:450
 msgid "invalid value {0} for option {1} which must be a list"
 msgstr ""
 
-#: tiramisu/option.py:508
+#: tiramisu/option.py:506
 msgid "consistency should be set with an option"
 msgstr ""
 
-#: tiramisu/option.py:510
+#: tiramisu/option.py:508
 msgid "cannot add consistency with itself"
 msgstr ""
 
-#: tiramisu/option.py:512
+#: tiramisu/option.py:510
 msgid "every options in consistency should be multi or none"
 msgstr ""
 
-#: tiramisu/option.py:532
+#: tiramisu/option.py:530
 msgid "same value for {0} and {1}"
 msgstr ""
 
-#: tiramisu/option.py:641
+#: tiramisu/option.py:623
 msgid "values must be a tuple for {0}"
 msgstr ""
 
-#: tiramisu/option.py:644
+#: tiramisu/option.py:626
 msgid "open_values must be a boolean for {0}"
 msgstr ""
 
-#: tiramisu/option.py:666
+#: tiramisu/option.py:648
 msgid "value {0} is not permitted, only {1} is allowed"
 msgstr ""
 
-#: tiramisu/option.py:678
+#: tiramisu/option.py:660
 msgid "invalid boolean"
 msgstr ""
 
-#: tiramisu/option.py:688
+#: tiramisu/option.py:670
 msgid "invalid integer"
 msgstr ""
 
-#: tiramisu/option.py:698
+#: tiramisu/option.py:680
 msgid "invalid float"
 msgstr ""
 
-#: tiramisu/option.py:708
+#: tiramisu/option.py:690
 msgid "invalid string"
 msgstr ""
 
-#: tiramisu/option.py:725
+#: tiramisu/option.py:707
 msgid "invalid unicode"
 msgstr ""
 
-#: tiramisu/option.py:737
+#: tiramisu/option.py:719
 msgid "malformed symlinkoption must be an option for symlink {0}"
 msgstr ""
 
-#: tiramisu/option.py:787 tiramisu/option.py:792
+#: tiramisu/option.py:770 tiramisu/option.py:773 tiramisu/option.py:778
 msgid "invalid IP"
 msgstr ""
 
-#: tiramisu/option.py:797
+#: tiramisu/option.py:783
 msgid "invalid IP, mustn't not be in reserved class"
 msgstr ""
 
-#: tiramisu/option.py:799
+#: tiramisu/option.py:785
 msgid "invalid IP, must be in private class"
 msgstr ""
 
-#: tiramisu/option.py:837
+#: tiramisu/option.py:823
 msgid "inconsistency in allowed range"
 msgstr ""
 
-#: tiramisu/option.py:842
+#: tiramisu/option.py:828
 msgid "max value is empty"
 msgstr ""
 
-#: tiramisu/option.py:882
+#: tiramisu/option.py:845
+msgid "invalid port, range must have two values only"
+msgstr ""
+
+#: tiramisu/option.py:848
+msgid "invalid port, first port in range must be smaller than the second one"
+msgstr ""
+
+#: tiramisu/option.py:857
+msgid "invalid port"
+msgstr ""
+
+#: tiramisu/option.py:859
+msgid "invalid port, must be an between {0} and {1}"
+msgstr ""
+
+#: tiramisu/option.py:873
 msgid "invalid network address"
 msgstr ""
 
-#: tiramisu/option.py:887
+#: tiramisu/option.py:878
 msgid "invalid network address, must not be in reserved class"
 msgstr ""
 
-#: tiramisu/option.py:899
+#: tiramisu/option.py:890
 msgid "invalid netmask address"
 msgstr ""
 
-#: tiramisu/option.py:915
+#: tiramisu/option.py:906
 msgid "invalid len for opts"
 msgstr ""
 
-#: tiramisu/option.py:927
-msgid "invalid network {0} ({1}) with netmask {2}, this network is an IP"
-msgstr ""
-
-#: tiramisu/option.py:932
+#: tiramisu/option.py:920
 msgid "invalid IP {0} ({1}) with netmask {2}, this IP is a network"
 msgstr ""
 
-#: tiramisu/option.py:937
-msgid "invalid IP {0} ({1}) with netmask {2}"
-msgstr ""
-
-#: tiramisu/option.py:939
+#: tiramisu/option.py:925
 msgid "invalid network {0} ({1}) with netmask {2}"
 msgstr ""
 
-#: tiramisu/option.py:953
+#: tiramisu/option.py:939
 msgid "invalid broadcast address"
 msgstr ""
 
-#: tiramisu/option.py:957
+#: tiramisu/option.py:943
 msgid "invalid len for vals"
 msgstr ""
 
-#: tiramisu/option.py:962
+#: tiramisu/option.py:948
 msgid "invalid broadcast {0} ({1}) with network {2} ({3}) and netmask {4} ({5})"
 msgstr ""
 
-#: tiramisu/option.py:984
+#: tiramisu/option.py:970
 msgid "unknown type_ {0} for hostname"
 msgstr ""
 
-#: tiramisu/option.py:987
+#: tiramisu/option.py:973
 msgid "allow_ip must be a boolean"
 msgstr ""
 
-#: tiramisu/option.py:989
+#: tiramisu/option.py:975
 msgid "allow_without_dot must be a boolean"
 msgstr ""
 
-#: tiramisu/option.py:1028
+#: tiramisu/option.py:1019
 msgid "invalid domainname, must have dot"
 msgstr ""
 
-#: tiramisu/option.py:1030
+#: tiramisu/option.py:1021
 msgid "invalid domainname's length (max 255)"
 msgstr ""
 
-#: tiramisu/option.py:1032
+#: tiramisu/option.py:1023
 msgid "invalid domainname's length (min 2)"
 msgstr ""
 
-#: tiramisu/option.py:1034
+#: tiramisu/option.py:1025
 msgid "invalid domainname"
 msgstr ""
 
-#: tiramisu/option.py:1047
+#: tiramisu/option.py:1038
 msgid "invalid email address, should contains one @"
 msgstr ""
 
-#: tiramisu/option.py:1050
+#: tiramisu/option.py:1041
 msgid "invalid username in email address"
 msgstr ""
 
-#: tiramisu/option.py:1063
+#: tiramisu/option.py:1054
 msgid "invalid url, should start with http:// or https://"
 msgstr ""
 
-#: tiramisu/option.py:1082
+#: tiramisu/option.py:1073
 msgid "invalid url, port must be an between 0 and 65536"
 msgstr ""
 
-#: tiramisu/option.py:1088
+#: tiramisu/option.py:1079
 msgid "invalid url, should ends with filename"
 msgstr ""
 
-#: tiramisu/option.py:1099
+#: tiramisu/option.py:1091
+msgid "invalid username"
+msgstr ""
+
+#: tiramisu/option.py:1102
 msgid "invalid filename"
 msgstr ""
 
-#: tiramisu/option.py:1126
+#: tiramisu/option.py:1129
 msgid "duplicate option name: {0}"
 msgstr ""
 
-#: tiramisu/option.py:1144
+#: tiramisu/option.py:1147
 msgid "unknown Option {0} in OptionDescription {1}"
 msgstr ""
 
-#: tiramisu/option.py:1195
+#: tiramisu/option.py:1198
 msgid "duplicate option: {0}"
 msgstr ""
 
-#: tiramisu/option.py:1225
+#: tiramisu/option.py:1228
 msgid "consistency with option {0} which is not in Config"
 msgstr ""
 
-#: tiramisu/option.py:1233
+#: tiramisu/option.py:1236
 msgid "no option for path {0}"
 msgstr ""
 
-#: tiramisu/option.py:1239
+#: tiramisu/option.py:1242
 msgid "no option {0} found"
 msgstr ""
 
-#: tiramisu/option.py:1249
+#: tiramisu/option.py:1252
 msgid "cannot change group_type if already set (old {0}, new {1})"
 msgstr ""
 
-#: tiramisu/option.py:1261
+#: tiramisu/option.py:1264
 msgid "master group {0} shall not have a subgroup"
 msgstr ""
 
-#: tiramisu/option.py:1264
+#: tiramisu/option.py:1267
 msgid "master group {0} shall not have a symlinkoption"
 msgstr ""
 
-#: tiramisu/option.py:1267
+#: tiramisu/option.py:1270
 msgid "not allowed option {0} in group {1}: this option is not a multi"
 msgstr ""
 
-#: tiramisu/option.py:1277
+#: tiramisu/option.py:1280
 msgid "master group with wrong master name for {0}"
 msgstr ""
 
-#: tiramisu/option.py:1285
+#: tiramisu/option.py:1288
 msgid "callback of master's option shall not refered a slave's ones"
 msgstr ""
 
-#: tiramisu/option.py:1293
+#: tiramisu/option.py:1296
 msgid "group_type: {0} not allowed"
 msgstr ""
 
@@ -424,7 +456,7 @@ msgstr ""
 msgid "permissive must be a tuple"
 msgstr ""
 
-#: tiramisu/setting.py:514 tiramisu/value.py:315
+#: tiramisu/setting.py:514 tiramisu/value.py:334
 msgid "invalid generic owner {0}"
 msgstr ""
 
@@ -456,47 +488,47 @@ msgstr ""
 msgid "a dictionary cannot be persistent"
 msgstr ""
 
-#: tiramisu/value.py:322
+#: tiramisu/value.py:341
 msgid "no value for {0} cannot change owner to {1}"
 msgstr ""
 
-#: tiramisu/value.py:442
-msgid "invalid len for the slave: {0} which has {1} as master"
+#: tiramisu/value.py:426
+msgid "{0} is already a Multi "
 msgstr ""
 
-#: tiramisu/value.py:466
-msgid "invalid len for the master: {0} which has {1} as slave with greater len"
+#: tiramisu/value.py:462 tiramisu/value.py:526
+msgid "invalid len for the slave: {0} which has {1} as master"
 msgstr ""
 
-#: tiramisu/value.py:496
+#: tiramisu/value.py:498
 msgid "cannot append a value on a multi option {0} which is a slave"
 msgstr ""
 
-#: tiramisu/value.py:535
+#: tiramisu/value.py:536
 msgid "cannot sort multi option {0} if master or slave"
 msgstr ""
 
-#: tiramisu/value.py:539
+#: tiramisu/value.py:540
 msgid "cmp is not permitted in python v3 or greater"
 msgstr ""
 
-#: tiramisu/value.py:548
+#: tiramisu/value.py:549
 msgid "cannot reverse multi option {0} if master or slave"
 msgstr ""
 
-#: tiramisu/value.py:556
+#: tiramisu/value.py:557
 msgid "cannot insert multi option {0} if master or slave"
 msgstr ""
 
-#: tiramisu/value.py:564
+#: tiramisu/value.py:565
 msgid "cannot extend multi option {0} if master or slave"
 msgstr ""
 
-#: tiramisu/value.py:575
+#: tiramisu/value.py:576
 msgid "invalid value {0} for option {1}: {2}"
 msgstr ""
 
-#: tiramisu/value.py:593
+#: tiramisu/value.py:594
 msgid "cannot pop a value on a multi option {0} which is a slave"
 msgstr ""