8
0
Fork 0
mirror of https://gitlab.federez.net/re2o/re2o synced 2024-07-13 17:54:46 +00:00

Merge branch 'handle_empty_emails' into 'dev'

Handle empty emails

See merge request re2o/re2o!508
This commit is contained in:
chirac 2020-04-21 21:52:45 +02:00
commit ab541ab503
15 changed files with 461 additions and 471 deletions

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 20:16+0200\n" "POT-Creation-Date: 2020-04-21 21:38+0200\n"
"PO-Revision-Date: 2019-01-07 01:37+0100\n" "PO-Revision-Date: 2019-01-07 01:37+0100\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 20:16+0200\n" "POT-Creation-Date: 2020-04-21 21:38+0200\n"
"PO-Revision-Date: 2018-03-31 16:09+0002\n" "PO-Revision-Date: 2018-03-31 16:09+0002\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language: fr_FR\n" "Language: fr_FR\n"
@ -37,7 +37,7 @@ msgstr "Vous n'avez pas le droit de voir cette application."
msgid "Select a payment method" msgid "Select a payment method"
msgstr "Sélectionnez un moyen de paiement" msgstr "Sélectionnez un moyen de paiement"
#: cotisations/forms.py:73 cotisations/models.py:687 #: cotisations/forms.py:73 cotisations/models.py:688
msgid "Member" msgid "Member"
msgstr "Adhérent" msgstr "Adhérent"
@ -154,7 +154,7 @@ msgstr "Peut voir un objet facture"
msgid "Can edit all the previous invoices" msgid "Can edit all the previous invoices"
msgstr "Peut modifier toutes les factures précédentes" msgstr "Peut modifier toutes les factures précédentes"
#: cotisations/models.py:145 cotisations/models.py:461 cotisations/views.py:376 #: cotisations/models.py:145 cotisations/models.py:462 cotisations/views.py:376
#: cotisations/views.py:571 #: cotisations/views.py:571
msgid "invoice" msgid "invoice"
msgstr "facture" msgstr "facture"
@ -217,115 +217,115 @@ msgstr "Il n'y a pas de moyens de paiement que vous puissiez utiliser."
msgid "There are no articles that you can buy." msgid "There are no articles that you can buy."
msgstr "Il n'y a pas d'articles que vous puissiez acheter." msgstr "Il n'y a pas d'articles que vous puissiez acheter."
#: cotisations/models.py:377 #: cotisations/models.py:378
msgid "Can view a custom invoice object" msgid "Can view a custom invoice object"
msgstr "Peut voir un objet facture personnalisée" msgstr "Peut voir un objet facture personnalisée"
#: cotisations/models.py:379 #: cotisations/models.py:380
msgid "recipient" msgid "recipient"
msgstr "destinataire" msgstr "destinataire"
#: cotisations/models.py:380 #: cotisations/models.py:381
msgid "payment type" msgid "payment type"
msgstr "type de paiement" msgstr "type de paiement"
#: cotisations/models.py:381 #: cotisations/models.py:382
msgid "address" msgid "address"
msgstr "adresse" msgstr "adresse"
#: cotisations/models.py:382 #: cotisations/models.py:383
msgid "paid" msgid "paid"
msgstr "payé" msgstr "payé"
#: cotisations/models.py:383 #: cotisations/models.py:384
msgid "remark" msgid "remark"
msgstr "remarque" msgstr "remarque"
#: cotisations/models.py:388 #: cotisations/models.py:389
msgid "Can view a cost estimate object" msgid "Can view a cost estimate object"
msgstr "Peut voir un objet devis" msgstr "Peut voir un objet devis"
#: cotisations/models.py:391 #: cotisations/models.py:392
msgid "period of validity" msgid "period of validity"
msgstr "période de validité" msgstr "période de validité"
#: cotisations/models.py:426 #: cotisations/models.py:427
msgid "You don't have the right to delete a cost estimate." msgid "You don't have the right to delete a cost estimate."
msgstr "Vous n'avez pas le droit de supprimer un devis." msgstr "Vous n'avez pas le droit de supprimer un devis."
#: cotisations/models.py:432 #: cotisations/models.py:433
msgid "The cost estimate has an invoice and can't be deleted." msgid "The cost estimate has an invoice and can't be deleted."
msgstr "Le devis a une facture et ne peut pas être supprimé." msgstr "Le devis a une facture et ne peut pas être supprimé."
#: cotisations/models.py:454 cotisations/models.py:693 #: cotisations/models.py:455 cotisations/models.py:694
#: cotisations/models.py:951 #: cotisations/models.py:952
msgid "Connection" msgid "Connection"
msgstr "Connexion" msgstr "Connexion"
#: cotisations/models.py:455 cotisations/models.py:694 #: cotisations/models.py:456 cotisations/models.py:695
#: cotisations/models.py:952 #: cotisations/models.py:953
msgid "Membership" msgid "Membership"
msgstr "Adhésion" msgstr "Adhésion"
#: cotisations/models.py:456 cotisations/models.py:689 #: cotisations/models.py:457 cotisations/models.py:690
#: cotisations/models.py:695 cotisations/models.py:953 #: cotisations/models.py:696 cotisations/models.py:954
msgid "Both of them" msgid "Both of them"
msgstr "Les deux" msgstr "Les deux"
#: cotisations/models.py:465 #: cotisations/models.py:466
msgid "amount" msgid "amount"
msgstr "montant" msgstr "montant"
#: cotisations/models.py:468 #: cotisations/models.py:469
msgid "article" msgid "article"
msgstr "article" msgstr "article"
#: cotisations/models.py:471 #: cotisations/models.py:472
msgid "price" msgid "price"
msgstr "prix" msgstr "prix"
#: cotisations/models.py:474 cotisations/models.py:707 #: cotisations/models.py:475 cotisations/models.py:708
msgid "duration (in months)" msgid "duration (in months)"
msgstr "durée (en mois)" msgstr "durée (en mois)"
#: cotisations/models.py:480 cotisations/models.py:713 #: cotisations/models.py:481 cotisations/models.py:714
msgid "duration (in days, will be added to duration in months)" msgid "duration (in days, will be added to duration in months)"
msgstr "durée (en jours, sera ajoutée à la durée en mois)" msgstr "durée (en jours, sera ajoutée à la durée en mois)"
#: cotisations/models.py:488 cotisations/models.py:727 #: cotisations/models.py:489 cotisations/models.py:728
#: cotisations/models.py:964 #: cotisations/models.py:965
msgid "subscription type" msgid "subscription type"
msgstr "type de cotisation" msgstr "type de cotisation"
#: cotisations/models.py:493 #: cotisations/models.py:494
msgid "Can view a purchase object" msgid "Can view a purchase object"
msgstr "Peut voir un objet achat" msgstr "Peut voir un objet achat"
#: cotisations/models.py:494 #: cotisations/models.py:495
msgid "Can edit all the previous purchases" msgid "Can edit all the previous purchases"
msgstr "Peut modifier tous les achats précédents" msgstr "Peut modifier tous les achats précédents"
#: cotisations/models.py:496 cotisations/models.py:958 #: cotisations/models.py:497 cotisations/models.py:959
msgid "purchase" msgid "purchase"
msgstr "achat" msgstr "achat"
#: cotisations/models.py:497 #: cotisations/models.py:498
msgid "purchases" msgid "purchases"
msgstr "achats" msgstr "achats"
#: cotisations/models.py:550 cotisations/models.py:747 #: cotisations/models.py:551 cotisations/models.py:748
msgid "Duration must be specified for a subscription." msgid "Duration must be specified for a subscription."
msgstr "La durée doit être renseignée pour une cotisation." msgstr "La durée doit être renseignée pour une cotisation."
#: cotisations/models.py:561 #: cotisations/models.py:562
msgid "You don't have the right to edit a purchase." msgid "You don't have the right to edit a purchase."
msgstr "Vous n'avez pas le droit de modifier un achat." msgstr "Vous n'avez pas le droit de modifier un achat."
#: cotisations/models.py:567 #: cotisations/models.py:568
msgid "You don't have the right to edit this user's purchases." msgid "You don't have the right to edit this user's purchases."
msgstr "Vous n'avez pas le droit de modifier les achats de cet utilisateur." msgstr "Vous n'avez pas le droit de modifier les achats de cet utilisateur."
#: cotisations/models.py:576 #: cotisations/models.py:577
msgid "" msgid ""
"You don't have the right to edit a purchase already controlled or " "You don't have the right to edit a purchase already controlled or "
"invalidated." "invalidated."
@ -333,15 +333,15 @@ msgstr ""
"Vous n'avez pas le droit de modifier un achat précédemment contrôlé ou " "Vous n'avez pas le droit de modifier un achat précédemment contrôlé ou "
"invalidé." "invalidé."
#: cotisations/models.py:591 #: cotisations/models.py:592
msgid "You don't have the right to delete a purchase." msgid "You don't have the right to delete a purchase."
msgstr "Vous n'avez pas le droit de supprimer un achat." msgstr "Vous n'avez pas le droit de supprimer un achat."
#: cotisations/models.py:597 #: cotisations/models.py:598
msgid "You don't have the right to delete this user's purchases." msgid "You don't have the right to delete this user's purchases."
msgstr "Vous n'avez pas le droit de supprimer les achats de cet utilisateur." msgstr "Vous n'avez pas le droit de supprimer les achats de cet utilisateur."
#: cotisations/models.py:604 #: cotisations/models.py:605
msgid "" msgid ""
"You don't have the right to delete a purchase already controlled or " "You don't have the right to delete a purchase already controlled or "
"invalidated." "invalidated."
@ -349,134 +349,134 @@ msgstr ""
"Vous n'avez pas le droit de supprimer un achat précédemment contrôlé ou " "Vous n'avez pas le droit de supprimer un achat précédemment contrôlé ou "
"invalidé." "invalidé."
#: cotisations/models.py:620 #: cotisations/models.py:621
msgid "You don't have the right to view someone else's purchase history." msgid "You don't have the right to view someone else's purchase history."
msgstr "" msgstr ""
"Vous n'avez pas le droit de voir l'historique des achats d'un autre " "Vous n'avez pas le droit de voir l'historique des achats d'un autre "
"utilisateur." "utilisateur."
#: cotisations/models.py:688 #: cotisations/models.py:689
msgid "Club" msgid "Club"
msgstr "Club" msgstr "Club"
#: cotisations/models.py:698 #: cotisations/models.py:699
msgid "designation" msgid "designation"
msgstr "désignation" msgstr "désignation"
#: cotisations/models.py:701 #: cotisations/models.py:702
msgid "unit price" msgid "unit price"
msgstr "prix unitaire" msgstr "prix unitaire"
#: cotisations/models.py:719 #: cotisations/models.py:720
msgid "type of users concerned" msgid "type of users concerned"
msgstr "type d'utilisateurs concernés" msgstr "type d'utilisateurs concernés"
#: cotisations/models.py:730 cotisations/models.py:831 #: cotisations/models.py:731 cotisations/models.py:832
msgid "is available for every user" msgid "is available for every user"
msgstr "est disponible pour chaque utilisateur" msgstr "est disponible pour chaque utilisateur"
#: cotisations/models.py:737 #: cotisations/models.py:738
msgid "Can view an article object" msgid "Can view an article object"
msgstr "Peut voir un objet article" msgstr "Peut voir un objet article"
#: cotisations/models.py:738 #: cotisations/models.py:739
msgid "Can buy every article" msgid "Can buy every article"
msgstr "Peut acheter chaque article" msgstr "Peut acheter chaque article"
#: cotisations/models.py:745 #: cotisations/models.py:746
msgid "Solde is a reserved article name." msgid "Solde is a reserved article name."
msgstr "Solde est un nom d'article réservé." msgstr "Solde est un nom d'article réservé."
#: cotisations/models.py:770 #: cotisations/models.py:771
msgid "You can't buy this article." msgid "You can't buy this article."
msgstr "Vous ne pouvez pas acheter cet article." msgstr "Vous ne pouvez pas acheter cet article."
#: cotisations/models.py:811 #: cotisations/models.py:812
msgid "Can view a bank object" msgid "Can view a bank object"
msgstr "Peut voir un objet banque" msgstr "Peut voir un objet banque"
#: cotisations/models.py:812 #: cotisations/models.py:813
msgid "bank" msgid "bank"
msgstr "banque" msgstr "banque"
#: cotisations/models.py:813 #: cotisations/models.py:814
msgid "banks" msgid "banks"
msgstr "banques" msgstr "banques"
#: cotisations/models.py:829 #: cotisations/models.py:830
msgid "method" msgid "method"
msgstr "moyen" msgstr "moyen"
#: cotisations/models.py:836 #: cotisations/models.py:837
msgid "is user balance" msgid "is user balance"
msgstr "est solde utilisateur" msgstr "est solde utilisateur"
#: cotisations/models.py:837 #: cotisations/models.py:838
msgid "There should be only one balance payment method." msgid "There should be only one balance payment method."
msgstr "Il ne devrait y avoir qu'un moyen de paiement solde." msgstr "Il ne devrait y avoir qu'un moyen de paiement solde."
#: cotisations/models.py:843 #: cotisations/models.py:844
msgid "Can view a payment method object" msgid "Can view a payment method object"
msgstr "Peut voir un objet moyen de paiement" msgstr "Peut voir un objet moyen de paiement"
#: cotisations/models.py:844 #: cotisations/models.py:845
msgid "Can use every payment method" msgid "Can use every payment method"
msgstr "Peut utiliser chaque moyen de paiement" msgstr "Peut utiliser chaque moyen de paiement"
#: cotisations/models.py:846 #: cotisations/models.py:847
msgid "payment method" msgid "payment method"
msgstr "moyen de paiement" msgstr "moyen de paiement"
#: cotisations/models.py:847 #: cotisations/models.py:848
msgid "payment methods" msgid "payment methods"
msgstr "moyens de paiement" msgstr "moyens de paiement"
#: cotisations/models.py:886 cotisations/payment_methods/comnpay/views.py:62 #: cotisations/models.py:887 cotisations/payment_methods/comnpay/views.py:62
#, python-format #, python-format
msgid "The subscription of %(member_name)s was extended to %(end_date)s." msgid "The subscription of %(member_name)s was extended to %(end_date)s."
msgstr "La cotisation de %(member_name)s a été étendue au %(end_date)s." msgstr "La cotisation de %(member_name)s a été étendue au %(end_date)s."
#: cotisations/models.py:896 #: cotisations/models.py:897
msgid "The invoice was created." msgid "The invoice was created."
msgstr "La facture a été créée." msgstr "La facture a été créée."
#: cotisations/models.py:916 #: cotisations/models.py:917
msgid "You can't use this payment method." msgid "You can't use this payment method."
msgstr "Vous ne pouvez pas utiliser ce moyen de paiement." msgstr "Vous ne pouvez pas utiliser ce moyen de paiement."
#: cotisations/models.py:935 #: cotisations/models.py:936
msgid "No custom payment methods." msgid "No custom payment methods."
msgstr "Pas de moyens de paiement personnalisés." msgstr "Pas de moyens de paiement personnalisés."
#: cotisations/models.py:966 #: cotisations/models.py:967
msgid "start date" msgid "start date"
msgstr "date de début" msgstr "date de début"
#: cotisations/models.py:967 #: cotisations/models.py:968
msgid "end date" msgid "end date"
msgstr "date de fin" msgstr "date de fin"
#: cotisations/models.py:971 #: cotisations/models.py:972
msgid "Can view a subscription object" msgid "Can view a subscription object"
msgstr "Peut voir un objet cotisation" msgstr "Peut voir un objet cotisation"
#: cotisations/models.py:972 #: cotisations/models.py:973
msgid "Can edit the previous subscriptions" msgid "Can edit the previous subscriptions"
msgstr "Peut modifier les cotisations précédentes" msgstr "Peut modifier les cotisations précédentes"
#: cotisations/models.py:974 #: cotisations/models.py:975
msgid "subscription" msgid "subscription"
msgstr "cotisation" msgstr "cotisation"
#: cotisations/models.py:975 #: cotisations/models.py:976
msgid "subscriptions" msgid "subscriptions"
msgstr "cotisations" msgstr "cotisations"
#: cotisations/models.py:981 #: cotisations/models.py:982
msgid "You don't have the right to edit a subscription." msgid "You don't have the right to edit a subscription."
msgstr "Vous n'avez pas le droit de modifier une cotisation." msgstr "Vous n'avez pas le droit de modifier une cotisation."
#: cotisations/models.py:990 #: cotisations/models.py:991
msgid "" msgid ""
"You don't have the right to edit a subscription already controlled or " "You don't have the right to edit a subscription already controlled or "
"invalidated." "invalidated."
@ -484,11 +484,11 @@ msgstr ""
"Vous n'avez pas le droit de modifier une cotisation précédemment contrôlée " "Vous n'avez pas le droit de modifier une cotisation précédemment contrôlée "
"ou invalidée." "ou invalidée."
#: cotisations/models.py:1002 #: cotisations/models.py:1003
msgid "You don't have the right to delete a subscription." msgid "You don't have the right to delete a subscription."
msgstr "Vous n'avez pas le droit de supprimer une cotisation." msgstr "Vous n'avez pas le droit de supprimer une cotisation."
#: cotisations/models.py:1009 #: cotisations/models.py:1010
msgid "" msgid ""
"You don't have the right to delete a subscription already controlled or " "You don't have the right to delete a subscription already controlled or "
"invalidated." "invalidated."
@ -496,7 +496,7 @@ msgstr ""
"Vous n'avez pas le droit de supprimer une cotisation précédemment contrôlée " "Vous n'avez pas le droit de supprimer une cotisation précédemment contrôlée "
"ou invalidée." "ou invalidée."
#: cotisations/models.py:1025 #: cotisations/models.py:1026
msgid "You don't have the right to view someone else's subscription history." msgid "You don't have the right to view someone else's subscription history."
msgstr "" msgstr ""
"Vous n'avez pas le droit de voir l'historique des cotisations d'un autre " "Vous n'avez pas le droit de voir l'historique des cotisations d'un autre "
@ -933,11 +933,6 @@ msgstr "Créer une facture"
msgid "Control the invoices" msgid "Control the invoices"
msgstr "Contrôler les factures" msgstr "Contrôler les factures"
#: cotisations/utils.py:57
#, python-format
msgid "Failed to send email: %(error)s."
msgstr ""
#: cotisations/views.py:157 #: cotisations/views.py:157
msgid "You need to choose at least one article." msgid "You need to choose at least one article."
msgstr "Vous devez choisir au moins un article." msgstr "Vous devez choisir au moins un article."

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 20:16+0200\n" "POT-Creation-Date: 2020-04-21 21:38+0200\n"
"PO-Revision-Date: 2018-06-23 16:01+0200\n" "PO-Revision-Date: 2018-06-23 16:01+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 20:16+0200\n" "POT-Creation-Date: 2020-04-21 21:38+0200\n"
"PO-Revision-Date: 2018-06-23 16:35+0200\n" "PO-Revision-Date: 2018-06-23 16:35+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"
@ -155,7 +155,7 @@ msgstr "Peut voir un objet machine"
msgid "Can change the user of a machine" msgid "Can change the user of a machine"
msgstr "Peut changer l'utilisateur d'une machine" msgstr "Peut changer l'utilisateur d'une machine"
#: machines/models.py:80 machines/views.py:317 #: machines/models.py:80 machines/views.py:306
msgid "machine" msgid "machine"
msgstr "machine" msgstr "machine"
@ -521,7 +521,7 @@ msgid "Can view an SSHFP record object"
msgstr "Peut voir un objet enregistrement SSHFP" msgstr "Peut voir un objet enregistrement SSHFP"
#: machines/models.py:1057 machines/templates/machines/machine.html:144 #: machines/models.py:1057 machines/templates/machines/machine.html:144
#: machines/views.py:485 #: machines/views.py:474
msgid "SSHFP record" msgid "SSHFP record"
msgstr "enregistrement SSHFP" msgstr "enregistrement SSHFP"
@ -537,7 +537,7 @@ msgstr "Peut voir un objet interface"
msgid "Can change the owner of an interface" msgid "Can change the owner of an interface"
msgstr "Peut changer l'utilisateur d'une interface" msgstr "Peut changer l'utilisateur d'une interface"
#: machines/models.py:1096 machines/views.py:369 #: machines/models.py:1096 machines/views.py:358
msgid "interface" msgid "interface"
msgstr "interface" msgstr "interface"
@ -596,7 +596,7 @@ msgstr "Peut voir un objet list d'adresses IPv6"
msgid "Can change the SLAAC value of an IPv6 addresses list" msgid "Can change the SLAAC value of an IPv6 addresses list"
msgstr "Peut modifier la valeur SLAAC d'une liste d'adresses IPv6" msgstr "Peut modifier la valeur SLAAC d'une liste d'adresses IPv6"
#: machines/models.py:1423 machines/views.py:429 #: machines/models.py:1423 machines/views.py:418
msgid "IPv6 addresses list" msgid "IPv6 addresses list"
msgstr "Liste d'adresses IPv6" msgstr "Liste d'adresses IPv6"
@ -951,13 +951,13 @@ msgstr "Afficher le constructeur"
msgid "Display the IPv6 address" msgid "Display the IPv6 address"
msgstr "Afficher les adresses IPv6" msgstr "Afficher les adresses IPv6"
#: machines/templates/machines/aff_machines.html:126 machines/views.py:299 #: machines/templates/machines/aff_machines.html:126 machines/views.py:288
#: machines/views.py:413 machines/views.py:469 machines/views.py:520 #: machines/views.py:402 machines/views.py:458 machines/views.py:509
#: machines/views.py:583 machines/views.py:646 machines/views.py:708 #: machines/views.py:572 machines/views.py:635 machines/views.py:697
#: machines/views.py:760 machines/views.py:812 machines/views.py:864 #: machines/views.py:749 machines/views.py:801 machines/views.py:853
#: machines/views.py:919 machines/views.py:971 machines/views.py:1033 #: machines/views.py:908 machines/views.py:960 machines/views.py:1022
#: machines/views.py:1089 machines/views.py:1141 machines/views.py:1207 #: machines/views.py:1078 machines/views.py:1130 machines/views.py:1196
#: machines/views.py:1259 machines/views.py:1575 #: machines/views.py:1248 machines/views.py:1564
msgid "Edit" msgid "Edit"
msgstr "Modifier" msgstr "Modifier"
@ -1432,76 +1432,76 @@ msgstr "Rôles de serveur"
msgid "Ports openings" msgid "Ports openings"
msgstr "Ouvertures de ports" msgstr "Ouvertures de ports"
#: machines/views.py:153 #: machines/views.py:142
msgid "Select a machine type first." msgid "Select a machine type first."
msgstr "Sélectionnez un type de machine d'abord." msgstr "Sélectionnez un type de machine d'abord."
#: machines/views.py:244 #: machines/views.py:233
msgid "The machine was created." msgid "The machine was created."
msgstr "La machine a été créée." msgstr "La machine a été créée."
#: machines/views.py:253 machines/views.py:348 machines/views.py:389 #: machines/views.py:242 machines/views.py:337 machines/views.py:378
#: machines/views.py:447 machines/views.py:501 machines/views.py:566 #: machines/views.py:436 machines/views.py:490 machines/views.py:555
#: machines/views.py:629 machines/views.py:691 machines/views.py:743 #: machines/views.py:618 machines/views.py:680 machines/views.py:732
#: machines/views.py:795 machines/views.py:847 machines/views.py:902 #: machines/views.py:784 machines/views.py:836 machines/views.py:891
#: machines/views.py:954 machines/views.py:1011 machines/views.py:1072 #: machines/views.py:943 machines/views.py:1000 machines/views.py:1061
#: machines/views.py:1124 machines/views.py:1190 machines/views.py:1242 #: machines/views.py:1113 machines/views.py:1179 machines/views.py:1231
msgid "Add" msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
#: machines/views.py:285 #: machines/views.py:274
msgid "The machine was edited." msgid "The machine was edited."
msgstr "La machine a été modifiée." msgstr "La machine a été modifiée."
#: machines/views.py:312 #: machines/views.py:301
msgid "The machine was deleted." msgid "The machine was deleted."
msgstr "La machine a été supprimée." msgstr "La machine a été supprimée."
#: machines/views.py:338 #: machines/views.py:327
msgid "The interface was created." msgid "The interface was created."
msgstr "L'interface a été créée." msgstr "L'interface a été créée."
#: machines/views.py:364 #: machines/views.py:353
msgid "The interface was deleted." msgid "The interface was deleted."
msgstr "L'interface a été supprimée." msgstr "L'interface a été supprimée."
#: machines/views.py:384 #: machines/views.py:373
msgid "The IPv6 addresses list was created." msgid "The IPv6 addresses list was created."
msgstr "La liste d'adresses IPv6 a été créée." msgstr "La liste d'adresses IPv6 a été créée."
#: machines/views.py:405 #: machines/views.py:394
msgid "The IPv6 addresses list was edited." msgid "The IPv6 addresses list was edited."
msgstr "La liste d'adresses IPv6 a été modifiée." msgstr "La liste d'adresses IPv6 a été modifiée."
#: machines/views.py:424 #: machines/views.py:413
msgid "The IPv6 addresses list was deleted." msgid "The IPv6 addresses list was deleted."
msgstr "La liste d'adresses IPv6 a été supprimée." msgstr "La liste d'adresses IPv6 a été supprimée."
#: machines/views.py:442 #: machines/views.py:431
msgid "The SSHFP record was created." msgid "The SSHFP record was created."
msgstr "L'enregistrement SSHFP a été créé." msgstr "L'enregistrement SSHFP a été créé."
#: machines/views.py:461 #: machines/views.py:450
msgid "The SSHFP record was edited." msgid "The SSHFP record was edited."
msgstr "L'enregistrement SSHFP a été modifié." msgstr "L'enregistrement SSHFP a été modifié."
#: machines/views.py:480 #: machines/views.py:469
msgid "The SSHFP record was deleted." msgid "The SSHFP record was deleted."
msgstr "L'enregistrement SSHFP a été supprimé." msgstr "L'enregistrement SSHFP a été supprimé."
#: machines/views.py:498 #: machines/views.py:487
msgid "The IP type was created." msgid "The IP type was created."
msgstr "Le type d'IP a été créé." msgstr "Le type d'IP a été créé."
#: machines/views.py:517 #: machines/views.py:506
msgid "The IP type was edited." msgid "The IP type was edited."
msgstr "Le type d'IP a été modifié." msgstr "Le type d'IP a été modifié."
#: machines/views.py:536 #: machines/views.py:525
msgid "The IP type was deleted." msgid "The IP type was deleted."
msgstr "Le type d'IP a été supprimé." msgstr "Le type d'IP a été supprimé."
#: machines/views.py:542 #: machines/views.py:531
#, python-format #, python-format
msgid "" msgid ""
"The IP type %s is assigned to at least one machine, you can't delete it." "The IP type %s is assigned to at least one machine, you can't delete it."
@ -1509,27 +1509,27 @@ msgstr ""
"Le type d'IP %s est assigné à au moins une machine, vous ne pouvez pas le " "Le type d'IP %s est assigné à au moins une machine, vous ne pouvez pas le "
"supprimer." "supprimer."
#: machines/views.py:550 machines/views.py:613 machines/views.py:675 #: machines/views.py:539 machines/views.py:602 machines/views.py:664
#: machines/views.py:729 machines/views.py:781 machines/views.py:833 #: machines/views.py:718 machines/views.py:770 machines/views.py:822
#: machines/views.py:886 machines/views.py:940 machines/views.py:992 #: machines/views.py:875 machines/views.py:929 machines/views.py:981
#: machines/views.py:1056 machines/views.py:1110 machines/views.py:1165 #: machines/views.py:1045 machines/views.py:1099 machines/views.py:1154
#: machines/views.py:1228 machines/views.py:1280 #: machines/views.py:1217 machines/views.py:1269
msgid "Delete" msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
#: machines/views.py:563 #: machines/views.py:552
msgid "The machine type was created." msgid "The machine type was created."
msgstr "Le type de machine a été créé." msgstr "Le type de machine a été créé."
#: machines/views.py:580 #: machines/views.py:569
msgid "The machine type was edited." msgid "The machine type was edited."
msgstr "Le type de machine a été modifié." msgstr "Le type de machine a été modifié."
#: machines/views.py:599 #: machines/views.py:588
msgid "The machine type was deleted." msgid "The machine type was deleted."
msgstr "Le type de machine a été supprimé." msgstr "Le type de machine a été supprimé."
#: machines/views.py:605 #: machines/views.py:594
#, python-format #, python-format
msgid "" msgid ""
"The machine type %s is assigned to at least one machine, you can't delete it." "The machine type %s is assigned to at least one machine, you can't delete it."
@ -1537,19 +1537,19 @@ msgstr ""
"Le type de machine %s est assigné à au moins un machine, vous ne pouvez pas " "Le type de machine %s est assigné à au moins un machine, vous ne pouvez pas "
"le supprimer." "le supprimer."
#: machines/views.py:626 #: machines/views.py:615
msgid "The extension was created." msgid "The extension was created."
msgstr "L'extension a été créée." msgstr "L'extension a été créée."
#: machines/views.py:643 #: machines/views.py:632
msgid "The extension was edited." msgid "The extension was edited."
msgstr "L'extension a été modifiée." msgstr "L'extension a été modifiée."
#: machines/views.py:662 #: machines/views.py:651
msgid "The extension was deleted." msgid "The extension was deleted."
msgstr "L'extension a été supprimée." msgstr "L'extension a été supprimée."
#: machines/views.py:668 #: machines/views.py:657
#, python-format #, python-format
msgid "" msgid ""
"The extension %s is assigned to at least one machine type, you can't delete " "The extension %s is assigned to at least one machine type, you can't delete "
@ -1558,207 +1558,207 @@ msgstr ""
"L'extension %s est assignée à au moins un type de machine, vous ne pouvez " "L'extension %s est assignée à au moins un type de machine, vous ne pouvez "
"pas le supprimer." "pas le supprimer."
#: machines/views.py:688 #: machines/views.py:677
msgid "The SOA record was created." msgid "The SOA record was created."
msgstr "L'enregistrement SOA a été créé." msgstr "L'enregistrement SOA a été créé."
#: machines/views.py:705 #: machines/views.py:694
msgid "The SOA record was edited." msgid "The SOA record was edited."
msgstr "L'enregistrement SOA a été modifié." msgstr "L'enregistrement SOA a été modifié."
#: machines/views.py:722 #: machines/views.py:711
msgid "The SOA record was deleted." msgid "The SOA record was deleted."
msgstr "L'enregistrement SOA a été supprimé." msgstr "L'enregistrement SOA a été supprimé."
#: machines/views.py:725 #: machines/views.py:714
#, python-format #, python-format
msgid "Error: the SOA record %s can't be deleted." msgid "Error: the SOA record %s can't be deleted."
msgstr "Erreur : l'enregistrement SOA %s ne peut pas être supprimé." msgstr "Erreur : l'enregistrement SOA %s ne peut pas être supprimé."
#: machines/views.py:740 #: machines/views.py:729
msgid "The MX record was created." msgid "The MX record was created."
msgstr "L'enregistrement MX a été créé." msgstr "L'enregistrement MX a été créé."
#: machines/views.py:757 #: machines/views.py:746
msgid "The MX record was edited." msgid "The MX record was edited."
msgstr "L'enregistrement MX a été modifié." msgstr "L'enregistrement MX a été modifié."
#: machines/views.py:774 #: machines/views.py:763
msgid "The MX record was deleted." msgid "The MX record was deleted."
msgstr "L'enregistrement MX a été supprimé." msgstr "L'enregistrement MX a été supprimé."
#: machines/views.py:777 #: machines/views.py:766
#, python-format #, python-format
msgid "Error: the MX record %s can't be deleted." msgid "Error: the MX record %s can't be deleted."
msgstr "Erreur : l'enregistrement MX %s ne peut pas être supprimé." msgstr "Erreur : l'enregistrement MX %s ne peut pas être supprimé."
#: machines/views.py:792 #: machines/views.py:781
msgid "The NS record was created." msgid "The NS record was created."
msgstr "L'enregistrement NS a été créé." msgstr "L'enregistrement NS a été créé."
#: machines/views.py:809 #: machines/views.py:798
msgid "The NS record was edited." msgid "The NS record was edited."
msgstr "L'enregistrement NS a été modifié." msgstr "L'enregistrement NS a été modifié."
#: machines/views.py:826 #: machines/views.py:815
msgid "The NS record was deleted." msgid "The NS record was deleted."
msgstr "L'enregistrement NS a été supprimé." msgstr "L'enregistrement NS a été supprimé."
#: machines/views.py:829 #: machines/views.py:818
#, python-format #, python-format
msgid "Error: the NS record %s can't be deleted." msgid "Error: the NS record %s can't be deleted."
msgstr "Erreur : l'enregistrement NS %s ne peut pas être supprimé." msgstr "Erreur : l'enregistrement NS %s ne peut pas être supprimé."
#: machines/views.py:844 #: machines/views.py:833
msgid "The DNAME record was created." msgid "The DNAME record was created."
msgstr "L'enregistrement DNAME a été créé." msgstr "L'enregistrement DNAME a été créé."
#: machines/views.py:861 #: machines/views.py:850
msgid "The DNAME record was edited." msgid "The DNAME record was edited."
msgstr "L'enregistrement DNAME a été modifié." msgstr "L'enregistrement DNAME a été modifié."
#: machines/views.py:878 #: machines/views.py:867
msgid "The DNAME record was deleted." msgid "The DNAME record was deleted."
msgstr "L'enregistrement DNAME a été supprimé." msgstr "L'enregistrement DNAME a été supprimé."
#: machines/views.py:882 #: machines/views.py:871
#, python-format #, python-format
msgid "Error: the DNAME record %s can't be deleted." msgid "Error: the DNAME record %s can't be deleted."
msgstr "Erreur : l'enregistrement DNAME %s ne peut pas être supprimé." msgstr "Erreur : l'enregistrement DNAME %s ne peut pas être supprimé."
#: machines/views.py:899 #: machines/views.py:888
msgid "The TXT record was created." msgid "The TXT record was created."
msgstr "L'enregistrement TXT a été créé." msgstr "L'enregistrement TXT a été créé."
#: machines/views.py:916 #: machines/views.py:905
msgid "The TXT record was edited." msgid "The TXT record was edited."
msgstr "L'enregistrement TXT a été modifié." msgstr "L'enregistrement TXT a été modifié."
#: machines/views.py:933 #: machines/views.py:922
msgid "The TXT record was deleted." msgid "The TXT record was deleted."
msgstr "L'enregistrement TXT a été supprimé." msgstr "L'enregistrement TXT a été supprimé."
#: machines/views.py:936 #: machines/views.py:925
#, python-format #, python-format
msgid "Error: the TXT record %s can't be deleted." msgid "Error: the TXT record %s can't be deleted."
msgstr "Erreur : l'enregistrement %s ne peut pas être supprimé." msgstr "Erreur : l'enregistrement %s ne peut pas être supprimé."
#: machines/views.py:951 #: machines/views.py:940
msgid "The SRV record was created." msgid "The SRV record was created."
msgstr "L'enregistrement SRV a été créé." msgstr "L'enregistrement SRV a été créé."
#: machines/views.py:968 #: machines/views.py:957
msgid "The SRV record was edited." msgid "The SRV record was edited."
msgstr "L'enregistrement SRV a été modifié." msgstr "L'enregistrement SRV a été modifié."
#: machines/views.py:985 #: machines/views.py:974
msgid "The SRV record was deleted." msgid "The SRV record was deleted."
msgstr "L'enregistrement SRV a été supprimé." msgstr "L'enregistrement SRV a été supprimé."
#: machines/views.py:988 #: machines/views.py:977
#, python-format #, python-format
msgid "Error: the SRV record %s can't be deleted." msgid "Error: the SRV record %s can't be deleted."
msgstr "Erreur : l'enregistrement SRV %s ne peut pas être supprimé." msgstr "Erreur : l'enregistrement SRV %s ne peut pas être supprimé."
#: machines/views.py:1006 #: machines/views.py:995
msgid "The alias was created." msgid "The alias was created."
msgstr "L'alias a été créé." msgstr "L'alias a été créé."
#: machines/views.py:1025 #: machines/views.py:1014
msgid "The alias was edited." msgid "The alias was edited."
msgstr "L'alias a été modifié." msgstr "L'alias a été modifié."
#: machines/views.py:1047 #: machines/views.py:1036
#, python-format #, python-format
msgid "The alias %s was deleted." msgid "The alias %s was deleted."
msgstr "L'alias %s a été supprimé." msgstr "L'alias %s a été supprimé."
#: machines/views.py:1050 #: machines/views.py:1039
#, python-format #, python-format
msgid "Error: the alias %s can't be deleted." msgid "Error: the alias %s can't be deleted."
msgstr "Erreur : l'alias %s ne peut pas être supprimé." msgstr "Erreur : l'alias %s ne peut pas être supprimé."
#: machines/views.py:1069 #: machines/views.py:1058
msgid "The role was created." msgid "The role was created."
msgstr "Le rôle a été créé." msgstr "Le rôle a été créé."
#: machines/views.py:1086 #: machines/views.py:1075
msgid "The role was edited." msgid "The role was edited."
msgstr "Le rôle a été modifié." msgstr "Le rôle a été modifié."
#: machines/views.py:1103 #: machines/views.py:1092
msgid "The role was deleted." msgid "The role was deleted."
msgstr "Le rôle a été supprimé." msgstr "Le rôle a été supprimé."
#: machines/views.py:1106 #: machines/views.py:1095
#, python-format #, python-format
msgid "Error: the role %s can't be deleted." msgid "Error: the role %s can't be deleted."
msgstr "Erreur : le rôle %s ne peut pas être supprimé." msgstr "Erreur : le rôle %s ne peut pas être supprimé."
#: machines/views.py:1121 #: machines/views.py:1110
msgid "The service was created." msgid "The service was created."
msgstr "Le service a été créé." msgstr "Le service a été créé."
#: machines/views.py:1138 #: machines/views.py:1127
msgid "The service was edited." msgid "The service was edited."
msgstr "Le service a été modifié." msgstr "Le service a été modifié."
#: machines/views.py:1157 #: machines/views.py:1146
msgid "The service was deleted." msgid "The service was deleted."
msgstr "Le service a été supprimé." msgstr "Le service a été supprimé."
#: machines/views.py:1161 #: machines/views.py:1150
#, python-format #, python-format
msgid "Error: the service %s can't be deleted." msgid "Error: the service %s can't be deleted."
msgstr "Erreur : le service %s ne peut pas être supprimé." msgstr "Erreur : le service %s ne peut pas être supprimé."
#: machines/views.py:1187 #: machines/views.py:1176
msgid "The VLAN was created." msgid "The VLAN was created."
msgstr "Le VLAN a été créé." msgstr "Le VLAN a été créé."
#: machines/views.py:1204 #: machines/views.py:1193
msgid "The VLAN was edited." msgid "The VLAN was edited."
msgstr "Le VLAN a été modifié." msgstr "Le VLAN a été modifié."
#: machines/views.py:1221 #: machines/views.py:1210
msgid "The VLAN was deleted." msgid "The VLAN was deleted."
msgstr "Le VLAN a été supprimé." msgstr "Le VLAN a été supprimé."
#: machines/views.py:1224 #: machines/views.py:1213
#, python-format #, python-format
msgid "Error: the VLAN %s can't be deleted." msgid "Error: the VLAN %s can't be deleted."
msgstr "Erreur : le VLAN %s ne peut pas être supprimé." msgstr "Erreur : le VLAN %s ne peut pas être supprimé."
#: machines/views.py:1239 #: machines/views.py:1228
msgid "The NAS device was created." msgid "The NAS device was created."
msgstr "Le dispositif NAS a été créé." msgstr "Le dispositif NAS a été créé."
#: machines/views.py:1256 #: machines/views.py:1245
msgid "The NAS device was edited." msgid "The NAS device was edited."
msgstr "Le dispositif NAS a été modifié." msgstr "Le dispositif NAS a été modifié."
#: machines/views.py:1273 #: machines/views.py:1262
msgid "The NAS device was deleted." msgid "The NAS device was deleted."
msgstr "Le dispositif NAS a été supprimé." msgstr "Le dispositif NAS a été supprimé."
#: machines/views.py:1276 #: machines/views.py:1265
#, python-format #, python-format
msgid "Error: the NAS device %s can't be deleted." msgid "Error: the NAS device %s can't be deleted."
msgstr "Erreur : le dispositif NAS %s ne peut pas être supprimé." msgstr "Erreur : le dispositif NAS %s ne peut pas être supprimé."
#: machines/views.py:1502 #: machines/views.py:1491
msgid "The ports list was edited." msgid "The ports list was edited."
msgstr "La liste de ports a été modifiée." msgstr "La liste de ports a été modifiée."
#: machines/views.py:1516 #: machines/views.py:1505
msgid "The ports list was deleted." msgid "The ports list was deleted."
msgstr "La liste de ports a été supprimée." msgstr "La liste de ports a été supprimée."
#: machines/views.py:1541 #: machines/views.py:1530
msgid "The ports list was created." msgid "The ports list was created."
msgstr "La liste de ports a été créée." msgstr "La liste de ports a été créée."
#: machines/views.py:1561 #: machines/views.py:1550
msgid "" msgid ""
"Warning: the IP address is not public, the opening won't have any effect in " "Warning: the IP address is not public, the opening won't have any effect in "
"v4." "v4."
@ -1766,6 +1766,6 @@ msgstr ""
"Attention : l'adresse IP n'est pas publique, l'ouverture n'aura pas d'effet " "Attention : l'adresse IP n'est pas publique, l'ouverture n'aura pas d'effet "
"en v4." "en v4."
#: machines/views.py:1572 #: machines/views.py:1561
msgid "The ports configuration was edited." msgid "The ports configuration was edited."
msgstr "La configuration de ports a été modifiée." msgstr "La configuration de ports a été modifiée."

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 20:16+0200\n" "POT-Creation-Date: 2020-04-21 21:38+0200\n"
"PO-Revision-Date: 2019-11-16 00:22+0100\n" "PO-Revision-Date: 2019-11-16 00:22+0100\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 20:16+0200\n" "POT-Creation-Date: 2020-04-21 21:38+0200\n"
"PO-Revision-Date: 2018-06-24 15:54+0200\n" "PO-Revision-Date: 2018-06-24 15:54+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"
@ -1110,10 +1110,9 @@ msgstr ""
"compte" "compte"
#: preferences/templates/preferences/display_preferences.html:136 #: preferences/templates/preferences/display_preferences.html:136
#, fuzzy, python-format #, python-format
#| msgid "%(delete_notyetactive)s days"
msgid "%(disable_emailnotyetconfirmed)s days" msgid "%(disable_emailnotyetconfirmed)s days"
msgstr "%(delete_notyetactive)s jours" msgstr "%(disable_emailnotyetconfirmed)s jours"
#: preferences/templates/preferences/display_preferences.html:140 #: preferences/templates/preferences/display_preferences.html:140
msgid "Users general permissions" msgid "Users general permissions"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 20:16+0200\n" "POT-Creation-Date: 2020-04-21 21:38+0200\n"
"PO-Revision-Date: 2018-03-31 16:09+0002\n" "PO-Revision-Date: 2018-03-31 16:09+0002\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"
@ -74,7 +74,7 @@ msgstr "Format : {main} {more}"
msgid "Format: {main}" msgid "Format: {main}"
msgstr "Format : {main}" msgstr "Format : {main}"
#: re2o/mail_utils.py:42 #: re2o/mail_utils.py:42 re2o/mail_utils.py:56
#, python-format #, python-format
msgid "Failed to send email: %(error)s." msgid "Failed to send email: %(error)s."
msgstr "Échec de l'envoi du mail : %(error)s." msgstr "Échec de l'envoi du mail : %(error)s."

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 20:16+0200\n" "POT-Creation-Date: 2020-04-21 21:38+0200\n"
"PO-Revision-Date: 2018-06-24 20:10+0200\n" "PO-Revision-Date: 2018-06-24 20:10+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 20:16+0200\n" "POT-Creation-Date: 2020-04-21 21:38+0200\n"
"PO-Revision-Date: 2018-03-31 16:09+0002\n" "PO-Revision-Date: 2018-03-31 16:09+0002\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"
@ -30,11 +30,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: templates/admin/base_site.html:65 templates/base.html:288 #: templates/admin/base_site.html:65 templates/base.html:290
msgid "powered by" msgid "powered by"
msgstr "propulsé par" msgstr "propulsé par"
#: templates/admin/base_site.html:69 templates/base.html:296 #: templates/admin/base_site.html:69 templates/base.html:298
msgid "" msgid ""
"This software is under the terms of the <a href=\"http://www.gnu.org/" "This software is under the terms of the <a href=\"http://www.gnu.org/"
"licenses/gpl-2.0.txt\" target=\"_blank\" rel=\"nofollow\">GPLv2</a> License." "licenses/gpl-2.0.txt\" target=\"_blank\" rel=\"nofollow\">GPLv2</a> License."
@ -80,7 +80,7 @@ msgstr ""
msgid "Unknown content" msgid "Unknown content"
msgstr "" msgstr ""
#: templates/base.html:70 templates/registration/logged_out.html:11 #: templates/base.html:72 templates/registration/logged_out.html:11
#: templates/registration/password_change_done.html:11 #: templates/registration/password_change_done.html:11
#: templates/registration/password_change_form.html:11 #: templates/registration/password_change_form.html:11
#: templates/registration/password_reset_complete.html:11 #: templates/registration/password_reset_complete.html:11
@ -90,145 +90,145 @@ msgstr ""
msgid "Home" msgid "Home"
msgstr "" msgstr ""
#: templates/base.html:91 #: templates/base.html:93
msgid "Users" msgid "Users"
msgstr "Utilisateurs" msgstr "Utilisateurs"
#: templates/base.html:94 #: templates/base.html:96
msgid "Manage the users" msgid "Manage the users"
msgstr "Gérer les utilisateurs" msgstr "Gérer les utilisateurs"
#: templates/base.html:95 #: templates/base.html:97
msgid "Manage the clubs" msgid "Manage the clubs"
msgstr "Gérer les clubs" msgstr "Gérer les clubs"
#: templates/base.html:98 #: templates/base.html:100
msgid "Manage the machines" msgid "Manage the machines"
msgstr "Gérer les machines" msgstr "Gérer les machines"
#: templates/base.html:101 #: templates/base.html:103
msgid "Manage the subscriptions" msgid "Manage the subscriptions"
msgstr "Gérer les cotisations" msgstr "Gérer les cotisations"
#: templates/base.html:114 #: templates/base.html:116
msgid "Topology" msgid "Topology"
msgstr "Topologie" msgstr "Topologie"
#: templates/base.html:116 #: templates/base.html:118
msgid "Switches" msgid "Switches"
msgstr "Commutateurs réseau" msgstr "Commutateurs réseau"
#: templates/base.html:117 #: templates/base.html:119
msgid "Access points" msgid "Access points"
msgstr "Points d'accès sans fil" msgstr "Points d'accès sans fil"
#: templates/base.html:118 #: templates/base.html:120
msgid "Rooms" msgid "Rooms"
msgstr "Chambres" msgstr "Chambres"
#: templates/base.html:128 #: templates/base.html:130
msgid "Statistics" msgid "Statistics"
msgstr "Statistiques" msgstr "Statistiques"
#: templates/base.html:133 #: templates/base.html:135
msgid "Administration" msgid "Administration"
msgstr "" msgstr ""
#: templates/base.html:140 #: templates/base.html:142
msgid "Information and contact" msgid "Information and contact"
msgstr "Informations et contact" msgstr "Informations et contact"
#: templates/base.html:142 #: templates/base.html:144
msgid "About" msgid "About"
msgstr "À propos" msgstr "À propos"
#: templates/base.html:143 #: templates/base.html:145
msgid "Contact" msgid "Contact"
msgstr "Contact" msgstr "Contact"
#: templates/base.html:157 #: templates/base.html:159
msgid "Sign up" msgid "Sign up"
msgstr "S'inscrire" msgstr "S'inscrire"
#: templates/base.html:163 templates/registration/login.html:29 #: templates/base.html:165 templates/registration/login.html:29
#: templates/registration/login.html:36 #: templates/registration/login.html:36
msgid "Log in" msgid "Log in"
msgstr "" msgstr ""
#: templates/base.html:171 #: templates/base.html:173
msgid "Search" msgid "Search"
msgstr "" msgstr ""
#: templates/base.html:185 #: templates/base.html:187
msgid "My profile" msgid "My profile"
msgstr "Mon profil" msgstr "Mon profil"
#: templates/base.html:186 #: templates/base.html:188
msgid "Log out" msgid "Log out"
msgstr "" msgstr ""
#: templates/base.html:221 #: templates/base.html:223
msgid "Username" msgid "Username"
msgstr "Pseudo" msgstr "Pseudo"
#: templates/base.html:225 #: templates/base.html:227
msgid "Room" msgid "Room"
msgstr "Chambre" msgstr "Chambre"
#: templates/base.html:229 #: templates/base.html:231
msgid "Internet access" msgid "Internet access"
msgstr "Accès Internet" msgstr "Accès Internet"
#: templates/base.html:232 #: templates/base.html:234
#, python-format #, python-format
msgid "Until %(end_access_date)s" msgid "Until %(end_access_date)s"
msgstr "Jusqu'au %(end_access_date)s" msgstr "Jusqu'au %(end_access_date)s"
#: templates/base.html:234 #: templates/base.html:236
msgid "Disabled" msgid "Disabled"
msgstr "Désactivé" msgstr "Désactivé"
#: templates/base.html:239 #: templates/base.html:241
msgid "Membership" msgid "Membership"
msgstr "Adhésion" msgstr "Adhésion"
#: templates/base.html:242 #: templates/base.html:244
#, python-format #, python-format
msgid "Until %(end_adhesion_date)s" msgid "Until %(end_adhesion_date)s"
msgstr "Jusqu'au %(end_adhesion_date)s" msgstr "Jusqu'au %(end_adhesion_date)s"
#: templates/base.html:244 #: templates/base.html:246
msgid "Non member" msgid "Non member"
msgstr "Non adhérent" msgstr "Non adhérent"
#: templates/base.html:252 #: templates/base.html:254
msgid "View my profile" msgid "View my profile"
msgstr "Voir mon profil" msgstr "Voir mon profil"
#: templates/base.html:257 #: templates/base.html:259
msgid "You are not logged in." msgid "You are not logged in."
msgstr "Vous n'êtes pas connecté." msgstr "Vous n'êtes pas connecté."
#: templates/base.html:264 #: templates/base.html:266
#, python-format #, python-format
msgid "%(nb)s active machine" msgid "%(nb)s active machine"
msgid_plural "%(nb)s active machines" msgid_plural "%(nb)s active machines"
msgstr[0] "%(nb)s machine active" msgstr[0] "%(nb)s machine active"
msgstr[1] "%(nb)s machines actives" msgstr[1] "%(nb)s machines actives"
#: templates/base.html:273 #: templates/base.html:275
msgid "View my machines" msgid "View my machines"
msgstr "Voir mes machines" msgstr "Voir mes machines"
#: templates/base.html:286 #: templates/base.html:288
msgid "Back to top" msgid "Back to top"
msgstr "Retour en haut" msgstr "Retour en haut"
#: templates/base.html:290 #: templates/base.html:292
msgid "Brought to you with <i class=\"fa fa-heart text-danger\"></i>." msgid "Brought to you with <i class=\"fa fa-heart text-danger\"></i>."
msgstr "Codé avec <i class=\"fa fa-heart text-danger\"></i>." msgstr "Codé avec <i class=\"fa fa-heart text-danger\"></i>."
#: templates/base.html:293 #: templates/base.html:295
msgid "About this website" msgid "About this website"
msgstr "À propos de ce site" msgstr "À propos de ce site"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 20:16+0200\n" "POT-Creation-Date: 2020-04-21 21:38+0200\n"
"PO-Revision-Date: 2019-11-16 00:35+0100\n" "PO-Revision-Date: 2019-11-16 00:35+0100\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 20:16+0200\n" "POT-Creation-Date: 2020-04-21 21:38+0200\n"
"PO-Revision-Date: 2018-06-25 14:53+0200\n" "PO-Revision-Date: 2018-06-25 14:53+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"

