fix: better errors message

This commit is contained in:
egarette@silique.fr 2025-03-19 09:57:03 +01:00
parent 1b640689b8
commit b8899c98b1
6 changed files with 199 additions and 165 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-02-07 07:55+0100\n" "POT-Creation-Date: 2025-03-19 09:51+0100\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:111 tiramisu/api.py:1843 #: tiramisu/api.py:111 tiramisu/api.py:1849
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:201 tiramisu/api.py:847 #: tiramisu/api.py:201 tiramisu/api.py:848
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})"
@ -94,31 +94,31 @@ msgstr "ne peut trouver \"{0}\" dans l'option \"{1}\" à l'index \"{2}\""
msgid "cannot find \"{0}\"" msgid "cannot find \"{0}\""
msgstr "ne peut trouver \"{0}\"" msgstr "ne peut trouver \"{0}\""
#: tiramisu/api.py:811 #: tiramisu/api.py:812
msgid "cannot reduce length of the leader {}" msgid "cannot reduce length of the leader {}"
msgstr "il est impossible de réduire la longueur du leader \"{}\"" msgstr "il est impossible de réduire la longueur du leader \"{}\""
#: tiramisu/api.py:864 #: tiramisu/api.py:865
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:1023 #: tiramisu/api.py:1029
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:1410 #: tiramisu/api.py:1416
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:1414 tiramisu/api.py:1441 #: tiramisu/api.py:1420 tiramisu/api.py:1447
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:1427 tiramisu/api.py:1451 tiramisu/config.py:1681 #: tiramisu/api.py:1433 tiramisu/api.py:1457 tiramisu/config.py:1681
msgid "unknown type {}" msgid "unknown type {}"
msgstr "type inconnu {}" msgstr "type inconnu {}"
#: tiramisu/api.py:1815 #: tiramisu/api.py:1821
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"
@ -181,7 +181,7 @@ msgstr "l'option dans ParamInformation ne peut pas être une option dynamique"
#: tiramisu/autolib.py:279 #: tiramisu/autolib.py:279
msgid "first argument ({0}) must be a function" msgid "first argument ({0}) must be a function"
msgstr "le premier argument ({0}à doit être une fonction" msgstr "le premier argument ({0}) doit être une fonction"
#: tiramisu/autolib.py:283 #: tiramisu/autolib.py:283
msgid "help_function ({0}) must be a function" msgid "help_function ({0}) must be a function"
@ -373,31 +373,39 @@ msgid "cannot modify the {0} {1} because has {2} {3}"
msgstr "ne peut modifier {0} \"{1}\" à cause {2} {3}" msgstr "ne peut modifier {0} \"{1}\" à cause {2} {3}"
#: tiramisu/error.py:118 #: tiramisu/error.py:118
msgid "cannot access to {0} {1} because \"{2}\" hasn't value"
msgstr "ne peut accéder à {0} {1} parce que \"{2}\" n'a pas de valeur"
#: tiramisu/error.py:120
msgid "{0} {1} is mandatory but hasn't value"
msgstr "{0} {1} est obligatoire mais n'a pas de valeur"
#: tiramisu/error.py:123
msgid "cannot access to {0} {1} because \"{2}\" has {3} {4}" msgid "cannot access to {0} {1} because \"{2}\" has {3} {4}"
msgstr "ne peut accéder à {0} {1} parce que \"{2}\" a {3} {4}" msgstr "ne peut accéder à {0} {1} parce que \"{2}\" a {3} {4}"
#: tiramisu/error.py:120 #: tiramisu/error.py:125
msgid "cannot access to {0} {1} because has {2} {3}" msgid "cannot access to {0} {1} because has {2} {3}"
msgstr "ne peut accéder à l'{0} {1} à cause {2} {3}" msgstr "ne peut accéder à l'{0} {1} à cause {2} {3}"
#: tiramisu/error.py:192 #: tiramisu/error.py:197
msgid "invalid value" msgid "invalid value"
msgstr "valeur invalide" msgstr "valeur invalide"
#: tiramisu/error.py:202 #: tiramisu/error.py:207
msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\"" msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\""
msgstr "attention, \"{0}\" peut être un {1} invalide pour \"{2}\"" msgstr "attention, \"{0}\" peut être un {1} invalide pour \"{2}\""
#: tiramisu/error.py:204 #: tiramisu/error.py:209
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 ""
"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:223 tiramisu/error.py:234 #: tiramisu/error.py:228 tiramisu/error.py:239
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:225 #: tiramisu/error.py:230
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}\""
@ -480,25 +488,25 @@ msgstr "\"{0}\" est un nom invalide pour une option"
msgid "invalid properties type {0} for {1}, must be a frozenset" msgid "invalid properties type {0} for {1}, must be a frozenset"
msgstr "type {0} invalide pour des propriétés pour {1}, doit être un frozenset" msgstr "type {0} invalide pour des propriétés pour {1}, doit être un frozenset"
#: tiramisu/option/baseoption.py:98 #: tiramisu/option/baseoption.py:100
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 ""
"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:249 #: tiramisu/option/baseoption.py:251
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:267 #: tiramisu/option/baseoption.py:269
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:308 #: tiramisu/option/baseoption.py:310
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:320 #: tiramisu/option/baseoption.py:322
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"
@ -522,27 +530,27 @@ msgstr "seul \"{0}\" est autorisé"
msgid "only {0} are allowed" msgid "only {0} are allowed"
msgstr "seul {0} sont autorisées" msgstr "seul {0} sont autorisées"
#: tiramisu/option/domainnameoption.py:62 #: tiramisu/option/domainnameoption.py:67
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:65 #: 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:67 #: 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:69 #: 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:71 #: 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:82 #: 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"
@ -550,7 +558,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:85 #: 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"
@ -558,7 +566,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:90 #: 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"
@ -566,7 +574,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:93 #: 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"
@ -574,40 +582,40 @@ 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:97 #: tiramisu/option/domainnameoption.py:102
#: tiramisu/option/domainnameoption.py:98 #: tiramisu/option/domainnameoption.py:103
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:143 #: 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:146 #: 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:152 #: 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:154 #: 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:175 #: tiramisu/option/domainnameoption.py:180
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:179 #: tiramisu/option/domainnameoption.py:184
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:186 #: tiramisu/option/domainnameoption.py:191
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:209 #: tiramisu/option/domainnameoption.py:214
msgid "some characters are uppercase" msgid "some characters are uppercase"
msgstr "des caractères sont en majuscule" msgstr "des caractères sont en majuscule"
@ -650,6 +658,10 @@ msgstr "fichier"
msgid "cannot find this {0}" msgid "cannot find this {0}"
msgstr "ce {0} est introuvable" msgstr "ce {0} est introuvable"
#: tiramisu/option/intoption.py:46
msgid "which is not an integer"
msgstr "qui n'est pas un chiffre"
#: tiramisu/option/intoption.py:52 #: 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}"
@ -774,19 +786,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:285 #: tiramisu/option/option.py:291
msgid "the value \"{}\" is not unique" msgid "the value \"{}\" is not unique"
msgstr "la valeur de \"{}\" n'est pas unique" msgstr "la valeur de \"{}\" n'est pas unique"
#: tiramisu/option/option.py:347 #: tiramisu/option/option.py:353
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:399 tiramisu/option/option.py:425 #: tiramisu/option/option.py:405 tiramisu/option/option.py:431
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:419 #: tiramisu/option/option.py:425
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"
@ -869,27 +881,27 @@ msgstr "{0} a plus de droit que {1}"
msgid "too weak" msgid "too weak"
msgstr "trop simple" msgstr "trop simple"
#: tiramisu/option/portoption.py:74 #: tiramisu/option/portoption.py:80
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:79 #: tiramisu/option/portoption.py:85
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:92 #: tiramisu/option/portoption.py:98
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:95 #: tiramisu/option/portoption.py:101
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:121 #: tiramisu/option/portoption.py:127
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:123 #: tiramisu/option/portoption.py:129
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}"
@ -904,31 +916,31 @@ 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:91 #: tiramisu/option/urloption.py:92
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:116 #: 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:123 #: 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:127 #: 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/setting.py:255 #: 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})"
#: tiramisu/setting.py:262 #: tiramisu/setting.py:265
msgid "can't unbind {0}" msgid "can't unbind {0}"
msgstr "ne peut supprimer ({0})" msgstr "ne peut supprimer ({0})"
#: tiramisu/setting.py:464 #: tiramisu/setting.py:467
msgid "" msgid ""
"invalid property type {type(new_prop)} for {subconfig.option.impl_getname()} " "invalid property type {type(new_prop)} for {subconfig.option.impl_getname()} "
"with {prop.function.__name__} function" "with {prop.function.__name__} function"
@ -936,15 +948,15 @@ msgstr ""
"type {type(new_prop)} de la propriété invalide pour la fonction {subconfig." "type {type(new_prop)} de la propriété invalide pour la fonction {subconfig."
"option.impl_getname()} with {prop.function.__name__}" "option.impl_getname()} with {prop.function.__name__}"
#: tiramisu/setting.py:476 #: tiramisu/setting.py:479
msgid "leader cannot have \"{new_prop}\" property" msgid "leader cannot have \"{new_prop}\" property"
msgstr "une option leader ne peu avoir la propriété \"{new_prop}\"" msgstr "une option leader ne peu avoir la propriété \"{new_prop}\""
#: tiramisu/setting.py:564 #: tiramisu/setting.py:567
msgid "leader cannot have \"{0}\" property" msgid "leader cannot have \"{0}\" property"
msgstr "leader ne peut avoir la propriété \"{0}\"" msgstr "leader ne peut avoir la propriété \"{0}\""
#: tiramisu/setting.py:573 #: tiramisu/setting.py:576
msgid "" msgid ""
"a leader ({0}) cannot have \"force_default_on_freeze\" or " "a leader ({0}) cannot have \"force_default_on_freeze\" or "
"\"force_metaconfig_on_freeze\" property without \"frozen\"" "\"force_metaconfig_on_freeze\" property without \"frozen\""
@ -952,19 +964,19 @@ msgstr ""
"une option leader ({0}) ne peut avoir de propriété " "une option leader ({0}) ne peut avoir de propriété "
"\"force_default_on_freeze\" or \"force_metaconfig_on_freeze\" sans \"frozen\"" "\"force_default_on_freeze\" or \"force_metaconfig_on_freeze\" sans \"frozen\""
#: tiramisu/setting.py:607 #: tiramisu/setting.py:610
msgid "permissive must be a frozenset" msgid "permissive must be a frozenset"
msgstr "une permissive doit être de type frozenset" msgstr "une permissive doit être de type frozenset"
#: tiramisu/setting.py:617 #: tiramisu/setting.py:620
msgid "cannot add those permissives: {0}" msgid "cannot add those permissives: {0}"
msgstr "ne peut ajouter ces permissives : {0}" msgstr "ne peut ajouter ces permissives : {0}"
#: tiramisu/setting.py:654 #: tiramisu/setting.py:657
msgid "can't reset properties to the symlinkoption \"{}\"" msgid "can't reset properties to the symlinkoption \"{}\""
msgstr "ne peut réinitialiser les propriétés de la symlinkoption \"{}\"" msgstr "ne peut réinitialiser les propriétés de la symlinkoption \"{}\""
#: tiramisu/setting.py:667 #: tiramisu/setting.py:670
msgid "can't reset permissives to the symlinkoption \"{}\"" msgid "can't reset permissives to the symlinkoption \"{}\""
msgstr "ne peut réinitialiser les permissive de la symlinkoption \"{}\"" msgstr "ne peut réinitialiser les permissive de la symlinkoption \"{}\""
@ -994,17 +1006,17 @@ msgstr ""
msgid "unknown action {}" msgid "unknown action {}"
msgstr "action inconnue {}" msgstr "action inconnue {}"
#: tiramisu/value.py:564 tiramisu/value.py:861 #: tiramisu/value.py:566 tiramisu/value.py:863
msgid "set owner \"{0}\" is forbidden" msgid "set owner \"{0}\" is forbidden"
msgstr "assigner l'utilisateur \"{0}\" est interdit" msgstr "assigner l'utilisateur \"{0}\" est interdit"
#: tiramisu/value.py:571 #: tiramisu/value.py:573
msgid "\"{0}\" is a default value, so we cannot change owner to \"{1}\"" msgid "\"{0}\" is a default value, so we cannot change owner to \"{1}\""
msgstr "" msgstr ""
"\"{0}\" est une valeur par défaut, donc ne peut changer d'utilisateur à " "\"{0}\" est une valeur par défaut, donc ne peut changer d'utilisateur à "
"\"{1}\"" "\"{1}\""
#: tiramisu/value.py:740 #: tiramisu/value.py:742
msgid "" msgid ""
"index {index} is greater than the length {length} for option {subconfig." "index {index} is greater than the length {length} for option {subconfig."
"option.impl_get_display_name(with_quote=True)}" "option.impl_get_display_name(with_quote=True)}"
@ -1012,7 +1024,7 @@ msgstr ""
"l'index {index} est supérieur à la longueur \"{length}\" pour l'option " "l'index {index} est supérieur à la longueur \"{length}\" pour l'option "
"\"{subconfig.option.impl_get_display_name(with_quote=True)}\"" "\"{subconfig.option.impl_get_display_name(with_quote=True)}\""
#: tiramisu/value.py:847 #: tiramisu/value.py:849
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é \"{}\""

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-02-07 08:01+0100\n" "POT-Creation-Date: 2025-03-19 09:54+0100\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:111 tiramisu/api.py:1843 #: tiramisu/api.py:111 tiramisu/api.py:1849
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:201 tiramisu/api.py:847 #: tiramisu/api.py:201 tiramisu/api.py:848
msgid "please specify index with a follower option ({0}.{1})" msgid "please specify index with a follower option ({0}.{1})"
msgstr "" msgstr ""
@ -83,31 +83,31 @@ msgstr ""
msgid "cannot find \"{0}\"" msgid "cannot find \"{0}\""
msgstr "" msgstr ""
#: tiramisu/api.py:811 #: tiramisu/api.py:812
msgid "cannot reduce length of the leader {}" msgid "cannot reduce length of the leader {}"
msgstr "" msgstr ""
#: tiramisu/api.py:864 #: tiramisu/api.py:865
msgid "only multi value has defaultmulti" msgid "only multi value has defaultmulti"
msgstr "" msgstr ""
#: tiramisu/api.py:1023 #: tiramisu/api.py:1029
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:1410 #: tiramisu/api.py:1416
msgid "properties must be a frozenset" msgid "properties must be a frozenset"
msgstr "" msgstr ""
#: tiramisu/api.py:1414 tiramisu/api.py:1441 #: tiramisu/api.py:1420 tiramisu/api.py:1447
msgid "unknown when {} (must be in append or remove)" msgid "unknown when {} (must be in append or remove)"
msgstr "" msgstr ""
#: tiramisu/api.py:1427 tiramisu/api.py:1451 tiramisu/config.py:1681 #: tiramisu/api.py:1433 tiramisu/api.py:1457 tiramisu/config.py:1681
msgid "unknown type {}" msgid "unknown type {}"
msgstr "" msgstr ""
#: tiramisu/api.py:1815 #: tiramisu/api.py:1821
msgid "do not use unrestraint, nowarnings or forcepermissive together" msgid "do not use unrestraint, nowarnings or forcepermissive together"
msgstr "" msgstr ""
@ -320,30 +320,38 @@ msgid "cannot modify the {0} {1} because has {2} {3}"
msgstr "" msgstr ""
#: tiramisu/error.py:118 #: tiramisu/error.py:118
msgid "cannot access to {0} {1} because \"{2}\" has {3} {4}" msgid "cannot access to {0} {1} because \"{2}\" hasn't value"
msgstr "" msgstr ""
#: tiramisu/error.py:120 #: tiramisu/error.py:120
msgid "{0} {1} is mandatory but hasn't value"
msgstr ""
#: tiramisu/error.py:123
msgid "cannot access to {0} {1} because \"{2}\" has {3} {4}"
msgstr ""
#: tiramisu/error.py:125
msgid "cannot access to {0} {1} because has {2} {3}" msgid "cannot access to {0} {1} because has {2} {3}"
msgstr "" msgstr ""
#: tiramisu/error.py:192 #: tiramisu/error.py:197
msgid "invalid value" msgid "invalid value"
msgstr "" msgstr ""
#: tiramisu/error.py:202 #: tiramisu/error.py:207
msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\"" msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\""
msgstr "" msgstr ""
#: tiramisu/error.py:204 #: tiramisu/error.py:209
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:223 tiramisu/error.py:234 #: tiramisu/error.py:228 tiramisu/error.py:239
msgid "\"{0}\" is an invalid {1} for \"{2}\"" msgid "\"{0}\" is an invalid {1} for \"{2}\""
msgstr "" msgstr ""
#: tiramisu/error.py:225 #: tiramisu/error.py:230
msgid "\"{0}\" is an invalid {1} for \"{2}\" at index \"{3}\"" msgid "\"{0}\" is an invalid {1} for \"{2}\" at index \"{3}\""
msgstr "" msgstr ""
@ -411,23 +419,23 @@ msgstr ""
msgid "invalid properties type {0} for {1}, must be a frozenset" msgid "invalid properties type {0} for {1}, must be a frozenset"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:98 #: tiramisu/option/baseoption.py:100
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:249 #: tiramisu/option/baseoption.py:251
msgid "information's item for {0} not found: \"{1}\"" msgid "information's item for {0} not found: \"{1}\""
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:267 #: tiramisu/option/baseoption.py:269
msgid "'{0}' ({1}) object attribute '{2}' is read-only" msgid "'{0}' ({1}) object attribute '{2}' is read-only"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:308 #: tiramisu/option/baseoption.py:310
msgid "\"{}\" ({}) object attribute \"{}\" is read-only" msgid "\"{}\" ({}) object attribute \"{}\" is read-only"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:320 #: tiramisu/option/baseoption.py:322
msgid "{0} not part of any Config" msgid "{0} not part of any Config"
msgstr "" msgstr ""
@ -451,76 +459,76 @@ msgstr ""
msgid "only {0} are allowed" msgid "only {0} are allowed"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:62 #: tiramisu/option/domainnameoption.py:67
msgid "unknown type {0} for hostname" msgid "unknown type {0} for hostname"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:65 #: 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:67 #: 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:69 #: 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:71 #: 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:82 #: 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:85 #: 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:90 #: 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:93 #: 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:97 #: tiramisu/option/domainnameoption.py:102
#: tiramisu/option/domainnameoption.py:98 #: tiramisu/option/domainnameoption.py:103
msgid "could be a IP, otherwise {}" msgid "could be a IP, otherwise {}"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:143 #: tiramisu/option/domainnameoption.py:148
msgid "invalid length (min 1)" msgid "invalid length (min 1)"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:146 #: tiramisu/option/domainnameoption.py:151
msgid "invalid length (max {0})" msgid "invalid length (max {0})"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:152 #: tiramisu/option/domainnameoption.py:157
msgid "must have dot" msgid "must have dot"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:154 #: tiramisu/option/domainnameoption.py:159
msgid "invalid length (max 255)" msgid "invalid length (max 255)"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:175 #: tiramisu/option/domainnameoption.py:180
msgid "DNS resolution failed" msgid "DNS resolution failed"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:179 #: tiramisu/option/domainnameoption.py:184
msgid "error resolving DNS: {1}" msgid "error resolving DNS: {1}"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:186 #: tiramisu/option/domainnameoption.py:191
msgid "must not be an IP" msgid "must not be an IP"
msgstr "" msgstr ""
#: tiramisu/option/domainnameoption.py:209 #: tiramisu/option/domainnameoption.py:214
msgid "some characters are uppercase" msgid "some characters are uppercase"
msgstr "" msgstr ""
@ -556,6 +564,10 @@ msgstr ""
msgid "cannot find this {0}" msgid "cannot find this {0}"
msgstr "" msgstr ""
#: tiramisu/option/intoption.py:46
msgid "which is not an integer"
msgstr ""
#: tiramisu/option/intoption.py:52 #: 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 ""
@ -668,19 +680,19 @@ msgstr ""
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:285 #: tiramisu/option/option.py:291
msgid "the value \"{}\" is not unique" msgid "the value \"{}\" is not unique"
msgstr "" msgstr ""
#: tiramisu/option/option.py:347 #: tiramisu/option/option.py:353
msgid "which must not be a list" msgid "which must not be a list"
msgstr "" msgstr ""
#: tiramisu/option/option.py:399 tiramisu/option/option.py:425 #: tiramisu/option/option.py:405 tiramisu/option/option.py:431
msgid "which must be a list" msgid "which must be a list"
msgstr "" msgstr ""
#: tiramisu/option/option.py:419 #: tiramisu/option/option.py:425
msgid "which \"{}\" must be a list of list" msgid "which \"{}\" must be a list of list"
msgstr "" msgstr ""
@ -757,27 +769,27 @@ msgstr ""
msgid "too weak" msgid "too weak"
msgstr "" msgstr ""
#: tiramisu/option/portoption.py:74 #: tiramisu/option/portoption.py:80
msgid "inconsistency in allowed range" msgid "inconsistency in allowed range"
msgstr "" msgstr ""
#: tiramisu/option/portoption.py:79 #: tiramisu/option/portoption.py:85
msgid "max value is empty" msgid "max value is empty"
msgstr "" msgstr ""
#: tiramisu/option/portoption.py:92 #: tiramisu/option/portoption.py:98
msgid "range must have two values only" msgid "range must have two values only"
msgstr "" msgstr ""
#: tiramisu/option/portoption.py:95 #: tiramisu/option/portoption.py:101
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:121 #: tiramisu/option/portoption.py:127
msgid "should be between {0} and {1}" msgid "should be between {0} and {1}"
msgstr "" msgstr ""
#: tiramisu/option/portoption.py:123 #: tiramisu/option/portoption.py:129
msgid "must be between {0} and {1}" msgid "must be between {0} and {1}"
msgstr "" msgstr ""
@ -789,59 +801,59 @@ 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:91 #: tiramisu/option/urloption.py:92
msgid "must start with http:// or https://" msgid "must start with http:// or https://"
msgstr "" msgstr ""
#: tiramisu/option/urloption.py:116 #: 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:123 #: 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:127 #: tiramisu/option/urloption.py:128
msgid "must ends with a valid resource name" msgid "must ends with a valid resource name"
msgstr "" msgstr ""
#: tiramisu/setting.py:255 #: tiramisu/setting.py:258
msgid "can't rebind {0}" msgid "can't rebind {0}"
msgstr "" msgstr ""
#: tiramisu/setting.py:262 #: tiramisu/setting.py:265
msgid "can't unbind {0}" msgid "can't unbind {0}"
msgstr "" msgstr ""
#: tiramisu/setting.py:464 #: tiramisu/setting.py:467
msgid "invalid property type {type(new_prop)} for {subconfig.option.impl_getname()} with {prop.function.__name__} function" msgid "invalid property type {type(new_prop)} for {subconfig.option.impl_getname()} with {prop.function.__name__} function"
msgstr "" msgstr ""
#: tiramisu/setting.py:476 #: tiramisu/setting.py:479
msgid "leader cannot have \"{new_prop}\" property" msgid "leader cannot have \"{new_prop}\" property"
msgstr "" msgstr ""
#: tiramisu/setting.py:564 #: tiramisu/setting.py:567
msgid "leader cannot have \"{0}\" property" msgid "leader cannot have \"{0}\" property"
msgstr "" msgstr ""
#: tiramisu/setting.py:573 #: tiramisu/setting.py:576
msgid "a leader ({0}) cannot have \"force_default_on_freeze\" or \"force_metaconfig_on_freeze\" property without \"frozen\"" msgid "a leader ({0}) cannot have \"force_default_on_freeze\" or \"force_metaconfig_on_freeze\" property without \"frozen\""
msgstr "" msgstr ""
#: tiramisu/setting.py:607 #: tiramisu/setting.py:610
msgid "permissive must be a frozenset" msgid "permissive must be a frozenset"
msgstr "" msgstr ""
#: tiramisu/setting.py:617 #: tiramisu/setting.py:620
msgid "cannot add those permissives: {0}" msgid "cannot add those permissives: {0}"
msgstr "" msgstr ""
#: tiramisu/setting.py:654 #: tiramisu/setting.py:657
msgid "can't reset properties to the symlinkoption \"{}\"" msgid "can't reset properties to the symlinkoption \"{}\""
msgstr "" msgstr ""
#: tiramisu/setting.py:667 #: tiramisu/setting.py:670
msgid "can't reset permissives to the symlinkoption \"{}\"" msgid "can't reset permissives to the symlinkoption \"{}\""
msgstr "" msgstr ""
@ -869,19 +881,19 @@ msgstr ""
msgid "unknown action {}" msgid "unknown action {}"
msgstr "" msgstr ""
#: tiramisu/value.py:564 tiramisu/value.py:861 #: tiramisu/value.py:566 tiramisu/value.py:863
msgid "set owner \"{0}\" is forbidden" msgid "set owner \"{0}\" is forbidden"
msgstr "" msgstr ""
#: tiramisu/value.py:571 #: tiramisu/value.py:573
msgid "\"{0}\" is a default value, so we cannot change owner to \"{1}\"" msgid "\"{0}\" is a default value, so we cannot change owner to \"{1}\""
msgstr "" msgstr ""
#: tiramisu/value.py:740 #: tiramisu/value.py:742
msgid "index {index} is greater than the length {length} for option {subconfig.option.impl_get_display_name(with_quote=True)}" msgid "index {index} is greater than the length {length} for option {subconfig.option.impl_get_display_name(with_quote=True)}"
msgstr "" msgstr ""
#: tiramisu/value.py:847 #: tiramisu/value.py:849
msgid "information's item not found \"{}\"" msgid "information's item not found \"{}\""
msgstr "" msgstr ""

