Compare commits

..

No commits in common. "e8921795d3ef097d471bdd05e021f3f6e752907e" and "aa774cbce96a981512611de8879ad8470f2a3237" have entirely different histories.

29 changed files with 340 additions and 525 deletions

View file

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Tiramisu\n" "Project-Id-Version: Tiramisu\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-04 15:43+0200\n" "POT-Creation-Date: 2025-09-19 22:03+0200\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n" "Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n"
"Language-Team: Tiramisu's team <egarette@cadoles.com>\n" "Language-Team: Tiramisu's team <egarette@cadoles.com>\n"
@ -34,7 +34,7 @@ msgstr "Ne peut avoir de warnings durant une validation"
msgid "Commands:" msgid "Commands:"
msgstr "Commandes :" msgstr "Commandes :"
#: tiramisu/api.py:118 tiramisu/api.py:1963 #: tiramisu/api.py:118 tiramisu/api.py:1955
msgid "please specify a valid sub function ({0}.{1})" msgid "please specify a valid sub function ({0}.{1})"
msgstr "veuillez spécifier une sous fonction valide ({0}.{1})" msgstr "veuillez spécifier une sous fonction valide ({0}.{1})"
@ -42,7 +42,7 @@ msgstr "veuillez spécifier une sous fonction valide ({0}.{1})"
msgid "please do not specify index ({0}.{1})" msgid "please do not specify index ({0}.{1})"
msgstr "veuillez ne pas spécifier d'index ({0}.{1})" msgstr "veuillez ne pas spécifier d'index ({0}.{1})"
#: tiramisu/api.py:211 tiramisu/api.py:948 #: tiramisu/api.py:211 tiramisu/api.py:940
msgid "please specify index with a follower option ({0}.{1})" msgid "please specify index with a follower option ({0}.{1})"
msgstr "veuillez spécifier un index avec une option suiveuse ({0}.{1})" msgstr "veuillez spécifier un index avec une option suiveuse ({0}.{1})"
@ -50,15 +50,7 @@ msgstr "veuillez spécifier un index avec une option suiveuse ({0}.{1})"
msgid "please specify a valid sub function ({0}.{1}): {2}" msgid "please specify a valid sub function ({0}.{1}): {2}"
msgstr "veuillez spécifier une sous fonction valide ({0}.{1}): {2}" msgstr "veuillez spécifier une sous fonction valide ({0}.{1}): {2}"
#: tiramisu/api.py:447 #: tiramisu/api.py:525
msgid "optiondescription"
msgstr "option description"
#: tiramisu/api.py:452
msgid "symlink"
msgstr "lien symbolique"
#: tiramisu/api.py:533
msgid "" msgid ""
"the option {0} is not a dynamic option, cannot get identifiers with " "the option {0} is not a dynamic option, cannot get identifiers with "
"only_self parameter to True" "only_self parameter to True"
@ -66,15 +58,15 @@ msgstr ""
"l'option {0} n'est pas une option dynamique, ne peut retrouver l'identifiant " "l'option {0} n'est pas une option dynamique, ne peut retrouver l'identifiant "
"avec le paramètre only_self à True" "avec le paramètre only_self à True"
#: tiramisu/api.py:621 #: tiramisu/api.py:613
msgid "cannot get option from a follower symlink without index" msgid "cannot get option from a follower symlink without index"
msgstr "ne peut avoir d'option pour une symlink suiveuse sans index" msgstr "ne peut avoir d'option pour une symlink suiveuse sans index"
#: tiramisu/api.py:699 #: tiramisu/api.py:691
msgid "cannot add this property: \"{0}\"" msgid "cannot add this property: \"{0}\""
msgstr "ne peut pas ajouter cette propriété : \"{0}\"" msgstr "ne peut pas ajouter cette propriété : \"{0}\""
#: tiramisu/api.py:726 #: tiramisu/api.py:718
msgid "" msgid ""
"cannot remove option's property \"{0}\", use permissive instead in option " "cannot remove option's property \"{0}\", use permissive instead in option "
"\"{1}\"" "\"{1}\""
@ -82,11 +74,11 @@ msgstr ""
"ne supprimer la propriété \"{0}\" de l'option, utiliser plutôt permissive " "ne supprimer la propriété \"{0}\" de l'option, utiliser plutôt permissive "
"dans l'option \"{1}\"" "dans l'option \"{1}\""
#: tiramisu/api.py:730 #: tiramisu/api.py:722
msgid "cannot find \"{0}\" in option \"{1}\"" msgid "cannot find \"{0}\" in option \"{1}\""
msgstr "ne peut trouver \"{0}\" dans l'option \"{1}\"" msgstr "ne peut trouver \"{0}\" dans l'option \"{1}\""
#: tiramisu/api.py:735 #: tiramisu/api.py:727
msgid "" msgid ""
"cannot remove option's property \"{0}\", use permissive instead in option " "cannot remove option's property \"{0}\", use permissive instead in option "
"\"{1}\" at index \"{2}\"" "\"{1}\" at index \"{2}\""
@ -94,35 +86,35 @@ msgstr ""
"ne peut supprimer la propriété \"{0}\" de l'option, utilisez plutôt " "ne peut supprimer la propriété \"{0}\" de l'option, utilisez plutôt "
"permissive dans l'option \"{1}\" a l'index \"{2}\"" "permissive dans l'option \"{1}\" a l'index \"{2}\""
#: tiramisu/api.py:739 #: tiramisu/api.py:731
msgid "cannot find \"{0}\" in option \"{1}\" at index \"{2}\"" msgid "cannot find \"{0}\" in option \"{1}\" at index \"{2}\""
msgstr "ne peut trouver \"{0}\" dans l'option \"{1}\" à l'index \"{2}\"" msgstr "ne peut trouver \"{0}\" dans l'option \"{1}\" à l'index \"{2}\""
#: tiramisu/api.py:783 #: tiramisu/api.py:775
msgid "cannot find \"{0}\"" msgid "cannot find \"{0}\""
msgstr "ne peut trouver \"{0}\"" msgstr "ne peut trouver \"{0}\""
#: tiramisu/api.py:965 #: tiramisu/api.py:957
msgid "only multi value has defaultmulti" msgid "only multi value has defaultmulti"
msgstr "seule les valeurs multiple a l'attribut defaultmulti" msgstr "seule les valeurs multiple a l'attribut defaultmulti"
#: tiramisu/api.py:1129 #: tiramisu/api.py:1121
msgid "please specify a valid sub function ({0}.{1}) for {2}" msgid "please specify a valid sub function ({0}.{1}) for {2}"
msgstr "veuillez spécifier une sous fonction valide ({0}.{1}) pour {2}" msgstr "veuillez spécifier une sous fonction valide ({0}.{1}) pour {2}"
#: tiramisu/api.py:1528 #: tiramisu/api.py:1520
msgid "properties must be a frozenset" msgid "properties must be a frozenset"
msgstr "une propriété doit être de type frozenset" msgstr "une propriété doit être de type frozenset"
#: tiramisu/api.py:1532 tiramisu/api.py:1559 #: tiramisu/api.py:1524 tiramisu/api.py:1551
msgid "unknown when {} (must be in append or remove)" msgid "unknown when {} (must be in append or remove)"
msgstr "value {} inconsistent (doit être append ou remove)" msgstr "value {} inconsistent (doit être append ou remove)"
#: tiramisu/api.py:1545 tiramisu/api.py:1569 tiramisu/config.py:1712 #: tiramisu/api.py:1537 tiramisu/api.py:1561 tiramisu/config.py:1691
msgid "unknown type {}" msgid "unknown type {}"
msgstr "type inconnu {}" msgstr "type inconnu {}"
#: tiramisu/api.py:1935 #: tiramisu/api.py:1927
msgid "do not use unrestraint, nowarnings or forcepermissive together" msgid "do not use unrestraint, nowarnings or forcepermissive together"
msgstr "" msgstr ""
"il ne faut pas utiliser unrestraint, nowarnings ou forcepermissive ensemble" "il ne faut pas utiliser unrestraint, nowarnings ou forcepermissive ensemble"
@ -246,51 +238,50 @@ msgstr ""
msgid "unexpected error \"{1}\" in function \"{2}\" for option {0}" msgid "unexpected error \"{1}\" in function \"{2}\" for option {0}"
msgstr "erreur inattendue \"{1}\" dans la fonction \"{2}\" pour l'option {0}" msgstr "erreur inattendue \"{1}\" dans la fonction \"{2}\" pour l'option {0}"
#: tiramisu/config.py:392 tiramisu/config.py:414 tiramisu/config.py:745 #: tiramisu/config.py:391 tiramisu/config.py:413
#: tiramisu/config.py:754 msgid "option name {0} is not unique in {1}"
msgid "option name \"{0}\" is not unique in {1}" msgstr "le nom de l'option {0} n'est pas unique dans {1}"
msgstr "le nom de l'option \"{0}\" n'est pas unique dans {1}"
#: tiramisu/config.py:639 #: tiramisu/config.py:638
msgid "there is no option description for this config (may be GroupConfig)" msgid "there is no option description for this config (may be GroupConfig)"
msgstr "" msgstr ""
"il n'y a pas d'option description trouvé pour cette config (peut être un " "il n'y a pas d'option description trouvé pour cette config (peut être un "
"GroupConfig)" "GroupConfig)"
#: tiramisu/config.py:1010 tiramisu/option/optiondescription.py:74 #: tiramisu/config.py:989 tiramisu/option/optiondescription.py:74
msgid "option description seems to be part of an other config" msgid "option description seems to be part of an other config"
msgstr "l'option description semble faire parti d'une autre config" msgstr "l'option description semble faire parti d'une autre config"
#: tiramisu/config.py:1172 #: tiramisu/config.py:1151
msgid "parent of {0} not already exists" msgid "parent of {0} not already exists"
msgstr "le parent de {0} n'existe plus" msgstr "le parent de {0} n'existe plus"
#: tiramisu/config.py:1219 #: tiramisu/config.py:1198
msgid "cannot set leadership object has root optiondescription" msgid "cannot set leadership object has root optiondescription"
msgstr "ne peut assigner un objet leadership comme optiondescription racine" msgstr "ne peut assigner un objet leadership comme optiondescription racine"
#: tiramisu/config.py:1222 #: tiramisu/config.py:1201
msgid "cannot set dynoptiondescription object has root optiondescription" msgid "cannot set dynoptiondescription object has root optiondescription"
msgstr "" msgstr ""
"ne peut assigner un objet dynoptiondescription comme optiondescription racine" "ne peut assigner un objet dynoptiondescription comme optiondescription racine"
#: tiramisu/config.py:1269 #: tiramisu/config.py:1248
msgid "child must be a Config, GroupConfig, MixConfig or MetaConfig" msgid "child must be a Config, GroupConfig, MixConfig or MetaConfig"
msgstr "l'enfant doit être une Config, GroupConfig, MixConfig ou MetaConfig" msgstr "l'enfant doit être une Config, GroupConfig, MixConfig ou MetaConfig"
#: tiramisu/config.py:1278 #: tiramisu/config.py:1257
msgid "config name must be uniq in groupconfig for \"{0}\"" msgid "config name must be uniq in groupconfig for \"{0}\""
msgstr "le nom d'un config doit être unique dans un groupconfig pour \"{0}\"" msgstr "le nom d'un config doit être unique dans un groupconfig pour \"{0}\""
#: tiramisu/config.py:1487 #: tiramisu/config.py:1466
msgid "unknown config \"{}\"" msgid "unknown config \"{}\""
msgstr "config \"{}\" inconnue" msgstr "config \"{}\" inconnue"
#: tiramisu/config.py:1512 #: tiramisu/config.py:1491
msgid "child must be a Config, MixConfig or MetaConfig" msgid "child must be a Config, MixConfig or MetaConfig"
msgstr "l'enfant doit être une Config, MixConfig ou MetaConfig" msgstr "l'enfant doit être une Config, MixConfig ou MetaConfig"
#: tiramisu/config.py:1547 #: tiramisu/config.py:1526
msgid "" msgid ""
"force_default, force_default_if_same or force_dont_change_value cannot be " "force_default, force_default_if_same or force_dont_change_value cannot be "
"set with only_config" "set with only_config"
@ -298,43 +289,43 @@ msgstr ""
"force_default, force_default_if_same ou force_dont_change_value ne peuvent " "force_default, force_default_if_same ou force_dont_change_value ne peuvent "
"pas être spécifié avec only_config" "pas être spécifié avec only_config"
#: tiramisu/config.py:1557 #: tiramisu/config.py:1536
msgid "force_default and force_dont_change_value cannot be set together" msgid "force_default and force_dont_change_value cannot be set together"
msgstr "" msgstr ""
"force_default et force_dont_change_value ne peuvent pas être mis ensemble" "force_default et force_dont_change_value ne peuvent pas être mis ensemble"
#: tiramisu/config.py:1708 #: tiramisu/config.py:1687
msgid "config name must be uniq in groupconfig for {0}" msgid "config name must be uniq in groupconfig for {0}"
msgstr "le nom de la config doit être unique dans un groupconfig pour {0}" msgstr "le nom de la config doit être unique dans un groupconfig pour {0}"
#: tiramisu/config.py:1753 #: tiramisu/config.py:1732
msgid "config added has no name, the name is mandatory" msgid "config added has no name, the name is mandatory"
msgstr "la config ajoutée n'a pas de nom, le nom est obligatoire" msgstr "la config ajoutée n'a pas de nom, le nom est obligatoire"
#: tiramisu/config.py:1758 #: tiramisu/config.py:1737
msgid "config name \"{0}\" is not uniq in groupconfig \"{1}\"" msgid "config name \"{0}\" is not uniq in groupconfig \"{1}\""
msgstr "" msgstr ""
"le nom d'un config \"{0}\" n'est pas unique dans le groupconfig \"{1}\"" "le nom d'un config \"{0}\" n'est pas unique dans le groupconfig \"{1}\""
#: tiramisu/config.py:1776 tiramisu/config.py:1782 #: tiramisu/config.py:1755 tiramisu/config.py:1761
msgid "cannot find the config {0}" msgid "cannot find the config {0}"
msgstr "ne peut pas trouver la config {0}" msgstr "ne peut pas trouver la config {0}"
#: tiramisu/config.py:1808 #: tiramisu/config.py:1787
msgid "MetaConfig with optiondescription must have string has child, not {}" msgid "MetaConfig with optiondescription must have string has child, not {}"
msgstr "" msgstr ""
"MetaConfig avec une optiondescription doit avoir un nom comme enfant, pas {}" "MetaConfig avec une optiondescription doit avoir un nom comme enfant, pas {}"
#: tiramisu/config.py:1820 #: tiramisu/config.py:1799
msgid "child must be a Config or MetaConfig" msgid "child must be a Config or MetaConfig"
msgstr "enfant doit être une une Config ou une MetaConfig" msgstr "enfant doit être une une Config ou une MetaConfig"
#: tiramisu/config.py:1825 #: tiramisu/config.py:1804
msgid "all config in metaconfig must have the same optiondescription" msgid "all config in metaconfig must have the same optiondescription"
msgstr "" msgstr ""
"toutes les configs d'une metaconfig doivent avoir la même optiondescription" "toutes les configs d'une metaconfig doivent avoir la même optiondescription"
#: tiramisu/config.py:1842 #: tiramisu/config.py:1821
msgid "metaconfig must have the same optiondescription" msgid "metaconfig must have the same optiondescription"
msgstr "metaconfig doivent avoir la même optiondescription" msgstr "metaconfig doivent avoir la même optiondescription"
@ -479,19 +470,11 @@ msgid "attention, \"{0}\" could be an invalid {1} for {2} at index \"{3}\""
msgstr "" msgstr ""
"attention, \"{0}\" peut être un {1} invalide pour {2} à l'index \"{3}\"" "attention, \"{0}\" peut être un {1} invalide pour {2} à l'index \"{3}\""
#: tiramisu/error.py:370 #: tiramisu/error.py:368 tiramisu/error.py:379
msgid "{2} has an invalid {1}"
msgstr "{2} a un {1} invalide"
#: tiramisu/error.py:372
msgid "{2} at index \"{3}\" has an invalid {1}"
msgstr "{2} à l'index a un invalide {1}"
#: tiramisu/error.py:375 tiramisu/error.py:386
msgid "\"{0}\" is an invalid {1} for {2}" msgid "\"{0}\" is an invalid {1} for {2}"
msgstr "\"{0}\" est une valeur invalide pour l'option {2} de type {1}" msgstr "\"{0}\" est une valeur invalide pour l'option {2} de type {1}"
#: tiramisu/error.py:377 #: tiramisu/error.py:370
msgid "\"{0}\" is an invalid {1} for {2} at index \"{3}\"" msgid "\"{0}\" is an invalid {1} for {2} at index \"{3}\""
msgstr "\"{0}\" est un {1} invalide pour {2} à l'index \"{3}\"" msgstr "\"{0}\" est un {1} invalide pour {2} à l'index \"{3}\""
@ -580,79 +563,63 @@ msgstr ""
"type {0} invalide pour des propriétés pour {1}, doit être des caractères ou " "type {0} invalide pour des propriétés pour {1}, doit être des caractères ou "
"un objet Calculation" "un objet Calculation"
#: tiramisu/option/baseoption.py:254 #: tiramisu/option/baseoption.py:253
msgid "information's item for {0} not found: \"{1}\"" msgid "information's item for {0} not found: \"{1}\""
msgstr "item pour {0} dans les informations non trouvée: \"{1}\"" msgstr "item pour {0} dans les informations non trouvée: \"{1}\""
#: tiramisu/option/baseoption.py:272 #: tiramisu/option/baseoption.py:271
msgid "'{0}' ({1}) object attribute '{2}' is read-only" msgid "'{0}' ({1}) object attribute '{2}' is read-only"
msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule" msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule"
#: tiramisu/option/baseoption.py:313 #: tiramisu/option/baseoption.py:312
msgid "\"{}\" ({}) object attribute \"{}\" is read-only" msgid "\"{}\" ({}) object attribute \"{}\" is read-only"
msgstr "\"{}\" ({}) l'attribut de l'objet \"{}\" est en lecture seule" msgstr "\"{}\" ({}) l'attribut de l'objet \"{}\" est en lecture seule"
#: tiramisu/option/baseoption.py:325 #: tiramisu/option/baseoption.py:324
msgid "{0} not part of any Config" msgid "{0} not part of any Config"
msgstr "{0} ne fait pas parti d'une Config" msgstr "{0} ne fait pas parti d'une Config"
#: tiramisu/option/booloption.py:33 #: tiramisu/option/broadcastoption.py:41
msgid "boolean" msgid "invalid string"
msgstr "booléen" msgstr "invalide caractère"
#: tiramisu/option/broadcastoption.py:34 #: tiramisu/option/choiceoption.py:52
msgid "broadcast address"
msgstr "adresse de broadcast"
#: tiramisu/option/choiceoption.py:41
msgid "choice"
msgstr "choix"
#: tiramisu/option/choiceoption.py:53
msgid "values must be a tuple or a calculation for {0}" msgid "values must be a tuple or a calculation for {0}"
msgstr "les valeurs doivent être un tuple ou une fonction pour {0}" msgstr "les valeurs doivent être un tuple ou une fonction pour {0}"
#: tiramisu/option/choiceoption.py:76 #: tiramisu/option/choiceoption.py:75
msgid "the calculated values \"{0}\" for \"{1}\" is not a list" msgid "the calculated values \"{0}\" for \"{1}\" is not a list"
msgstr "les valeurs calculées \"{0}\" pour \"{1}\" n'est pas une liste" msgstr "les valeurs calculées \"{0}\" pour \"{1}\" n'est pas une liste"
#: tiramisu/option/choiceoption.py:107 #: tiramisu/option/choiceoption.py:106
msgid "only \"{0}\" is allowed" msgid "only \"{0}\" is allowed"
msgstr "seul \"{0}\" est autorisé" msgstr "seul \"{0}\" est autorisé"
#: tiramisu/option/choiceoption.py:109 #: tiramisu/option/choiceoption.py:108
msgid "only {0} are allowed" msgid "only {0} are allowed"
msgstr "seul {0} sont autorisées" msgstr "seul {0} sont autorisées"
#: tiramisu/option/dateoption.py:34 #: tiramisu/option/domainnameoption.py:67
msgid "date"
msgstr "date"
#: tiramisu/option/domainnameoption.py:46
msgid "domain name"
msgstr "nom de domaine"
#: tiramisu/option/domainnameoption.py:68
msgid "unknown type {0} for hostname" msgid "unknown type {0} for hostname"
msgstr "type_ inconnu {0} pour le nom d'hôte" msgstr "type_ inconnu {0} pour le nom d'hôte"
#: tiramisu/option/domainnameoption.py:71 #: tiramisu/option/domainnameoption.py:70
msgid "allow_ip must be a boolean" msgid "allow_ip must be a boolean"
msgstr "allow_ip doit être un booléen" msgstr "allow_ip doit être un booléen"
#: tiramisu/option/domainnameoption.py:73 #: tiramisu/option/domainnameoption.py:72
msgid "allow_cidr_network must be a boolean" msgid "allow_cidr_network must be a boolean"
msgstr "allow_cidr_network doit être un booléen" msgstr "allow_cidr_network doit être un booléen"
#: tiramisu/option/domainnameoption.py:75 #: tiramisu/option/domainnameoption.py:74
msgid "allow_without_dot must be a boolean" msgid "allow_without_dot must be a boolean"
msgstr "allow_without_dot doit être un booléen" msgstr "allow_without_dot doit être un booléen"
#: tiramisu/option/domainnameoption.py:77 #: tiramisu/option/domainnameoption.py:76
msgid "allow_startswith_dot must be a boolean" msgid "allow_startswith_dot must be a boolean"
msgstr "allow_startswith_dot doit être un booléen" msgstr "allow_startswith_dot doit être un booléen"
#: tiramisu/option/domainnameoption.py:88 #: tiramisu/option/domainnameoption.py:87
msgid "" msgid ""
"must start with lowercase characters followed by lowercase characters, " "must start with lowercase characters followed by lowercase characters, "
"number, \"-\" and \".\" characters are allowed" "number, \"-\" and \".\" characters are allowed"
@ -660,7 +627,7 @@ msgstr ""
"doit démarrer par un caractère en minuscule suivi par des caractères en " "doit démarrer par un caractère en minuscule suivi par des caractères en "
"minuscule, des nombres, \"-\" et \".\" sont autorisés" "minuscule, des nombres, \"-\" et \".\" sont autorisés"
#: tiramisu/option/domainnameoption.py:91 #: tiramisu/option/domainnameoption.py:90
msgid "" msgid ""
"must start with lowercase characters followed by lowercase characters, " "must start with lowercase characters followed by lowercase characters, "
"number, \"-\" and \".\" characters are recommanded" "number, \"-\" and \".\" characters are recommanded"
@ -668,7 +635,7 @@ msgstr ""
"doit démarrer par un caractère en minuscule suivi par des caractères en " "doit démarrer par un caractère en minuscule suivi par des caractères en "
"minuscule, des nombres, \"-\" et \".\" sont recommandés" "minuscule, des nombres, \"-\" et \".\" sont recommandés"
#: tiramisu/option/domainnameoption.py:96 #: tiramisu/option/domainnameoption.py:95
msgid "" msgid ""
"must start with lowercase characters followed by lowercase characters, " "must start with lowercase characters followed by lowercase characters, "
"number and \"-\" characters are allowed" "number and \"-\" characters are allowed"
@ -676,7 +643,7 @@ msgstr ""
"doit démarrer par un caractère en minuscule suivi par des caractères en " "doit démarrer par un caractère en minuscule suivi par des caractères en "
"minuscule, des nombres et \"-\" sont autorisés" "minuscule, des nombres et \"-\" sont autorisés"
#: tiramisu/option/domainnameoption.py:99 #: tiramisu/option/domainnameoption.py:98
msgid "" msgid ""
"must start with lowercase characters followed by lowercase characters, " "must start with lowercase characters followed by lowercase characters, "
"number and \"-\" characters are recommanded" "number and \"-\" characters are recommanded"
@ -684,54 +651,54 @@ msgstr ""
"doit démarrer par un caractère en minuscule suivi par des caractères en " "doit démarrer par un caractère en minuscule suivi par des caractères en "
"minuscule, des nombres et\"-\" sont recommandés" "minuscule, des nombres et\"-\" sont recommandés"
#: tiramisu/option/domainnameoption.py:102
#: tiramisu/option/domainnameoption.py:103 #: tiramisu/option/domainnameoption.py:103
#: tiramisu/option/domainnameoption.py:104
msgid "could be a IP, otherwise {}" msgid "could be a IP, otherwise {}"
msgstr "peut être une IP, autrement {}" msgstr "peut être une IP, autrement {}"
#: tiramisu/option/domainnameoption.py:149 #: tiramisu/option/domainnameoption.py:148
msgid "invalid length (min 1)" msgid "invalid length (min 1)"
msgstr "longueur invalide (min 1)" msgstr "longueur invalide (min 1)"
#: tiramisu/option/domainnameoption.py:152 #: tiramisu/option/domainnameoption.py:151
msgid "invalid length (max {0})" msgid "invalid length (max {0})"
msgstr "longueur invalide (max {0})" msgstr "longueur invalide (max {0})"
#: tiramisu/option/domainnameoption.py:158 #: tiramisu/option/domainnameoption.py:157
msgid "must have dot" msgid "must have dot"
msgstr "doit avoir un point" msgstr "doit avoir un point"
#: tiramisu/option/domainnameoption.py:160 #: tiramisu/option/domainnameoption.py:159
msgid "invalid length (max 255)" msgid "invalid length (max 255)"
msgstr "longueur invalide (max 255)" msgstr "longueur invalide (max 255)"
#: tiramisu/option/domainnameoption.py:180 #: tiramisu/option/domainnameoption.py:179
msgid "DNS resolution failed" msgid "DNS resolution failed"
msgstr "la résolution DNS a échoué" msgstr "la résolution DNS a échoué"
#: tiramisu/option/domainnameoption.py:183 #: tiramisu/option/domainnameoption.py:182
msgid "error resolving DNS: {1}" msgid "error resolving DNS: {1}"
msgstr "erreur de résolution DNS : {1}" msgstr "erreur de résolution DNS : {1}"
#: tiramisu/option/domainnameoption.py:190 #: tiramisu/option/domainnameoption.py:189
msgid "must not be an IP" msgid "must not be an IP"
msgstr "ne doit pas être une IP" msgstr "ne doit pas être une IP"
#: tiramisu/option/domainnameoption.py:213 #: tiramisu/option/domainnameoption.py:212
msgid "some characters are uppercase" msgid "some characters are uppercase"
msgstr "des caractères sont en majuscule" msgstr "des caractères sont en majuscule"
#: tiramisu/option/dynoptiondescription.py:138 #: tiramisu/option/dynoptiondescription.py:130
msgid "DynOptionDescription identifiers for option {0}, is not a list ({1})" msgid "DynOptionDescription identifiers for option {0}, is not a list ({1})"
msgstr "" msgstr ""
"les identifiants de la DynOptionDescription pour l'option {0}, n'est pas une " "les identifiants de la DynOptionDescription pour l'option {0}, n'est pas une "
"liste ({1})" "liste ({1})"
#: tiramisu/option/dynoptiondescription.py:150 #: tiramisu/option/dynoptiondescription.py:142
msgid "invalid identifier \"{}\" for option {}" msgid "invalid identifier \"{}\" for option {}"
msgstr "identifiant \"{}\" invalide pour l'option \"{}\"" msgstr "identifiant \"{}\" invalide pour l'option \"{}\""
#: tiramisu/option/dynoptiondescription.py:162 #: tiramisu/option/dynoptiondescription.py:154
msgid "" msgid ""
"DynOptionDescription \"{0}\" identifiers return a list with same values " "DynOptionDescription \"{0}\" identifiers return a list with same values "
"\"{1}\"" "\"{1}\""
@ -739,92 +706,72 @@ msgstr ""
"Les identifiants de la DynOptionDescription \"{0}\" retourne une liste avec " "Les identifiants de la DynOptionDescription \"{0}\" retourne une liste avec "
"des valeurs identiques \"{1}\"" "des valeurs identiques \"{1}\""
#: tiramisu/option/emailoption.py:37 #: tiramisu/option/filenameoption.py:47
msgid "email address"
msgstr "adresse mail"
#: tiramisu/option/filenameoption.py:35
msgid "file name"
msgstr "nom de fichier"
#: tiramisu/option/filenameoption.py:48
msgid "types parameter must be a list, not \"{0}\" for \"{1}\"" msgid "types parameter must be a list, not \"{0}\" for \"{1}\""
msgstr "" msgstr ""
"le paramètre types doit être une liste, au lieu de \"{0}\" pour \"{1}\"" "le paramètre types doit être une liste, au lieu de \"{0}\" pour \"{1}\""
#: tiramisu/option/filenameoption.py:68 #: tiramisu/option/filenameoption.py:67
msgid "must starts with \"/\"" msgid "must starts with \"/\""
msgstr "doit débuter par \"/\"" msgstr "doit débuter par \"/\""
#: tiramisu/option/filenameoption.py:79 #: tiramisu/option/filenameoption.py:78
msgid "directory" msgid "directory"
msgstr "répertoire" msgstr "répertoire"
#: tiramisu/option/filenameoption.py:79 #: tiramisu/option/filenameoption.py:78
msgid "file" msgid "file"
msgstr "fichier" msgstr "fichier"
#: tiramisu/option/filenameoption.py:83 #: tiramisu/option/filenameoption.py:82
msgid "cannot find this {0}" msgid "cannot find this {0}"
msgstr "ce {0} est introuvable" msgstr "ce {0} est introuvable"
#: tiramisu/option/floatoption.py:33 #: tiramisu/option/intoption.py:46
msgid "float"
msgstr "nombre flottant"
#: tiramisu/option/intoption.py:32
msgid "integer"
msgstr "nombre"
#: tiramisu/option/intoption.py:51
msgid "which is not an integer" msgid "which is not an integer"
msgstr "qui n'est pas un chiffre" msgstr "qui n'est pas un chiffre"
#: tiramisu/option/intoption.py:57 #: tiramisu/option/intoption.py:52
msgid "value should be equal or greater than \"{0}\"" msgid "value should be equal or greater than \"{0}\""
msgstr "la valeur devrait être supérieur ou égal à {0}" msgstr "la valeur devrait être supérieur ou égal à {0}"
#: tiramisu/option/intoption.py:59 #: tiramisu/option/intoption.py:54
msgid "value must be equal or greater than \"{0}\"" msgid "value must be equal or greater than \"{0}\""
msgstr "valeur doit être supérieur ou égal à {0}" msgstr "valeur doit être supérieur ou égal à {0}"
#: tiramisu/option/intoption.py:64 #: tiramisu/option/intoption.py:59
msgid "value should be less than \"{0}\"" msgid "value should be less than \"{0}\""
msgstr "valeur devrait être inférieur à \"{0}\"" msgstr "valeur devrait être inférieur à \"{0}\""
#: tiramisu/option/intoption.py:66 #: tiramisu/option/intoption.py:61
msgid "value must be less than \"{0}\"" msgid "value must be less than \"{0}\""
msgstr "valeur doit être inférieur à \"{0}\"" msgstr "valeur doit être inférieur à \"{0}\""
#: tiramisu/option/ipoption.py:34 #: tiramisu/option/ipoption.py:57
msgid "IP"
msgstr "IP"
#: tiramisu/option/ipoption.py:61
msgid "it's in fact a network address" msgid "it's in fact a network address"
msgstr "c'est un faite une adresse réseau" msgstr "c'est un faite une adresse réseau"
#: tiramisu/option/ipoption.py:63 #: tiramisu/option/ipoption.py:59
msgid "it's in fact a broacast address" msgid "it's in fact a broacast address"
msgstr "c'est en faite une adresse de broadcast" msgstr "c'est en faite une adresse de broadcast"
#: tiramisu/option/ipoption.py:75 #: tiramisu/option/ipoption.py:71
msgid "CIDR address must have a \"/\"" msgid "CIDR address must have a \"/\""
msgstr "une adresse CIDR doit avoir un \"/\"" msgstr "une adresse CIDR doit avoir un \"/\""
#: tiramisu/option/ipoption.py:84 #: tiramisu/option/ipoption.py:80
msgid "shouldn't be reserved IP" msgid "shouldn't be reserved IP"
msgstr "ne devrait pas être une IP réservée" msgstr "ne devrait pas être une IP réservée"
#: tiramisu/option/ipoption.py:86 #: tiramisu/option/ipoption.py:82
msgid "mustn't be reserved IP" msgid "mustn't be reserved IP"
msgstr "ne doit pas être une IP réservée" msgstr "ne doit pas être une IP réservée"
#: tiramisu/option/ipoption.py:90 #: tiramisu/option/ipoption.py:86
msgid "should be private IP" msgid "should be private IP"
msgstr "devrait être une IP privée" msgstr "devrait être une IP privée"
#: tiramisu/option/ipoption.py:92 #: tiramisu/option/ipoption.py:88
msgid "must be private IP" msgid "must be private IP"
msgstr "doit être une IP privée" msgstr "doit être une IP privée"
@ -855,56 +802,44 @@ msgstr ""
"valeur par défaut non autorisée pour l'option suiveuse {0} dans l'option " "valeur par défaut non autorisée pour l'option suiveuse {0} dans l'option "
"leadership {1}" "leadership {1}"
#: tiramisu/option/macoption.py:35 #: tiramisu/option/networkoption.py:45
msgid "mac address" msgid "must use CIDR notation"
msgstr "adresse MAC" msgstr "doit utiliser la notation CIDR"
#: tiramisu/option/netmaskoption.py:33 #: tiramisu/option/networkoption.py:60
msgid "netmask address"
msgstr "adresse netmask"
#: tiramisu/option/networkoption.py:34
msgid "network address"
msgstr "adresse réseau"
#: tiramisu/option/networkoption.py:41
msgid "it's not a network address"
msgstr "ce n'est pas une adresse réseau"
#: tiramisu/option/networkoption.py:46
msgid "shouldn't be reserved network" msgid "shouldn't be reserved network"
msgstr "ne devrait pas être une IP réservée" msgstr "ne devrait pas être une IP réservée"
#: tiramisu/option/networkoption.py:48 #: tiramisu/option/networkoption.py:62
msgid "mustn't be reserved network" msgid "mustn't be reserved network"
msgstr "ne doit pas être une IP réservée" msgstr "ne doit pas être une IP réservée"
#: tiramisu/option/option.py:75 #: tiramisu/option/option.py:73
msgid "default_multi is set whereas multi is False in option: {0}" msgid "default_multi is set whereas multi is False in option: {0}"
msgstr "" msgstr ""
"default_multi est spécifié alors que multi est à False pour l'option : {0}" "default_multi est spécifié alors que multi est à False pour l'option : {0}"
#: tiramisu/option/option.py:95 #: tiramisu/option/option.py:93
msgid "invalid multi type \"{}\" for \"{}\"" msgid "invalid multi type \"{}\" for \"{}\""
msgstr "type multiple \"{}\" invalide pour \"{}\"" msgstr "type multiple \"{}\" invalide pour \"{}\""
#: tiramisu/option/option.py:114 #: tiramisu/option/option.py:112
msgid "validators must be a list of Calculation for \"{0}\"" msgid "validators must be a list of Calculation for \"{0}\""
msgstr "validators doit être une liste de Calculation pour \"{0}\"" msgstr "validators doit être une liste de Calculation pour \"{0}\""
#: tiramisu/option/option.py:119 #: tiramisu/option/option.py:117
msgid "validators must be a Calculation for \"{0}\"" msgid "validators must be a Calculation for \"{0}\""
msgstr "validators doit être un Calculation pour \"{0}\"" msgstr "validators doit être un Calculation pour \"{0}\""
#: tiramisu/option/option.py:143 #: tiramisu/option/option.py:141
msgid "invalid default_multi value \"{0}\" for option {1}" msgid "invalid default_multi value \"{0}\" for option {1}"
msgstr "la valeur default_multi est invalide {0} pour l'option {1}" msgstr "la valeur default_multi est invalide {0} pour l'option {1}"
#: tiramisu/option/option.py:151 #: tiramisu/option/option.py:149
msgid "invalid default_multi value \"{0}\" for option {1}, {2}" msgid "invalid default_multi value \"{0}\" for option {1}, {2}"
msgstr "la valeur default_multi est invalide \"{0}\" pour l'option {1}, {2}" msgstr "la valeur default_multi est invalide \"{0}\" pour l'option {1}, {2}"
#: tiramisu/option/option.py:164 #: tiramisu/option/option.py:162
msgid "" msgid ""
"invalid default_multi value \"{0}\" for option {1}, must be a list for a " "invalid default_multi value \"{0}\" for option {1}, must be a list for a "
"submulti" "submulti"
@ -912,19 +847,19 @@ msgstr ""
"valeur invalide pour default_multi \"{0}\" pour l'option {1}, doit être une " "valeur invalide pour default_multi \"{0}\" pour l'option {1}, doit être une "
"liste pour une submulti" "liste pour une submulti"
#: tiramisu/option/option.py:298 #: tiramisu/option/option.py:294
msgid "the value \"{}\" is not unique" msgid "the value \"{}\" is not unique"
msgstr "la valeur \"{}\" n'est pas unique" msgstr "la valeur \"{}\" n'est pas unique"
#: tiramisu/option/option.py:361 #: tiramisu/option/option.py:357
msgid "which must not be a list" msgid "which must not be a list"
msgstr "qui ne doit pas être une liste" msgstr "qui ne doit pas être une liste"
#: tiramisu/option/option.py:416 tiramisu/option/option.py:454 #: tiramisu/option/option.py:412 tiramisu/option/option.py:450
msgid "which must be a list" msgid "which must be a list"
msgstr "qui doit être une liste" msgstr "qui doit être une liste"
#: tiramisu/option/option.py:444 #: tiramisu/option/option.py:440
msgid "which \"{}\" must be a list of list" msgid "which \"{}\" must be a list of list"
msgstr "lequel \"{}\" doit être une liste de liste" msgstr "lequel \"{}\" doit être une liste de liste"
@ -950,92 +885,76 @@ msgstr "les enfants d'une optiondescription \"{}\" doivent être une liste"
msgid "the option name \"{0}\" is duplicate in \"{1}\"" msgid "the option name \"{0}\" is duplicate in \"{1}\""
msgstr "le nom de l'option \"{0}\" est dupliqué dans \"{1}\"" msgstr "le nom de l'option \"{0}\" est dupliqué dans \"{1}\""
#: tiramisu/option/optiondescription.py:408 #: tiramisu/option/optiondescription.py:411
msgid "cannot change group_type if already set (old {0}, new {1})" 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})" msgstr "ne peut changer group_type si déjà spécifié (ancien {0}, nouveau {1})"
#: tiramisu/option/optiondescription.py:413 #: tiramisu/option/optiondescription.py:416
msgid "group_type: {0} not allowed" msgid "group_type: {0} not allowed"
msgstr "group_type : {0} non autorisé" msgstr "group_type : {0} non autorisé"
#: tiramisu/option/passwordoption.py:34 #: tiramisu/option/passwordoption.py:49
msgid "password"
msgstr "mot de passe"
#: tiramisu/option/passwordoption.py:51
msgid "at least {0} characters are required" msgid "at least {0} characters are required"
msgstr "au moins {0} caractères sont requis" msgstr "au moins {0} caractères sont requis"
#: tiramisu/option/passwordoption.py:54 #: tiramisu/option/passwordoption.py:52
msgid "maximum {0} characters required" msgid "maximum {0} characters required"
msgstr "un maximum de {0} caractères sont autorisés" msgstr "un maximum de {0} caractères sont autorisés"
#: tiramisu/option/passwordoption.py:59 #: tiramisu/option/passwordoption.py:57
msgid "must not have the characters {0}" msgid "must not have the characters {0}"
msgstr "ne doit pas contenir les caractères {0}" msgstr "ne doit pas contenir les caractères {0}"
#: tiramisu/option/permissionsoption.py:40 #: tiramisu/option/permissionsoption.py:52
msgid "unix file permissions"
msgstr "permissions de fichier Unix"
#: tiramisu/option/permissionsoption.py:53
msgid "only 3 or 4 octal digits are allowed" msgid "only 3 or 4 octal digits are allowed"
msgstr "seulement 3 ou 4 chiffres octal sont autorisées" msgstr "seulement 3 ou 4 chiffres octal sont autorisées"
#: tiramisu/option/permissionsoption.py:64 #: tiramisu/option/permissionsoption.py:63
msgid "user" msgid "user"
msgstr "nom d'utilisateur" msgstr "nom d'utilisateur"
#: tiramisu/option/permissionsoption.py:65 #: tiramisu/option/permissionsoption.py:64
#: tiramisu/option/permissionsoption.py:67 #: tiramisu/option/permissionsoption.py:66
msgid "group" msgid "group"
msgstr "groupe" msgstr "groupe"
#: tiramisu/option/permissionsoption.py:68 #: tiramisu/option/permissionsoption.py:67
msgid "other" msgid "other"
msgstr "autre" msgstr "autre"
#: tiramisu/option/permissionsoption.py:69 #: tiramisu/option/permissionsoption.py:68
msgid "{0} has more right than {1}" msgid "{0} has more right than {1}"
msgstr "{0} a plus de droit que {1}" msgstr "{0} a plus de droit que {1}"
#: tiramisu/option/permissionsoption.py:72 #: tiramisu/option/permissionsoption.py:71
msgid "too weak" msgid "too weak"
msgstr "trop simple" msgstr "trop simple"
#: tiramisu/option/portoption.py:40 #: tiramisu/option/portoption.py:77
msgid "port"
msgstr "port"
#: tiramisu/option/portoption.py:78
msgid "inconsistency in allowed range" msgid "inconsistency in allowed range"
msgstr "inconsistence dans la plage autorisée" msgstr "inconsistence dans la plage autorisée"
#: tiramisu/option/portoption.py:83 #: tiramisu/option/portoption.py:82
msgid "max value is empty" msgid "max value is empty"
msgstr "la valeur maximum est vide" msgstr "la valeur maximum est vide"
#: tiramisu/option/portoption.py:96 #: tiramisu/option/portoption.py:95
msgid "range must have two values only" msgid "range must have two values only"
msgstr "un rang doit avoir deux valeurs seulement" msgstr "un rang doit avoir deux valeurs seulement"
#: tiramisu/option/portoption.py:99 #: tiramisu/option/portoption.py:98
msgid "first port in range must be smaller than the second one" msgid "first port in range must be smaller than the second one"
msgstr "le premier port d'un rang doit être plus petit que le second" msgstr "le premier port d'un rang doit être plus petit que le second"
#: tiramisu/option/portoption.py:125 #: tiramisu/option/portoption.py:124
msgid "should be between {0} and {1}" msgid "should be between {0} and {1}"
msgstr "devrait être une nombre entre {0} et {1}" msgstr "devrait être une nombre entre {0} et {1}"
#: tiramisu/option/portoption.py:127 #: tiramisu/option/portoption.py:126
msgid "must be between {0} and {1}" msgid "must be between {0} and {1}"
msgstr "doit être une nombre entre {0} et {1}" msgstr "doit être une nombre entre {0} et {1}"
#: tiramisu/option/stroption.py:34 #: tiramisu/option/stroption.py:41
msgid "string"
msgstr "texte"
#: tiramisu/option/stroption.py:42
msgid "which is not a string" msgid "which is not a string"
msgstr "qui n'est pas une chaîne de caractères" msgstr "qui n'est pas une chaîne de caractères"
@ -1046,34 +965,22 @@ msgstr ""
"symlink mal formé, le second paramètre doit être une option pour \"{0}\", " "symlink mal formé, le second paramètre doit être une option pour \"{0}\", "
"not {1}" "not {1}"
#: tiramisu/option/urloption.py:40 #: tiramisu/option/urloption.py:92
msgid "URL"
msgstr "URL"
#: tiramisu/option/urloption.py:93
msgid "must start with http:// or https://" msgid "must start with http:// or https://"
msgstr "doit débuter par http:// ou https://" msgstr "doit débuter par http:// ou https://"
#: tiramisu/option/urloption.py:118 #: tiramisu/option/urloption.py:117
msgid "the port \"{0}\" is invalid: {1}" msgid "the port \"{0}\" is invalid: {1}"
msgstr "le port \"{0}\" est invalide : {1}" msgstr "le port \"{0}\" est invalide : {1}"
#: tiramisu/option/urloption.py:125 #: tiramisu/option/urloption.py:124
msgid "the domain \"{0}\" is invalid: {1}" msgid "the domain \"{0}\" is invalid: {1}"
msgstr "le domaine \"{0}\" est invalide : {1}" msgstr "le domaine \"{0}\" est invalide : {1}"
#: tiramisu/option/urloption.py:129 #: tiramisu/option/urloption.py:128
msgid "must ends with a valid resource name" msgid "must ends with a valid resource name"
msgstr "doit finir par un nom de ressource valide" msgstr "doit finir par un nom de ressource valide"
#: tiramisu/option/usernameoption.py:36
msgid "unix username"
msgstr "nom d'utilisateur Unix"
#: tiramisu/option/usernameoption.py:44
msgid "unix groupname"
msgstr "nom de groupe Unix"
#: tiramisu/setting.py:258 #: tiramisu/setting.py:258
msgid "can't rebind {0}" msgid "can't rebind {0}"
msgstr "ne peut redéfinir ({0})" msgstr "ne peut redéfinir ({0})"
@ -1146,12 +1053,6 @@ msgstr ""
msgid "information's item not found \"{}\"" msgid "information's item not found \"{}\""
msgstr "l'information de l'objet ne sont pas trouvé \"{}\"" msgstr "l'information de l'objet ne sont pas trouvé \"{}\""
#~ msgid "invalid string"
#~ msgstr "invalide caractère"
#~ msgid "must use CIDR notation"
#~ msgstr "doit utiliser la notation CIDR"
#~ msgid "no option found in config with these criteria" #~ msgid "no option found in config with these criteria"
#~ msgstr "aucune option trouvée dans la config avec ces critères" #~ msgstr "aucune option trouvée dans la config avec ces critères"
@ -1334,14 +1235,26 @@ msgstr "l'information de l'objet ne sont pas trouvé \"{}\""
#~ "requirements malformé pour l'option : {0} l'exigence doit avoir les clefs " #~ "requirements malformé pour l'option : {0} l'exigence doit avoir les clefs "
#~ "option, expected et action" #~ "option, expected et action"
#~ msgid "boolean"
#~ msgstr "booléen"
#~ msgid "invalid broadcast consistency, a network and a netmask are needed" #~ msgid "invalid broadcast consistency, a network and a netmask are needed"
#~ msgstr "" #~ msgstr ""
#~ "adresse de broadcast inconsistante, un réseau et un masque sont " #~ "adresse de broadcast inconsistante, un réseau et un masque sont "
#~ "nécessaires." #~ "nécessaires."
#~ msgid "choice"
#~ msgstr "choix"
#~ msgid "values is not a function, so values_params must be None" #~ msgid "values is not a function, so values_params must be None"
#~ msgstr "values n'est pas une fonction, donc values_params doit être None" #~ msgstr "values n'est pas une fonction, donc values_params doit être None"
#~ msgid "date"
#~ msgstr "date"
#~ msgid "domain name"
#~ msgstr "nom de domaine"
#~ msgid "only lowercase, number and - are characters are allowed" #~ msgid "only lowercase, number and - are characters are allowed"
#~ msgstr "" #~ msgstr ""
#~ "seuls les caractères en minuscule, les nombres et \"-\" sont autorisés" #~ "seuls les caractères en minuscule, les nombres et \"-\" sont autorisés"
@ -1353,6 +1266,18 @@ msgstr "l'information de l'objet ne sont pas trouvé \"{}\""
#~ msgid "callback is mandatory for the dynoptiondescription \"{}\"" #~ msgid "callback is mandatory for the dynoptiondescription \"{}\""
#~ msgstr "un callback est obligatoire pour le dynoptiondescription \"{}\"" #~ msgstr "un callback est obligatoire pour le dynoptiondescription \"{}\""
#~ msgid "email address"
#~ msgstr "adresse mail"
#~ msgid "float"
#~ msgstr "nombre flottant"
#~ msgid "integer"
#~ msgstr "nombre"
#~ msgid "IP"
#~ msgstr "IP"
#~ msgid "IP not in network \"{0}\" (\"{1}\")" #~ msgid "IP not in network \"{0}\" (\"{1}\")"
#~ msgstr "l'IP n'est pas dans le réseau \"{0}\" (\"{1}\")" #~ msgstr "l'IP n'est pas dans le réseau \"{0}\" (\"{1}\")"
@ -1392,6 +1317,9 @@ msgstr "l'information de l'objet ne sont pas trouvé \"{}\""
#~ "requirement mal formé pour l'option \"{0}\" ne doit pas être dans une " #~ "requirement mal formé pour l'option \"{0}\" ne doit pas être dans une "
#~ "suiveuse pour \"{1}\"" #~ "suiveuse pour \"{1}\""
#~ msgid "netmask address"
#~ msgstr "adresse netmask"
#~ msgid "network_netmask needs a network and a netmask" #~ msgid "network_netmask needs a network and a netmask"
#~ msgstr "network_netmask nécessite un réseau et un masque de réseau" #~ msgstr "network_netmask nécessite un réseau et un masque de réseau"
@ -1510,9 +1438,21 @@ msgstr "l'information de l'objet ne sont pas trouvé \"{}\""
#~ msgid "consistency with option {0} which is not in Config" #~ msgid "consistency with option {0} which is not in Config"
#~ msgstr "consistency avec l'option {0} qui n'est pas dans une Config" #~ msgstr "consistency avec l'option {0} qui n'est pas dans une Config"
#~ msgid "password"
#~ msgstr "mot de passe"
#~ msgid "port"
#~ msgstr "port"
#~ msgid "string"
#~ msgstr "texte"
#~ msgid "unknown option \"{0}\" in syndynoptiondescription \"{1}\"" #~ msgid "unknown option \"{0}\" in syndynoptiondescription \"{1}\""
#~ msgstr "l'option \"{0}\" inconnue dans la syndynoptiondescription \"{1}\"" #~ msgstr "l'option \"{0}\" inconnue dans la syndynoptiondescription \"{1}\""
#~ msgid "URL"
#~ msgstr "URL"
#~ msgid "port must be an between 0 and 65536" #~ msgid "port must be an between 0 and 65536"
#~ msgstr "port doit être entre 0 et 65536" #~ msgstr "port doit être entre 0 et 65536"