View file

@ -145,16 +145,7 @@ class UserCreationForm(FormRevMixin, forms.ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
prefix = kwargs.pop("prefix", self.Meta.model.__name__) prefix = kwargs.pop("prefix", self.Meta.model.__name__)
super(UserCreationForm, self).__init__(*args, prefix=prefix, **kwargs) super(UserCreationForm, self).__init__(*args, prefix=prefix, **kwargs)
self.fields["email"].required = True
def clean_email(self):
if not OptionalUser.objects.first().local_email_domain in self.cleaned_data.get(
"email"
):
return self.cleaned_data.get("email").lower()
else:
raise forms.ValidationError(
_("You can't use an internal address as your external address.")
)
class Meta: class Meta:
model = Adherent model = Adherent
@ -352,18 +343,6 @@ class AdherentForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
label=_("Force the move?"), initial=False, required=False label=_("Force the move?"), initial=False, required=False
) )
def clean_email(self):
if not OptionalUser.objects.first().local_email_domain in self.cleaned_data.get(
"email"
):
return self.cleaned_data.get("email").lower()
else:
raise forms.ValidationError(
_("You can't use a {} address.").format(
OptionalUser.objects.first().local_email_domain
)
)
def clean_telephone(self): def clean_telephone(self):
"""Verifie que le tel est présent si 'option est validée """Verifie que le tel est présent si 'option est validée
dans preferences""" dans preferences"""
@ -466,6 +445,7 @@ class AdherentCreationForm(AdherentForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(AdherentCreationForm, self).__init__(*args, **kwargs) super(AdherentCreationForm, self).__init__(*args, **kwargs)
gtu_file = GeneralOption.get_cached_value("GTU") gtu_file = GeneralOption.get_cached_value("GTU")
self.fields["email"].required = True
self.fields["gtu_check"].label = mark_safe( self.fields["gtu_check"].label = mark_safe(
"%s <a href='%s' download='CGU'>%s</a>." "%s <a href='%s' download='CGU'>%s</a>."
% ( % (
@ -520,6 +500,8 @@ class AdherentEditForm(AdherentForm):
self.fields["gpg_fingerprint"].widget.attrs["placeholder"] = _( self.fields["gpg_fingerprint"].widget.attrs["placeholder"] = _(
"Leave empty if you don't have any GPG key." "Leave empty if you don't have any GPG key."
) )
self.user = kwargs["instance"]
self.fields["email"].required = bool(self.user.email)
if "shell" in self.fields: if "shell" in self.fields:
self.fields["shell"].empty_label = _("Default shell") self.fields["shell"].empty_label = _("Default shell")
@ -832,24 +814,14 @@ class EmailSettingsForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
prefix = kwargs.pop("prefix", self.Meta.model.__name__) prefix = kwargs.pop("prefix", self.Meta.model.__name__)
super(EmailSettingsForm, self).__init__(*args, prefix=prefix, **kwargs) super(EmailSettingsForm, self).__init__(*args, prefix=prefix, **kwargs)
self.user = kwargs["instance"]
self.fields["email"].label = _("Main email address") self.fields["email"].label = _("Main email address")
self.fields["email"].required = bool(self.user.email)
if "local_email_redirect" in self.fields: if "local_email_redirect" in self.fields:
self.fields["local_email_redirect"].label = _("Redirect local emails") self.fields["local_email_redirect"].label = _("Redirect local emails")
if "local_email_enabled" in self.fields: if "local_email_enabled" in self.fields:
self.fields["local_email_enabled"].label = _("Use local emails") self.fields["local_email_enabled"].label = _("Use local emails")
def clean_email(self):
if not OptionalUser.objects.first().local_email_domain in self.cleaned_data.get(
"email"
):
return self.cleaned_data.get("email").lower()
else:
raise forms.ValidationError(
_("You can't use a {} address.").format(
OptionalUser.objects.first().local_email_domain
)
)
class Meta: class Meta:
model = User model = User
fields = ["email", "local_email_enabled", "local_email_redirect"] fields = ["email", "local_email_enabled", "local_email_redirect"]

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 20:16+0200\n" "POT-Creation-Date: 2020-04-21 21:38+0200\n"
"PO-Revision-Date: 2018-06-27 23:35+0200\n" "PO-Revision-Date: 2018-06-27 23:35+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"
@ -35,15 +35,15 @@ msgstr ""
msgid "You don't have the right to view this application." msgid "You don't have the right to view this application."
msgstr "Vous n'avez pas le droit de voir cette application." msgstr "Vous n'avez pas le droit de voir cette application."
#: users/forms.py:80 #: users/forms.py:81
msgid "Current password" msgid "Current password"
msgstr "Mot de passe actuel" msgstr "Mot de passe actuel"
#: users/forms.py:83 users/forms.py:628 users/forms.py:656 #: users/forms.py:84 users/forms.py:598 users/forms.py:626
msgid "New password" msgid "New password"
msgstr "Nouveau mot de passe" msgstr "Nouveau mot de passe"
#: users/forms.py:89 #: users/forms.py:90
msgid "New password confirmation" msgid "New password confirmation"
msgstr "Confirmation du nouveau mot de passe" msgstr "Confirmation du nouveau mot de passe"
@ -51,38 +51,33 @@ msgstr "Confirmation du nouveau mot de passe"
msgid "The new passwords don't match." msgid "The new passwords don't match."
msgstr "Les nouveaux mots de passe ne correspondent pas." msgstr "Les nouveaux mots de passe ne correspondent pas."
#: users/forms.py:111 #: users/forms.py:112
msgid "The current password is incorrect." msgid "The current password is incorrect."
msgstr "Le mot de passe actuel est incorrect." msgstr "Le mot de passe actuel est incorrect."
#: users/forms.py:132 users/forms.py:189 users/forms.py:425 #: users/forms.py:133 users/forms.py:181 users/forms.py:405
#: users/models.py:1908 #: users/models.py:1912
msgid "Password" msgid "Password"
msgstr "Mot de passe" msgstr "Mot de passe"
#: users/forms.py:138 users/forms.py:192 users/forms.py:432 #: users/forms.py:139 users/forms.py:184 users/forms.py:412
msgid "Password confirmation" msgid "Password confirmation"
msgstr "Confirmation du mot de passe" msgstr "Confirmation du mot de passe"
#: users/forms.py:143 users/forms.py:232 #: users/forms.py:143 users/forms.py:224
msgid "Is admin" msgid "Is admin"
msgstr "Est admin" msgstr "Est admin"
#: users/forms.py:156 #: users/forms.py:160 users/forms.py:204 users/forms.py:474
msgid "You can't use an internal address as your external address."
msgstr ""
"Vous ne pouvez pas utiliser une adresse interne pour votre adresse externe."
#: users/forms.py:169 users/forms.py:212 users/forms.py:506
msgid "The passwords don't match." msgid "The passwords don't match."
msgstr "Les mots de passe ne correspondent pas." msgstr "Les mots de passe ne correspondent pas."
#: users/forms.py:241 #: users/forms.py:233
#, python-format #, python-format
msgid "User is admin: %s" msgid "User is admin: %s"
msgstr "L'utilisateur est admin : %s" msgstr "L'utilisateur est admin : %s"
#: users/forms.py:287 users/templates/users/aff_clubs.html:38 #: users/forms.py:279 users/templates/users/aff_clubs.html:38
#: users/templates/users/aff_listright.html:63 #: users/templates/users/aff_listright.html:63
#: users/templates/users/aff_listright.html:168 #: users/templates/users/aff_listright.html:168
#: users/templates/users/aff_users.html:39 #: users/templates/users/aff_users.html:39
@ -91,75 +86,71 @@ msgstr "L'utilisateur est admin : %s"
msgid "Username" msgid "Username"
msgstr "Pseudo" msgstr "Pseudo"
#: users/forms.py:299 #: users/forms.py:291
msgid "Fully archive users? WARNING: CRITICAL OPERATION IF TRUE" msgid "Fully archive users? WARNING: CRITICAL OPERATION IF TRUE"
msgstr "" msgstr ""
"Complètement archiver les utilisateurs ? ATTENTION: OPÉRATION CRITIQUE SI OUI" "Complètement archiver les utilisateurs ? ATTENTION: OPÉRATION CRITIQUE SI OUI"
#: users/forms.py:312 #: users/forms.py:304
msgid "Impossible to archive users whose end access date is in the future." msgid "Impossible to archive users whose end access date is in the future."
msgstr "" msgstr ""
"Impossible d'archiver des utilisateurs dont la date de fin de connexion est " "Impossible d'archiver des utilisateurs dont la date de fin de connexion est "
"dans le futur." "dans le futur."
#: users/forms.py:327 users/templates/users/aff_users.html:35 #: users/forms.py:319 users/templates/users/aff_users.html:35
#: users/templates/users/profil.html:193 users/templates/users/profil.html:367 #: users/templates/users/profil.html:193 users/templates/users/profil.html:367
#: users/templates/users/profil.html:386 #: users/templates/users/profil.html:386
msgid "First name" msgid "First name"
msgstr "Prénom" msgstr "Prénom"
#: users/forms.py:328 users/templates/users/aff_users.html:37 #: users/forms.py:320 users/templates/users/aff_users.html:37
#: users/templates/users/profil.html:199 users/templates/users/profil.html:366 #: users/templates/users/profil.html:199 users/templates/users/profil.html:366
#: users/templates/users/profil.html:385 #: users/templates/users/profil.html:385
msgid "Surname" msgid "Surname"
msgstr "Nom" msgstr "Nom"
#: users/forms.py:329 users/forms.py:566 users/models.py:1908 #: users/forms.py:321 users/forms.py:536 users/models.py:1912
#: users/templates/users/aff_emailaddress.html:36 #: users/templates/users/aff_emailaddress.html:36
#: users/templates/users/profil.html:209 #: users/templates/users/profil.html:209
msgid "Email address" msgid "Email address"
msgstr "Adresse mail" msgstr "Adresse mail"
#: users/forms.py:330 users/forms.py:564 users/forms.py:709 #: users/forms.py:322 users/forms.py:534 users/forms.py:679
#: users/templates/users/aff_schools.html:37 #: users/templates/users/aff_schools.html:37
#: users/templates/users/profil.html:230 #: users/templates/users/profil.html:230
msgid "School" msgid "School"
msgstr "Établissement" msgstr "Établissement"
#: users/forms.py:331 users/forms.py:565 #: users/forms.py:323 users/forms.py:535
#: users/templates/users/aff_serviceusers.html:34 #: users/templates/users/aff_serviceusers.html:34
#: users/templates/users/profil.html:235 #: users/templates/users/profil.html:235
msgid "Comment" msgid "Comment"
msgstr "Commentaire" msgstr "Commentaire"
#: users/forms.py:333 users/forms.py:568 #: users/forms.py:325 users/forms.py:538
#: users/templates/users/aff_clubs.html:40 #: users/templates/users/aff_clubs.html:40
#: users/templates/users/aff_users.html:41 #: users/templates/users/aff_users.html:41
#: users/templates/users/profil.html:214 #: users/templates/users/profil.html:214
msgid "Room" msgid "Room"
msgstr "Chambre" msgstr "Chambre"
#: users/forms.py:334 users/forms.py:569 #: users/forms.py:326 users/forms.py:539
msgid "No room" msgid "No room"
msgstr "Pas de chambre" msgstr "Pas de chambre"
#: users/forms.py:335 users/forms.py:570 #: users/forms.py:327 users/forms.py:540
msgid "Select a school" msgid "Select a school"
msgstr "Sélectionnez un établissement" msgstr "Sélectionnez un établissement"
#: users/forms.py:351 #: users/forms.py:343
msgid "Force the move?" msgid "Force the move?"
msgstr "Forcer le déménagement ?" msgstr "Forcer le déménagement ?"
#: users/forms.py:361 users/forms.py:860 #: users/forms.py:351 users/forms.py:563
msgid "You can't use a {} address."
msgstr "Vous ne pouvez pas utiliser une adresse {}."
#: users/forms.py:371 users/forms.py:593
msgid "A valid telephone number is required." msgid "A valid telephone number is required."
msgstr "Un numéro de téléphone valide est requis." msgstr "Un numéro de téléphone valide est requis."
#: users/forms.py:405 #: users/forms.py:385
msgid "" msgid ""
"If this options is set, you will receive a link to set your initial password " "If this options is set, you will receive a link to set your initial password "
"by email. If you do not have any means of accessing your emails, you can " "by email. If you do not have any means of accessing your emails, you can "
@ -174,11 +165,11 @@ msgstr ""
"votre adresse dans les délais impartis, votre connexion sera automatiquement " "votre adresse dans les délais impartis, votre connexion sera automatiquement "
"suspendue." "suspendue."
#: users/forms.py:419 #: users/forms.py:399
msgid "Send password reset link by email." msgid "Send password reset link by email."
msgstr "Envoyer le lien de modification du mot de passe par mail." msgstr "Envoyer le lien de modification du mot de passe par mail."
#: users/forms.py:440 #: users/forms.py:419
msgid "" msgid ""
"If you already have an account, please use it. If your lost access to it, " "If you already have an account, please use it. If your lost access to it, "
"please consider using the forgotten password button on the login page or " "please consider using the forgotten password button on the login page or "
@ -189,101 +180,97 @@ msgstr ""
"passe oublié est à votre disposition. Si vous avez oublié votre login, " "passe oublié est à votre disposition. Si vous avez oublié votre login, "
"contactez le support." "contactez le support."
#: users/forms.py:447 #: users/forms.py:426
msgid "I certify that I have not had an account before." msgid "I certify that I have not had an account before."
msgstr "Je certifie sur l'honneur ne pas déjà avoir de compte." msgstr "Je certifie sur l'honneur ne pas déjà avoir de compte."
#: users/forms.py:472 #: users/forms.py:452
msgid "I commit to accept the" msgid "I commit to accept the"
msgstr "J'accepte les" msgstr "J'accepte les"
#: users/forms.py:474 #: users/forms.py:454
msgid "General Terms of Use" msgid "General Terms of Use"
msgstr "Conditions Générales d'Utilisation" msgstr "Conditions Générales d'Utilisation"
#: users/forms.py:492 #: users/forms.py:501
msgid "Password must contain at least 8 characters."
msgstr "Le mot de passe doit contenir au moins 8 caractères."
#: users/forms.py:533
msgid "Leave empty if you don't have any GPG key." msgid "Leave empty if you don't have any GPG key."
msgstr "Laissez vide si vous n'avez pas de clé GPG." msgstr "Laissez vide si vous n'avez pas de clé GPG."
#: users/forms.py:536 #: users/forms.py:506
msgid "Default shell" msgid "Default shell"
msgstr "Interface en ligne de commande par défaut" msgstr "Interface en ligne de commande par défaut"
#: users/forms.py:563 users/templates/users/aff_clubs.html:36 #: users/forms.py:533 users/templates/users/aff_clubs.html:36
#: users/templates/users/aff_serviceusers.html:32 #: users/templates/users/aff_serviceusers.html:32
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
#: users/forms.py:571 #: users/forms.py:541
msgid "Use a mailing list" msgid "Use a mailing list"
msgstr "Utiliser une liste de diffusion" msgstr "Utiliser une liste de diffusion"
#: users/forms.py:677 users/templates/users/profil.html:277 #: users/forms.py:647 users/templates/users/profil.html:277
msgid "State" msgid "State"
msgstr "État" msgstr "État"
#: users/forms.py:678 #: users/forms.py:648
msgid "Email state" msgid "Email state"
msgstr "État du mail" msgstr "État du mail"
#: users/forms.py:696 users/templates/users/aff_listright.html:38 #: users/forms.py:666 users/templates/users/aff_listright.html:38
msgid "Superuser" msgid "Superuser"
msgstr "Superutilisateur" msgstr "Superutilisateur"
#: users/forms.py:722 #: users/forms.py:692
msgid "Shell name" msgid "Shell name"
msgstr "Nom de l'interface en ligne de commande" msgstr "Nom de l'interface en ligne de commande"
#: users/forms.py:742 #: users/forms.py:712
msgid "Name of the group of rights" msgid "Name of the group of rights"
msgstr "Nom du groupe de droits" msgstr "Nom du groupe de droits"
#: users/forms.py:754 #: users/forms.py:724
msgid "GID. Warning: this field must not be edited after creation." msgid "GID. Warning: this field must not be edited after creation."
msgstr "GID. Attention : ce champ ne doit pas être modifié après création." msgstr "GID. Attention : ce champ ne doit pas être modifié après création."
#: users/forms.py:763 #: users/forms.py:733
msgid "Current groups of rights" msgid "Current groups of rights"
msgstr "Groupes de droits actuels" msgstr "Groupes de droits actuels"
#: users/forms.py:781 #: users/forms.py:751
msgid "Current schools" msgid "Current schools"
msgstr "Établissements actuels" msgstr "Établissements actuels"
#: users/forms.py:800 users/forms.py:815 users/templates/users/aff_bans.html:41 #: users/forms.py:770 users/forms.py:785 users/templates/users/aff_bans.html:41
#: users/templates/users/aff_whitelists.html:41 #: users/templates/users/aff_whitelists.html:41
msgid "End date" msgid "End date"
msgstr "Date de fin" msgstr "Date de fin"
#: users/forms.py:830 #: users/forms.py:800
msgid "Local part of the email address" msgid "Local part of the email address"
msgstr "Partie locale de l'adresse mail" msgstr "Partie locale de l'adresse mail"
#: users/forms.py:831 #: users/forms.py:801
msgid "Can't contain @." msgid "Can't contain @."
msgstr "Ne peut pas contenir @." msgstr "Ne peut pas contenir @."
#: users/forms.py:847 #: users/forms.py:818
msgid "Main email address" msgid "Main email address"
msgstr "Adresse mail principale" msgstr "Adresse mail principale"
#: users/forms.py:849 #: users/forms.py:821
msgid "Redirect local emails" msgid "Redirect local emails"
msgstr "Rediriger les mails locaux" msgstr "Rediriger les mails locaux"
#: users/forms.py:851 #: users/forms.py:823
msgid "Use local emails" msgid "Use local emails"
msgstr "Utiliser les mails locaux" msgstr "Utiliser les mails locaux"
#: users/forms.py:903 #: users/forms.py:863
msgid "This room is my room" msgid "This room is my room"
msgstr "Il s'agit bien de ma chambre" msgstr "Il s'agit bien de ma chambre"
#: users/forms.py:908 #: users/forms.py:868
msgid "This new connected device is mine" msgid "This new connected device is mine"
msgstr "Ce nouvel appareil connecté m'appartient" msgstr "Ce nouvel appareil connecté m'appartient"
@ -336,7 +323,7 @@ msgstr "Non confirmé"
msgid "Waiting for email confirmation" msgid "Waiting for email confirmation"
msgstr "En attente de confirmation" msgstr "En attente de confirmation"
#: users/models.py:204 users/models.py:1561 #: users/models.py:204 users/models.py:1565
msgid "Must only contain letters, numerals or dashes." msgid "Must only contain letters, numerals or dashes."
msgstr "Doit seulement contenir des lettres, chiffres ou tirets." msgstr "Doit seulement contenir des lettres, chiffres ou tirets."
@ -487,7 +474,7 @@ msgstr "Vous n'avez pas le droit de voir ce club."
msgid "You don't have the right to view another user." msgid "You don't have the right to view another user."
msgstr "Vous n'avez pas le droit de voir un autre utilisateur." msgstr "Vous n'avez pas le droit de voir un autre utilisateur."
#: users/models.py:1292 users/models.py:1497 #: users/models.py:1292 users/models.py:1501
msgid "You don't have the right to view the list of users." msgid "You don't have the right to view the list of users."
msgstr "Vous n'avez pas le droit de voir la liste des utilisateurs." msgstr "Vous n'avez pas le droit de voir la liste des utilisateurs."
@ -495,215 +482,208 @@ msgstr "Vous n'avez pas le droit de voir la liste des utilisateurs."
msgid "You don't have the right to delete this user." msgid "You don't have the right to delete this user."
msgstr "Vous n'avez pas le droit de supprimer cet utilisateur." msgstr "Vous n'avez pas le droit de supprimer cet utilisateur."
#: users/models.py:1332 #: users/models.py:1330
msgid "This username is already used." msgid "This username is already used."
msgstr "Ce pseudo est déjà utilisé." msgstr "Ce pseudo est déjà utilisé."
#: users/models.py:1340 #: users/models.py:1337
msgid "" msgid "Email field cannot be empty."
"There is neither a local email address nor an external email address for " msgstr "Le champ mail ne peut pas ^êêtre vide"
"this user."
msgstr ""
"Il n'y a pas d'adresse mail locale ni d'adresse mail externe pour cet "
"utilisateur."
#: users/models.py:1347 #: users/models.py:1344
msgid "" msgid "You can't use a {} address as an external contact address."
"You can't redirect your local emails if no external email address has been "
"set."
msgstr "" msgstr ""
"Vous ne pouvez pas rediriger vos mails locaux si aucune adresse mail externe " "Vous ne pouvez pas utiliser une adresse {} pour votre adresse externe."
"n'a été définie."
#: users/models.py:1367 #: users/models.py:1371
msgid "member" msgid "member"
msgstr "adhérent" msgstr "adhérent"
#: users/models.py:1368 #: users/models.py:1372
msgid "members" msgid "members"
msgstr "adhérents" msgstr "adhérents"
#: users/models.py:1385 #: users/models.py:1389
msgid "A GPG fingerprint must contain 40 hexadecimal characters." msgid "A GPG fingerprint must contain 40 hexadecimal characters."
msgstr "Une empreinte GPG doit contenir 40 caractères hexadécimaux." msgstr "Une empreinte GPG doit contenir 40 caractères hexadécimaux."
#: users/models.py:1410 #: users/models.py:1414
msgid "Self registration is disabled." msgid "Self registration is disabled."
msgstr "L'auto inscription est désactivée." msgstr "L'auto inscription est désactivée."
#: users/models.py:1420 #: users/models.py:1424
msgid "You don't have the right to create a user." msgid "You don't have the right to create a user."
msgstr "Vous n'avez pas le droit de créer un utilisateur." msgstr "Vous n'avez pas le droit de créer un utilisateur."
#: users/models.py:1450 #: users/models.py:1454
msgid "club" msgid "club"
msgstr "club" msgstr "club"
#: users/models.py:1451 #: users/models.py:1455
msgid "clubs" msgid "clubs"
msgstr "clubs" msgstr "clubs"
#: users/models.py:1462 #: users/models.py:1466
msgid "You must be authenticated." msgid "You must be authenticated."
msgstr "Vous devez être authentifié." msgstr "Vous devez être authentifié."
#: users/models.py:1470 #: users/models.py:1474
msgid "You don't have the right to create a club." msgid "You don't have the right to create a club."
msgstr "Vous n'avez pas le droit de créer un club." msgstr "Vous n'avez pas le droit de créer un club."
#: users/models.py:1565 #: users/models.py:1569
msgid "Comment." msgid "Comment."
msgstr "Commentaire." msgstr "Commentaire."
#: users/models.py:1571 #: users/models.py:1575
msgid "Can view a service user object" msgid "Can view a service user object"
msgstr "Peut voir un objet utilisateur service" msgstr "Peut voir un objet utilisateur service"
#: users/models.py:1572 users/views.py:360 #: users/models.py:1576 users/views.py:349
msgid "service user" msgid "service user"
msgstr "utilisateur service" msgstr "utilisateur service"
#: users/models.py:1573 #: users/models.py:1577
msgid "service users" msgid "service users"
msgstr "utilisateurs service" msgstr "utilisateurs service"
#: users/models.py:1577 #: users/models.py:1581
#, python-brace-format #, python-brace-format
msgid "Service user <{name}>" msgid "Service user <{name}>"
msgstr "Utilisateur service <{name}>" msgstr "Utilisateur service <{name}>"
#: users/models.py:1644 #: users/models.py:1648
msgid "Can view a school object" msgid "Can view a school object"
msgstr "Peut voir un objet établissement" msgstr "Peut voir un objet établissement"
#: users/models.py:1645 #: users/models.py:1649
msgid "school" msgid "school"
msgstr "établissement" msgstr "établissement"
#: users/models.py:1646 #: users/models.py:1650
msgid "schools" msgid "schools"
msgstr "établissements" msgstr "établissements"
#: users/models.py:1665 #: users/models.py:1669
msgid "UNIX group names can only contain lower case letters." msgid "UNIX group names can only contain lower case letters."
msgstr "" msgstr ""
"Les noms de groupe UNIX peuvent seulement contenir des lettres minuscules." "Les noms de groupe UNIX peuvent seulement contenir des lettres minuscules."
#: users/models.py:1671 #: users/models.py:1675
msgid "Description." msgid "Description."
msgstr "Description." msgstr "Description."
#: users/models.py:1674 #: users/models.py:1678
msgid "Can view a group of rights object" msgid "Can view a group of rights object"
msgstr "Peut voir un objet groupe de droits" msgstr "Peut voir un objet groupe de droits"
#: users/models.py:1675 #: users/models.py:1679
msgid "group of rights" msgid "group of rights"
msgstr "groupe de droits" msgstr "groupe de droits"
#: users/models.py:1676 #: users/models.py:1680
msgid "groups of rights" msgid "groups of rights"
msgstr "groupes de droits" msgstr "groupes de droits"
#: users/models.py:1721 #: users/models.py:1725
msgid "Can view a shell object" msgid "Can view a shell object"
msgstr "Peut voir un objet interface en ligne de commande" msgstr "Peut voir un objet interface en ligne de commande"
#: users/models.py:1722 users/views.py:679 #: users/models.py:1726 users/views.py:649
msgid "shell" msgid "shell"
msgstr "interface en ligne de commande" msgstr "interface en ligne de commande"
#: users/models.py:1723 #: users/models.py:1727
msgid "shells" msgid "shells"
msgstr "interfaces en ligne de commande" msgstr "interfaces en ligne de commande"
#: users/models.py:1741 #: users/models.py:1745
msgid "HARD (no access)" msgid "HARD (no access)"
msgstr "HARD (pas d'accès)" msgstr "HARD (pas d'accès)"
#: users/models.py:1742 #: users/models.py:1746
msgid "SOFT (local access only)" msgid "SOFT (local access only)"
msgstr "SOFT (accès local uniquement)" msgstr "SOFT (accès local uniquement)"
#: users/models.py:1743 #: users/models.py:1747
msgid "RESTRICTED (speed limitation)" msgid "RESTRICTED (speed limitation)"
msgstr "RESTRICTED (limitation de vitesse)" msgstr "RESTRICTED (limitation de vitesse)"
#: users/models.py:1754 #: users/models.py:1758
msgid "Can view a ban object" msgid "Can view a ban object"
msgstr "Peut voir un objet bannissement" msgstr "Peut voir un objet bannissement"
#: users/models.py:1755 users/views.py:415 #: users/models.py:1759 users/views.py:400
msgid "ban" msgid "ban"
msgstr "bannissement" msgstr "bannissement"
#: users/models.py:1756 #: users/models.py:1760
msgid "bans" msgid "bans"
msgstr "bannissements" msgstr "bannissements"
#: users/models.py:1793 #: users/models.py:1797
msgid "You don't have the right to view other bans than yours." msgid "You don't have the right to view other bans than yours."
msgstr "" msgstr ""
"Vous n'avez pas le droit de voir d'autres bannissements que les vôtres." "Vous n'avez pas le droit de voir d'autres bannissements que les vôtres."
#: users/models.py:1841 #: users/models.py:1845
msgid "Can view a whitelist object" msgid "Can view a whitelist object"
msgstr "Peut voir un objet accès gracieux" msgstr "Peut voir un objet accès gracieux"
#: users/models.py:1842 #: users/models.py:1846
msgid "whitelist (free of charge access)" msgid "whitelist (free of charge access)"
msgstr "Accès gracieux" msgstr "Accès gracieux"
#: users/models.py:1843 #: users/models.py:1847
msgid "whitelists (free of charge access)" msgid "whitelists (free of charge access)"
msgstr "Accès gracieux" msgstr "Accès gracieux"
#: users/models.py:1863 #: users/models.py:1867
msgid "You don't have the right to view other whitelists than yours." msgid "You don't have the right to view other whitelists than yours."
msgstr "" msgstr ""
"Vous n'avez pas le droit de voir d'autres accès gracieux que les vôtres." "Vous n'avez pas le droit de voir d'autres accès gracieux que les vôtres."
#: users/models.py:2061 #: users/models.py:2065
msgid "User of the local email account." msgid "User of the local email account."
msgstr "Utilisateur du compte mail local." msgstr "Utilisateur du compte mail local."
#: users/models.py:2064 #: users/models.py:2068
msgid "Local part of the email address." msgid "Local part of the email address."
msgstr "Partie locale de l'adresse mail." msgstr "Partie locale de l'adresse mail."
#: users/models.py:2069 #: users/models.py:2073
msgid "Can view a local email account object" msgid "Can view a local email account object"
msgstr "Peut voir un objet compte mail local" msgstr "Peut voir un objet compte mail local"
#: users/models.py:2071 #: users/models.py:2075
msgid "local email account" msgid "local email account"
msgstr "compte mail local" msgstr "compte mail local"
#: users/models.py:2072 #: users/models.py:2076
msgid "local email accounts" msgid "local email accounts"
msgstr "comptes mail locaux" msgstr "comptes mail locaux"
#: users/models.py:2100 users/models.py:2135 users/models.py:2169 #: users/models.py:2104 users/models.py:2139 users/models.py:2173
#: users/models.py:2203 #: users/models.py:2207
msgid "The local email accounts are not enabled." msgid "The local email accounts are not enabled."
msgstr "Les comptes mail locaux ne sont pas activés." msgstr "Les comptes mail locaux ne sont pas activés."
#: users/models.py:2105 #: users/models.py:2109
msgid "You don't have the right to add a local email account to another user." msgid "You don't have the right to add a local email account to another user."
msgstr "" msgstr ""
"Vous n'avez pas le droit d'ajouter un compte mail local à un autre " "Vous n'avez pas le droit d'ajouter un compte mail local à un autre "
"utilisateur." "utilisateur."
#: users/models.py:2115 #: users/models.py:2119
msgid "You reached the limit of {} local email accounts." msgid "You reached the limit of {} local email accounts."
msgstr "Vous avez atteint la limite de {} comptes mail locaux." msgstr "Vous avez atteint la limite de {} comptes mail locaux."
#: users/models.py:2141 #: users/models.py:2145
msgid "You don't have the right to view another user's local email account." msgid "You don't have the right to view another user's local email account."
msgstr "" msgstr ""
"Vous n'avez pas le droit de voir le compte mail local d'un autre utilisateur." "Vous n'avez pas le droit de voir le compte mail local d'un autre utilisateur."
#: users/models.py:2161 #: users/models.py:2165
msgid "" msgid ""
"You can't delete a local email account whose local part is the same as the " "You can't delete a local email account whose local part is the same as the "
"username." "username."
@ -711,13 +691,13 @@ msgstr ""
"Vous ne pouvez pas supprimer un compte mail local dont la partie locale est " "Vous ne pouvez pas supprimer un compte mail local dont la partie locale est "
"la même que le pseudo." "la même que le pseudo."
#: users/models.py:2175 #: users/models.py:2179
msgid "You don't have the right to delete another user's local email account." msgid "You don't have the right to delete another user's local email account."
msgstr "" msgstr ""
"Vous n'avez pas le droit de supprimer le compte mail local d'un autre " "Vous n'avez pas le droit de supprimer le compte mail local d'un autre "
"utilisateur." "utilisateur."
#: users/models.py:2195 #: users/models.py:2199
msgid "" msgid ""
"You can't edit a local email account whose local part is the same as the " "You can't edit a local email account whose local part is the same as the "
"username." "username."
@ -725,13 +705,13 @@ msgstr ""
"Vous ne pouvez pas modifier un compte mail local dont la partie locale est " "Vous ne pouvez pas modifier un compte mail local dont la partie locale est "
"la même que le pseudo." "la même que le pseudo."
#: users/models.py:2209 #: users/models.py:2213
msgid "You don't have the right to edit another user's local email account." msgid "You don't have the right to edit another user's local email account."
msgstr "" msgstr ""
"Vous n'avez pas le droit de modifier le compte mail local d'un autre " "Vous n'avez pas le droit de modifier le compte mail local d'un autre "
"utilisateur." "utilisateur."
#: users/models.py:2218 #: users/models.py:2222
msgid "The local part must not contain @ or +." msgid "The local part must not contain @ or +."
msgstr "La partie locale ne doit pas contenir @ ou +." msgstr "La partie locale ne doit pas contenir @ ou +."
@ -840,6 +820,7 @@ msgstr[0] "Total: %(perm_count)s permission"
msgstr[1] "Total: %(perm_count)s permissions" msgstr[1] "Total: %(perm_count)s permissions"
#: users/templates/users/aff_listright.html:150 #: users/templates/users/aff_listright.html:150
#: users/templates/users/edit_listright.html:29
#: users/templates/users/index.html:29 users/templates/users/index.html:32 #: users/templates/users/index.html:29 users/templates/users/index.html:32
#: users/templates/users/index_ban.html:29 #: users/templates/users/index_ban.html:29
#: users/templates/users/index_clubs.html:29 #: users/templates/users/index_clubs.html:29
@ -888,8 +869,8 @@ msgstr "pour %(name)s."
#: users/templates/users/confirm_email.html:39 #: users/templates/users/confirm_email.html:39
#: users/templates/users/delete.html:36 #: users/templates/users/delete.html:36
#: users/templates/users/mass_archive.html:36 #: users/templates/users/mass_archive.html:36
#: users/templates/users/resend_confirmation_email.html:35 users/views.py:636 #: users/templates/users/resend_confirmation_email.html:35 users/views.py:607
#: users/views.py:740 #: users/views.py:716
msgid "Confirm" msgid "Confirm"
msgstr "Confirmer" msgstr "Confirmer"
@ -1086,14 +1067,14 @@ msgstr "Pas de machine"
msgid "Detailed information" msgid "Detailed information"
msgstr "Informations détaillées" msgstr "Informations détaillées"
#: users/templates/users/profil.html:161 users/views.py:206 users/views.py:237 #: users/templates/users/profil.html:161 users/views.py:204 users/views.py:234
#: users/views.py:256 users/views.py:273 users/views.py:345 users/views.py:403 #: users/views.py:253 users/views.py:268 users/views.py:336 users/views.py:389
#: users/views.py:457 users/views.py:522 users/views.py:569 users/views.py:605 #: users/views.py:440 users/views.py:496 users/views.py:544 users/views.py:578
#: users/views.py:665 users/views.py:711 #: users/views.py:636 users/views.py:684
msgid "Edit" msgid "Edit"
msgstr "Modifier" msgstr "Modifier"
#: users/templates/users/profil.html:165 users/views.py:292 users/views.py:1043 #: users/templates/users/profil.html:165 users/views.py:285 users/views.py:1019
msgid "Change the password" msgid "Change the password"
msgstr "Changer le mot de passe" msgstr "Changer le mot de passe"
@ -1333,160 +1314,160 @@ msgstr "Connecté avec l'appareil :"
msgid "MAC address %(mac)s" msgid "MAC address %(mac)s"
msgstr "Adresse MAC %(mac)s" msgstr "Adresse MAC %(mac)s"
#: users/views.py:135 #: users/views.py:136
#, python-format #, python-format
msgid "The user %s was created, a confirmation email was sent." msgid "The user %s was created, a confirmation email was sent."
msgstr "L'utilisateur %s a été créé, un mail de confirmation a été envoyé." msgstr "L'utilisateur %s a été créé, un mail de confirmation a été envoyé."
#: users/views.py:142 #: users/views.py:143
#, python-format #, python-format
msgid "The user %s was created, an email to set the password was sent." msgid "The user %s was created, an email to set the password was sent."
msgstr "" msgstr ""
"L'utilisateur %s a été créé, un mail pour initialiser le mot de passe a été " "L'utilisateur %s a été créé, un mail pour initialiser le mot de passe a été "
"envoyé." "envoyé."
#: users/views.py:155 #: users/views.py:156
msgid "Commit" msgid "Commit"
msgstr "Valider" msgstr "Valider"
#: users/views.py:178 #: users/views.py:179
#, python-format #, python-format
msgid "The club %s was created, an email to set the password was sent." msgid "The club %s was created, an email to set the password was sent."
msgstr "" msgstr ""
"Le club %s a été créé, un mail pour initialiser le mot de passe a été envoyé." "Le club %s a été créé, un mail pour initialiser le mot de passe a été envoyé."
#: users/views.py:183 #: users/views.py:184
msgid "Create a club" msgid "Create a club"
msgstr "Créer un club" msgstr "Créer un club"
#: users/views.py:198 #: users/views.py:199
msgid "The club was edited." msgid "The club was edited."
msgstr "Le club a été modifié." msgstr "Le club a été modifié."
#: users/views.py:230 #: users/views.py:227
msgid "The user was edited." msgid "The user was edited."
msgstr "L'utilisateur a été modifié." msgstr "L'utilisateur a été modifié."
#: users/views.py:233 #: users/views.py:230
msgid "Sent a new confirmation email." msgid "Sent a new confirmation email."
msgstr "Un nouveau mail de confirmation a été envoyé." msgstr "Un nouveau mail de confirmation a été envoyé."
#: users/views.py:251 #: users/views.py:246
msgid "The states were edited." msgid "The states were edited."
msgstr "Les états ont été modifié." msgstr "Les états ont été modifié."
#: users/views.py:253 #: users/views.py:249
msgid "An email to confirm the address was sent." msgid "An email to confirm the address was sent."
msgstr "Un mail pour confirmer l'adresse a été envoyé." msgstr "Un mail pour confirmer l'adresse a été envoyé."
#: users/views.py:270 #: users/views.py:265
msgid "The groups were edited." msgid "The groups were edited."
msgstr "Les groupes ont été modifiés." msgstr "Les groupes ont été modifiés."
#: users/views.py:289 users/views.py:1040 #: users/views.py:282 users/views.py:1016
msgid "The password was changed." msgid "The password was changed."
msgstr "Le mot de passe a été changé." msgstr "Le mot de passe a été changé."
#: users/views.py:304 #: users/views.py:297
#, python-format #, python-format
msgid "%s was removed from the group." msgid "%s was removed from the group."
msgstr "%s a été retiré du groupe." msgstr "%s a été retiré du groupe."
#: users/views.py:314 #: users/views.py:307
#, python-format #, python-format
msgid "%s is no longer superuser." msgid "%s is no longer superuser."
msgstr "%s n'est plus superutilisateur." msgstr "%s n'est plus superutilisateur."
#: users/views.py:325 #: users/views.py:318
msgid "The service user was created." msgid "The service user was created."
msgstr "L'utilisateur service a été créé." msgstr "L'utilisateur service a été créé."
#: users/views.py:328 users/views.py:384 users/views.py:437 users/views.py:495 #: users/views.py:321 users/views.py:372 users/views.py:422 users/views.py:473
#: users/views.py:587 users/views.py:650 users/views.py:693 #: users/views.py:562 users/views.py:621 users/views.py:664
msgid "Add" msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
#: users/views.py:342 #: users/views.py:333
msgid "The service user was edited." msgid "The service user was edited."
msgstr "L'utilisateur service a été modifié." msgstr "L'utilisateur service a été modifié."
#: users/views.py:357 #: users/views.py:346
msgid "The service user was deleted." msgid "The service user was deleted."
msgstr "L'utilisateur service a été supprimé." msgstr "L'utilisateur service a été supprimé."
#: users/views.py:379 #: users/views.py:368
msgid "The ban was added." msgid "The ban was added."
msgstr "Le bannissement a été ajouté." msgstr "Le bannissement a été ajouté."
#: users/views.py:382 #: users/views.py:371
msgid "Warning: this user already has an active ban." msgid "Warning: this user already has an active ban."
msgstr "Attention : cet utilisateur a déjà un bannissement actif." msgstr "Attention : cet utilisateur a déjà un bannissement actif."
#: users/views.py:400 #: users/views.py:387
msgid "The ban was edited." msgid "The ban was edited."
msgstr "Le bannissement a été modifié." msgstr "Le bannissement a été modifié."
#: users/views.py:413 #: users/views.py:398
msgid "The ban was deleted." msgid "The ban was deleted."
msgstr "Le bannissement a été supprimé." msgstr "Le bannissement a été supprimé."
#: users/views.py:430 #: users/views.py:415
msgid "The whitelist was added." msgid "The whitelist was added."
msgstr "L'accès gracieux a été ajouté." msgstr "L'accès gracieux a été ajouté."
#: users/views.py:434 #: users/views.py:419
msgid "Warning: this user already has an active whitelist." msgid "Warning: this user already has an active whitelist."
msgstr "Attention : cet utilisateur a déjà un accès gracieux actif." msgstr "Attention : cet utilisateur a déjà un accès gracieux actif."
#: users/views.py:454 #: users/views.py:437
msgid "The whitelist was edited." msgid "The whitelist was edited."
msgstr "L'accès gracieux a été ajouté." msgstr "L'accès gracieux a été ajouté."
#: users/views.py:469 #: users/views.py:450
msgid "The whitelist was deleted." msgid "The whitelist was deleted."
msgstr "L'accès gracieux a été supprimé." msgstr "L'accès gracieux a été supprimé."
#: users/views.py:474 #: users/views.py:455
msgid "whitelist" msgid "whitelist"
msgstr "accès gracieux" msgstr "accès gracieux"
#: users/views.py:489 #: users/views.py:470
msgid "The local email account was created." msgid "The local email account was created."
msgstr "Le compte mail local a été créé." msgstr "Le compte mail local a été créé."
#: users/views.py:512 #: users/views.py:489
msgid "The local email account was edited." msgid "The local email account was edited."
msgstr "Le compte mail local a été modifié." msgstr "Le compte mail local a été modifié."
#: users/views.py:535 #: users/views.py:508
msgid "The local email account was deleted." msgid "The local email account was deleted."
msgstr "Le compte mail local a été supprimé." msgstr "Le compte mail local a été supprimé."
#: users/views.py:540 #: users/views.py:513
msgid "email address" msgid "email address"
msgstr "adresse mail" msgstr "adresse mail"
#: users/views.py:556 #: users/views.py:529
msgid "The email settings were edited." msgid "The email settings were edited."
msgstr "Les paramètres mail ont été modifiés." msgstr "Les paramètres mail ont été modifiés."
#: users/views.py:559 users/views.py:1085 #: users/views.py:533 users/views.py:1061
msgid "An email to confirm your address was sent." msgid "An email to confirm your address was sent."
msgstr "Un mail pour confirmer votre adresse a été envoyé." msgstr "Un mail pour confirmer votre adresse a été envoyé."
#: users/views.py:584 #: users/views.py:559
msgid "The school was added." msgid "The school was added."
msgstr "L'établissement a été ajouté." msgstr "L'établissement a été ajouté."
#: users/views.py:602 #: users/views.py:575
msgid "The school was edited." msgid "The school was edited."
msgstr "L'établissement a été modifié." msgstr "L'établissement a été modifié."
#: users/views.py:624 #: users/views.py:595
msgid "The school was deleted." msgid "The school was deleted."
msgstr "L'établissement a été supprimé." msgstr "L'établissement a été supprimé."
#: users/views.py:629 #: users/views.py:600
#, python-format #, python-format
msgid "" msgid ""
"The school %s is assigned to at least one user, impossible to delete it." "The school %s is assigned to at least one user, impossible to delete it."
@ -1494,31 +1475,31 @@ msgstr ""
"L'établissement %s est assigné à au moins un utilisateur, impossible de le " "L'établissement %s est assigné à au moins un utilisateur, impossible de le "
"supprimer." "supprimer."
#: users/views.py:647 #: users/views.py:618
msgid "The shell was added." msgid "The shell was added."
msgstr "L'interface en ligne de commande a été ajoutée." msgstr "L'interface en ligne de commande a été ajoutée."
#: users/views.py:662 #: users/views.py:633
msgid "The shell was edited." msgid "The shell was edited."
msgstr "L'interface en ligne de commande a été modifiée." msgstr "L'interface en ligne de commande a été modifiée."
#: users/views.py:677 #: users/views.py:646
msgid "The shell was deleted." msgid "The shell was deleted."
msgstr "L'interface en ligne de commande a été supprimée." msgstr "L'interface en ligne de commande a été supprimée."
#: users/views.py:690 #: users/views.py:661
msgid "The group of rights was added." msgid "The group of rights was added."
msgstr "Le groupe de droits a été ajouté." msgstr "Le groupe de droits a été ajouté."
#: users/views.py:708 #: users/views.py:679
msgid "The group of rights was edited." msgid "The group of rights was edited."
msgstr "Le groupe de droits a été modifié." msgstr "Le groupe de droits a été modifié."
#: users/views.py:728 #: users/views.py:704
msgid "The group of rights was deleted." msgid "The group of rights was deleted."
msgstr "Le groupe de droits a été supprimé." msgstr "Le groupe de droits a été supprimé."
#: users/views.py:733 #: users/views.py:709
#, python-format #, python-format
msgid "" msgid ""
"The group of rights %s is assigned to at least one user, impossible to " "The group of rights %s is assigned to at least one user, impossible to "
@ -1527,37 +1508,37 @@ msgstr ""
"Le groupe de droits %s est assigné à au moins un utilisateur, impossible de " "Le groupe de droits %s est assigné à au moins un utilisateur, impossible de "
"le supprimer." "le supprimer."
#: users/views.py:769 #: users/views.py:745
#, python-format #, python-format
msgid "%s users were archived." msgid "%s users were archived."
msgstr "%s utilisateurs ont été archivés." msgstr "%s utilisateurs ont été archivés."
#: users/views.py:998 users/views.py:1081 #: users/views.py:974 users/views.py:1057
msgid "The user doesn't exist." msgid "The user doesn't exist."
msgstr "L'utilisateur n'existe pas." msgstr "L'utilisateur n'existe pas."
#: users/views.py:1000 users/views.py:1008 #: users/views.py:976 users/views.py:984
msgid "Reset" msgid "Reset"
msgstr "Réinitialiser" msgstr "Réinitialiser"
#: users/views.py:1005 #: users/views.py:981
msgid "An email to reset the password was sent." msgid "An email to reset the password was sent."
msgstr "Un mail pour réinitialiser le mot de passe a été envoyé." msgstr "Un mail pour réinitialiser le mot de passe a été envoyé."
#: users/views.py:1023 #: users/views.py:999
msgid "Error: please contact an admin." msgid "Error: please contact an admin."
msgstr "Erreur : veuillez contacter un admin." msgstr "Erreur : veuillez contacter un admin."
#: users/views.py:1061 #: users/views.py:1037
#, python-format #, python-format
msgid "The %s address was confirmed." msgid "The %s address was confirmed."
msgstr "L'adresse mail %s a été confirmée." msgstr "L'adresse mail %s a été confirmée."
#: users/views.py:1108 #: users/views.py:1080
msgid "Incorrect URL, or already registered device." msgid "Incorrect URL, or already registered device."
msgstr "URL incorrect, ou appareil déjà enregistré." msgstr "URL incorrect, ou appareil déjà enregistré."
#: users/views.py:1120 #: users/views.py:1092
msgid "" msgid ""
"Successful registration! Please disconnect and reconnect your Ethernet cable " "Successful registration! Please disconnect and reconnect your Ethernet cable "
"to get Internet access." "to get Internet access."
@ -1565,10 +1546,6 @@ msgstr ""
"Enregistrement réussi ! Veuillez débrancher et rebrancher votre câble " "Enregistrement réussi ! Veuillez débrancher et rebrancher votre câble "
"Ethernet pour avoir accès à Internet." "Ethernet pour avoir accès à Internet."
#: users/views.py:1160 users/views.py:1184 users/views.py:1199
msgid "The mailing list doesn't exist."
msgstr "La liste de diffusion n'existe pas."
#: users/widgets.py:39 #: users/widgets.py:39
msgid "Today" msgid "Today"
msgstr "Aujourd'hui" msgstr "Aujourd'hui"
@ -1584,3 +1561,26 @@ msgstr "Précédent"
#: users/widgets.py:61 #: users/widgets.py:61
msgid "Wk" msgid "Wk"
msgstr "Sem" msgstr "Sem"
#~ msgid "You can't use a {} address."
#~ msgstr "Vous ne pouvez pas utiliser une adresse {}."
#~ msgid "Password must contain at least 8 characters."
#~ msgstr "Le mot de passe doit contenir au moins 8 caractères."
#~ msgid ""
#~ "There is neither a local email address nor an external email address for "
#~ "this user."
#~ msgstr ""
#~ "Il n'y a pas d'adresse mail locale ni d'adresse mail externe pour cet "
#~ "utilisateur."
#~ msgid ""
#~ "You can't redirect your local emails if no external email address has "
#~ "been set."
#~ msgstr ""
#~ "Vous ne pouvez pas rediriger vos mails locaux si aucune adresse mail "
#~ "externe n'a été définie."
#~ msgid "The mailing list doesn't exist."
#~ msgstr "La liste de diffusion n'existe pas."

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.28 on 2020-04-21 16:25
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0089_auto_20200418_0112'),
]
operations = [
migrations.AlterField(
model_name='user',
name='email',
field=models.EmailField(blank=True, default='', help_text='External email address allowing us to contact you.', max_length=254),
),
]

View file

@ -206,7 +206,7 @@ class User(
) )
email = models.EmailField( email = models.EmailField(
blank=True, blank=True,
null=True, default="",
help_text=_("External email address allowing us to contact you."), help_text=_("External email address allowing us to contact you."),
) )
local_email_redirect = models.BooleanField( local_email_redirect = models.BooleanField(
@ -1323,32 +1323,36 @@ class User(
self.__original_state = self.state self.__original_state = self.state
self.__original_email = self.email self.__original_email = self.email
def clean(self, *args, **kwargs): def clean_pseudo(self, *args, **kwargs):
"""Check if this pseudo is already used by any mailalias.
Better than raising an error in post-save and catching it"""
if EMailAddress.objects.filter(local_part=self.pseudo.lower()).exclude( if EMailAddress.objects.filter(local_part=self.pseudo.lower()).exclude(
user_id=self.id user_id=self.id
): ):
raise ValidationError(_("This username is already used.")) raise ValidationError(_("This username is already used."))
if (
not self.local_email_enabled def clean_email(self, *args, **kwargs):
and not self.email # Allow empty emails only if the user had an empty email before
and not (self.state == self.STATE_FULL_ARCHIVE) is_created = not self.pk
): if not self.email and (self.__original_email or is_created):
raise ValidationError( raise forms.ValidationError(
_( _("Email field cannot be empty.")
"There is neither a local email address nor an external" )
" email address for this user."
) self.email = self.email.lower()
)
if self.local_email_redirect and not self.email: if OptionalUser.get_cached_value("local_email_domain") in self.email:
raise ValidationError( raise forms.ValidationError(
_( _("You can't use a {} address as an external contact address.").format(
"You can't redirect your local emails if no external email" OptionalUser.get_cached_value("local_email_domain")
" address has been set."
) )
) )
def clean(self, *args, **kwargs):
"""Check if this pseudo is already used by any mailalias.
Better than raising an error in post-save and catching it"""
super(User, self).clean(*args, **kwargs)
self.clean_pseudo(*args, **kwargs)
self.clean_email(*args, **kwargs)
def __str__(self): def __str__(self):
return self.pseudo return self.pseudo