8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-12-23 23:43:47 +00:00

Merge branch 'add-thumbnail-to-user-model' into 'dev'

Add thumbnail to user model

See merge request re2o/re2o!533
This commit is contained in:
klafyvel 2020-05-19 16:30:33 +02:00
commit abc2748c56
23 changed files with 725 additions and 632 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-24 18:45+0200\n" "POT-Creation-Date: 2020-05-17 12:49+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-24 18:45+0200\n" "POT-Creation-Date: 2020-05-17 12:49+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"

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-24 18:45+0200\n" "POT-Creation-Date: 2020-05-17 12:49+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"
@ -54,7 +54,7 @@ msgstr "Accès gracieux"
msgid "Bans" msgid "Bans"
msgstr "Bannissements" msgstr "Bannissements"
#: logs/forms.py:45 logs/views.py:424 #: logs/forms.py:45 logs/views.py:430
msgid "Topology" msgid "Topology"
msgstr "Topologie" msgstr "Topologie"
@ -70,7 +70,7 @@ msgstr "IPv4"
msgid "MAC address" msgid "MAC address"
msgstr "Adresse MAC" msgstr "Adresse MAC"
#: logs/forms.py:101 logs/templates/logs/detailed_history.html:38 #: logs/forms.py:101
msgid "Performed by" msgid "Performed by"
msgstr "Effectué(e) par" msgstr "Effectué(e) par"
@ -89,7 +89,7 @@ msgid "End date"
msgstr "Date de fin" msgstr "Date de fin"
#: logs/forms.py:128 logs/templates/logs/search_machine_history.html:38 #: logs/forms.py:128 logs/templates/logs/search_machine_history.html:38
#: logs/templates/logs/search_stats_logs.html:38 #: logs/templates/logs/search_stats_logs.html:36
msgid "Search" msgid "Search"
msgstr "Rechercher" msgstr "Rechercher"
@ -97,24 +97,22 @@ msgstr "Rechercher"
msgid "Search type" msgid "Search type"
msgstr "Type de recherche" msgstr "Type de recherche"
#: logs/models.py:314 logs/models.py:498 logs/models.py:531 logs/models.py:614 #: logs/models.py:310 logs/models.py:552 logs/models.py:585 logs/models.py:798
#: logs/models.py:706 logs/models.py:744
msgid "None" msgid "None"
msgstr "Aucun(e)" msgstr "Aucun(e)"
#: logs/models.py:508 logs/models.py:527 logs/models.py:541 logs/models.py:686 #: logs/models.py:562 logs/models.py:581 logs/models.py:595 logs/models.py:749
#: logs/models.py:731 logs/models.py:736 logs/models.py:741 logs/models.py:751 #: logs/models.py:785 logs/models.py:790 logs/models.py:795 logs/models.py:805
#: logs/views.py:604 #: logs/views.py:605
msgid "Deleted" msgid "Deleted"
msgstr "Supprimé(e)" msgstr "Supprimé(e)"
#: logs/models.py:515 logs/models.py:520 #: logs/models.py:569 logs/models.py:574
#: logs/templates/logs/detailed_history.html:52
#: logs/templates/logs/machine_history.html:55 #: logs/templates/logs/machine_history.html:55
msgid "Unknown" msgid "Unknown"
msgstr "Inconnu(e)" msgstr "Inconnu(e)"
#: logs/models.py:739 #: logs/models.py:793
msgid "No name" msgid "No name"
msgstr "Sans nom" msgstr "Sans nom"
@ -131,19 +129,15 @@ msgid "Date of editing"
msgstr "Date de modification" msgstr "Date de modification"
#: logs/templates/logs/aff_stats_logs.html:41 #: logs/templates/logs/aff_stats_logs.html:41
#: logs/templates/logs/detailed_history.html:39
msgid "Edited" msgid "Edited"
msgstr "Modifié" msgstr "Modifié"
#: logs/templates/logs/aff_stats_logs.html:42 #: logs/templates/logs/aff_stats_logs.html:42
#: logs/templates/logs/detailed_history.html:40
#: logs/templates/logs/machine_history.html:39 #: logs/templates/logs/machine_history.html:39
msgid "Comment" msgid "Comment"
msgstr "Commentaire" msgstr "Commentaire"
#: logs/templates/logs/aff_stats_logs.html:51 #: logs/templates/logs/aff_stats_logs.html:51
#: logs/templates/logs/detailed_history.html:28
#: logs/templates/logs/detailed_history.html:85
msgid "History" msgid "History"
msgstr "Historique" msgstr "Historique"
@ -184,7 +178,6 @@ msgid "Rank"
msgstr "Rang" msgstr "Rang"
#: logs/templates/logs/aff_summary.html:37 #: logs/templates/logs/aff_summary.html:37
#: logs/templates/logs/detailed_history.html:37
msgid "Date" msgid "Date"
msgstr "Date" msgstr "Date"
@ -248,19 +241,6 @@ msgstr ""
msgid "Confirm" msgid "Confirm"
msgstr "Confirmer" msgstr "Confirmer"
#: logs/templates/logs/detailed_history.html:31
#, python-format
msgid "History of %(title)s"
msgstr "Historique de %(title)s"
#: logs/templates/logs/detailed_history.html:75
msgid "No event"
msgstr "Aucun évènement"
#: logs/templates/logs/detailed_history.html:80
msgid "Related elements"
msgstr "Élements liés"
#: logs/templates/logs/index.html:29 logs/templates/logs/stats_general.html:29 #: logs/templates/logs/index.html:29 logs/templates/logs/stats_general.html:29
#: logs/templates/logs/stats_logs.html:29 #: logs/templates/logs/stats_logs.html:29
#: logs/templates/logs/stats_models.html:29 #: logs/templates/logs/stats_models.html:29
@ -269,7 +249,7 @@ msgid "Statistics"
msgstr "Statistiques" msgstr "Statistiques"
#: logs/templates/logs/index.html:32 logs/templates/logs/stats_logs.html:32 #: logs/templates/logs/index.html:32 logs/templates/logs/stats_logs.html:32
#: logs/views.py:439 #: logs/views.py:445
msgid "Actions performed" msgid "Actions performed"
msgstr "Actions effectuées" msgstr "Actions effectuées"
@ -294,8 +274,8 @@ msgstr "Aucun résultat"
msgid "Search machine history" msgid "Search machine history"
msgstr "Rechercher l'historique des machines" msgstr "Rechercher l'historique des machines"
#: logs/templates/logs/search_stats_logs.html:27 #: logs/templates/logs/search_stats_logs.html:28
#: logs/templates/logs/search_stats_logs.html:32 #: logs/templates/logs/search_stats_logs.html:33
msgid "Search events" msgid "Search events"
msgstr "Recherche les évènements" msgstr "Recherche les évènements"
@ -335,134 +315,143 @@ msgstr "Statistiques sur la base de données"
msgid "Statistics about users" msgid "Statistics about users"
msgstr "Statistiques sur les utilisateurs" msgstr "Statistiques sur les utilisateurs"
#: logs/views.py:196 #: logs/views.py:192
msgid "Nonexistent revision." msgid "Nonexistent revision."
msgstr "Révision inexistante." msgstr "Révision inexistante."
#: logs/views.py:199 #: logs/views.py:195
msgid "The action was deleted." msgid "The action was deleted."
msgstr "L'action a été supprimée." msgstr "L'action a été supprimée."
#: logs/views.py:240 #: logs/views.py:236
msgid "Category" msgid "Category"
msgstr "Catégorie" msgstr "Catégorie"
#: logs/views.py:241 #: logs/views.py:237
msgid "Number of users (members and clubs)" msgid "Number of users (members and clubs)"
msgstr "Nombre d'utilisateurs (adhérents et clubs)" msgstr "Nombre d'utilisateurs (adhérents et clubs)"
#: logs/views.py:242 #: logs/views.py:238
msgid "Number of members" msgid "Number of members"
msgstr "Nombre d'adhérents" msgstr "Nombre d'adhérents"
#: logs/views.py:243 #: logs/views.py:239
msgid "Number of clubs" msgid "Number of clubs"
msgstr "Nombre de clubs" msgstr "Nombre de clubs"
#: logs/views.py:247 #: logs/views.py:243
msgid "Activated users" msgid "Activated users"
msgstr "Utilisateurs activés" msgstr "Utilisateurs activés"
#: logs/views.py:253 #: logs/views.py:249
msgid "Disabled users" msgid "Disabled users"
msgstr "Utilisateurs désactivés" msgstr "Utilisateurs désactivés"
#: logs/views.py:259 #: logs/views.py:255
msgid "Archived users" msgid "Archived users"
msgstr "Utilisateurs archivés" msgstr "Utilisateurs archivés"
#: logs/views.py:265 #: logs/views.py:261
msgid "Fully archived users" msgid "Fully archived users"
msgstr "Utilisateurs complètement archivés" msgstr "Utilisateurs complètement archivés"
#: logs/views.py:275 #: logs/views.py:271
msgid "Not yet active users" msgid "Not yet active users"
msgstr "Utilisateurs pas encore actifs" msgstr "Utilisateurs pas encore actifs"
#: logs/views.py:285 #: logs/views.py:281
msgid "Contributing members" msgid "Contributing members"
msgstr "Adhérents cotisants" msgstr "Adhérents cotisants"
#: logs/views.py:291 #: logs/views.py:287
msgid "Users benefiting from a connection" msgid "Users benefiting from a connection"
msgstr "Utilisateurs bénéficiant d'une connexion" msgstr "Utilisateurs bénéficiant d'une connexion"
#: logs/views.py:297 #: logs/views.py:293
msgid "Banned users" msgid "Banned users"
msgstr "Utilisateurs bannis" msgstr "Utilisateurs bannis"
#: logs/views.py:303 #: logs/views.py:299
msgid "Users benefiting from a free connection" msgid "Users benefiting from a free connection"
msgstr "Utilisateurs bénéficiant d'une connexion gratuite" msgstr "Utilisateurs bénéficiant d'une connexion gratuite"
#: logs/views.py:309 #: logs/views.py:305
msgid "Users with a confirmed email" msgid "Users with a confirmed email"
msgstr "Utilisateurs ayant un mail confirmé" msgstr "Utilisateurs ayant un mail confirmé"
#: logs/views.py:315 #: logs/views.py:313
msgid "Users with an unconfirmed email" msgid "Users with an unconfirmed email"
msgstr "Utilisateurs ayant un mail non confirmé" msgstr "Utilisateurs ayant un mail non confirmé"
#: logs/views.py:321 #: logs/views.py:325
msgid "Users pending email confirmation" msgid "Users pending email confirmation"
msgstr "Utilisateurs en attente de confirmation du mail" msgstr "Utilisateurs en attente de confirmation du mail"
#: logs/views.py:327 #: logs/views.py:333
msgid "Active interfaces (with access to the network)" msgid "Active interfaces (with access to the network)"
msgstr "Interfaces actives (ayant accès au réseau)" msgstr "Interfaces actives (ayant accès au réseau)"
#: logs/views.py:341 #: logs/views.py:347
msgid "Active interfaces assigned IPv4" msgid "Active interfaces assigned IPv4"
msgstr "Interfaces actives assignées IPv4" msgstr "Interfaces actives assignées IPv4"
#: logs/views.py:358 #: logs/views.py:364
msgid "IP range" msgid "IP range"
msgstr "Plage d'IP" msgstr "Plage d'IP"
#: logs/views.py:359 #: logs/views.py:365
msgid "VLAN" msgid "VLAN"
msgstr "VLAN" msgstr "VLAN"
#: logs/views.py:360 #: logs/views.py:366
msgid "Total number of IP addresses" msgid "Total number of IP addresses"
msgstr "Nombre total d'adresses IP" msgstr "Nombre total d'adresses IP"
#: logs/views.py:361 #: logs/views.py:367
msgid "Number of assigned IP addresses" msgid "Number of assigned IP addresses"
msgstr "Nombre d'adresses IP assignées" msgstr "Nombre d'adresses IP assignées"
#: logs/views.py:362 #: logs/views.py:368
msgid "Number of IP address assigned to an activated machine" msgid "Number of IP address assigned to an activated machine"
msgstr "Nombre d'adresses IP assignées à une machine activée" msgstr "Nombre d'adresses IP assignées à une machine activée"
#: logs/views.py:363 #: logs/views.py:369
msgid "Number of unassigned IP addresses" msgid "Number of unassigned IP addresses"
msgstr "Nombre d'adresses IP non assignées" msgstr "Nombre d'adresses IP non assignées"
#: logs/views.py:378 #: logs/views.py:384
msgid "Users (members and clubs)" msgid "Users (members and clubs)"
msgstr "Utilisateurs (adhérents et clubs)" msgstr "Utilisateurs (adhérents et clubs)"
#: logs/views.py:440 #: logs/views.py:446
msgid "Number of actions" msgid "Number of actions"
msgstr "Nombre d'actions" msgstr "Nombre d'actions"
#: logs/views.py:465 #: logs/views.py:473
msgid "rights" msgid "rights"
msgstr "droits" msgstr "droits"
#: logs/views.py:494 #: logs/views.py:504
msgid "actions" msgid "actions"
msgstr "actions" msgstr "actions"
#: logs/views.py:544 logs/views.py:595 #: logs/views.py:549
msgid "Nonexistent entry."
msgstr "Entrée inexistante."
#: logs/views.py:557
msgid "You don't have the right to access this menu." msgid "You don't have the right to access this menu."
msgstr "Vous n'avez pas le droit d'accéder à ce menu." msgstr "Vous n'avez pas le droit d'accéder à ce menu."
#: logs/views.py:582 logs/views.py:638 #: logs/views.py:584
msgid "No model found." msgid "No model found."
msgstr "Aucun modèle trouvé." msgstr "Aucun modèle trouvé."
#: logs/views.py:595
msgid "Nonexistent entry."
msgstr "Entrée inexistante."
#~ msgid "History of %(title)s"
#~ msgstr "Historique de %(title)s"
#~ msgid "No event"
#~ msgstr "Aucun évènement"
#~ msgid "Related elements"
#~ msgstr "Élements lié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-30 22:19+0200\n" "POT-Creation-Date: 2020-05-17 12:49+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"
@ -163,27 +163,27 @@ msgstr "machine"
msgid "machines" msgid "machines"
msgstr "machines" msgstr "machines"
#: machines/models.py:114 #: machines/models.py:106
msgid "You don't have the right to change the machine's user." msgid "You don't have the right to change the machine's user."
msgstr "Vous n'avez pas le droit de changer l'utilisateur de la machine." msgstr "Vous n'avez pas le droit de changer l'utilisateur de la machine."
#: machines/models.py:129 #: machines/models.py:121
msgid "You don't have the right to view all the machines." msgid "You don't have the right to view all the machines."
msgstr "Vous n'avez pas le droit de voir toutes les machines." msgstr "Vous n'avez pas le droit de voir toutes les machines."
#: machines/models.py:144 #: machines/models.py:136
msgid "Nonexistent user." msgid "Nonexistent user."
msgstr "Utilisateur inexistant." msgstr "Utilisateur inexistant."
#: machines/models.py:154 machines/models.py:1305 #: machines/models.py:146 machines/models.py:1295
msgid "You don't have the right to add a machine." msgid "You don't have the right to add a machine."
msgstr "Vous n'avez pas le droit d'ajouter une machine." msgstr "Vous n'avez pas le droit d'ajouter une machine."
#: machines/models.py:160 #: machines/models.py:152
msgid "You don't have the right to add a machine to another user." msgid "You don't have the right to add a machine to another user."
msgstr "Vous n'avez pas le droit d'ajouter une machine à un autre utilisateur." msgstr "Vous n'avez pas le droit d'ajouter une machine à un autre utilisateur."
#: machines/models.py:168 machines/models.py:1322 #: machines/models.py:159 machines/models.py:1314
#, python-format #, python-format
msgid "" msgid ""
"You reached the maximum number of interfaces that you are allowed to create " "You reached the maximum number of interfaces that you are allowed to create "
@ -192,78 +192,78 @@ msgstr ""
"Vous avez atteint le nombre maximal d'interfaces que vous pouvez créer vous-" "Vous avez atteint le nombre maximal d'interfaces que vous pouvez créer vous-"
"même (%s)." "même (%s)."
#: machines/models.py:189 #: machines/models.py:180 machines/models.py:1346
msgid "You don't have the right to edit a machine of another user." msgid "You don't have the right to edit a machine of another user."
msgstr "" msgstr ""
"Vous n'avez pas le droit de modifier une machine d'un autre utilisateur." "Vous n'avez pas le droit de modifier une machine d'un autre utilisateur."
#: machines/models.py:209 #: machines/models.py:199
msgid "You don't have the right to delete a machine of another user." msgid "You don't have the right to delete a machine of another user."
msgstr "" msgstr ""
"Vous n'avez pas le droit de supprimer une machine d'une autre utilisateur." "Vous n'avez pas le droit de supprimer une machine d'une autre utilisateur."
#: machines/models.py:228 machines/models.py:1764 #: machines/models.py:218 machines/models.py:1763
msgid "You don't have the right to view other machines than yours." msgid "You don't have the right to view other machines than yours."
msgstr "Vous n'avez pas le droit de voir d'autres machines que les vôtres." msgstr "Vous n'avez pas le droit de voir d'autres machines que les vôtres."
#: machines/models.py:242 machines/templates/machines/aff_machines.html:53 #: machines/models.py:231 machines/templates/machines/aff_machines.html:53
msgid "No name" msgid "No name"
msgstr "Sans nom" msgstr "Sans nom"
#: machines/models.py:319 #: machines/models.py:308
msgid "Can view a machine type object" msgid "Can view a machine type object"
msgstr "Peut voir un objet type de machine" msgstr "Peut voir un objet type de machine"
#: machines/models.py:320 #: machines/models.py:309
msgid "Can use all machine types" msgid "Can use all machine types"
msgstr "Peut utiliser tous les types de machine" msgstr "Peut utiliser tous les types de machine"
#: machines/models.py:322 #: machines/models.py:311
msgid "machine type" msgid "machine type"
msgstr "type de machine" msgstr "type de machine"
#: machines/models.py:323 #: machines/models.py:312
msgid "machine types" msgid "machine types"
msgstr "types de machine" msgstr "types de machine"
#: machines/models.py:343 #: machines/models.py:332
msgid "You don't have the right to use all machine types." msgid "You don't have the right to use all machine types."
msgstr "Vous n'avez pas le droit d'utiliser tous les types de machine." msgstr "Vous n'avez pas le droit d'utiliser tous les types de machine."
#: machines/models.py:364 #: machines/models.py:353
msgid "Network containing the domain's IPv4 range (optional)." msgid "Network containing the domain's IPv4 range (optional)."
msgstr "Réseau contenant la plage IPv4 du domaine (optionnel)." msgstr "Réseau contenant la plage IPv4 du domaine (optionnel)."
#: machines/models.py:369 #: machines/models.py:358
msgid "Netmask for the domain's IPv4 range." msgid "Netmask for the domain's IPv4 range."
msgstr "Masque de sous-réseau pour la plage IPv4 du domaine." msgstr "Masque de sous-réseau pour la plage IPv4 du domaine."
#: machines/models.py:372 #: machines/models.py:361
msgid "Enable reverse DNS for IPv4." msgid "Enable reverse DNS for IPv4."
msgstr "Activer DNS inverse pour IPv4." msgstr "Activer DNS inverse pour IPv4."
#: machines/models.py:379 #: machines/models.py:368
msgid "Enable reverse DNS for IPv6." msgid "Enable reverse DNS for IPv6."
msgstr "Activer DNS inverse pour IPv6." msgstr "Activer DNS inverse pour IPv6."
#: machines/models.py:386 #: machines/models.py:375
msgid "Can view an IP type object" msgid "Can view an IP type object"
msgstr "Peut voir un objet type d'IP" msgstr "Peut voir un objet type d'IP"
#: machines/models.py:387 #: machines/models.py:376
msgid "Can use all IP types" msgid "Can use all IP types"
msgstr "Peut utiliser tous les types d'IP" msgstr "Peut utiliser tous les types d'IP"
#: machines/models.py:389 machines/templates/machines/aff_iptype.html:35 #: machines/models.py:378 machines/templates/machines/aff_iptype.html:35
#: machines/templates/machines/machine.html:108 #: machines/templates/machines/machine.html:108
msgid "IP type" msgid "IP type"
msgstr "type d'IP" msgstr "type d'IP"
#: machines/models.py:390 #: machines/models.py:379
msgid "IP types" msgid "IP types"
msgstr "types d'IP" msgstr "types d'IP"
#: machines/models.py:499 #: machines/models.py:488
msgid "" msgid ""
"One or several IP addresses from the range are affected, impossible to " "One or several IP addresses from the range are affected, impossible to "
"delete the range." "delete the range."
@ -271,25 +271,25 @@ msgstr ""
"Une ou plusieurs adresses IP de la plage sont affectées, impossible de " "Une ou plusieurs adresses IP de la plage sont affectées, impossible de "
"supprimer la plage." "supprimer la plage."
#: machines/models.py:546 #: machines/models.py:535
msgid "Domaine IPv4 start and stop must be valid" msgid "Domaine IPv4 start and stop must be valid"
msgstr "Les valeurs IPv4 Domaine ip start et stop doivent être valides" msgstr "Les valeurs IPv4 Domaine ip start et stop doivent être valides"
#: machines/models.py:548 #: machines/models.py:537
msgid "Range end must be after range start..." msgid "Range end must be after range start..."
msgstr "La fin de la plage doit être après le début..." msgstr "La fin de la plage doit être après le début..."
#: machines/models.py:553 #: machines/models.py:542
msgid "The range is too large, you can't create a larger one than a /16." msgid "The range is too large, you can't create a larger one than a /16."
msgstr "" msgstr ""
"La plage est trop grande, vous ne pouvez pas en créer une plus grande " "La plage est trop grande, vous ne pouvez pas en créer une plus grande "
"qu'un /16." "qu'un /16."
#: machines/models.py:561 #: machines/models.py:550
msgid "The specified range is not disjoint from existing ranges." msgid "The specified range is not disjoint from existing ranges."
msgstr "La plage renseignée n'est pas disjointe des plages existantes." msgstr "La plage renseignée n'est pas disjointe des plages existantes."
#: machines/models.py:575 #: machines/models.py:563
msgid "" msgid ""
"If you specify a domain network or netmask, it must contain the domain's IP " "If you specify a domain network or netmask, it must contain the domain's IP "
"range." "range."
@ -297,47 +297,47 @@ msgstr ""
"Si vous renseignez un réseau ou masque de sous-réseau, il doit contenir la " "Si vous renseignez un réseau ou masque de sous-réseau, il doit contenir la "
"plage IP du domaine." "plage IP du domaine."
#: machines/models.py:613 #: machines/models.py:601
msgid "v4 multicast management." msgid "v4 multicast management."
msgstr "gestion de multidiffusion v4." msgstr "gestion de multidiffusion v4."
#: machines/models.py:614 #: machines/models.py:602
msgid "v6 multicast management." msgid "v6 multicast management."
msgstr "gestion de multidiffusion v6." msgstr "gestion de multidiffusion v6."
#: machines/models.py:617 #: machines/models.py:605
msgid "Can view a VLAN object" msgid "Can view a VLAN object"
msgstr "Peut voir un objet VLAN" msgstr "Peut voir un objet VLAN"
#: machines/models.py:618 machines/templates/machines/machine.html:160 #: machines/models.py:606 machines/templates/machines/machine.html:160
msgid "VLAN" msgid "VLAN"
msgstr "VLAN" msgstr "VLAN"
#: machines/models.py:619 machines/templates/machines/sidebar.html:57 #: machines/models.py:607 machines/templates/machines/sidebar.html:57
msgid "VLANs" msgid "VLANs"
msgstr "VLANs" msgstr "VLANs"
#: machines/models.py:631 #: machines/models.py:619
msgid "MAC-address" msgid "MAC-address"
msgstr "MAC-address" msgstr "MAC-address"
#: machines/models.py:646 #: machines/models.py:634
msgid "Can view a NAS device object" msgid "Can view a NAS device object"
msgstr "Peut voir un objet dispositif NAS" msgstr "Peut voir un objet dispositif NAS"
#: machines/models.py:647 machines/templates/machines/machine.html:164 #: machines/models.py:635 machines/templates/machines/machine.html:164
msgid "NAS device" msgid "NAS device"
msgstr "dispositif NAS" msgstr "dispositif NAS"
#: machines/models.py:648 machines/templates/machines/sidebar.html:63 #: machines/models.py:636 machines/templates/machines/sidebar.html:63
msgid "NAS devices" msgid "NAS devices"
msgstr "dispositifs NAS" msgstr "dispositifs NAS"
#: machines/models.py:662 #: machines/models.py:650
msgid "Contact email address for the zone." msgid "Contact email address for the zone."
msgstr "Adresse mail de contact pour la zone." msgstr "Adresse mail de contact pour la zone."
#: machines/models.py:666 #: machines/models.py:654
msgid "" msgid ""
"Seconds before the secondary DNS have to ask the primary DNS serial to " "Seconds before the secondary DNS have to ask the primary DNS serial to "
"detect a modification." "detect a modification."
@ -345,7 +345,7 @@ msgstr ""
"Secondes avant que le DNS secondaire demande au DNS primaire le serial pour " "Secondes avant que le DNS secondaire demande au DNS primaire le serial pour "
"détecter une modification." "détecter une modification."
#: machines/models.py:673 #: machines/models.py:661
msgid "" msgid ""
"Seconds before the secondary DNS ask the serial again in case of a primary " "Seconds before the secondary DNS ask the serial again in case of a primary "
"DNS timeout." "DNS timeout."
@ -353,7 +353,7 @@ msgstr ""
"Secondes avant que le DNS secondaire demande le serial de nouveau dans le " "Secondes avant que le DNS secondaire demande le serial de nouveau dans le "
"cas d'un délai d'attente du DNS primaire." "cas d'un délai d'attente du DNS primaire."
#: machines/models.py:680 #: machines/models.py:668
msgid "" msgid ""
"Seconds before the secondary DNS stop answering requests in case of primary " "Seconds before the secondary DNS stop answering requests in case of primary "
"DNS timeout." "DNS timeout."
@ -361,121 +361,121 @@ msgstr ""
"Secondes avant que le DNS secondaire arrête de répondre aux requêtes dans le " "Secondes avant que le DNS secondaire arrête de répondre aux requêtes dans le "
"cas d'un délai d'attente du DNS primaire." "cas d'un délai d'attente du DNS primaire."
#: machines/models.py:685 machines/models.py:952 #: machines/models.py:673 machines/models.py:940
msgid "Time To Live." msgid "Time To Live."
msgstr "Temps de vie" msgstr "Temps de vie"
#: machines/models.py:689 #: machines/models.py:677
msgid "Can view an SOA record object" msgid "Can view an SOA record object"
msgstr "Peut voir un objet enregistrement SOA" msgstr "Peut voir un objet enregistrement SOA"
#: machines/models.py:690 machines/templates/machines/aff_extension.html:36 #: machines/models.py:678 machines/templates/machines/aff_extension.html:36
#: machines/templates/machines/machine.html:120 #: machines/templates/machines/machine.html:120
msgid "SOA record" msgid "SOA record"
msgstr "enregistrement SOA" msgstr "enregistrement SOA"
#: machines/models.py:691 #: machines/models.py:679
msgid "SOA records" msgid "SOA records"
msgstr "enregistrements SOA" msgstr "enregistrements SOA"
#: machines/models.py:730 #: machines/models.py:718
msgid "SOA to edit" msgid "SOA to edit"
msgstr "SOA à modifier" msgstr "SOA à modifier"
#: machines/models.py:741 #: machines/models.py:729
msgid "Zone name, must begin with a dot (.example.org)." msgid "Zone name, must begin with a dot (.example.org)."
msgstr "Nom de zone, doit commencer par un point (.example.org)." msgstr "Nom de zone, doit commencer par un point (.example.org)."
#: machines/models.py:749 #: machines/models.py:737
msgid "A record associated with the zone." msgid "A record associated with the zone."
msgstr "Enregistrement A associé à la zone." msgstr "Enregistrement A associé à la zone."
#: machines/models.py:755 #: machines/models.py:743
msgid "AAAA record associated with the zone." msgid "AAAA record associated with the zone."
msgstr "Enregristrement AAAA associé avec la zone." msgstr "Enregristrement AAAA associé avec la zone."
#: machines/models.py:759 #: machines/models.py:747
msgid "Should the zone be signed with DNSSEC." msgid "Should the zone be signed with DNSSEC."
msgstr "La zone doit-elle être signée avec DNSSEC." msgstr "La zone doit-elle être signée avec DNSSEC."
#: machines/models.py:764 #: machines/models.py:752
msgid "Can view an extension object" msgid "Can view an extension object"
msgstr "Peut voir un objet extension" msgstr "Peut voir un objet extension"
#: machines/models.py:765 #: machines/models.py:753
msgid "Can use all extensions" msgid "Can use all extensions"
msgstr "Peut utiliser toutes les extensions" msgstr "Peut utiliser toutes les extensions"
#: machines/models.py:767 #: machines/models.py:755
msgid "DNS extension" msgid "DNS extension"
msgstr "extension DNS" msgstr "extension DNS"
#: machines/models.py:768 #: machines/models.py:756
msgid "DNS extensions" msgid "DNS extensions"
msgstr "extensions DNS" msgstr "extensions DNS"
#: machines/models.py:828 #: machines/models.py:816
msgid "You don't have the right to use all extensions." msgid "You don't have the right to use all extensions."
msgstr "Vous n'avez pas le droit d'utiliser toutes les extensions." msgstr "Vous n'avez pas le droit d'utiliser toutes les extensions."
#: machines/models.py:837 #: machines/models.py:825
msgid "An extension must begin with a dot." msgid "An extension must begin with a dot."
msgstr "Une extension doit commencer par un point." msgstr "Une extension doit commencer par un point."
#: machines/models.py:850 machines/models.py:876 machines/models.py:900 #: machines/models.py:838 machines/models.py:864 machines/models.py:888
#: machines/models.py:923 machines/models.py:1589 #: machines/models.py:911 machines/models.py:1588
msgid "Time To Live (TTL)" msgid "Time To Live (TTL)"
msgstr "Temps de vie (TTL)" msgstr "Temps de vie (TTL)"
#: machines/models.py:854 #: machines/models.py:842
msgid "Can view an MX record object" msgid "Can view an MX record object"
msgstr "Peut voir un objet enregistrement MX" msgstr "Peut voir un objet enregistrement MX"
#: machines/models.py:855 machines/templates/machines/machine.html:124 #: machines/models.py:843 machines/templates/machines/machine.html:124
msgid "MX record" msgid "MX record"
msgstr "enregistrement MX" msgstr "enregistrement MX"
#: machines/models.py:856 #: machines/models.py:844
msgid "MX records" msgid "MX records"
msgstr "enregistrements MX" msgstr "enregistrements MX"
#: machines/models.py:880 #: machines/models.py:868
msgid "Can view an NS record object" msgid "Can view an NS record object"
msgstr "Peut voir un objet enregistrement NS" msgstr "Peut voir un objet enregistrement NS"
#: machines/models.py:881 machines/templates/machines/machine.html:128 #: machines/models.py:869 machines/templates/machines/machine.html:128
msgid "NS record" msgid "NS record"
msgstr "enregistrement NS" msgstr "enregistrement NS"
#: machines/models.py:882 #: machines/models.py:870
msgid "NS records" msgid "NS records"
msgstr "enregistrements NS" msgstr "enregistrements NS"
#: machines/models.py:904 #: machines/models.py:892
msgid "Can view a TXT record object" msgid "Can view a TXT record object"
msgstr "Peut voir un objet enregistrement TXT" msgstr "Peut voir un objet enregistrement TXT"
#: machines/models.py:905 machines/templates/machines/machine.html:132 #: machines/models.py:893 machines/templates/machines/machine.html:132
msgid "TXT record" msgid "TXT record"
msgstr "enregistrement TXT" msgstr "enregistrement TXT"
#: machines/models.py:906 #: machines/models.py:894
msgid "TXT records" msgid "TXT records"
msgstr "enregistrements TXT" msgstr "enregistrements TXT"
#: machines/models.py:927 #: machines/models.py:915
msgid "Can view a DNAME record object" msgid "Can view a DNAME record object"
msgstr "Peut voir un objet enregistrement DNAME" msgstr "Peut voir un objet enregistrement DNAME"
#: machines/models.py:928 machines/templates/machines/machine.html:136 #: machines/models.py:916 machines/templates/machines/machine.html:136
msgid "DNAME record" msgid "DNAME record"
msgstr "enregistrement DNAME" msgstr "enregistrement DNAME"
#: machines/models.py:929 #: machines/models.py:917
msgid "DNAME records" msgid "DNAME records"
msgstr "enregistrements DNAME" msgstr "enregistrements DNAME"
#: machines/models.py:958 #: machines/models.py:946
msgid "" msgid ""
"Priority of the target server (positive integer value, the lower it is, the " "Priority of the target server (positive integer value, the lower it is, the "
"more the server will be used if available)." "more the server will be used if available)."
@ -483,7 +483,7 @@ msgstr ""
"Priorité du serveur cible (entier positif, plus il est bas, plus le serveur " "Priorité du serveur cible (entier positif, plus il est bas, plus le serveur "
"sera utilisé si disponible)." "sera utilisé si disponible)."
#: machines/models.py:967 #: machines/models.py:955
msgid "" msgid ""
"Relative weight for records with the same priority (integer value between 0 " "Relative weight for records with the same priority (integer value between 0 "
"and 65535)." "and 65535)."
@ -491,165 +491,164 @@ msgstr ""
"Poids relatif des enregistrements avec la même priorité (entier entre 0 et " "Poids relatif des enregistrements avec la même priorité (entier entre 0 et "
"65535)." "65535)."
#: machines/models.py:972 #: machines/models.py:960
msgid "TCP/UDP port." msgid "TCP/UDP port."
msgstr "Port TCP/UDP." msgstr "Port TCP/UDP."
#: machines/models.py:975 #: machines/models.py:963
msgid "Target server." msgid "Target server."
msgstr "Serveur cible." msgstr "Serveur cible."
#: machines/models.py:979 #: machines/models.py:967
msgid "Can view an SRV record object" msgid "Can view an SRV record object"
msgstr "Peut voir un objet enregistrement SRV" msgstr "Peut voir un objet enregistrement SRV"
#: machines/models.py:980 machines/templates/machines/machine.html:140 #: machines/models.py:968 machines/templates/machines/machine.html:140
msgid "SRV record" msgid "SRV record"
msgstr "enregistrement SRV" msgstr "enregistrement SRV"
#: machines/models.py:981 #: machines/models.py:969
msgid "SRV records" msgid "SRV records"
msgstr "enregistrements SRV" msgstr "enregistrements SRV"
#: machines/models.py:1032 #: machines/models.py:1020
msgid "SSH public key." msgid "SSH public key."
msgstr "Clé publique SSH." msgstr "Clé publique SSH."
#: machines/models.py:1035 #: machines/models.py:1023
msgid "Comment." msgid "Comment."
msgstr "Commentaire." msgstr "Commentaire."
#: machines/models.py:1058 #: machines/models.py:1046
msgid "Can view an SSHFP record object" msgid "Can view an SSHFP record object"
msgstr "Peut voir un objet enregistrement SSHFP" msgstr "Peut voir un objet enregistrement SSHFP"
#: machines/models.py:1059 machines/templates/machines/machine.html:144 #: machines/models.py:1047 machines/templates/machines/machine.html:144
#: machines/views.py:474 #: machines/views.py:474
msgid "SSHFP record" msgid "SSHFP record"
msgstr "enregistrement SSHFP" msgstr "enregistrement SSHFP"
#: machines/models.py:1060 #: machines/models.py:1048
msgid "SSHFP records" msgid "SSHFP records"
msgstr "enregistrements SSHFP" msgstr "enregistrements SSHFP"
#: machines/models.py:1095 #: machines/models.py:1083
msgid "Can view an interface object" msgid "Can view an interface object"
msgstr "Peut voir un objet interface" msgstr "Peut voir un objet interface"
#: machines/models.py:1096 #: machines/models.py:1084
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:1098 machines/views.py:358 #: machines/models.py:1086 machines/views.py:358
msgid "interface" msgid "interface"
msgstr "interface" msgstr "interface"
#: machines/models.py:1099 #: machines/models.py:1087
msgid "interfaces" msgid "interfaces"
msgstr "interfaces" msgstr "interfaces"
#: machines/models.py:1137 #: machines/models.py:1125
msgid "Unknown vendor." msgid "Unknown vendor."
msgstr "Constructeur inconnu." msgstr "Constructeur inconnu."
#: machines/models.py:1201 #: machines/models.py:1189
msgid "The given MAC address is invalid." msgid "The given MAC address is invalid."
msgstr "L'adresse MAC indiquée est invalide." msgstr "L'adresse MAC indiquée est invalide."
#: machines/models.py:1210 #: machines/models.py:1198
msgid "There are no IP addresses available in the slash." msgid "There are no IP addresses available in the slash."
msgstr "Il n'y a pas d'adresses IP disponibles dans le slash." msgstr "Il n'y a pas d'adresses IP disponibles dans le slash."
#: machines/models.py:1262 #: machines/models.py:1250
msgid "The selected IP type is invalid." msgid "The selected IP type is invalid."
msgstr "Le type d'IP sélectionné est invalide." msgstr "Le type d'IP sélectionné est invalide."
#: machines/models.py:1276 #: machines/models.py:1264
msgid "MAC address already registered in this machine type/subnet." msgid "MAC address already registered in this machine type/subnet."
msgstr "Adresse MAC déjà enregistrée dans ce type de machine/sous-réseau." msgstr "Adresse MAC déjà enregistrée dans ce type de machine/sous-réseau."
#: machines/models.py:1285 #: machines/models.py:1273
msgid "The IPv4 address and the machine type don't match." msgid "The IPv4 address and the machine type don't match."
msgstr "L'adresse IPv4 et le type de machine ne correspondent pas." msgstr "L'adresse IPv4 et le type de machine ne correspondent pas."
#: machines/models.py:1300 #: machines/models.py:1288
msgid "Nonexistent machine." msgid "Nonexistent machine."
msgstr "Machine inexistante." msgstr "Machine inexistante."
#: machines/models.py:1313 #: machines/models.py:1305
msgid "" msgid ""
"You don't have the right to add an interface to a machine of another user." "You don't have the right to add an interface to a machine of another user."
msgstr "" msgstr ""
"Vous n'avez pas le droit d'ajouter une interface à une machine d'un autre " "Vous n'avez pas le droit d'ajouter une interface à une machine d'un autre "
"utilisateur." "utilisateur."
#: machines/models.py:1337 #: machines/models.py:1329
msgid "You don't have the right to edit the machine." msgid "You don't have the right to edit the machine."
msgstr "Vous n'avez pas le droit d'éditer une machine." msgstr "Vous n'avez pas le droit d'éditer une machine."
#: machines/models.py:1354 #: machines/models.py:1365
msgid "You don't have the right to edit interfaces of another user."
msgstr ""
"Vous n'avez pas le droit de modifier une interface d'un autre utilisateur."
#: machines/models.py:1373
msgid "You don't have the right to delete interfaces of another user." msgid "You don't have the right to delete interfaces of another user."
msgstr "" msgstr ""
"Vous n'avez pas le droit de supprimer une interface d'une autre utilisateur." "Vous n'avez pas le droit de supprimer une interface d'une autre utilisateur."
#: machines/models.py:1391 #: machines/models.py:1384
msgid "You don't have the right to view interfaces other than yours." msgid "You don't have the right to view interfaces other than yours."
msgstr "Vous n'avez pas le droit de voir d'autres interfaces que les vôtres." msgstr "Vous n'avez pas le droit de voir d'autres interfaces que les vôtres."
#: machines/models.py:1419 #: machines/models.py:1412
msgid "Can view an IPv6 addresses list object" msgid "Can view an IPv6 addresses list object"
msgstr "Peut voir un objet list d'adresses IPv6" msgstr "Peut voir un objet list d'adresses IPv6"
#: machines/models.py:1422 #: machines/models.py:1415
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:1425 machines/views.py:418 #: machines/models.py:1418 machines/views.py:418
msgid "IPv6 addresses list" msgid "IPv6 addresses list"
msgstr "Liste d'adresses IPv6" msgstr "Liste d'adresses IPv6"
#: machines/models.py:1426 #: machines/models.py:1419
msgid "IPv6 addresses lists" msgid "IPv6 addresses lists"
msgstr "Listes d'adresses IPv6" msgstr "Listes d'adresses IPv6"
#: machines/models.py:1438 machines/models.py:1679 #: machines/models.py:1431 machines/models.py:1678
msgid "Nonexistent interface." msgid "Nonexistent interface."
msgstr "Interface inexistante." msgstr "Interface inexistante."
#: machines/models.py:1444 #: machines/models.py:1437
msgid "You don't have the right to add ipv6 to a machine of another user." msgid "You don't have the right to add ipv6 to a machine of another user."
msgstr "" msgstr ""
"Vous n'avez pas le droit d'ajouter des ipv6 à une machine d'un autre utilisateur." "Vous n'avez pas le droit d'ajouter des ipv6 à une machine d'un autre "
"utilisateur."
#: machines/models.py:1457 #: machines/models.py:1450
msgid "You don't have the right to change the SLAAC value of an IPv6 address." msgid "You don't have the right to change the SLAAC value of an IPv6 address."
msgstr "" msgstr ""
"Vous n'avez pas le droit de changer la valeur SLAAC d'une adresse IPv6." "Vous n'avez pas le droit de changer la valeur SLAAC d'une adresse IPv6."
#: machines/models.py:1476 #: machines/models.py:1470
msgid "You don't have the right to edit ipv6 of a machine of another user." msgid "You don't have the right to edit ipv6 of a machine of another user."
msgstr "" msgstr ""
"Vous n'avez pas le droit de modifier les ipv6 d'une machine d'un autre utilisateur." "Vous n'avez pas le droit de modifier les ipv6 d'une machine d'un autre "
"utilisateur."
#: machines/models.py:1494 #: machines/models.py:1490
msgid "You don't have the right to delete ipv6 of a machine of another user." msgid "You don't have the right to delete ipv6 of a machine of another user."
msgstr "" msgstr ""
"Vous n'avez pas le droit de supprimer les ipv6 d'une machine d'une autre utilisateur." "Vous n'avez pas le droit de supprimer les ipv6 d'une machine d'une autre "
"utilisateur."
#: machines/models.py:1511 #: machines/models.py:1509
msgid "You don't have the right to view ipv6 of machines other than yours." msgid "You don't have the right to view ipv6 of machines other than yours."
msgstr "Vous n'avez pas le droit de voir les ipv6 d'autres machines que les vôtres." msgstr ""
"Vous n'avez pas le droit de voir les ipv6 d'autres machines que les vôtres."
#: machines/models.py:1543 #: machines/models.py:1542
msgid "A SLAAC IP address is already registered." msgid "A SLAAC IP address is already registered."
msgstr "Une adresse IP SLAAC est déjà enregistrée." msgstr "Une adresse IP SLAAC est déjà enregistrée."
#: machines/models.py:1557 #: machines/models.py:1556
msgid "" msgid ""
"The v6 prefix is incorrect and doesn't match the type associated with the " "The v6 prefix is incorrect and doesn't match the type associated with the "
"machine." "machine."
@ -657,55 +656,55 @@ msgstr ""
"Le préfixe v6 est incorrect et ne correspond pas au type associé à la " "Le préfixe v6 est incorrect et ne correspond pas au type associé à la "
"machine." "machine."
#: machines/models.py:1582 #: machines/models.py:1581
msgid "Mandatory and unique, must not contain dots." msgid "Mandatory and unique, must not contain dots."
msgstr "Obligatoire et unique, ne doit pas contenir de points." msgstr "Obligatoire et unique, ne doit pas contenir de points."
#: machines/models.py:1597 #: machines/models.py:1596
msgid "Can view a domain object" msgid "Can view a domain object"
msgstr "Peut voir un objet domaine" msgstr "Peut voir un objet domaine"
#: machines/models.py:1598 #: machines/models.py:1597
msgid "Can change the TTL of a domain object" msgid "Can change the TTL of a domain object"
msgstr "Peut changer le TTL d'un objet domaine" msgstr "Peut changer le TTL d'un objet domaine"
#: machines/models.py:1600 #: machines/models.py:1599
msgid "domain" msgid "domain"
msgstr "domaine" msgstr "domaine"
#: machines/models.py:1601 #: machines/models.py:1600
msgid "domains" msgid "domains"
msgstr "domaines" msgstr "domaines"
#: machines/models.py:1623 #: machines/models.py:1622
msgid "You can't create a both A and CNAME record." msgid "You can't create a both A and CNAME record."
msgstr "Vous ne pouvez pas créer un enregistrement à la fois A et CNAME." msgstr "Vous ne pouvez pas créer un enregistrement à la fois A et CNAME."
#: machines/models.py:1626 #: machines/models.py:1625
msgid "You can't create a CNAME record pointing to itself." msgid "You can't create a CNAME record pointing to itself."
msgstr "Vous ne pouvez pas créer un enregistrement CNAME vers lui-même." msgstr "Vous ne pouvez pas créer un enregistrement CNAME vers lui-même."
#: machines/models.py:1632 #: machines/models.py:1631
#, python-format #, python-format
msgid "The domain name %s is too long (over 63 characters)." msgid "The domain name %s is too long (over 63 characters)."
msgstr "Le nom de domaine %s est trop long (plus de 63 caractères)." msgstr "Le nom de domaine %s est trop long (plus de 63 caractères)."
#: machines/models.py:1636 #: machines/models.py:1635
#, python-format #, python-format
msgid "The domain name %s contains forbidden characters." msgid "The domain name %s contains forbidden characters."
msgstr "Le nom de domaine %s contient des caractères interdits." msgstr "Le nom de domaine %s contient des caractères interdits."
#: machines/models.py:1653 #: machines/models.py:1652
msgid "Invalid extension." msgid "Invalid extension."
msgstr "Extension invalide." msgstr "Extension invalide."
#: machines/models.py:1688 #: machines/models.py:1687
msgid "You don't have the right to add an alias to a machine of another user." msgid "You don't have the right to add an alias to a machine of another user."
msgstr "" msgstr ""
"Vous n'avez pas le droit d'ajouter un alias à une machine d'un autre " "Vous n'avez pas le droit d'ajouter un alias à une machine d'un autre "
"utilisateur." "utilisateur."
#: machines/models.py:1704 #: machines/models.py:1703
#, python-format #, python-format
msgid "" msgid ""
"You reached the maximum number of alias that you are allowed to create " "You reached the maximum number of alias that you are allowed to create "
@ -714,164 +713,164 @@ msgstr ""
"Vous avez atteint le nombre maximal d'alias que vous pouvez créer vous-même " "Vous avez atteint le nombre maximal d'alias que vous pouvez créer vous-même "
"(%s)." "(%s)."
#: machines/models.py:1725 #: machines/models.py:1724
msgid "You don't have the right to edit an alias of a machine of another user." msgid "You don't have the right to edit an alias of a machine of another user."
msgstr "" msgstr ""
"Vous n'avez pas le droit de modifier un alias d'une machine d'un autre " "Vous n'avez pas le droit de modifier un alias d'une machine d'un autre "
"utilisateur." "utilisateur."
#: machines/models.py:1745 #: machines/models.py:1744
msgid "" msgid ""
"You don't have the right to delete an alias of a machine of another user." "You don't have the right to delete an alias of a machine of another user."
msgstr "" msgstr ""
"Vous n'avez pas le droit de supprimer un alias d'une machine d'un autre " "Vous n'avez pas le droit de supprimer un alias d'une machine d'un autre "
"utilisateur." "utilisateur."
#: machines/models.py:1775 #: machines/models.py:1773
msgid "You don't have the right to change the domain's TTL." msgid "You don't have the right to change the domain's TTL."
msgstr "Vous n'avez pas le droit de changer le TTL du domaine." msgstr "Vous n'avez pas le droit de changer le TTL du domaine."
#: machines/models.py:1792 #: machines/models.py:1790
msgid "Can view an IPv4 addresses list object" msgid "Can view an IPv4 addresses list object"
msgstr "Peut voir un object liste d'adresses IPv4" msgstr "Peut voir un object liste d'adresses IPv4"
#: machines/models.py:1793 #: machines/models.py:1791
msgid "IPv4 addresses list" msgid "IPv4 addresses list"
msgstr "Liste d'adresses IPv4" msgstr "Liste d'adresses IPv4"
#: machines/models.py:1794 #: machines/models.py:1792
msgid "IPv4 addresses lists" msgid "IPv4 addresses lists"
msgstr "Listes d'adresses IPv4" msgstr "Listes d'adresses IPv4"
#: machines/models.py:1806 #: machines/models.py:1804
msgid "The IPv4 address and the range of the IP type don't match." msgid "The IPv4 address and the range of the IP type don't match."
msgstr "L'adresse IPv4 et la plage du type d'IP ne correspondent pas." msgstr "L'adresse IPv4 et la plage du type d'IP ne correspondent pas."
#: machines/models.py:1824 #: machines/models.py:1822
msgid "DHCP server" msgid "DHCP server"
msgstr "Serveur DHCP" msgstr "Serveur DHCP"
#: machines/models.py:1825 #: machines/models.py:1823
msgid "Switches configuration server" msgid "Switches configuration server"
msgstr "Serveur de configuration des commutateurs réseau" msgstr "Serveur de configuration des commutateurs réseau"
#: machines/models.py:1826 #: machines/models.py:1824
msgid "Recursive DNS server" msgid "Recursive DNS server"
msgstr "Serveur DNS récursif" msgstr "Serveur DNS récursif"
#: machines/models.py:1827 #: machines/models.py:1825
msgid "NTP server" msgid "NTP server"
msgstr "Serveur NTP" msgstr "Serveur NTP"
#: machines/models.py:1828 #: machines/models.py:1826
msgid "RADIUS server" msgid "RADIUS server"
msgstr "Serveur RADIUS" msgstr "Serveur RADIUS"
#: machines/models.py:1829 #: machines/models.py:1827
msgid "Log server" msgid "Log server"
msgstr "Serveur log" msgstr "Serveur log"
#: machines/models.py:1830 #: machines/models.py:1828
msgid "LDAP master server" msgid "LDAP master server"
msgstr "Serveur LDAP maître" msgstr "Serveur LDAP maître"
#: machines/models.py:1831 #: machines/models.py:1829
msgid "LDAP backup server" msgid "LDAP backup server"
msgstr "Serveur LDAP de secours" msgstr "Serveur LDAP de secours"
#: machines/models.py:1832 #: machines/models.py:1830
msgid "SMTP server" msgid "SMTP server"
msgstr "Serveur SMTP" msgstr "Serveur SMTP"
#: machines/models.py:1833 #: machines/models.py:1831
msgid "postgreSQL server" msgid "postgreSQL server"
msgstr "Serveur postgreSQL" msgstr "Serveur postgreSQL"
#: machines/models.py:1834 #: machines/models.py:1832
msgid "mySQL server" msgid "mySQL server"
msgstr "Serveur mySQL" msgstr "Serveur mySQL"
#: machines/models.py:1835 #: machines/models.py:1833
msgid "SQL client" msgid "SQL client"
msgstr "Client SQL" msgstr "Client SQL"
#: machines/models.py:1836 #: machines/models.py:1834
msgid "Gateway" msgid "Gateway"
msgstr "Passerelle" msgstr "Passerelle"
#: machines/models.py:1844 #: machines/models.py:1842
msgid "Can view a role object" msgid "Can view a role object"
msgstr "Peut voir un objet rôle" msgstr "Peut voir un objet rôle"
#: machines/models.py:1845 #: machines/models.py:1843
msgid "server role" msgid "server role"
msgstr "rôle de serveur" msgstr "rôle de serveur"
#: machines/models.py:1846 #: machines/models.py:1844
msgid "server roles" msgid "server roles"
msgstr "rôles de serveur" msgstr "rôles de serveur"
#: machines/models.py:1878 #: machines/models.py:1876
msgid "Minimal time before regeneration of the service." msgid "Minimal time before regeneration of the service."
msgstr "Temps minimal avant régénération du service." msgstr "Temps minimal avant régénération du service."
#: machines/models.py:1882 #: machines/models.py:1880
msgid "Maximal time before regeneration of the service." msgid "Maximal time before regeneration of the service."
msgstr "Temps maximal avant régénération du service." msgstr "Temps maximal avant régénération du service."
#: machines/models.py:1887 #: machines/models.py:1885
msgid "Can view a service object" msgid "Can view a service object"
msgstr "Peut voir un objet service" msgstr "Peut voir un objet service"
#: machines/models.py:1888 #: machines/models.py:1886
msgid "service to generate (DHCP, DNS, ...)" msgid "service to generate (DHCP, DNS, ...)"
msgstr "service à générer (DHCP, DNS, ...)" msgstr "service à générer (DHCP, DNS, ...)"
#: machines/models.py:1889 #: machines/models.py:1887
msgid "services to generate (DHCP, DNS, ...)" msgid "services to generate (DHCP, DNS, ...)"
msgstr "services à générer (DHCP, DNS, ...)" msgstr "services à générer (DHCP, DNS, ...)"
#: machines/models.py:1933 #: machines/models.py:1931
msgid "Can view a service server link object" msgid "Can view a service server link object"
msgstr "Peut voir un objet lien service serveur" msgstr "Peut voir un objet lien service serveur"
#: machines/models.py:1935 #: machines/models.py:1933
msgid "link between service and server" msgid "link between service and server"
msgstr "lien entre service et serveur" msgstr "lien entre service et serveur"
#: machines/models.py:1936 #: machines/models.py:1934
msgid "links between service and server" msgid "links between service and server"
msgstr "liens entre service et serveur" msgstr "liens entre service et serveur"
#: machines/models.py:1977 #: machines/models.py:1975
msgid "Name of the ports configuration" msgid "Name of the ports configuration"
msgstr "Nom de la configuration de ports" msgstr "Nom de la configuration de ports"
#: machines/models.py:1982 #: machines/models.py:1980
msgid "Can view a ports opening list object" msgid "Can view a ports opening list object"
msgstr "Peut voir un objet liste d'ouverture de ports" msgstr "Peut voir un objet liste d'ouverture de ports"
#: machines/models.py:1985 #: machines/models.py:1982
msgid "ports opening list" msgid "ports opening list"
msgstr "liste d'ouverture de ports" msgstr "liste d'ouverture de ports"
#: machines/models.py:1986 #: machines/models.py:1983
msgid "ports opening lists" msgid "ports opening lists"
msgstr "listes d'ouverture de ports" msgstr "listes d'ouverture de ports"
#: machines/models.py:1997 #: machines/models.py:1994
msgid "You don't have the right to delete a ports opening list." msgid "You don't have the right to delete a ports opening list."
msgstr "Vous n'avez pas le droit de supprimer une liste d'ouverture de ports." msgstr "Vous n'avez pas le droit de supprimer une liste d'ouverture de ports."
#: machines/models.py:2001 #: machines/models.py:1998
msgid "This ports opening list is used." msgid "This ports opening list is used."
msgstr "Cette liste d'ouverture de ports est utilisée." msgstr "Cette liste d'ouverture de ports est utilisée."
#: machines/models.py:2055 #: machines/models.py:2052
msgid "ports opening" msgid "ports opening"
msgstr "ouverture de ports" msgstr "ouverture de ports"
#: machines/models.py:2056 #: machines/models.py:2053
msgid "ports openings" msgid "ports openings"
msgstr "ouvertures de ports" msgstr "ouvertures de ports"
@ -1801,3 +1800,7 @@ msgstr ""
#: machines/views.py:1561 #: 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."
#~ msgid "You don't have the right to edit interfaces of another user."
#~ msgstr ""
#~ "Vous n'avez pas le droit de modifier une interface d'un autre utilisateur."

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-24 18:45+0200\n" "POT-Creation-Date: 2020-05-17 12:49+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