View file

@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2025-10-04 15:46+0200\n" "POT-Creation-Date: 2025-09-19 22:05+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -35,7 +35,7 @@ msgstr ""
msgid "Commands:" msgid "Commands:"
msgstr "" msgstr ""
#: tiramisu/api.py:118 tiramisu/api.py:1963 #: tiramisu/api.py:118 tiramisu/api.py:1955
msgid "please specify a valid sub function ({0}.{1})" msgid "please specify a valid sub function ({0}.{1})"
msgstr "" msgstr ""
@ -43,7 +43,7 @@ msgstr ""
msgid "please do not specify index ({0}.{1})" msgid "please do not specify index ({0}.{1})"
msgstr "" msgstr ""
#: tiramisu/api.py:211 tiramisu/api.py:948 #: tiramisu/api.py:211 tiramisu/api.py:940
msgid "please specify index with a follower option ({0}.{1})" msgid "please specify index with a follower option ({0}.{1})"
msgstr "" msgstr ""
@ -51,67 +51,59 @@ msgstr ""
msgid "please specify a valid sub function ({0}.{1}): {2}" msgid "please specify a valid sub function ({0}.{1}): {2}"
msgstr "" msgstr ""
#: tiramisu/api.py:447 #: tiramisu/api.py:525
msgid "optiondescription"
msgstr ""
#: tiramisu/api.py:452
msgid "symlink"
msgstr ""
#: tiramisu/api.py:533
msgid "the option {0} is not a dynamic option, cannot get identifiers with only_self parameter to True" msgid "the option {0} is not a dynamic option, cannot get identifiers with only_self parameter to True"
msgstr "" msgstr ""
#: tiramisu/api.py:621 #: tiramisu/api.py:613
msgid "cannot get option from a follower symlink without index" msgid "cannot get option from a follower symlink without index"
msgstr "" msgstr ""
#: tiramisu/api.py:699 #: tiramisu/api.py:691
msgid "cannot add this property: \"{0}\"" msgid "cannot add this property: \"{0}\""
msgstr "" msgstr ""
#: tiramisu/api.py:726 #: tiramisu/api.py:718
msgid "cannot remove option's property \"{0}\", use permissive instead in option \"{1}\"" msgid "cannot remove option's property \"{0}\", use permissive instead in option \"{1}\""
msgstr "" msgstr ""
#: tiramisu/api.py:730 #: tiramisu/api.py:722
msgid "cannot find \"{0}\" in option \"{1}\"" msgid "cannot find \"{0}\" in option \"{1}\""
msgstr "" msgstr ""
#: tiramisu/api.py:735 #: tiramisu/api.py:727
msgid "cannot remove option's property \"{0}\", use permissive instead in option \"{1}\" at index \"{2}\"" msgid "cannot remove option's property \"{0}\", use permissive instead in option \"{1}\" at index \"{2}\""
msgstr "" msgstr ""
#: tiramisu/api.py:739 #: tiramisu/api.py:731
msgid "cannot find \"{0}\" in option \"{1}\" at index \"{2}\"" msgid "cannot find \"{0}\" in option \"{1}\" at index \"{2}\""
msgstr "" msgstr ""
#: tiramisu/api.py:783 #: tiramisu/api.py:775
msgid "cannot find \"{0}\"" msgid "cannot find \"{0}\""
msgstr "" msgstr ""
#: tiramisu/api.py:965 #: tiramisu/api.py:957
msgid "only multi value has defaultmulti" msgid "only multi value has defaultmulti"
msgstr "" msgstr ""
#: tiramisu/api.py:1129 #: tiramisu/api.py:1121
msgid "please specify a valid sub function ({0}.{1}) for {2}" msgid "please specify a valid sub function ({0}.{1}) for {2}"
msgstr "" msgstr ""
#: tiramisu/api.py:1528 #: tiramisu/api.py:1520
msgid "properties must be a frozenset" msgid "properties must be a frozenset"
msgstr "" msgstr ""
#: tiramisu/api.py:1532 tiramisu/api.py:1559 #: tiramisu/api.py:1524 tiramisu/api.py:1551
msgid "unknown when {} (must be in append or remove)" msgid "unknown when {} (must be in append or remove)"
msgstr "" msgstr ""
#: tiramisu/api.py:1545 tiramisu/api.py:1569 tiramisu/config.py:1712 #: tiramisu/api.py:1537 tiramisu/api.py:1561 tiramisu/config.py:1691
msgid "unknown type {}" msgid "unknown type {}"
msgstr "" msgstr ""
#: tiramisu/api.py:1935 #: tiramisu/api.py:1927
msgid "do not use unrestraint, nowarnings or forcepermissive together" msgid "do not use unrestraint, nowarnings or forcepermissive together"
msgstr "" msgstr ""
@ -215,84 +207,83 @@ msgstr ""
msgid "unexpected error \"{1}\" in function \"{2}\" for option {0}" msgid "unexpected error \"{1}\" in function \"{2}\" for option {0}"
msgstr "" msgstr ""
#: tiramisu/config.py:392 tiramisu/config.py:414 tiramisu/config.py:745 #: tiramisu/config.py:391 tiramisu/config.py:413
#: tiramisu/config.py:754 msgid "option name {0} is not unique in {1}"
msgid "option name \"{0}\" is not unique in {1}"
msgstr "" msgstr ""
#: tiramisu/config.py:639 #: tiramisu/config.py:638
msgid "there is no option description for this config (may be GroupConfig)" msgid "there is no option description for this config (may be GroupConfig)"
msgstr "" msgstr ""
#: tiramisu/config.py:1010 tiramisu/option/optiondescription.py:74 #: tiramisu/config.py:989 tiramisu/option/optiondescription.py:74
msgid "option description seems to be part of an other config" msgid "option description seems to be part of an other config"
msgstr "" msgstr ""
#: tiramisu/config.py:1172 #: tiramisu/config.py:1151
msgid "parent of {0} not already exists" msgid "parent of {0} not already exists"
msgstr "" msgstr ""
#: tiramisu/config.py:1219 #: tiramisu/config.py:1198
msgid "cannot set leadership object has root optiondescription" msgid "cannot set leadership object has root optiondescription"
msgstr "" msgstr ""
#: tiramisu/config.py:1222 #: tiramisu/config.py:1201
msgid "cannot set dynoptiondescription object has root optiondescription" msgid "cannot set dynoptiondescription object has root optiondescription"
msgstr "" msgstr ""
#: tiramisu/config.py:1269 #: tiramisu/config.py:1248
msgid "child must be a Config, GroupConfig, MixConfig or MetaConfig" msgid "child must be a Config, GroupConfig, MixConfig or MetaConfig"
msgstr "" msgstr ""
#: tiramisu/config.py:1278 #: tiramisu/config.py:1257
msgid "config name must be uniq in groupconfig for \"{0}\"" msgid "config name must be uniq in groupconfig for \"{0}\""
msgstr "" msgstr ""
#: tiramisu/config.py:1487 #: tiramisu/config.py:1466
msgid "unknown config \"{}\"" msgid "unknown config \"{}\""
msgstr "" msgstr ""
#: tiramisu/config.py:1512 #: tiramisu/config.py:1491
msgid "child must be a Config, MixConfig or MetaConfig" msgid "child must be a Config, MixConfig or MetaConfig"
msgstr "" msgstr ""
#: tiramisu/config.py:1547 #: tiramisu/config.py:1526
msgid "force_default, force_default_if_same or force_dont_change_value cannot be set with only_config" msgid "force_default, force_default_if_same or force_dont_change_value cannot be set with only_config"
msgstr "" msgstr ""
#: tiramisu/config.py:1557 #: tiramisu/config.py:1536
msgid "force_default and force_dont_change_value cannot be set together" msgid "force_default and force_dont_change_value cannot be set together"
msgstr "" msgstr ""
#: tiramisu/config.py:1708 #: tiramisu/config.py:1687
msgid "config name must be uniq in groupconfig for {0}" msgid "config name must be uniq in groupconfig for {0}"
msgstr "" msgstr ""
#: tiramisu/config.py:1753 #: tiramisu/config.py:1732
msgid "config added has no name, the name is mandatory" msgid "config added has no name, the name is mandatory"
msgstr "" msgstr ""
#: tiramisu/config.py:1758 #: tiramisu/config.py:1737
msgid "config name \"{0}\" is not uniq in groupconfig \"{1}\"" msgid "config name \"{0}\" is not uniq in groupconfig \"{1}\""
msgstr "" msgstr ""
#: tiramisu/config.py:1776 tiramisu/config.py:1782 #: tiramisu/config.py:1755 tiramisu/config.py:1761
msgid "cannot find the config {0}" msgid "cannot find the config {0}"
msgstr "" msgstr ""
#: tiramisu/config.py:1808 #: tiramisu/config.py:1787
msgid "MetaConfig with optiondescription must have string has child, not {}" msgid "MetaConfig with optiondescription must have string has child, not {}"
msgstr "" msgstr ""
#: tiramisu/config.py:1820 #: tiramisu/config.py:1799
msgid "child must be a Config or MetaConfig" msgid "child must be a Config or MetaConfig"
msgstr "" msgstr ""
#: tiramisu/config.py:1825 #: tiramisu/config.py:1804
msgid "all config in metaconfig must have the same optiondescription" msgid "all config in metaconfig must have the same optiondescription"
msgstr "" msgstr ""
#: tiramisu/config.py:1842 #: tiramisu/config.py:1821
msgid "metaconfig must have the same optiondescription" msgid "metaconfig must have the same optiondescription"
msgstr "" msgstr ""
@ -416,19 +407,11 @@ msgstr ""
msgid "attention, \"{0}\" could be an invalid {1} for {2} at index \"{3}\"" msgid "attention, \"{0}\" could be an invalid {1} for {2} at index \"{3}\""
msgstr "" msgstr ""
#: tiramisu/error.py:370 #: tiramisu/error.py:368 tiramisu/error.py:379
msgid "{2} has an invalid {1}"
msgstr ""
#: tiramisu/error.py:372
msgid "{2} at index \"{3}\" has an invalid {1}"
msgstr ""
#: tiramisu/error.py:375 tiramisu/error.py:386
msgid "\"{0}\" is an invalid {1} for {2}" msgid "\"{0}\" is an invalid {1} for {2}"
msgstr "" msgstr ""
#: tiramisu/error.py:377 #: tiramisu/error.py:370
msgid "\"{0}\" is an invalid {1} for {2} at index \"{3}\"" msgid "\"{0}\" is an invalid {1} for {2} at index \"{3}\""
msgstr "" msgstr ""
@ -500,228 +483,192 @@ msgstr ""
msgid "invalid property type {0} for {1}, must be a string or a Calculation" msgid "invalid property type {0} for {1}, must be a string or a Calculation"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:254 #: tiramisu/option/baseoption.py:253
msgid "information's item for {0} not found: \"{1}\"" msgid "information's item for {0} not found: \"{1}\""
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:272 #: tiramisu/option/baseoption.py:271
msgid "'{0}' ({1}) object attribute '{2}' is read-only" msgid "'{0}' ({1}) object attribute '{2}' is read-only"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:313 #: tiramisu/option/baseoption.py:312
msgid "\"{}\" ({}) object attribute \"{}\" is read-only" msgid "\"{}\" ({}) object attribute \"{}\" is read-only"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:325 #: tiramisu/option/baseoption.py:324
msgid "{0} not part of any Config" msgid "{0} not part of any Config"
msgstr "" msgstr ""
#: tiramisu/option/booloption.py:33 #: tiramisu/option/broadcastoption.py:41
msgid "boolean" msgid "invalid string"
msgstr "" msgstr ""
#: tiramisu/option/broadcastoption.py:34 #: tiramisu/option/choiceoption.py:52
msgid "broadcast address"
msgstr ""
#: tiramisu/option/choiceoption.py:41
msgid "choice"
msgstr ""
#: tiramisu/option/choiceoption.py:53
msgid "values must be a tuple or a calculation for {0}" msgid "values must be a tuple or a calculation for {0}"
msgstr "" msgstr ""
#: tiramisu/option/choiceoption.py:76 #: tiramisu/option/choiceoption.py:75
msgid "the calculated values \"{0}\" for \"{1}\" is not a list" msgid "the calculated values \"{0}\" for \"{1}\" is not a list"
msgstr "" msgstr ""
#: tiramisu/option/choiceoption.py:107 #: tiramisu/option/choiceoption.py:106
msgid "only \"{0}\" is allowed" msgid "only \"{0}\" is allowed"
msgstr "" msgstr ""
#: tiramisu/option/choiceoption.py:109 #: tiramisu/option/choiceoption.py:108
msgid "only {0} are allowed" msgid "only {0} are allowed"
msgstr "" msgstr ""
#: tiramisu/option/dateoption.py:34 #: tiramisu/option/domainnameoption.py:67
msgid "date"
msgstr ""
#: tiramisu/option/domainnameoption.py:46
msgid "domain name"
msgstr ""
#: tiramisu/option/domainnameoption.py:68
msgid "unknown type {0} for hostname" msgid "unknown type {0} for hostname"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:71 #: tiramisu/option/domainnameoption.py:70
msgid "allow_ip must be a boolean" msgid "allow_ip must be a boolean"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:73 #: tiramisu/option/domainnameoption.py:72
msgid "allow_cidr_network must be a boolean" msgid "allow_cidr_network must be a boolean"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:75 #: tiramisu/option/domainnameoption.py:74
msgid "allow_without_dot must be a boolean" msgid "allow_without_dot must be a boolean"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:77 #: tiramisu/option/domainnameoption.py:76
msgid "allow_startswith_dot must be a boolean" msgid "allow_startswith_dot must be a boolean"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:88 #: tiramisu/option/domainnameoption.py:87
msgid "must start with lowercase characters followed by lowercase characters, number, \"-\" and \".\" characters are allowed" msgid "must start with lowercase characters followed by lowercase characters, number, \"-\" and \".\" characters are allowed"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:91 #: tiramisu/option/domainnameoption.py:90
msgid "must start with lowercase characters followed by lowercase characters, number, \"-\" and \".\" characters are recommanded" msgid "must start with lowercase characters followed by lowercase characters, number, \"-\" and \".\" characters are recommanded"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:96 #: tiramisu/option/domainnameoption.py:95
msgid "must start with lowercase characters followed by lowercase characters, number and \"-\" characters are allowed" msgid "must start with lowercase characters followed by lowercase characters, number and \"-\" characters are allowed"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:99 #: tiramisu/option/domainnameoption.py:98
msgid "must start with lowercase characters followed by lowercase characters, number and \"-\" characters are recommanded" msgid "must start with lowercase characters followed by lowercase characters, number and \"-\" characters are recommanded"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:102
#: tiramisu/option/domainnameoption.py:103 #: tiramisu/option/domainnameoption.py:103
#: tiramisu/option/domainnameoption.py:104
msgid "could be a IP, otherwise {}" msgid "could be a IP, otherwise {}"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:149 #: tiramisu/option/domainnameoption.py:148
msgid "invalid length (min 1)" msgid "invalid length (min 1)"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:152 #: tiramisu/option/domainnameoption.py:151
msgid "invalid length (max {0})" msgid "invalid length (max {0})"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:158 #: tiramisu/option/domainnameoption.py:157
msgid "must have dot" msgid "must have dot"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:160 #: tiramisu/option/domainnameoption.py:159
msgid "invalid length (max 255)" msgid "invalid length (max 255)"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:180 #: tiramisu/option/domainnameoption.py:179
msgid "DNS resolution failed" msgid "DNS resolution failed"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:183 #: tiramisu/option/domainnameoption.py:182
msgid "error resolving DNS: {1}" msgid "error resolving DNS: {1}"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:190 #: tiramisu/option/domainnameoption.py:189
msgid "must not be an IP" msgid "must not be an IP"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:213 #: tiramisu/option/domainnameoption.py:212
msgid "some characters are uppercase" msgid "some characters are uppercase"
msgstr "" msgstr ""
#: tiramisu/option/dynoptiondescription.py:138 #: tiramisu/option/dynoptiondescription.py:130
msgid "DynOptionDescription identifiers for option {0}, is not a list ({1})" msgid "DynOptionDescription identifiers for option {0}, is not a list ({1})"
msgstr "" msgstr ""
#: tiramisu/option/dynoptiondescription.py:150 #: tiramisu/option/dynoptiondescription.py:142
msgid "invalid identifier \"{}\" for option {}" msgid "invalid identifier \"{}\" for option {}"
msgstr "" msgstr ""
#: tiramisu/option/dynoptiondescription.py:162 #: tiramisu/option/dynoptiondescription.py:154
msgid "DynOptionDescription \"{0}\" identifiers return a list with same values \"{1}\"" msgid "DynOptionDescription \"{0}\" identifiers return a list with same values \"{1}\""
msgstr "" msgstr ""
#: tiramisu/option/emailoption.py:37 #: tiramisu/option/filenameoption.py:47
msgid "email address"
msgstr ""
#: tiramisu/option/filenameoption.py:35
msgid "file name"
msgstr ""
#: tiramisu/option/filenameoption.py:48
msgid "types parameter must be a list, not \"{0}\" for \"{1}\"" msgid "types parameter must be a list, not \"{0}\" for \"{1}\""
msgstr "" msgstr ""
#: tiramisu/option/filenameoption.py:68 #: tiramisu/option/filenameoption.py:67
msgid "must starts with \"/\"" msgid "must starts with \"/\""
msgstr "" msgstr ""
#: tiramisu/option/filenameoption.py:79 #: tiramisu/option/filenameoption.py:78
msgid "directory" msgid "directory"
msgstr "" msgstr ""
#: tiramisu/option/filenameoption.py:79 #: tiramisu/option/filenameoption.py:78
msgid "file" msgid "file"
msgstr "" msgstr ""
#: tiramisu/option/filenameoption.py:83 #: tiramisu/option/filenameoption.py:82
msgid "cannot find this {0}" msgid "cannot find this {0}"
msgstr "" msgstr ""
#: tiramisu/option/floatoption.py:33 #: tiramisu/option/intoption.py:46
msgid "float"
msgstr ""
#: tiramisu/option/intoption.py:32
msgid "integer"
msgstr ""
#: tiramisu/option/intoption.py:51
msgid "which is not an integer" msgid "which is not an integer"
msgstr "" msgstr ""
#: tiramisu/option/intoption.py:57 #: tiramisu/option/intoption.py:52
msgid "value should be equal or greater than \"{0}\"" msgid "value should be equal or greater than \"{0}\""
msgstr "" msgstr ""
#: tiramisu/option/intoption.py:59 #: tiramisu/option/intoption.py:54
msgid "value must be equal or greater than \"{0}\"" msgid "value must be equal or greater than \"{0}\""
msgstr "" msgstr ""
#: tiramisu/option/intoption.py:64 #: tiramisu/option/intoption.py:59
msgid "value should be less than \"{0}\"" msgid "value should be less than \"{0}\""
msgstr "" msgstr ""
#: tiramisu/option/intoption.py:66 #: tiramisu/option/intoption.py:61
msgid "value must be less than \"{0}\"" msgid "value must be less than \"{0}\""
msgstr "" msgstr ""
#: tiramisu/option/ipoption.py:34 #: tiramisu/option/ipoption.py:57
msgid "IP"
msgstr ""
#: tiramisu/option/ipoption.py:61
msgid "it's in fact a network address" msgid "it's in fact a network address"
msgstr "" msgstr ""
#: tiramisu/option/ipoption.py:63 #: tiramisu/option/ipoption.py:59
msgid "it's in fact a broacast address" msgid "it's in fact a broacast address"
msgstr "" msgstr ""
#: tiramisu/option/ipoption.py:75 #: tiramisu/option/ipoption.py:71
msgid "CIDR address must have a \"/\"" msgid "CIDR address must have a \"/\""
msgstr "" msgstr ""
#: tiramisu/option/ipoption.py:84 #: tiramisu/option/ipoption.py:80
msgid "shouldn't be reserved IP" msgid "shouldn't be reserved IP"
msgstr "" msgstr ""
#: tiramisu/option/ipoption.py:86 #: tiramisu/option/ipoption.py:82
msgid "mustn't be reserved IP" msgid "mustn't be reserved IP"
msgstr "" msgstr ""
#: tiramisu/option/ipoption.py:90 #: tiramisu/option/ipoption.py:86
msgid "should be private IP" msgid "should be private IP"
msgstr "" msgstr ""
#: tiramisu/option/ipoption.py:92 #: tiramisu/option/ipoption.py:88
msgid "must be private IP" msgid "must be private IP"
msgstr "" msgstr ""
@ -745,71 +692,59 @@ msgstr ""
msgid "not allowed default value for follower option {0} in leadership {1}" msgid "not allowed default value for follower option {0} in leadership {1}"
msgstr "" msgstr ""
#: tiramisu/option/macoption.py:35 #: tiramisu/option/networkoption.py:45
msgid "mac address" msgid "must use CIDR notation"
msgstr "" msgstr ""
#: tiramisu/option/netmaskoption.py:33 #: tiramisu/option/networkoption.py:60
msgid "netmask address"
msgstr ""
#: tiramisu/option/networkoption.py:34
msgid "network address"
msgstr ""
#: tiramisu/option/networkoption.py:41
msgid "it's not a network address"
msgstr ""
#: tiramisu/option/networkoption.py:46
msgid "shouldn't be reserved network" msgid "shouldn't be reserved network"
msgstr "" msgstr ""
#: tiramisu/option/networkoption.py:48 #: tiramisu/option/networkoption.py:62
msgid "mustn't be reserved network" msgid "mustn't be reserved network"
msgstr "" msgstr ""
#: tiramisu/option/option.py:75 #: tiramisu/option/option.py:73
msgid "default_multi is set whereas multi is False in option: {0}" msgid "default_multi is set whereas multi is False in option: {0}"
msgstr "" msgstr ""
#: tiramisu/option/option.py:95 #: tiramisu/option/option.py:93
msgid "invalid multi type \"{}\" for \"{}\"" msgid "invalid multi type \"{}\" for \"{}\""
msgstr "" msgstr ""
#: tiramisu/option/option.py:114 #: tiramisu/option/option.py:112
msgid "validators must be a list of Calculation for \"{0}\"" msgid "validators must be a list of Calculation for \"{0}\""
msgstr "" msgstr ""
#: tiramisu/option/option.py:119 #: tiramisu/option/option.py:117
msgid "validators must be a Calculation for \"{0}\"" msgid "validators must be a Calculation for \"{0}\""
msgstr "" msgstr ""
#: tiramisu/option/option.py:143 #: tiramisu/option/option.py:141
msgid "invalid default_multi value \"{0}\" for option {1}" msgid "invalid default_multi value \"{0}\" for option {1}"
msgstr "" msgstr ""
#: tiramisu/option/option.py:151 #: tiramisu/option/option.py:149
msgid "invalid default_multi value \"{0}\" for option {1}, {2}" msgid "invalid default_multi value \"{0}\" for option {1}, {2}"
msgstr "" msgstr ""
#: tiramisu/option/option.py:164 #: tiramisu/option/option.py:162
msgid "invalid default_multi value \"{0}\" for option {1}, must be a list for a submulti" msgid "invalid default_multi value \"{0}\" for option {1}, must be a list for a submulti"
msgstr "" msgstr ""
#: tiramisu/option/option.py:298 #: tiramisu/option/option.py:294
msgid "the value \"{}\" is not unique" msgid "the value \"{}\" is not unique"
msgstr "" msgstr ""
#: tiramisu/option/option.py:361 #: tiramisu/option/option.py:357
msgid "which must not be a list" msgid "which must not be a list"
msgstr "" msgstr ""
#: tiramisu/option/option.py:416 tiramisu/option/option.py:454 #: tiramisu/option/option.py:412 tiramisu/option/option.py:450
msgid "which must be a list" msgid "which must be a list"
msgstr "" msgstr ""
#: tiramisu/option/option.py:444 #: tiramisu/option/option.py:440
msgid "which \"{}\" must be a list of list" msgid "which \"{}\" must be a list of list"
msgstr "" msgstr ""
@ -835,92 +770,76 @@ msgstr ""
msgid "the option name \"{0}\" is duplicate in \"{1}\"" msgid "the option name \"{0}\" is duplicate in \"{1}\""
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:408 #: tiramisu/option/optiondescription.py:411
msgid "cannot change group_type if already set (old {0}, new {1})" msgid "cannot change group_type if already set (old {0}, new {1})"
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:413 #: tiramisu/option/optiondescription.py:416
msgid "group_type: {0} not allowed" msgid "group_type: {0} not allowed"
msgstr "" msgstr ""
#: tiramisu/option/passwordoption.py:34 #: tiramisu/option/passwordoption.py:49
msgid "password"
msgstr ""
#: tiramisu/option/passwordoption.py:51
msgid "at least {0} characters are required" msgid "at least {0} characters are required"
msgstr "" msgstr ""
#: tiramisu/option/passwordoption.py:54 #: tiramisu/option/passwordoption.py:52
msgid "maximum {0} characters required" msgid "maximum {0} characters required"
msgstr "" msgstr ""
#: tiramisu/option/passwordoption.py:59 #: tiramisu/option/passwordoption.py:57
msgid "must not have the characters {0}" msgid "must not have the characters {0}"
msgstr "" msgstr ""
#: tiramisu/option/permissionsoption.py:40 #: tiramisu/option/permissionsoption.py:52
msgid "unix file permissions"
msgstr ""
#: tiramisu/option/permissionsoption.py:53
msgid "only 3 or 4 octal digits are allowed" msgid "only 3 or 4 octal digits are allowed"
msgstr "" msgstr ""
#: tiramisu/option/permissionsoption.py:64 #: tiramisu/option/permissionsoption.py:63
msgid "user" msgid "user"
msgstr "" msgstr ""
#: tiramisu/option/permissionsoption.py:65 #: tiramisu/option/permissionsoption.py:64
#: tiramisu/option/permissionsoption.py:67 #: tiramisu/option/permissionsoption.py:66
msgid "group" msgid "group"
msgstr "" msgstr ""
#: tiramisu/option/permissionsoption.py:68 #: tiramisu/option/permissionsoption.py:67
msgid "other" msgid "other"
msgstr "" msgstr ""
#: tiramisu/option/permissionsoption.py:69 #: tiramisu/option/permissionsoption.py:68
msgid "{0} has more right than {1}" msgid "{0} has more right than {1}"
msgstr "" msgstr ""
#: tiramisu/option/permissionsoption.py:72 #: tiramisu/option/permissionsoption.py:71
msgid "too weak" msgid "too weak"
msgstr "" msgstr ""
#: tiramisu/option/portoption.py:40 #: tiramisu/option/portoption.py:77
msgid "port"
msgstr ""
#: tiramisu/option/portoption.py:78
msgid "inconsistency in allowed range" msgid "inconsistency in allowed range"
msgstr "" msgstr ""
#: tiramisu/option/portoption.py:83 #: tiramisu/option/portoption.py:82
msgid "max value is empty" msgid "max value is empty"
msgstr "" msgstr ""
#: tiramisu/option/portoption.py:96 #: tiramisu/option/portoption.py:95
msgid "range must have two values only" msgid "range must have two values only"
msgstr "" msgstr ""
#: tiramisu/option/portoption.py:99 #: tiramisu/option/portoption.py:98
msgid "first port in range must be smaller than the second one" msgid "first port in range must be smaller than the second one"
msgstr "" msgstr ""
#: tiramisu/option/portoption.py:125 #: tiramisu/option/portoption.py:124
msgid "should be between {0} and {1}" msgid "should be between {0} and {1}"
msgstr "" msgstr ""
#: tiramisu/option/portoption.py:127 #: tiramisu/option/portoption.py:126
msgid "must be between {0} and {1}" msgid "must be between {0} and {1}"
msgstr "" msgstr ""
#: tiramisu/option/stroption.py:34 #: tiramisu/option/stroption.py:41
msgid "string"
msgstr ""
#: tiramisu/option/stroption.py:42
msgid "which is not a string" msgid "which is not a string"
msgstr "" msgstr ""
@ -928,34 +847,22 @@ msgstr ""
msgid "malformed symlink second parameters must be an option for \"{0}\", not {1}" msgid "malformed symlink second parameters must be an option for \"{0}\", not {1}"
msgstr "" msgstr ""
#: tiramisu/option/urloption.py:40 #: tiramisu/option/urloption.py:92
msgid "URL"
msgstr ""
#: tiramisu/option/urloption.py:93
msgid "must start with http:// or https://" msgid "must start with http:// or https://"
msgstr "" msgstr ""
#: tiramisu/option/urloption.py:118 #: tiramisu/option/urloption.py:117
msgid "the port \"{0}\" is invalid: {1}" msgid "the port \"{0}\" is invalid: {1}"
msgstr "" msgstr ""
#: tiramisu/option/urloption.py:125 #: tiramisu/option/urloption.py:124
msgid "the domain \"{0}\" is invalid: {1}" msgid "the domain \"{0}\" is invalid: {1}"
msgstr "" msgstr ""
#: tiramisu/option/urloption.py:129 #: tiramisu/option/urloption.py:128
msgid "must ends with a valid resource name" msgid "must ends with a valid resource name"
msgstr "" msgstr ""
#: tiramisu/option/usernameoption.py:36
msgid "unix username"
msgstr ""
#: tiramisu/option/usernameoption.py:44
msgid "unix groupname"
msgstr ""
#: tiramisu/setting.py:258 #: tiramisu/setting.py:258
msgid "can't rebind {0}" msgid "can't rebind {0}"
msgstr "" msgstr ""