View file

@ -910,34 +910,39 @@ class TiramisuOptionValue(CommonTiramisuOption, _TiramisuODGet):
def mandatory(self): def mandatory(self):
"""Return path of options with mandatory property without any value""" """Return path of options with mandatory property without any value"""
subconfig = self._subconfig subconfig = self._subconfig
if subconfig.option.impl_is_optiondescription(): ori_config_bag = self._subconfig.config_bag
ori_config_bag = self._subconfig.config_bag config_bag = ori_config_bag.copy()
config_bag = ori_config_bag.copy() config_bag.properties -= {"mandatory", "empty", "warnings"}
config_bag.properties -= {"mandatory", "empty", "warnings"} config_bag.set_permissive()
config_bag.set_permissive() self._subconfig.config_bag = config_bag
self._subconfig.config_bag = config_bag
options = []
for subconfig in self._config_bag.context.walk(
self._subconfig,
only_mandatory=True,
):
options.append(
TiramisuOption(
subconfig.path,
subconfig.index,
ori_config_bag,
subconfig=subconfig,
)
)
self._subconfig.config_bag = ori_config_bag
return options
try: try:
self._config_bag.context.walk_valid_value( if subconfig.option.impl_is_optiondescription():
self._subconfig, only_mandatory=True options = []
) for subconfig in config_bag.context.walk(
except PropertiesOptionError as err: self._subconfig,
return err.proptype == ["mandatory"] or err.proptype == ["empty"] only_mandatory=True,
return False ):
options.append(
TiramisuOption(
subconfig.path,
subconfig.index,
ori_config_bag,
subconfig=subconfig,
)
)
self._subconfig.config_bag = ori_config_bag
return options
try:
self._config_bag.context.walk_valid_value(
self._subconfig, only_mandatory=True
)
except PropertiesOptionError as err:
return err.proptype == ["mandatory"] or err.proptype == ["empty"]
self._subconfig.config_bag = ori_config_bag
return False
except Exception as err:
self._subconfig.config_bag = ori_config_bag
raise err from err
def _registers( def _registers(

View file

@ -113,6 +113,11 @@ class PropertiesOptionError(AttributeError):
msg = _('cannot modify the {0} {1} because "{2}" has {3} {4}') msg = _('cannot modify the {0} {1} because "{2}" has {3} {4}')
else: else:
msg = _("cannot modify the {0} {1} because has {2} {3}") msg = _("cannot modify the {0} {1} because has {2} {3}")
elif properties == ["mandatory"]:
if self._orig_opt:
msg = _("cannot access to {0} {1} because \"{2}\" hasn't value")
else:
msg = _("{0} {1} is mandatory but hasn't value")
else: else:
if self._orig_opt: if self._orig_opt:
msg = _('cannot access to {0} {1} because "{2}" has {3} {4}') msg = _('cannot access to {0} {1} because "{2}" has {3} {4}')

View file

@ -43,7 +43,7 @@ class IntOption(Option):
value: int, value: int,
) -> None: ) -> None:
if not isinstance(value, int): if not isinstance(value, int):
raise ValueError() raise ValueError(_('which is not an integer'))
def second_level_validation(self, value, warnings_only): def second_level_validation(self, value, warnings_only):
min_number = self.impl_get_extra("min_number") min_number = self.impl_get_extra("min_number")