@ -150,6 +150,7 @@ class AssoOptionSerializer(NamespacedHMSerializer):
"adresse2", "adresse2",
"contact", "contact",
"telephone", "telephone",
"profile_image",
"pseudo", "pseudo",
"utilisateur_asso", "utilisateur_asso",
"description", "description",

View file

@ -180,6 +180,7 @@ class EditAssoOptionForm(ModelForm):
self.fields["adresse2"].label = _("Address (line 2)") self.fields["adresse2"].label = _("Address (line 2)")
self.fields["contact"].label = _("Contact email address") self.fields["contact"].label = _("Contact email address")
self.fields["telephone"].label = _("Telephone number") self.fields["telephone"].label = _("Telephone number")
self.fields["profile_image"].label = _("Profile image")
self.fields["pseudo"].label = _("Usual name") self.fields["pseudo"].label = _("Usual name")
self.fields["utilisateur_asso"].label = _( self.fields["utilisateur_asso"].label = _(
"Account used for editing from /admin" "Account used for editing from /admin"

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-24 18:45+0200\n" "POT-Creation-Date: 2020-05-17 12:49+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"
@ -207,90 +207,94 @@ msgid "Telephone number"
msgstr "Numéro de téléphone" msgstr "Numéro de téléphone"
#: preferences/forms.py:183 #: preferences/forms.py:183
msgid "Profile image"
msgstr "Photo de profil"
#: preferences/forms.py:184
#: preferences/templates/preferences/display_preferences.html:343 #: preferences/templates/preferences/display_preferences.html:343
msgid "Usual name" msgid "Usual name"
msgstr "Nom d'usage" msgstr "Nom d'usage"
#: preferences/forms.py:185 #: preferences/forms.py:186
msgid "Account used for editing from /admin" msgid "Account used for editing from /admin"
msgstr "Compte utilisé pour les modifications depuis /admin" msgstr "Compte utilisé pour les modifications depuis /admin"
#: preferences/forms.py:187 preferences/forms.py:332 #: preferences/forms.py:188 preferences/forms.py:333
#: preferences/templates/preferences/aff_service.html:33 #: preferences/templates/preferences/aff_service.html:33
msgid "Description" msgid "Description"
msgstr "Description" msgstr "Description"
#: preferences/forms.py:201 #: preferences/forms.py:202
msgid "Message for the French welcome email" msgid "Message for the French welcome email"
msgstr "Message pour le mail de bienvenue en français" msgstr "Message pour le mail de bienvenue en français"
#: preferences/forms.py:204 #: preferences/forms.py:205
msgid "Message for the English welcome email" msgid "Message for the English welcome email"
msgstr "Message pour le mail de bienvenue en anglais" msgstr "Message pour le mail de bienvenue en anglais"
#: preferences/forms.py:218 #: preferences/forms.py:219
msgid "Facebook URL" msgid "Facebook URL"
msgstr "URL du compte Facebook" msgstr "URL du compte Facebook"
#: preferences/forms.py:219 #: preferences/forms.py:220
msgid "Twitter URL" msgid "Twitter URL"
msgstr "URL du compte Twitter" msgstr "URL du compte Twitter"
#: preferences/forms.py:220 #: preferences/forms.py:221
#: preferences/templates/preferences/display_preferences.html:504 #: preferences/templates/preferences/display_preferences.html:504
msgid "Twitter account name" msgid "Twitter account name"
msgstr "Nom du compte Twitter" msgstr "Nom du compte Twitter"
#: preferences/forms.py:238 #: preferences/forms.py:239
msgid "You chose to set vlan but did not set any VLAN." msgid "You chose to set vlan but did not set any VLAN."
msgstr "" msgstr ""
"Vous avez choisi de paramétrer vlan mais vous n'avez indiqué aucun VLAN." "Vous avez choisi de paramétrer vlan mais vous n'avez indiqué aucun VLAN."
#: preferences/forms.py:239 #: preferences/forms.py:240
msgid "Please, choose a VLAN." msgid "Please, choose a VLAN."
msgstr "Veuillez choisir un VLAN." msgstr "Veuillez choisir un VLAN."
#: preferences/forms.py:270 #: preferences/forms.py:271
msgid "There is already a mandate taking place at the specified start date." msgid "There is already a mandate taking place at the specified start date."
msgstr "Il y a déjà un mandat ayant cours à la date de début renseignée." msgstr "Il y a déjà un mandat ayant cours à la date de début renseignée."
#: preferences/forms.py:284 #: preferences/forms.py:285
msgid "There is already a mandate taking place at the specified end date." msgid "There is already a mandate taking place at the specified end date."
msgstr "Il y a déjà un madant ayant cours à la date de fin renseignée." msgstr "Il y a déjà un madant ayant cours à la date de fin renseignée."
#: preferences/forms.py:298 #: preferences/forms.py:299
msgid "The specified dates overlap with an existing mandate." msgid "The specified dates overlap with an existing mandate."
msgstr "Les dates renseignées se superposent avec un mandat existant." msgstr "Les dates renseignées se superposent avec un mandat existant."
#: preferences/forms.py:330 #: preferences/forms.py:331
#: preferences/templates/preferences/aff_service.html:31 #: preferences/templates/preferences/aff_service.html:31
#: preferences/templates/preferences/display_preferences.html:327 #: preferences/templates/preferences/display_preferences.html:327
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
#: preferences/forms.py:331 #: preferences/forms.py:332
#: preferences/templates/preferences/aff_service.html:32 #: preferences/templates/preferences/aff_service.html:32
msgid "URL" msgid "URL"
msgstr "URL" msgstr "URL"
#: preferences/forms.py:333 #: preferences/forms.py:334
#: preferences/templates/preferences/aff_service.html:34 #: preferences/templates/preferences/aff_service.html:34
msgid "Image" msgid "Image"
msgstr "Image" msgstr "Image"
#: preferences/forms.py:341 #: preferences/forms.py:342
msgid "Current services" msgid "Current services"
msgstr "Services actuels" msgstr "Services actuels"
#: preferences/forms.py:430 #: preferences/forms.py:431
msgid "Current email addresses" msgid "Current email addresses"
msgstr "Adresses mail actuelles" msgstr "Adresses mail actuelles"
#: preferences/forms.py:465 #: preferences/forms.py:466
msgid "Current document templates" msgid "Current document templates"
msgstr "Modèles de document actuels" msgstr "Modèles de document actuels"
#: preferences/forms.py:495 #: preferences/forms.py:496
msgid "Current attributes" msgid "Current attributes"
msgstr "Attributs actuels" msgstr "Attributs actuels"

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-24 18:45+0200\n" "POT-Creation-Date: 2020-05-17 12:49+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"
@ -34,25 +34,25 @@ msgstr ""
msgid "You don't have the right to edit this option." msgid "You don't have the right to edit this option."
msgstr "Vous n'avez pas le droit de modifier cette option." msgstr "Vous n'avez pas le droit de modifier cette option."
#: re2o/acl.py:51 #: re2o/acl.py:50
#, python-format #, python-format
msgid "You need to be a member of one of these groups: %s." msgid "You need to be a member of one of these groups: %s."
msgstr "Vous devez être membre de l'un de ces groupes : %s." msgstr "Vous devez être membre de l'un de ces groupes : %s."
#: re2o/acl.py:54 #: re2o/acl.py:53
#, python-format #, python-format
msgid "No group has the %s permission(s)!" msgid "No group has the %s permission(s)!"
msgstr "Aucun groupe ne possède la ou les permissions %s !" msgstr "Aucun groupe ne possède la ou les permissions %s !"
#: re2o/acl.py:167 #: re2o/acl.py:166
msgid "Nonexistent entry." msgid "Nonexistent entry."
msgstr "Entrée inexistante." msgstr "Entrée inexistante."
#: re2o/acl.py:193 re2o/acl.py:264 #: re2o/acl.py:196 re2o/acl.py:267
msgid "You don't have the right to access this menu." msgid "You don't have the right to access this menu."
msgstr "Vous n'avez pas le droit d'accéder à ce menu." msgstr "Vous n'avez pas le droit d'accéder à ce menu."
#: re2o/acl.py:314 #: re2o/acl.py:317
msgid "You don't have the right to edit the history." msgid "You don't have the right to edit the history."
msgstr "Vous n'avez pas le droit de modifier l'historique." msgstr "Vous n'avez pas le droit de modifier l'historique."
@ -79,27 +79,27 @@ msgstr "Format : {main}"
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."
#: re2o/mixins.py:113 #: re2o/mixins.py:110
#, python-format #, python-format
msgid "You don't have the right to create a %s object." msgid "You don't have the right to create a %s object."
msgstr "Vous n'avez pas le droit de créer un objet %s." msgstr "Vous n'avez pas le droit de créer un objet %s."
#: re2o/mixins.py:129 #: re2o/mixins.py:126
#, python-format #, python-format
msgid "You don't have the right to edit a %s object." msgid "You don't have the right to edit a %s object."
msgstr "Vous n'avez pas le droit de modifier un objet %s." msgstr "Vous n'avez pas le droit de modifier un objet %s."
#: re2o/mixins.py:145 #: re2o/mixins.py:142
#, python-format #, python-format
msgid "You don't have the right to delete a %s object." msgid "You don't have the right to delete a %s object."
msgstr "Vous n'avez pas le droit de supprimer un objet %s." msgstr "Vous n'avez pas le droit de supprimer un objet %s."
#: re2o/mixins.py:161 #: re2o/mixins.py:158
#, python-format #, python-format
msgid "You don't have the right to view every %s object." msgid "You don't have the right to view every %s object."
msgstr "Vous n'avez pas le droit de voir tous les objets %s." msgstr "Vous n'avez pas le droit de voir tous les objets %s."
#: re2o/mixins.py:177 #: re2o/mixins.py:174
#, python-format #, python-format
msgid "You don't have the right to view a %s object." msgid "You don't have the right to view a %s object."
msgstr "Vous n'avez pas le droit de voir un objet %s." msgstr "Vous n'avez pas le droit de voir un objet %s."
@ -207,26 +207,38 @@ msgstr "<b>Date du commit</b> : %(git_info_commit_date)s"
msgid "Dependencies" msgid "Dependencies"
msgstr "Dépendances" msgstr "Dépendances"
#: re2o/templates/re2o/aff_history.html:30 #: re2o/templates/re2o/aff_history.html:33
msgid "Next"
msgstr "Suivant"
#: re2o/templates/re2o/aff_history.html:37
msgid "Previous"
msgstr "Précédent"
#: re2o/templates/re2o/aff_history.html:45
msgid "Date" msgid "Date"
msgstr "Date" msgstr "Date"
#: re2o/templates/re2o/aff_history.html:46 #: re2o/templates/re2o/aff_history.html:34
msgid "Performed by" msgid "Performed by"
msgstr "Effectuée par" msgstr "Effectuée par"
#: re2o/templates/re2o/aff_history.html:47 #: re2o/templates/re2o/aff_history.html:35
msgid "Edited"
msgstr ""
#: re2o/templates/re2o/aff_history.html:36
msgid "Comment" msgid "Comment"
msgstr "Commentaire" msgstr "Commentaire"
#: re2o/templates/re2o/aff_history.html:48
msgid "Unknown"
msgstr ""
#: re2o/templates/re2o/aff_history.html:71
msgid "No event"
msgstr ""
#: re2o/templates/re2o/aff_history.html:76
msgid "Related elements"
msgstr ""
#: re2o/templates/re2o/aff_history.html:82 re2o/templates/re2o/history.html:30
msgid "History"
msgstr "Historique"
#: re2o/templates/re2o/contact.html:29 #: re2o/templates/re2o/contact.html:29
msgid "Contact" msgid "Contact"
msgstr "Contact" msgstr "Contact"
@ -236,13 +248,10 @@ msgstr "Contact"
msgid "Contact the organisation %(asso_name)s" msgid "Contact the organisation %(asso_name)s"
msgstr "Contacter l'association %(asso_name)s" msgstr "Contacter l'association %(asso_name)s"
#: re2o/templates/re2o/history.html:29 #: re2o/templates/re2o/history.html:33
msgid "History" #, fuzzy, python-format
msgstr "Historique" #| msgid "History of %(object)s"
msgid "History of %(title)s"
#: re2o/templates/re2o/history.html:32
#, python-format
msgid "History of %(object)s"
msgstr "Historique de %(object)s" msgstr "Historique de %(object)s"
#: re2o/templates/re2o/index.html:30 #: re2o/templates/re2o/index.html:30
@ -327,3 +336,9 @@ msgstr "Page d'accueil"
#: re2o/views.py:96 #: re2o/views.py:96
msgid "Unable to get the information." msgid "Unable to get the information."
msgstr "Impossible d'obtenir l'information." msgstr "Impossible d'obtenir l'information."
#~ msgid "Next"
#~ msgstr "Suivant"
#~ msgid "Previous"
#~ msgstr "Précédent"

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-24 18:45+0200\n" "POT-Creation-Date: 2020-05-17 12:49+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

@ -216,6 +216,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if request_user.is_authenticated %} {% if request_user.is_authenticated %}
<div class="panel-heading"> <div class="panel-heading">
<h4>{{ request_user.name }} {{ request_user.surname }}</h4> <h4>{{ request_user.name }} {{ request_user.surname }}</h4>
{% if request_user.image_url %}
<img src="{{ users.image_url }}" height="42" width="42" />
{% endif %}
</div> </div>
<table class="table"> <table class="table">
<tr> <tr>

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-24 18:45+0200\n" "POT-Creation-Date: 2020-05-17 12:49+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:290 #: templates/admin/base_site.html:65 templates/base.html:293
msgid "powered by" msgid "powered by"
msgstr "propulsé par" msgstr "propulsé par"
#: templates/admin/base_site.html:69 templates/base.html:298 #: templates/admin/base_site.html:69 templates/base.html:301
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."
@ -167,68 +167,68 @@ msgstr "Mon profil"
msgid "Log out" msgid "Log out"
msgstr "" msgstr ""
#: templates/base.html:223 #: templates/base.html:226
msgid "Username" msgid "Username"
msgstr "Pseudo" msgstr "Pseudo"
#: templates/base.html:227 #: templates/base.html:230
msgid "Room" msgid "Room"
msgstr "Chambre" msgstr "Chambre"
#: templates/base.html:231 #: templates/base.html:234
msgid "Internet access" msgid "Internet access"
msgstr "Accès Internet" msgstr "Accès Internet"
#: templates/base.html:234 #: templates/base.html:237
#, 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:236 #: templates/base.html:239
msgid "Disabled" msgid "Disabled"
msgstr "Désactivé" msgstr "Désactivé"
#: templates/base.html:241 #: templates/base.html:244
msgid "Membership" msgid "Membership"
msgstr "Adhésion" msgstr "Adhésion"
#: templates/base.html:244 #: templates/base.html:247
#, 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:246 #: templates/base.html:249
msgid "Non member" msgid "Non member"
msgstr "Non adhérent" msgstr "Non adhérent"
#: templates/base.html:254 #: templates/base.html:257
msgid "View my profile" msgid "View my profile"
msgstr "Voir mon profil" msgstr "Voir mon profil"
#: templates/base.html:259 #: templates/base.html:262
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:266 #: templates/base.html:269
#, 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:275 #: templates/base.html:278
msgid "View my machines" msgid "View my machines"
msgstr "Voir mes machines" msgstr "Voir mes machines"
#: templates/base.html:288 #: templates/base.html:291
msgid "Back to top" msgid "Back to top"
msgstr "Retour en haut" msgstr "Retour en haut"
#: templates/base.html:292 #: templates/base.html:295
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:295 #: templates/base.html:298
msgid "About this website" msgid "About this website"
msgstr "À propos de ce site" msgstr "À propos de ce site"
@ -240,8 +240,7 @@ msgstr ""
msgid "Edit" msgid "Edit"
msgstr "Modifier" msgstr "Modifier"
#: templates/buttons/history.html:28 templates/buttons/history.html:29 #: templates/buttons/history.html:27 templates/buttons/history.html:28
#: templates/buttons/history.html:32 templates/buttons/history.html:33
msgid "History" msgid "History"
msgstr "" msgstr ""

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-05-03 02:10+0200\n" "POT-Creation-Date: 2020-05-17 12:49+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"
@ -34,60 +34,61 @@ msgstr ""
msgid "comment" msgid "comment"
msgstr "commentaire" msgstr "commentaire"
#: tickets/models.py:58 #: tickets/models.py:59
msgid "Title of the ticket." msgid "Title of the ticket."
msgstr "Titre du ticket." msgstr "Titre du ticket."
#: tickets/models.py:67 #: tickets/models.py:68
msgid "An email address to get back to you." msgid "An email address to get back to you."
msgstr "Une adresse mail pour vous recontacter." msgstr "Une adresse mail pour vous recontacter."
#: tickets/models.py:71 #: tickets/models.py:72
msgid "Language of the ticket." msgid "Language of the ticket."
msgstr "Langue des tickets" msgstr "Langue des tickets"
#: tickets/models.py:76 tickets/models.py:173 #: tickets/models.py:77 tickets/models.py:174
msgid "Can view a ticket object" msgid "Can view a ticket object"
msgstr "Peut voir un objet ticket" msgstr "Peut voir un objet ticket"
#: tickets/models.py:77 tickets/models.py:174 #: tickets/models.py:78 tickets/models.py:175
msgid "ticket" msgid "ticket"
msgstr "ticket" msgstr "ticket"
#: tickets/models.py:78 tickets/models.py:175 #: tickets/models.py:79 tickets/models.py:176
msgid "tickets" msgid "tickets"
msgstr "tickets" msgstr "tickets"
#: tickets/models.py:82 #: tickets/models.py:83
#, python-brace-format
msgid "Ticket from {name}. Date: {date}." msgid "Ticket from {name}. Date: {date}."
msgstr "Ticket de {name}. Date : {date}." msgstr "Ticket de {name}. Date : {date}."
#: tickets/models.py:84 #: tickets/models.py:85
#, python-format #, python-format
msgid "Anonymous ticket. Date: %s." msgid "Anonymous ticket. Date: %s."
msgstr "Ticket anonyme. Date : %s." msgstr "Ticket anonyme. Date : %s."
#: tickets/models.py:92 tickets/templates/tickets/aff_ticket.html:52 #: tickets/models.py:93 tickets/templates/tickets/aff_ticket.html:52
msgid "Anonymous user" msgid "Anonymous user"
msgstr "Utilisateur anonyme" msgstr "Utilisateur anonyme"
#: tickets/models.py:130 #: tickets/models.py:131
msgid "You don't have the right to view other tickets than yours." msgid "You don't have the right to view other tickets than yours."
msgstr "Vous n'avez pas le droit de voir d'autres tickets que les vôtres." msgstr "Vous n'avez pas le droit de voir d'autres tickets que les vôtres."
#: tickets/models.py:142 tickets/models.py:217 #: tickets/models.py:143 tickets/models.py:218
msgid "You don't have the right to view the list of tickets." msgid "You don't have the right to view the list of tickets."
msgstr "Vous n'avez pas le droit de voir la liste des tickets." msgstr "Vous n'avez pas le droit de voir la liste des tickets."
#: tickets/models.py:190 #: tickets/models.py:191
msgid "You don't have the right to view other tickets comments than yours." msgid "You don't have the right to view other tickets comments than yours."
msgstr "Vous n'avez pas le droit de voir d'autres tickets que les vôtres." msgstr "Vous n'avez pas le droit de voir d'autres tickets que les vôtres."
#: tickets/models.py:205 #: tickets/models.py:206
msgid "You don't have the right to edit other tickets comments than yours." msgid "You don't have the right to edit other tickets comments than yours."
msgstr "Vous n'avez pas le droit d'éditer d'autres tickets que les vôtres." msgstr "Vous n'avez pas le droit d'éditer d'autres tickets que les vôtres."
#: tickets/models.py:236 #: tickets/models.py:237
msgid "Update of your ticket" msgid "Update of your ticket"
msgstr "Mise à jour de votre ticket" msgstr "Mise à jour de votre ticket"

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-24 18:45+0200\n" "POT-Creation-Date: 2020-05-17 12:49+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"
@ -74,224 +74,224 @@ msgstr "point d'accès sans fil"
msgid "access points" msgid "access points"
msgstr "points d'accès sans fil" msgstr "points d'accès sans fil"
#: topologie/models.py:190 #: topologie/models.py:232
msgid "Number of ports." msgid "Number of ports."
msgstr "Nombre de ports." msgstr "Nombre de ports."
#: topologie/models.py:200 #: topologie/models.py:242
msgid "Switch model." msgid "Switch model."
msgstr "Modèle de commutateur réseau." msgstr "Modèle de commutateur réseau."
#: topologie/models.py:210 #: topologie/models.py:252
msgid "RADIUS key of the switch." msgid "RADIUS key of the switch."
msgstr "Clé RADIUS du commutateur réseau." msgstr "Clé RADIUS du commutateur réseau."
#: topologie/models.py:217 #: topologie/models.py:259
msgid "Management credentials for the switch." msgid "Management credentials for the switch."
msgstr "Identifiants de gestion du commutateur réseau." msgstr "Identifiants de gestion du commutateur réseau."
#: topologie/models.py:220 #: topologie/models.py:262
msgid "Automatic provision for the switch." msgid "Automatic provision for the switch."
msgstr "Provision automatique pour le commutateur réseau." msgstr "Provision automatique pour le commutateur réseau."
#: topologie/models.py:225 #: topologie/models.py:267
msgid "Can view a switch object" msgid "Can view a switch object"
msgstr "Peut voir un objet commutateur réseau" msgstr "Peut voir un objet commutateur réseau"
#: topologie/models.py:226 topologie/views.py:542 topologie/views.py:615 #: topologie/models.py:268 topologie/views.py:542 topologie/views.py:615
msgid "switch" msgid "switch"
msgstr "commutateur réseau" msgstr "commutateur réseau"
#: topologie/models.py:227 #: topologie/models.py:269
msgid "switches" msgid "switches"
msgstr "commutateurs réseau" msgstr "commutateurs réseau"
#: topologie/models.py:241 #: topologie/models.py:283
msgid "The switch ID exceeds the limits allowed by the stack." msgid "The switch ID exceeds the limits allowed by the stack."
msgstr "L'ID du commutateur réseau dépasse les bornes autorisées par la pile." msgstr "L'ID du commutateur réseau dépasse les bornes autorisées par la pile."
#: topologie/models.py:248 #: topologie/models.py:290
msgid "The stack member ID can't be void." msgid "The stack member ID can't be void."
msgstr "L'ID de membre dans la pile ne peut-être vide." msgstr "L'ID de membre dans la pile ne peut-être vide."
#: topologie/models.py:255 #: topologie/models.py:297
msgid "The end port is less than the start port." msgid "The end port is less than the start port."
msgstr "Le port de fin est inférieur au port de début." msgstr "Le port de fin est inférieur au port de début."
#: topologie/models.py:263 #: topologie/models.py:305
msgid "This switch can't have that many ports." msgid "This switch can't have that many ports."
msgstr "Ce commutateur réseau ne peut pas avoir autant de ports." msgstr "Ce commutateur réseau ne peut pas avoir autant de ports."
#: topologie/models.py:471 #: topologie/models.py:534
msgid "The switch model is modular." msgid "The switch model is modular."
msgstr "Le modèle de commutateur réseau est modulaire." msgstr "Le modèle de commutateur réseau est modulaire."
#: topologie/models.py:474 #: topologie/models.py:537
msgid "The switch is considered as a module." msgid "The switch is considered as a module."
msgstr "Le commutateur réseau est considéré comme un module." msgstr "Le commutateur réseau est considéré comme un module."
#: topologie/models.py:478 #: topologie/models.py:541
msgid "Can view a switch model object" msgid "Can view a switch model object"
msgstr "Peut voir un objet modèle de commutateur réseau" msgstr "Peut voir un objet modèle de commutateur réseau"
#: topologie/models.py:479 topologie/views.py:832 #: topologie/models.py:542 topologie/views.py:832
msgid "switch model" msgid "switch model"
msgstr "modèle de commutateur réseau" msgstr "modèle de commutateur réseau"
#: topologie/models.py:480 #: topologie/models.py:543
msgid "switch models" msgid "switch models"
msgstr "modèles de commutateur réseau" msgstr "modèles de commutateur réseau"
#: topologie/models.py:494 #: topologie/models.py:557
msgid "Reference of a module." msgid "Reference of a module."
msgstr "Référence d'un module." msgstr "Référence d'un module."
#: topologie/models.py:495 #: topologie/models.py:558
msgid "module reference" msgid "module reference"
msgstr "référence de module" msgstr "référence de module"
#: topologie/models.py:501 #: topologie/models.py:564
msgid "Comment." msgid "Comment."
msgstr "Commentaire." msgstr "Commentaire."
#: topologie/models.py:502 #: topologie/models.py:565
msgid "comment" msgid "comment"
msgstr "commentaire" msgstr "commentaire"
#: topologie/models.py:506 #: topologie/models.py:569
msgid "Can view a switch module object" msgid "Can view a switch module object"
msgstr "Peut voir un objet module de commutateur réseau" msgstr "Peut voir un objet module de commutateur réseau"
#: topologie/models.py:507 #: topologie/models.py:570
msgid "switch module" msgid "switch module"
msgstr "module de commutateur réseau" msgstr "module de commutateur réseau"
#: topologie/models.py:508 #: topologie/models.py:571
msgid "switch modules" msgid "switch modules"
msgstr "modules de commutateur réseau" msgstr "modules de commutateur réseau"
#: topologie/models.py:520 #: topologie/models.py:583
msgid "Slot on switch." msgid "Slot on switch."
msgstr "Emplacement sur le commutateur réseau." msgstr "Emplacement sur le commutateur réseau."
#: topologie/models.py:520 #: topologie/models.py:583
msgid "slot" msgid "slot"
msgstr "emplacement " msgstr "emplacement "
#: topologie/models.py:527 #: topologie/models.py:590
msgid "Can view a link between switch and module object" msgid "Can view a link between switch and module object"
msgstr "Peut voir un objet lien entre commutateur réseau et module" msgstr "Peut voir un objet lien entre commutateur réseau et module"
#: topologie/models.py:530 #: topologie/models.py:593
msgid "link between switch and module" msgid "link between switch and module"
msgstr "lien entre commutateur réseau et module" msgstr "lien entre commutateur réseau et module"
#: topologie/models.py:531 #: topologie/models.py:594
msgid "links between switch and module" msgid "links between switch and module"
msgstr "liens entre commutateur réseau et module" msgstr "liens entre commutateur réseau et module"
#: topologie/models.py:535 #: topologie/models.py:598
#, python-format #, python-format
msgid "On slot %(slot)s of %(switch)s" msgid "On slot %(slot)s of %(switch)s"
msgstr "Sur l'emplacement %(slot)s de %(switch)s" msgstr "Sur l'emplacement %(slot)s de %(switch)s"
#: topologie/models.py:545 #: topologie/models.py:610
msgid "Can view a switch constructor object" msgid "Can view a switch constructor object"
msgstr "Peut voir un objet constructeur de commutateur réseau" msgstr "Peut voir un objet constructeur de commutateur réseau"
#: topologie/models.py:547 topologie/views.py:1079 #: topologie/models.py:612 topologie/views.py:1079
msgid "switch constructor" msgid "switch constructor"
msgstr "constructeur de commutateur réseau" msgstr "constructeur de commutateur réseau"
#: topologie/models.py:548 #: topologie/models.py:613
msgid "switch constructors" msgid "switch constructors"
msgstr "constructeurs de commutateur réseau" msgstr "constructeurs de commutateur réseau"
#: topologie/models.py:562 #: topologie/models.py:627
msgid "Can view a switch bay object" msgid "Can view a switch bay object"
msgstr "Peut voir un objet baie de brassage" msgstr "Peut voir un objet baie de brassage"
#: topologie/models.py:563 topologie/views.py:892 #: topologie/models.py:628 topologie/views.py:892
msgid "switch bay" msgid "switch bay"
msgstr "baie de brassage" msgstr "baie de brassage"
#: topologie/models.py:564 #: topologie/models.py:629
msgid "switch bays" msgid "switch bays"
msgstr "baies de brassage" msgstr "baies de brassage"
#: topologie/models.py:577 #: topologie/models.py:642
msgid "Can view a dormitory object" msgid "Can view a dormitory object"
msgstr "Peut voir un objet résidence" msgstr "Peut voir un objet résidence"
#: topologie/models.py:578 topologie/views.py:1016 #: topologie/models.py:643 topologie/views.py:1016
msgid "dormitory" msgid "dormitory"
msgstr "résidence" msgstr "résidence"
#: topologie/models.py:579 #: topologie/models.py:644
msgid "dormitories" msgid "dormitories"
msgstr "résidences" msgstr "résidences"
#: topologie/models.py:605 #: topologie/models.py:670
msgid "Can view a building object" msgid "Can view a building object"
msgstr "Peut voir un objet bâtiment" msgstr "Peut voir un objet bâtiment"
#: topologie/models.py:606 topologie/views.py:953 #: topologie/models.py:671 topologie/views.py:953
msgid "building" msgid "building"
msgstr "bâtiment" msgstr "bâtiment"
#: topologie/models.py:607 #: topologie/models.py:672
msgid "buildings" msgid "buildings"
msgstr "bâtiments" msgstr "bâtiments"
#: topologie/models.py:658 #: topologie/models.py:723
msgid "Port state Active." msgid "Port state Active."
msgstr "État du port Actif." msgstr "État du port Actif."
#: topologie/models.py:659 #: topologie/models.py:724
msgid "port state Active" msgid "port state Active"
msgstr "état du port Actif" msgstr "état du port Actif"
#: topologie/models.py:665 #: topologie/models.py:730
msgid "Can view a port object" msgid "Can view a port object"
msgstr "Peut voir un objet port" msgstr "Peut voir un objet port"
#: topologie/models.py:666 #: topologie/models.py:731
msgid "port" msgid "port"
msgstr "port" msgstr "port"
#: topologie/models.py:667 #: topologie/models.py:732
msgid "ports" msgid "ports"
msgstr "ports" msgstr "ports"
#: topologie/models.py:673 #: topologie/models.py:738
msgid "Uplink: " msgid "Uplink: "
msgstr "Liaison montante : " msgstr "Liaison montante : "
#: topologie/models.py:675 #: topologie/models.py:740
msgid "Machine: " msgid "Machine: "
msgstr "Machine : " msgstr "Machine : "
#: topologie/models.py:677 #: topologie/models.py:742
msgid "Room: " msgid "Room: "
msgstr "Chambre : " msgstr "Chambre : "
#: topologie/models.py:679 #: topologie/models.py:744
msgid "Unknown" msgid "Unknown"
msgstr "Inconnu" msgstr "Inconnu"
#: topologie/models.py:740 #: topologie/models.py:805
msgid "The port can't exist, its number is too great." msgid "The port can't exist, its number is too great."
msgstr "Le port ne peut pas exister, son numéro est trop grand." msgstr "Le port ne peut pas exister, son numéro est trop grand."
#: topologie/models.py:751 #: topologie/models.py:816
msgid "Room, interface and related port are mutually exclusive." msgid "Room, interface and related port are mutually exclusive."
msgstr "Chambre, interface et port relié sont mutuellement exclusifs." msgstr "Chambre, interface et port relié sont mutuellement exclusifs."
#: topologie/models.py:754 #: topologie/models.py:819
msgid "A port can't be related to itself." msgid "A port can't be related to itself."
msgstr "Un port ne peut être relié à lui-même." msgstr "Un port ne peut être relié à lui-même."
#: topologie/models.py:759 #: topologie/models.py:824
msgid "" msgid ""
"The related port is already used, please clear it before creating the " "The related port is already used, please clear it before creating the "
"relation." "relation."
@ -299,152 +299,152 @@ msgstr ""
"Le port relié est déjà utilisé, veuillez le modifier avant de créer la " "Le port relié est déjà utilisé, veuillez le modifier avant de créer la "
"relation." "relation."
#: topologie/models.py:781 #: topologie/models.py:846
msgid "Can view a room object" msgid "Can view a room object"
msgstr "Peut voir un objet chambre" msgstr "Peut voir un objet chambre"
#: topologie/models.py:782 topologie/views.py:773 #: topologie/models.py:847 topologie/views.py:773
msgid "room" msgid "room"
msgstr "chambre" msgstr "chambre"
#: topologie/models.py:783 #: topologie/models.py:848
msgid "rooms" msgid "rooms"
msgstr "chambres" msgstr "chambres"
#: topologie/models.py:793 #: topologie/models.py:858
msgid "MAC-RADIUS" msgid "MAC-RADIUS"
msgstr "MAC-RADIUS" msgstr "MAC-RADIUS"
#: topologie/models.py:806 topologie/templates/topologie/aff_chambres.html:36 #: topologie/models.py:871 topologie/templates/topologie/aff_chambres.html:36
#: topologie/templates/topologie/aff_port.html:38 #: topologie/templates/topologie/aff_port.html:38
msgid "Room" msgid "Room"
msgstr "Chambre" msgstr "Chambre"
#: topologie/models.py:807 topologie/templates/topologie/aff_ap.html:36 #: topologie/models.py:872 topologie/templates/topologie/aff_ap.html:36
msgid "Access point" msgid "Access point"
msgstr "Point d'accès sans fil" msgstr "Point d'accès sans fil"
#: topologie/models.py:808 #: topologie/models.py:873
msgid "Uplink" msgid "Uplink"
msgstr "Liaison montante" msgstr "Liaison montante"
#: topologie/models.py:809 #: topologie/models.py:874
msgid "Organisation machine" msgid "Organisation machine"
msgstr "Machine d'association" msgstr "Machine d'association"
#: topologie/models.py:810 #: topologie/models.py:875
msgid "Nothing" msgid "Nothing"
msgstr "Rien" msgstr "Rien"
#: topologie/models.py:812 #: topologie/models.py:877
msgid "name" msgid "name"
msgstr "nom" msgstr "nom"
#: topologie/models.py:818 #: topologie/models.py:883
msgid "default profile" msgid "default profile"
msgstr "profil par défaut" msgstr "profil par défaut"
#: topologie/models.py:826 #: topologie/models.py:891
msgid "profile on dormitory" msgid "profile on dormitory"
msgstr "profil sur la résidence" msgstr "profil sur la résidence"
#: topologie/models.py:834 #: topologie/models.py:899
msgid "VLAN untagged" msgid "VLAN untagged"
msgstr "VLAN untagged" msgstr "VLAN untagged"
#: topologie/models.py:840 #: topologie/models.py:905
msgid "VLAN(s) tagged" msgid "VLAN(s) tagged"
msgstr "VLAN(s) tagged" msgstr "VLAN(s) tagged"
#: topologie/models.py:846 #: topologie/models.py:910
msgid "Type of RADIUS authentication: inactive, MAC-address or 802.1X." msgid "Type of RADIUS authentication: inactive, MAC-address or 802.1X."
msgstr "Type d'authentification RADIUS : inactive, MAC-address ou 802.1X." msgstr "Type d'authentification RADIUS : inactive, MAC-address ou 802.1X."
#: topologie/models.py:848 #: topologie/models.py:911
msgid "RADIUS type" msgid "RADIUS type"
msgstr "Type de RADIUS" msgstr "Type de RADIUS"
#: topologie/models.py:855 #: topologie/models.py:918
msgid "In case of MAC-authentication: mode COMMON or STRICT on this port." msgid "In case of MAC-authentication: mode COMMON or STRICT on this port."
msgstr "" msgstr ""
"Dans le cas d'authentification par adresse MAC : mode COMMON ou STRICT sur " "Dans le cas d'authentification par adresse MAC : mode COMMON ou STRICT sur "
"ce port." "ce port."
#: topologie/models.py:857 #: topologie/models.py:920
msgid "RADIUS mode" msgid "RADIUS mode"
msgstr "Mode de RADIUS" msgstr "Mode de RADIUS"
#: topologie/models.py:860 #: topologie/models.py:923
msgid "Port speed limit." msgid "Port speed limit."
msgstr "Limite de vitesse du port." msgstr "Limite de vitesse du port."
#: topologie/models.py:865 #: topologie/models.py:928
msgid "Limit of MAC-address on this port." msgid "Limit of MAC-address on this port."
msgstr "Limite de MAC-address sur ce port." msgstr "Limite de MAC-address sur ce port."
#: topologie/models.py:866 #: topologie/models.py:929
msgid "MAC limit" msgid "MAC limit"
msgstr "Limite MAC" msgstr "Limite MAC"
#: topologie/models.py:868 #: topologie/models.py:931
msgid "Flow control." msgid "Flow control."
msgstr "Contrôle du flux." msgstr "Contrôle du flux."
#: topologie/models.py:871 #: topologie/models.py:934
msgid "Protect against rogue DHCP." msgid "Protect against rogue DHCP."
msgstr "Protège contre les DHCP pirates." msgstr "Protège contre les DHCP pirates."
#: topologie/models.py:872 #: topologie/models.py:935
#: topologie/templates/topologie/aff_vlanoptions.html:36 #: topologie/templates/topologie/aff_vlanoptions.html:36
msgid "DHCP snooping" msgid "DHCP snooping"
msgstr "DHCP snooping" msgstr "DHCP snooping"
#: topologie/models.py:876 #: topologie/models.py:939
msgid "Protect against rogue DHCPv6." msgid "Protect against rogue DHCPv6."
msgstr "Protège contre les DHCPv6 pirates." msgstr "Protège contre les DHCPv6 pirates."
#: topologie/models.py:877 #: topologie/models.py:940
#: topologie/templates/topologie/aff_vlanoptions.html:37 #: topologie/templates/topologie/aff_vlanoptions.html:37
msgid "DHCPv6 snooping" msgid "DHCPv6 snooping"
msgstr "DHCPv6 snooping" msgstr "DHCPv6 snooping"
#: topologie/models.py:881 #: topologie/models.py:944
msgid "Check if IP address is DHCP assigned." msgid "Check if IP address is DHCP assigned."
msgstr "Vérifie si l'adresse IP est attribuée par DHCP." msgstr "Vérifie si l'adresse IP est attribuée par DHCP."
#: topologie/models.py:882 #: topologie/models.py:945
msgid "ARP protection" msgid "ARP protection"
msgstr "Protection ARP" msgstr "Protection ARP"
#: topologie/models.py:886 #: topologie/models.py:949
msgid "Protect against rogue RA." msgid "Protect against rogue RA."
msgstr "Protège contre les RA pirates." msgstr "Protège contre les RA pirates."
#: topologie/models.py:887 #: topologie/models.py:950
msgid "RA guard" msgid "RA guard"
msgstr "RA guard" msgstr "RA guard"
#: topologie/models.py:891 #: topologie/models.py:954
msgid "Protect against loop." msgid "Protect against loop."
msgstr "Protège contre une boucle." msgstr "Protège contre une boucle."
#: topologie/models.py:892 #: topologie/models.py:955
msgid "loop protection" msgid "loop protection"
msgstr "protection contre une boucle" msgstr "protection contre une boucle"
#: topologie/models.py:896 #: topologie/models.py:959
msgid "Can view a port profile object" msgid "Can view a port profile object"
msgstr "Peut voir un objet profil de port" msgstr "Peut voir un objet profil de port"
#: topologie/models.py:897 topologie/views.py:1130 #: topologie/models.py:960 topologie/views.py:1130
msgid "port profile" msgid "port profile"
msgstr "profil de port" msgstr "profil de port"
#: topologie/models.py:898 #: topologie/models.py:961
msgid "port profiles" msgid "port profiles"
msgstr "profils de port" msgstr "profils de port"
#: topologie/models.py:936 #: topologie/models.py:999
msgid "A default profile for all dormitories of that type already exists." msgid "A default profile for all dormitories of that type already exists."
msgstr "" msgstr ""
"Un profil par défaut pour toutes les résidences de ce type existe déjà. " "Un profil par défaut pour toutes les résidences de ce type existe déjà. "

View file

@ -157,7 +157,7 @@ class UserAdmin(VersionAdmin, BaseUserAdmin):
(None, {"fields": ("pseudo", "password")}), (None, {"fields": ("pseudo", "password")}),
( (
"Personal info", "Personal info",
{"fields": ("surname", "email", "school", "shell", "uid_number")}, {"fields": ("surname", "email", "school", "shell", "uid_number", "profile_image")},
), ),
("Permissions", {"fields": ("is_admin",)}), ("Permissions", {"fields": ("is_admin",)}),
) )
@ -176,6 +176,7 @@ class UserAdmin(VersionAdmin, BaseUserAdmin):
"is_admin", "is_admin",
"password1", "password1",
"password2", "password2",
"profile_image",
), ),
}, },
), ),