View file

@ -4,7 +4,7 @@ requires = ["flit_core >=3.8.0,<4"]
[project] [project]
name = "tiramisu" name = "tiramisu"
version = "5.2.0a13" version = "5.2.0a12"
authors = [{name = "Emmanuel Garette", email = "gnunux@gnunux.info"}] authors = [{name = "Emmanuel Garette", email = "gnunux@gnunux.info"}]
readme = "README.md" readme = "README.md"
description = "an options controller tool" description = "an options controller tool"

View file

@ -21,7 +21,6 @@ def test_ip(config_type):
cfg.option('a').value.set('192.168.1.0') cfg.option('a').value.set('192.168.1.0')
cfg.option('a').value.set('88.88.88.88') cfg.option('a').value.set('88.88.88.88')
cfg.option('a').value.set('0.0.0.0') cfg.option('a').value.set('0.0.0.0')
cfg.option('a').value.set('2001:db8::1')
if config_type != 'tiramisu-api': if config_type != 'tiramisu-api':
# FIXME # FIXME
with pytest.raises(ValueError): with pytest.raises(ValueError):
@ -149,7 +148,8 @@ def test_network_cidr(config_type):
cfg.option('a').value.set('192.168.1.1') cfg.option('a').value.set('192.168.1.1')
with pytest.raises(ValueError): with pytest.raises(ValueError):
cfg.option('a').value.set('192.168.1.1/24') cfg.option('a').value.set('192.168.1.1/24')
cfg.option('a').value.set('2001:db00::0/24') with pytest.raises(ValueError):
cfg.option('a').value.set('2001:db00::0/24')
# assert not list_sessions() # assert not list_sessions()
@ -197,7 +197,8 @@ def test_broadcast(config_type):
cfg.option('a').value.set(1) cfg.option('a').value.set(1)
with pytest.raises(ValueError): with pytest.raises(ValueError):
cfg.option('a').value.set(2) cfg.option('a').value.set(2)
cfg.option('a').value.set('2001:db8::1') with pytest.raises(ValueError):
cfg.option('a').value.set('2001:db8::1')
cfg.option('a').value.set('0.0.0.0') cfg.option('a').value.set('0.0.0.0')
cfg.option('a').value.set('255.255.255.0') cfg.option('a').value.set('255.255.255.0')
# assert not list_sessions() # assert not list_sessions()