View file

@ -45,6 +45,7 @@ class UserSerializer(NamespacedHMSerializer):
"state", "state",
"registered", "registered",
"telephone", "telephone",
"profile_image",
"solde", "solde",
"access", "access",
"end_access", "end_access",
@ -77,6 +78,7 @@ class ClubSerializer(NamespacedHMSerializer):
"state", "state",
"registered", "registered",
"telephone", "telephone",
"profile_image",
"solde", "solde",
"room", "room",
"access", "access",
@ -112,6 +114,7 @@ class AdherentSerializer(NamespacedHMSerializer):
"state", "state",
"registered", "registered",
"telephone", "telephone",
"profile_image",
"room", "room",
"solde", "solde",
"access", "access",

View file

@ -321,6 +321,7 @@ class AdherentForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
self.fields["email"].label = _("Email address") self.fields["email"].label = _("Email address")
self.fields["school"].label = _("School") self.fields["school"].label = _("School")
self.fields["comment"].label = _("Comment") self.fields["comment"].label = _("Comment")
self.fields["profile_image"].label = _("Profile Image")
if "room" in self.fields: if "room" in self.fields:
self.fields["room"].label = _("Room") self.fields["room"].label = _("Room")
self.fields["room"].empty_label = _("No room") self.fields["room"].empty_label = _("No room")
@ -336,6 +337,7 @@ class AdherentForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
"school", "school",
"comment", "comment",
"telephone", "telephone",
"profile_image",
"room", "room",
] ]
@ -438,6 +440,7 @@ class AdherentCreationForm(AdherentForm):
"school", "school",
"comment", "comment",
"telephone", "telephone",
"profile_image",
"room", "room",
"state", "state",
] ]
@ -515,6 +518,7 @@ class AdherentEditForm(AdherentForm):
"school", "school",
"comment", "comment",
"telephone", "telephone",
"profile_image",
"room", "room",
"shell", "shell",
"gpg_fingerprint", "gpg_fingerprint",
@ -550,6 +554,7 @@ class ClubForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
"room", "room",
"email", "email",
"telephone", "telephone",
"profile_image",
"email", "email",
"shell", "shell",
"mailing", "mailing",

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.28 on 2020-05-18 14:48
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0092_auto_20200502_0057'),
]
operations = [
migrations.AddField(
model_name='user',
name='profile_image',
field=models.ImageField(blank=True, upload_to='profile_image'),
),
]

View file

@ -73,6 +73,7 @@ from django.contrib.auth.models import (
from django.core.validators import RegexValidator from django.core.validators import RegexValidator
import traceback import traceback
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.core.files.uploadedfile import InMemoryUploadedFile
from reversion import revisions as reversion from reversion import revisions as reversion
@ -90,7 +91,9 @@ from machines.models import Domain, Interface, Machine, regen
from preferences.models import GeneralOption, AssoOption, OptionalUser from preferences.models import GeneralOption, AssoOption, OptionalUser
from preferences.models import OptionalMachine, MailMessageOption from preferences.models import OptionalMachine, MailMessageOption
from PIL import Image
from io import BytesIO
import sys
# Utilitaires généraux # Utilitaires généraux
@ -257,6 +260,7 @@ class User(
verbose_name=_("enable shortcuts on Re2o website"), default=True verbose_name=_("enable shortcuts on Re2o website"), default=True
) )
email_change_date = models.DateTimeField(auto_now_add=True) email_change_date = models.DateTimeField(auto_now_add=True)
profile_image = models.ImageField(upload_to='profile_image', blank=True)
USERNAME_FIELD = "pseudo" USERNAME_FIELD = "pseudo"
REQUIRED_FIELDS = ["surname", "email"] REQUIRED_FIELDS = ["surname", "email"]
@ -1395,6 +1399,23 @@ class User(
self.clean_pseudo(*args, **kwargs) self.clean_pseudo(*args, **kwargs)
self.clean_email(*args, **kwargs) self.clean_email(*args, **kwargs)
@property
def image_url(self):
if self.profile_image and hasattr(self.profile_image, 'url'):
return self.profile_image.url
def save(self, *args, **kwargs):
if self.profile_image:
im = Image.open(self.profile_image)
output = BytesIO()
im = im.resize( (100,100) )
if im.mode in ("RGBA", "P"):
im = im.convert("RGB")
im.save(output, format='JPEG', quality=100)
output.seek(0)
self.profile_image = InMemoryUploadedFile(output,'ImageField', "%s.jpg" %self.profile_image.name.split('.')[0], 'image/jpeg', sys.getsizeof(output), None)
super(User,self).save(*args, **kwargs)
def __str__(self): def __str__(self):
return self.pseudo return self.pseudo

View file

@ -205,6 +205,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<dd>{{ users.pseudo }}</dd> <dd>{{ users.pseudo }}</dd>
</div> </div>
{% if users.image_url %}
<div class="col-md-6">
<dt>{% trans "Profile picture" %}</dt>
<dd><img src="{{ users.image_url }}" height="42" width="42" /></dd>
</div>
{% endif %}
<div class="col-md-6"> <div class="col-md-6">
<dt>{% trans "Email address" %}</dt> <dt>{% trans "Email address" %}</dt>
<dd><a href="mailto:{{ users.email }}">{{ users.email }}</a>{% if users.email_state != users.EMAIL_STATE_VERIFIED %}<br/><i class="text-warning">{% trans "Pending confirmation..." %}</i>{% endif %}</dd> <dd><a href="mailto:{{ users.email }}">{{ users.email }}</a>{% if users.email_state != users.EMAIL_STATE_VERIFIED %}<br/><i class="text-warning">{% trans "Pending confirmation..." %}</i>{% endif %}</dd>

View file

@ -32,7 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %} {% block content %}
{% bootstrap_form_errors userform %} {% bootstrap_form_errors userform %}
<form class="form" method="post"> <form class="form" method="post" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
{% massive_bootstrap_form userform 'room,school,administrators,members' %} {% massive_bootstrap_form userform 'room,school,administrators,members' %}
{% bootstrap_button action_name button_type="submit" icon='ok' button_class='btn-success' %} {% bootstrap_button action_name button_type="submit" icon='ok' button_class='btn-success' %}