View file

@ -22,16 +22,7 @@ def test_forcepermissive_and_unrestraint(config_type):
cfg_ori.property.read_write() cfg_ori.property.read_write()
cfg = get_config(cfg_ori, config_type) cfg = get_config(cfg_ori, config_type)
with pytest.raises(ConfigError): with pytest.raises(ConfigError):
cfg_ori.unrestraint.forcepermissive cfg_ori.forcepermissive.add('disabled')
def test_unrestraint_and_unrestraint(config_type):
od1 = make_description()
cfg_ori = Config(od1)
cfg_ori.property.read_write()
cfg_ori.property.read_write()
cfg = get_config(cfg_ori, config_type)
cfg_ori.unrestraint.unrestraint
def test_permissive(config_type): def test_permissive(config_type):

View file

@ -1 +1 @@
__version__ = "5.2.0a13" __version__ = "5.2.0a12"

View file

@ -439,22 +439,14 @@ class _TiramisuOptionOptionDescription:
return options return options
@option_type(["option", "optiondescription", "symlink", "with_or_without_index"]) @option_type(["option", "optiondescription", "symlink", "with_or_without_index"])
def type(self, only_self=False, translation=False): def type(self, only_self=False):
"""Get de option type""" """Get de option type"""
option = self._subconfig.option option = self._subconfig.option
if option.impl_is_optiondescription(): if option.impl_is_optiondescription():
if translation: return "optiondescription"
type_ = _("optiondescription") if only_self and option.impl_is_symlinkoption():
else: return "symlink"
type_ = "optiondescription" return option.get_type()
elif only_self and option.impl_is_symlinkoption():
if translation:
type_ = _("symlink")
else:
type_ = "symlink"
else:
type_ = option.get_type(translation=translation)
return type_
@option_type(["option", "symlink", "with_or_without_index"]) @option_type(["option", "symlink", "with_or_without_index"])
def extra(self, extra): def extra(self, extra):
@ -1931,8 +1923,6 @@ class TiramisuAPI(TiramisuHelp):
def __getattr__(self, subfunc: str) -> Any: def __getattr__(self, subfunc: str) -> Any:
if subfunc in ["forcepermissive", "unrestraint", "nowarnings"]: if subfunc in ["forcepermissive", "unrestraint", "nowarnings"]:
if subfunc == "unrestraint" and self._config_bag.is_unrestraint:
return self
if self._orig_config_bags: if self._orig_config_bags:
msg = _( msg = _(
"do not use unrestraint, nowarnings or forcepermissive together" "do not use unrestraint, nowarnings or forcepermissive together"

View file

@ -364,17 +364,10 @@ class ValueOptionError(_CommonError, ValueError):
def __init__(self, **kwargs): def __init__(self, **kwargs):
if ValueOptionError.tmpl is None: if ValueOptionError.tmpl is None:
opt = kwargs.get('opt') if kwargs.get("index") is None:
if opt and opt._do_not_display_value_in_error: self.tmpl = _('"{0}" is an invalid {1} for {2}')
if kwargs.get("index") is None:
self.tmpl = _('{2} has an invalid {1}')
else:
self.tmpl = _('{2} at index "{3}" has an invalid {1}')
else: else:
if kwargs.get("index") is None: self.tmpl = _('"{0}" is an invalid {1} for {2} at index "{3}"')
self.tmpl = _('"{0}" is an invalid {1} for {2}')
else:
self.tmpl = _('"{0}" is an invalid {1} for {2} at index "{3}"')
super().__init__(**kwargs) super().__init__(**kwargs)

View file

@ -30,7 +30,6 @@ class BoolOption(Option):
__slots__ = tuple() __slots__ = tuple()
_type = "boolean" _type = "boolean"
_t_type = _("boolean")
def validate( def validate(
self, self,

View file

@ -23,22 +23,27 @@
from ipaddress import ip_address from ipaddress import ip_address
from ..i18n import _ from ..i18n import _
from .stroption import StrOption from .option import Option
class BroadcastOption(StrOption): class BroadcastOption(Option):
"""represents the choice of a broadcast""" """represents the choice of a broadcast"""
__slots__ = tuple() __slots__ = tuple()
_type = "broadcast address" _type = "broadcast address"
_t_type = _("broadcast address")
def validate( def validate(
self, self,
value: str, value: str,
) -> None: ) -> None:
"""validate""" """validate"""
super().validate(value) if not isinstance(value, str):
raise ValueError(_("invalid string"))
if value.count(".") != 3:
raise ValueError()
for val in value.split("."):
if val.startswith("0") and len(val) > 1:
raise ValueError()
try: try:
ip_address(value) ip_address(value)
except ValueError as err: except ValueError as err:

View file

@ -38,7 +38,6 @@ class ChoiceOption(Option):
__slots__ = tuple() __slots__ = tuple()
_type = "choice" _type = "choice"
_t_type = _("choice")
def __init__(self, name, doc, values, *args, **kwargs): def __init__(self, name, doc, values, *args, **kwargs):
""" """

View file

@ -31,7 +31,6 @@ class DateOption(StrOption):
__slots__ = tuple() __slots__ = tuple()
_type = "date" _type = "date"
_t_type = _("date")
def validate(self, value: str) -> None: def validate(self, value: str) -> None:
super().validate(value) super().validate(value)

View file

@ -43,7 +43,6 @@ class DomainnameOption(StrOption):
__slots__ = tuple() __slots__ = tuple()
_type = "domain name" _type = "domain name"
_t_type = _("domain name")
def __init__( def __init__(
self, self,

View file

@ -34,4 +34,3 @@ class EmailOption(RegexpOption):
r"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$" r"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$"
) )
_type = "email address" _type = "email address"
_t_type = _("email address")

View file

@ -32,7 +32,6 @@ class FilenameOption(StrOption):
__slots__ = tuple() __slots__ = tuple()
_type = "file name" _type = "file name"
_t_type = _("file name")
def __init__( def __init__(
self, self,

View file

@ -30,7 +30,6 @@ class FloatOption(Option):
__slots__ = tuple() __slots__ = tuple()
_type = "float" _type = "float"
_t_type = _("float")
def validate(self, value: float) -> None: def validate(self, value: float) -> None:
if not isinstance(value, float): if not isinstance(value, float):

View file

@ -29,7 +29,6 @@ class IntOption(Option):
"represents a choice of an integer" "represents a choice of an integer"
__slots__ = tuple() __slots__ = tuple()
_type = "integer" _type = "integer"
_t_type = _("integer")
def __init__(self, *args, min_number=None, max_number=None, min_integer=None, max_integer=None, **kwargs): def __init__(self, *args, min_number=None, max_number=None, min_integer=None, max_integer=None, **kwargs):
extra = {} extra = {}

View file

@ -31,7 +31,6 @@ class IPOption(StrOption):
__slots__ = tuple() __slots__ = tuple()
_type = "IP" _type = "IP"
_t_type = _("IP")
def __init__( def __init__(
self, self,
@ -54,9 +53,6 @@ class IPOption(StrOption):
ip_obj = ip_interface(value) ip_obj = ip_interface(value)
except ValueError as err: except ValueError as err:
raise ValueError() from err raise ValueError() from err
self._second_level_cidr(ip_obj)
def _second_level_cidr(self, ip_obj):
if ip_obj.ip == ip_obj.network.network_address: if ip_obj.ip == ip_obj.network.network_address:
raise ValueError(_("it's in fact a network address")) raise ValueError(_("it's in fact a network address"))
if ip_obj.ip == ip_obj.network.broadcast_address: if ip_obj.ip == ip_obj.network.broadcast_address:

View file

@ -32,4 +32,3 @@ class MACOption(RegexpOption):
__slots__ = tuple() __slots__ = tuple()
_regexp = re.compile(r"^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$") _regexp = re.compile(r"^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$")
_type = "mac address" _type = "mac address"
_t_type = _("mac address")

View file

@ -30,7 +30,6 @@ class NetmaskOption(StrOption):
__slots__ = tuple() __slots__ = tuple()
_type = "netmask address" _type = "netmask address"
_t_type = _("netmask address")
def validate(self, value: str) -> None: def validate(self, value: str) -> None:
super().validate(value) super().validate(value)

View file

@ -23,22 +23,36 @@
from ipaddress import ip_network from ipaddress import ip_network
from ..i18n import _ from ..i18n import _
from .ipoption import IPOption
from .stroption import StrOption from .stroption import StrOption
class NetworkOption(IPOption): class NetworkOption(StrOption):
"represents the choice of a network" "represents the choice of a network"
__slots__ = tuple() __slots__ = tuple()
_type = "network address" _type = "network address"
_t_type = _("network address")
def __init__(self, *args, cidr=False, **kwargs): def __init__(self, *args, cidr=False, **kwargs):
super().__init__(*args, cidr=cidr, **kwargs) extra = {"cidr": cidr}
super().__init__(*args, extra=extra, **kwargs)
def _second_level_cidr(self, ip_obj): def validate(self, value: str) -> None:
if ip_obj.ip != ip_obj.network.network_address: super().validate(value)
raise ValueError(_("it's not a network address")) if value.count(".") != 3:
raise ValueError()
cidr = self.impl_get_extra("cidr")
if cidr:
if "/" not in value:
raise ValueError(_("must use CIDR notation"))
value_ = value.split("/")[0]
else:
value_ = value
for val in value_.split("."):
if val.startswith("0") and len(val) > 1:
raise ValueError()
try:
ip_network(value)
except ValueError as err:
raise ValueError() from err
def second_level_validation(self, value: str, warnings_only: bool) -> None: def second_level_validation(self, value: str, warnings_only: bool) -> None:
if ip_network(value).network_address.is_reserved: if ip_network(value).network_address.is_reserved:

View file

@ -53,8 +53,6 @@ class Option(BaseOption):
"_choice_values_params", "_choice_values_params",
) )
_type = None _type = None
_t_type = None
_do_not_display_value_in_error = False
def __init__( def __init__(
self, self,
@ -215,10 +213,8 @@ class Option(BaseOption):
"""is a dynsymlinkoption?""" """is a dynsymlinkoption?"""
return False return False
def get_type(self, translation=True) -> str: def get_type(self) -> str:
"""get the type of option""" """get the type of option"""
if translation:
return self._t_type
return self._type return self._type
def impl_getdefault(self) -> Any: def impl_getdefault(self) -> Any:

View file

@ -31,8 +31,6 @@ class PasswordOption(StrOption):
__slots__ = tuple() __slots__ = tuple()
_type = "password" _type = "password"
_t_type = _("password")
_do_not_display_value_in_error = True
def __init__(self, *args, min_len=None, max_len=None, forbidden_char=[], **kwargs): def __init__(self, *args, min_len=None, max_len=None, forbidden_char=[], **kwargs):
extra = {} extra = {}

View file

@ -37,7 +37,6 @@ class PermissionsOption(IntOption):
__slots__ = tuple() __slots__ = tuple()
perm_re = re.compile(r"^[0-7]{3,4}$") perm_re = re.compile(r"^[0-7]{3,4}$")
_type = "unix file permissions" _type = "unix file permissions"
_t_type = _("unix file permissions")
def __init__( def __init__(
self, self,

View file

@ -37,7 +37,6 @@ class PortOption(StrOption):
__slots__ = tuple() __slots__ = tuple()
_type = "port" _type = "port"
_t_type = _("port")
def __init__( def __init__(
self, self,

View file

@ -31,7 +31,6 @@ class StrOption(Option):
__slots__ = tuple() __slots__ = tuple()
_type = "string" _type = "string"
_t_type = _("string")
def validate( def validate(
self, self,

View file

@ -37,7 +37,6 @@ class URLOption(StrOption):
__slots__ = tuple() __slots__ = tuple()
path_re = re.compile(r"^[A-Za-z0-9\-\._~:/\?#\[\]@!%\$&\'\(\)\*\+,;=]+$") path_re = re.compile(r"^[A-Za-z0-9\-\._~:/\?#\[\]@!%\$&\'\(\)\*\+,;=]+$")
_type = "URL" _type = "URL"
_t_type = _("URL")
def __init__( def __init__(
self, self,

View file

@ -33,7 +33,6 @@ class UsernameOption(RegexpOption):
# regexp build with 'man 8 adduser' informations # regexp build with 'man 8 adduser' informations
_regexp = re.compile(r"^[a-z_][a-z0-9_-]{0,30}[$a-z0-9_-]{0,1}$") _regexp = re.compile(r"^[a-z_][a-z0-9_-]{0,30}[$a-z0-9_-]{0,1}$")
_type = "unix username" _type = "unix username"
_t_type = _("unix username")
class GroupnameOption(UsernameOption): class GroupnameOption(UsernameOption):
@ -41,4 +40,3 @@ class GroupnameOption(UsernameOption):
__slots__ = tuple() __slots__ = tuple()
_type = "unix groupname" _type = "unix groupname"
_t_type = _("unix groupname")