View file

@ -59,6 +59,7 @@ from machines.models import Machine
from preferences.models import OptionalUser, GeneralOption, AssoOption from preferences.models import OptionalUser, GeneralOption, AssoOption
from importlib import import_module from importlib import import_module
from django.conf import settings
from re2o.settings_local import OPTIONNAL_APPS_RE2O from re2o.settings_local import OPTIONNAL_APPS_RE2O
from re2o.views import form from re2o.views import form
from re2o.utils import all_has_access, permission_tree from re2o.utils import all_has_access, permission_tree
@ -112,12 +113,13 @@ from .forms import (
InitialRegisterForm, InitialRegisterForm,
) )
import os
@can_create(Adherent) @can_create(Adherent)
def new_user(request): def new_user(request):
""" Vue de création d'un nouvel utilisateur, """ Vue de création d'un nouvel utilisateur,
envoie un mail pour le mot de passe""" envoie un mail pour le mot de passe"""
user = AdherentCreationForm(request.POST or None, user=request.user) user = AdherentCreationForm(request.POST or None, request.FILES or None, user=request.user)
user.request = request user.request = request
GTU_sum_up = GeneralOption.get_cached_value("GTU_sum_up") GTU_sum_up = GeneralOption.get_cached_value("GTU_sum_up")
@ -167,7 +169,7 @@ def new_user(request):
def new_club(request): def new_club(request):
""" Vue de création d'un nouveau club, """ Vue de création d'un nouveau club,
envoie un mail pour le mot de passe""" envoie un mail pour le mot de passe"""
club = ClubForm(request.POST or None, user=request.user) club = ClubForm(request.POST or None, request.FILES or None, user=request.user)
club.request = request club.request = request
if club.is_valid(): if club.is_valid():
@ -192,7 +194,7 @@ def new_club(request):
def edit_club_admin_members(request, club_instance, **_kwargs): def edit_club_admin_members(request, club_instance, **_kwargs):
"""Vue d'edition de la liste des users administrateurs et """Vue d'edition de la liste des users administrateurs et
membres d'un club""" membres d'un club"""
club = ClubAdminandMembersForm(request.POST or None, instance=club_instance) club = ClubAdminandMembersForm(request.POST or None, request.FILES or None, instance=club_instance)
if club.is_valid(): if club.is_valid():
if club.changed_data: if club.changed_data:
club.save() club.save()
@ -215,14 +217,20 @@ def edit_info(request, user, userid):
possession du droit cableur """ possession du droit cableur """
if user.is_class_adherent: if user.is_class_adherent:
user_form = AdherentEditForm( user_form = AdherentEditForm(
request.POST or None, instance=user.adherent, user=request.user request.POST or None, request.FILES or None, instance=user.adherent, user=request.user
) )
else: else:
user_form = ClubForm( user_form = ClubForm(
request.POST or None, instance=user.club, user=request.user request.POST or None, request.FILES or None,instance=user.club, user=request.user
) )
if user_form.is_valid(): if user_form.is_valid():
if user_form.changed_data: if user_form.changed_data:
user = user_form.save(commit=False)
former_user = Adherent.objects.get(pseudo=user.pseudo)
if former_user.profile_image:
if (user.profile_image and user.profile_image.url != former_user.profile_image.url) or (not user.profile_image):
former_image = settings.BASE_DIR+former_user.profile_image.url
os.remove(former_image)
user = user_form.save() user = user_form.save()
messages.success(request, _("The user was edited.")) messages.success(request, _("The user was edited."))