diff --git a/core/templates/core/500.jinja b/core/templates/core/500.jinja new file mode 100644 index 00000000..493d64ba --- /dev/null +++ b/core/templates/core/500.jinja @@ -0,0 +1,15 @@ +{% extends "core/base.jinja" %} +{% block head %} +{{ super() }} + +{% endblock head %} + +{% block content %} +

{% trans %}500, Server Error{% endtrans %}

+ {% if request.sentry_dsn %} + +{% endif %} +{% endblock content %} diff --git a/core/views/__init__.py b/core/views/__init__.py index 7045b7f7..1b9b33e2 100644 --- a/core/views/__init__.py +++ b/core/views/__init__.py @@ -24,8 +24,14 @@ import types +from sentry_sdk import last_event_id from django.shortcuts import render -from django.http import HttpResponseForbidden, HttpResponseNotFound +from django.http import ( + HttpResponseForbidden, + HttpResponseNotFound, + HttpResponseServerError, +) +from django.template import RequestContext from django.core.exceptions import ( PermissionDenied, ObjectDoesNotExist, @@ -65,6 +71,12 @@ def not_found(request): return HttpResponseNotFound(render(request, "core/404.jinja")) +def internal_servor_error(request): + request.sentry_dsn = settings.SENTRY_DSN + request.sentry_last_event_id = last_event_id + return HttpResponseServerError(render(request, "core/500.jinja")) + + def can_edit_prop(obj, user): if obj is None or user.is_owner(obj): return True diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index cd7fe02a..e8bb944d 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-20 14:41+0200\n" +"POT-Creation-Date: 2018-10-10 02:17+0200\n" "PO-Revision-Date: 2016-07-18\n" "Last-Translator: Skia \n" "Language-Team: AE info \n" @@ -16,168 +16,169 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: accounting/models.py:59 accounting/models.py:108 accounting/models.py:136 -#: accounting/models.py:195 club/models.py:47 com/models.py:198 -#: com/models.py:212 core/templates/core/base.jinja:297 counter/models.py:113 -#: counter/models.py:140 counter/models.py:184 forum/models.py:54 -#: launderette/models.py:38 launderette/models.py:84 launderette/models.py:110 -#: stock/models.py:38 stock/models.py:54 stock/models.py:77 stock/models.py:97 +#: accounting/models.py:61 accounting/models.py:110 accounting/models.py:138 +#: accounting/models.py:203 club/models.py:48 com/models.py:231 +#: com/models.py:248 core/templates/core/base.jinja:296 counter/models.py:119 +#: counter/models.py:147 counter/models.py:209 forum/models.py:58 +#: launderette/models.py:38 launderette/models.py:90 launderette/models.py:125 +#: stock/models.py:40 stock/models.py:60 stock/models.py:100 +#: stock/models.py:127 msgid "name" msgstr "nom" -#: accounting/models.py:60 +#: accounting/models.py:62 msgid "street" msgstr "rue" -#: accounting/models.py:61 +#: accounting/models.py:63 msgid "city" msgstr "ville" -#: accounting/models.py:62 +#: accounting/models.py:64 msgid "postcode" msgstr "code postal" -#: accounting/models.py:63 +#: accounting/models.py:65 msgid "country" msgstr "pays" -#: accounting/models.py:64 core/models.py:198 +#: accounting/models.py:66 core/models.py:258 msgid "phone" msgstr "téléphone" -#: accounting/models.py:65 +#: accounting/models.py:67 msgid "email" msgstr "email" -#: accounting/models.py:66 +#: accounting/models.py:68 msgid "website" msgstr "site internet" -#: accounting/models.py:69 +#: accounting/models.py:71 msgid "company" msgstr "entreprise" -#: accounting/models.py:109 +#: accounting/models.py:111 msgid "iban" msgstr "IBAN" -#: accounting/models.py:110 +#: accounting/models.py:112 msgid "account number" msgstr "numero de compte" -#: accounting/models.py:111 accounting/models.py:137 club/models.py:227 -#: com/models.py:73 com/models.py:187 com/models.py:214 counter/models.py:149 -#: counter/models.py:185 trombi/models.py:149 +#: accounting/models.py:113 accounting/models.py:139 club/models.py:266 +#: com/models.py:75 com/models.py:219 com/models.py:252 counter/models.py:164 +#: counter/models.py:210 trombi/models.py:205 msgid "club" msgstr "club" -#: accounting/models.py:114 +#: accounting/models.py:116 msgid "Bank account" msgstr "Compte en banque" -#: accounting/models.py:138 +#: accounting/models.py:141 msgid "bank account" msgstr "compte en banque" -#: accounting/models.py:141 +#: accounting/models.py:145 msgid "Club account" msgstr "Compte club" -#: accounting/models.py:186 +#: accounting/models.py:190 #, python-format msgid "%(club_account)s on %(bank_account)s" msgstr "%(club_account)s sur %(bank_account)s" -#: accounting/models.py:193 club/models.py:228 counter/models.py:466 -#: election/models.py:17 launderette/models.py:148 +#: accounting/models.py:201 club/models.py:268 counter/models.py:589 +#: election/models.py:18 launderette/models.py:180 msgid "start date" msgstr "date de début" -#: accounting/models.py:194 club/models.py:229 counter/models.py:467 -#: election/models.py:18 +#: accounting/models.py:202 club/models.py:269 counter/models.py:590 +#: election/models.py:19 msgid "end date" msgstr "date de fin" -#: accounting/models.py:196 +#: accounting/models.py:204 msgid "is closed" msgstr "est fermé" -#: accounting/models.py:197 accounting/models.py:421 +#: accounting/models.py:206 accounting/models.py:521 msgid "club account" msgstr "compte club" -#: accounting/models.py:198 accounting/models.py:255 counter/models.py:53 -#: counter/models.py:298 +#: accounting/models.py:208 accounting/models.py:268 counter/models.py:54 +#: counter/models.py:346 msgid "amount" msgstr "montant" -#: accounting/models.py:199 +#: accounting/models.py:209 msgid "effective_amount" msgstr "montant effectif" -#: accounting/models.py:202 +#: accounting/models.py:212 msgid "General journal" msgstr "Classeur" -#: accounting/models.py:253 +#: accounting/models.py:264 msgid "number" msgstr "numéro" -#: accounting/models.py:254 +#: accounting/models.py:266 msgid "journal" msgstr "classeur" -#: accounting/models.py:256 core/models.py:657 core/models.py:1117 -#: core/models.py:1161 core/models.py:1188 counter/models.py:301 -#: counter/models.py:351 counter/models.py:484 eboutic/models.py:39 -#: eboutic/models.py:73 forum/models.py:248 forum/models.py:323 -#: stock/models.py:76 +#: accounting/models.py:269 core/models.py:805 core/models.py:1341 +#: core/models.py:1387 core/models.py:1416 counter/models.py:351 +#: counter/models.py:444 counter/models.py:613 eboutic/models.py:42 +#: eboutic/models.py:85 forum/models.py:298 forum/models.py:391 +#: stock/models.py:99 msgid "date" msgstr "date" -#: accounting/models.py:257 counter/models.py:115 counter/models.py:485 -#: stock/models.py:79 +#: accounting/models.py:270 counter/models.py:121 counter/models.py:614 +#: stock/models.py:102 msgid "comment" msgstr "commentaire" -#: accounting/models.py:258 counter/models.py:302 counter/models.py:352 -#: subscription/models.py:59 +#: accounting/models.py:272 counter/models.py:353 counter/models.py:446 +#: subscription/models.py:64 msgid "payment method" msgstr "méthode de paiement" -#: accounting/models.py:259 +#: accounting/models.py:277 msgid "cheque number" msgstr "numéro de chèque" -#: accounting/models.py:260 eboutic/models.py:144 +#: accounting/models.py:282 eboutic/models.py:166 msgid "invoice" msgstr "facture" -#: accounting/models.py:261 +#: accounting/models.py:286 msgid "is done" msgstr "est fait" -#: accounting/models.py:263 +#: accounting/models.py:290 msgid "simple type" msgstr "type simplifié" -#: accounting/models.py:265 accounting/models.py:374 +#: accounting/models.py:297 accounting/models.py:462 msgid "accounting type" msgstr "type comptable" -#: accounting/models.py:267 accounting/models.py:369 accounting/models.py:396 -#: accounting/models.py:420 core/models.py:1187 counter/models.py:343 +#: accounting/models.py:304 accounting/models.py:450 accounting/models.py:485 +#: accounting/models.py:519 core/models.py:1415 counter/models.py:410 msgid "label" msgstr "étiquette" -#: accounting/models.py:268 +#: accounting/models.py:310 msgid "target type" msgstr "type de cible" -#: accounting/models.py:269 club/models.py:329 +#: accounting/models.py:313 club/models.py:422 #: club/templates/club/club_members.jinja:8 #: club/templates/club/club_old_members.jinja:8 -#: club/templates/club/mailing.jinja:28 club/views.py:86 +#: club/templates/club/mailing.jinja:28 club/views.py:111 #: counter/templates/counter/cash_summary_list.jinja:32 #: counter/templates/counter/stats.jinja:15 #: counter/templates/counter/stats.jinja:52 @@ -186,7 +187,7 @@ msgstr "type de cible" msgid "User" msgstr "Utilisateur" -#: accounting/models.py:269 club/models.py:270 +#: accounting/models.py:314 club/models.py:329 #: club/templates/club/club_detail.jinja:12 #: com/templates/com/mailing_admin.jinja:11 #: com/templates/com/news_admin_list.jinja:23 @@ -210,36 +211,36 @@ msgstr "Utilisateur" msgid "Club" msgstr "Club" -#: accounting/models.py:269 core/views/user.py:220 +#: accounting/models.py:315 core/views/user.py:295 msgid "Account" msgstr "Compte" -#: accounting/models.py:269 +#: accounting/models.py:316 msgid "Company" msgstr "Entreprise" -#: accounting/models.py:269 sith/settings.py:378 +#: accounting/models.py:317 sith/settings.py:377 #: stock/templates/stock/shopping_list_items.jinja:37 msgid "Other" msgstr "Autre" -#: accounting/models.py:270 +#: accounting/models.py:320 msgid "target id" msgstr "id de la cible" -#: accounting/models.py:271 +#: accounting/models.py:322 msgid "target label" msgstr "nom de la cible" -#: accounting/models.py:272 +#: accounting/models.py:327 msgid "linked operation" msgstr "opération liée" -#: accounting/models.py:288 +#: accounting/models.py:346 msgid "The date must be set." msgstr "La date doit être indiquée." -#: accounting/models.py:290 +#: accounting/models.py:350 #, python-format msgid "" "The date can not be before the start date of the journal, which is\n" @@ -248,16 +249,16 @@ msgstr "" "La date ne peut pas être avant la date de début du journal, qui est\n" "%(start_date)s." -#: accounting/models.py:293 +#: accounting/models.py:360 msgid "Target does not exists" msgstr "La cible n'existe pas." -#: accounting/models.py:295 +#: accounting/models.py:363 msgid "Please add a target label if you set no existing target" msgstr "" "Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante" -#: accounting/models.py:297 +#: accounting/models.py:368 msgid "" "You need to provide ether a simplified accounting type or a standard " "accounting type" @@ -265,41 +266,41 @@ msgstr "" "Vous devez fournir soit un type comptable simplifié ou un type comptable " "standard" -#: accounting/models.py:364 counter/models.py:144 +#: accounting/models.py:442 counter/models.py:157 msgid "code" msgstr "code" -#: accounting/models.py:366 +#: accounting/models.py:446 msgid "An accounting type code contains only numbers" msgstr "Un code comptable ne contient que des numéros" -#: accounting/models.py:370 +#: accounting/models.py:452 msgid "movement type" msgstr "type de mouvement" -#: accounting/models.py:370 +#: accounting/models.py:454 #: accounting/templates/accounting/journal_statement_nature.jinja:9 #: accounting/templates/accounting/journal_statement_person.jinja:12 -#: accounting/views.py:482 +#: accounting/views.py:602 msgid "Credit" msgstr "Crédit" -#: accounting/models.py:370 +#: accounting/models.py:455 #: accounting/templates/accounting/journal_statement_nature.jinja:28 #: accounting/templates/accounting/journal_statement_person.jinja:40 -#: accounting/views.py:482 +#: accounting/views.py:602 msgid "Debit" msgstr "Débit" -#: accounting/models.py:371 +#: accounting/models.py:456 msgid "Neutral" msgstr "Neutre" -#: accounting/models.py:398 +#: accounting/models.py:489 msgid "simplified accounting types" msgstr "type simplifié" -#: accounting/models.py:401 +#: accounting/models.py:493 msgid "simplified type" msgstr "type simplifié" @@ -374,7 +375,7 @@ msgstr "Compte en banque : " #: election/templates/election/election_detail.jinja:401 #: forum/templates/forum/macros.jinja:21 forum/templates/forum/macros.jinja:123 #: launderette/templates/launderette/launderette_admin.jinja:16 -#: launderette/views.py:182 sas/templates/sas/album.jinja:26 +#: launderette/views.py:226 sas/templates/sas/album.jinja:26 #: sas/templates/sas/moderation.jinja:18 sas/templates/sas/picture.jinja:74 #: sas/templates/sas/picture.jinja:124 #: stock/templates/stock/stock_shopping_list.jinja:43 @@ -385,7 +386,7 @@ msgid "Delete" msgstr "Supprimer" #: accounting/templates/accounting/bank_account_details.jinja:18 -#: club/views.py:101 core/views/user.py:166 sas/templates/sas/picture.jinja:86 +#: club/views.py:128 core/views/user.py:205 sas/templates/sas/picture.jinja:86 msgid "Infos" msgstr "Infos" @@ -404,7 +405,7 @@ msgstr "Nouveau compte club" #: accounting/templates/accounting/bank_account_details.jinja:27 #: accounting/templates/accounting/bank_account_list.jinja:22 #: accounting/templates/accounting/club_account_details.jinja:58 -#: accounting/templates/accounting/journal_details.jinja:89 club/views.py:129 +#: accounting/templates/accounting/journal_details.jinja:89 club/views.py:174 #: com/templates/com/news_admin_list.jinja:39 #: com/templates/com/news_admin_list.jinja:68 #: com/templates/com/news_admin_list.jinja:115 @@ -418,7 +419,7 @@ msgstr "Nouveau compte club" #: com/templates/com/screen_list.jinja:26 com/templates/com/weekmail.jinja:32 #: com/templates/com/weekmail.jinja:61 core/templates/core/file.jinja:38 #: core/templates/core/page.jinja:35 core/templates/core/poster_list.jinja:40 -#: core/templates/core/user_tools.jinja:41 core/views/user.py:188 +#: core/templates/core/user_tools.jinja:41 core/views/user.py:237 #: counter/templates/counter/cash_summary_list.jinja:53 #: counter/templates/counter/counter_list.jinja:17 #: counter/templates/counter/counter_list.jinja:33 @@ -619,7 +620,7 @@ msgstr "No" #: core/templates/core/user_account_detail.jinja:78 #: counter/templates/counter/cash_summary_list.jinja:34 #: counter/templates/counter/last_ops.jinja:14 -#: counter/templates/counter/last_ops.jinja:39 sas/views.py:285 +#: counter/templates/counter/last_ops.jinja:39 sas/views.py:353 #: stock/templates/stock/stock_shopping_list.jinja:25 #: stock/templates/stock/stock_shopping_list.jinja:54 #: trombi/templates/trombi/user_profile.jinja:40 @@ -655,7 +656,7 @@ msgid "Done" msgstr "Effectuées" #: accounting/templates/accounting/journal_details.jinja:41 -#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:855 +#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:1091 #: trombi/templates/trombi/comment.jinja:4 #: trombi/templates/trombi/comment.jinja:8 #: trombi/templates/trombi/user_tools.jinja:50 @@ -785,7 +786,7 @@ msgstr "Sauver" #: accounting/templates/accounting/refound_account.jinja:4 #: accounting/templates/accounting/refound_account.jinja:9 -#: accounting/views.py:758 +#: accounting/views.py:933 msgid "Refound account" msgstr "Remboursement de compte" @@ -806,95 +807,95 @@ msgstr "Types simplifiés" msgid "New simplified type" msgstr "Nouveau type simplifié" -#: accounting/views.py:208 accounting/views.py:215 accounting/views.py:465 +#: accounting/views.py:247 accounting/views.py:257 accounting/views.py:577 msgid "Journal" msgstr "Classeur" -#: accounting/views.py:220 +#: accounting/views.py:267 msgid "Statement by nature" msgstr "Bilan par nature" -#: accounting/views.py:225 +#: accounting/views.py:277 msgid "Statement by person" msgstr "Bilan par personne" -#: accounting/views.py:230 +#: accounting/views.py:287 msgid "Accounting statement" msgstr "Bilan comptable" -#: accounting/views.py:307 +#: accounting/views.py:391 msgid "Link this operation to the target account" msgstr "Lier cette opération au compte cible" -#: accounting/views.py:327 +#: accounting/views.py:421 msgid "The target must be set." msgstr "La cible doit être indiquée." -#: accounting/views.py:339 +#: accounting/views.py:436 msgid "The amount must be set." msgstr "Le montant doit être indiqué." -#: accounting/views.py:459 accounting/views.py:465 +#: accounting/views.py:571 accounting/views.py:577 msgid "Operation" msgstr "Opération" -#: accounting/views.py:475 +#: accounting/views.py:586 msgid "Financial proof: " msgstr "Justificatif de libellé : " -#: accounting/views.py:476 +#: accounting/views.py:589 #, python-format msgid "Club: %(club_name)s" msgstr "Club : %(club_name)s" -#: accounting/views.py:477 +#: accounting/views.py:594 #, python-format msgid "Label: %(op_label)s" msgstr "Libellé : %(op_label)s" -#: accounting/views.py:478 +#: accounting/views.py:597 #, python-format msgid "Date: %(date)s" msgstr "Date : %(date)s" -#: accounting/views.py:484 +#: accounting/views.py:605 #, python-format msgid "Amount: %(amount).2f €" msgstr "Montant : %(amount).2f €" -#: accounting/views.py:496 +#: accounting/views.py:620 msgid "Debtor" msgstr "Débiteur" -#: accounting/views.py:496 +#: accounting/views.py:620 msgid "Creditor" msgstr "Créditeur" -#: accounting/views.py:498 +#: accounting/views.py:625 msgid "Comment:" msgstr "Commentaire :" -#: accounting/views.py:517 +#: accounting/views.py:650 msgid "Signature:" msgstr "Signature :" -#: accounting/views.py:574 +#: accounting/views.py:718 msgid "General statement" msgstr "Bilan général" -#: accounting/views.py:577 +#: accounting/views.py:725 msgid "No label operations" msgstr "Opérations sans étiquette" -#: accounting/views.py:719 +#: accounting/views.py:889 msgid "Refound this account" msgstr "Rembourser ce compte" -#: club/models.py:49 +#: club/models.py:51 msgid "unix name" msgstr "nom unix" -#: club/models.py:53 +#: club/models.py:58 msgid "" "Enter a valid unix name. This value may contain only letters, numbers ./-/_ " "characters." @@ -902,98 +903,98 @@ msgstr "" "Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des " "lettres, des nombres, et les caractères ./-/_" -#: club/models.py:58 +#: club/models.py:63 msgid "A club with that unix name already exists." msgstr "Un club avec ce nom UNIX existe déjà." -#: club/models.py:61 +#: club/models.py:66 msgid "logo" msgstr "logo" -#: club/models.py:62 +#: club/models.py:68 msgid "is active" msgstr "actif" -#: club/models.py:63 +#: club/models.py:70 msgid "short description" msgstr "description courte" -#: club/models.py:64 core/models.py:200 +#: club/models.py:72 core/models.py:260 msgid "address" msgstr "Adresse" -#: club/models.py:70 core/models.py:161 +#: club/models.py:89 core/models.py:173 msgid "home" msgstr "home" -#: club/models.py:87 +#: club/models.py:111 msgid "You can not make loops in clubs" msgstr "Vous ne pouvez pas faire de boucles dans les clubs" -#: club/models.py:101 +#: club/models.py:125 msgid "A club with that unix_name already exists" msgstr "Un club avec ce nom UNIX existe déjà." -#: club/models.py:226 counter/models.py:464 counter/models.py:482 -#: eboutic/models.py:38 eboutic/models.py:72 election/models.py:154 -#: launderette/models.py:114 launderette/models.py:152 sas/models.py:185 -#: trombi/models.py:148 +#: club/models.py:260 counter/models.py:585 counter/models.py:608 +#: eboutic/models.py:40 eboutic/models.py:83 election/models.py:180 +#: launderette/models.py:134 launderette/models.py:190 sas/models.py:239 +#: trombi/models.py:203 msgid "user" msgstr "nom d'utilisateur" -#: club/models.py:230 core/models.py:180 election/models.py:153 -#: election/models.py:174 trombi/models.py:150 +#: club/models.py:271 core/models.py:224 election/models.py:178 +#: election/models.py:204 trombi/models.py:206 msgid "role" msgstr "rôle" -#: club/models.py:232 core/models.py:66 counter/models.py:114 -#: counter/models.py:141 election/models.py:14 election/models.py:99 -#: election/models.py:155 forum/models.py:55 forum/models.py:194 +#: club/models.py:276 core/models.py:73 counter/models.py:120 +#: counter/models.py:148 election/models.py:15 election/models.py:117 +#: election/models.py:182 forum/models.py:59 forum/models.py:231 msgid "description" msgstr "description" -#: club/models.py:237 +#: club/models.py:282 msgid "User must be subscriber to take part to a club" msgstr "L'utilisateur doit être cotisant pour faire partie d'un club" -#: club/models.py:239 +#: club/models.py:289 msgid "User is already member of that club" msgstr "L'utilisateur est déjà membre de ce club" -#: club/models.py:243 +#: club/models.py:298 msgid "past member" msgstr "Anciens membres" -#: club/models.py:271 club/models.py:330 +#: club/models.py:332 club/models.py:427 msgid "Email address" msgstr "Adresse email" -#: club/models.py:274 +#: club/models.py:340 msgid "Enter a valid address. Only the root of the address is needed." msgstr "" "Entrez une adresse valide. Seule la racine de l'adresse est nécessaire." -#: club/models.py:276 com/models.py:75 com/models.py:219 core/models.py:658 +#: club/models.py:344 com/models.py:79 com/models.py:260 core/models.py:806 msgid "is moderated" msgstr "est modéré" -#: club/models.py:277 com/models.py:76 com/models.py:220 +#: club/models.py:346 com/models.py:81 com/models.py:264 msgid "moderator" msgstr "modérateur" -#: club/models.py:328 club/templates/club/mailing.jinja:14 +#: club/models.py:415 club/templates/club/mailing.jinja:14 msgid "Mailing" msgstr "Liste de diffusion" -#: club/models.py:337 +#: club/models.py:434 msgid "At least user or email is required" msgstr "Au moins un utilisateur ou un email est nécessaire" -#: club/models.py:342 +#: club/models.py:442 msgid "This email is already suscribed in this mailing" msgstr "Cet email est déjà abonné à cette mailing" -#: club/models.py:366 club/templates/club/mailing.jinja:36 +#: club/models.py:471 club/templates/club/mailing.jinja:36 msgid "Unregistered user" msgstr "Désabonner un utilisateur" @@ -1047,8 +1048,8 @@ msgid "Mark as old" msgstr "Marquer comme ancien" #: club/templates/club/club_members.jinja:30 -#: core/templates/core/file_detail.jinja:19 core/views/forms.py:254 -#: launderette/views.py:182 trombi/templates/trombi/detail.jinja:19 +#: core/templates/core/file_detail.jinja:19 core/views/forms.py:334 +#: launderette/views.py:226 trombi/templates/trombi/detail.jinja:19 msgid "Add" msgstr "Ajouter" @@ -1066,8 +1067,8 @@ msgstr "Du" msgid "To" msgstr "Au" -#: club/templates/club/club_sellings.jinja:5 club/views.py:140 -#: club/views.py:374 counter/templates/counter/counter_main.jinja:19 +#: club/templates/club/club_sellings.jinja:5 club/views.py:194 +#: club/views.py:478 counter/templates/counter/counter_main.jinja:19 #: counter/templates/counter/last_ops.jinja:35 msgid "Sellings" msgstr "Ventes" @@ -1093,10 +1094,10 @@ msgstr "unités" msgid "Benefit: " msgstr "Bénéfice : " -#: club/templates/club/club_sellings.jinja:21 club/views.py:322 +#: club/templates/club/club_sellings.jinja:21 club/views.py:417 #: core/templates/core/user_account_detail.jinja:18 #: core/templates/core/user_account_detail.jinja:51 -#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:134 +#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:168 msgid "Counter" msgstr "Comptoir" @@ -1241,99 +1242,99 @@ msgstr "Aucune page n'existe pour ce club" msgid "Club stats" msgstr "Statistiques du club" -#: club/views.py:107 +#: club/views.py:138 msgid "Members" msgstr "Membres" -#: club/views.py:112 +#: club/views.py:147 msgid "Old members" msgstr "Anciens membres" -#: club/views.py:118 core/templates/core/page.jinja:33 +#: club/views.py:157 core/templates/core/page.jinja:33 msgid "History" msgstr "Historique" -#: club/views.py:124 core/templates/core/base.jinja:115 core/views/user.py:182 -#: sas/templates/sas/picture.jinja:95 trombi/views.py:55 +#: club/views.py:165 core/templates/core/base.jinja:115 core/views/user.py:228 +#: sas/templates/sas/picture.jinja:95 trombi/views.py:60 msgid "Tools" msgstr "Outils" -#: club/views.py:135 +#: club/views.py:185 msgid "Edit club page" msgstr "Éditer la page de club" -#: club/views.py:145 +#: club/views.py:201 msgid "Mailing list" msgstr "Listes de diffusion" -#: club/views.py:150 com/views.py:116 +#: club/views.py:210 com/views.py:141 msgid "Posters list" msgstr "Liste d'affiches" -#: club/views.py:156 counter/templates/counter/counter_list.jinja:21 +#: club/views.py:220 counter/templates/counter/counter_list.jinja:21 #: counter/templates/counter/counter_list.jinja:43 #: counter/templates/counter/counter_list.jinja:59 msgid "Props" msgstr "Propriétés" -#: club/views.py:251 core/views/forms.py:255 counter/views.py:91 -#: trombi/views.py:124 +#: club/views.py:322 core/views/forms.py:337 counter/views.py:113 +#: trombi/views.py:141 msgid "Select user" msgstr "Choisir un utilisateur" -#: club/views.py:298 sas/views.py:97 sas/views.py:150 sas/views.py:228 +#: club/views.py:381 sas/views.py:129 sas/views.py:195 sas/views.py:286 msgid "You do not have the permission to do that" msgstr "Vous n'avez pas la permission de faire cela" -#: club/views.py:320 counter/views.py:1097 +#: club/views.py:406 counter/views.py:1481 msgid "Begin date" msgstr "Date de début" -#: club/views.py:321 com/views.py:65 com/views.py:177 counter/views.py:1098 -#: election/views.py:135 subscription/views.py:47 +#: club/views.py:412 com/views.py:85 com/views.py:210 counter/views.py:1487 +#: election/views.py:190 subscription/views.py:51 msgid "End date" msgstr "Date de fin" -#: club/views.py:336 core/templates/core/user_stats.jinja:27 -#: counter/views.py:1188 +#: club/views.py:435 core/templates/core/user_stats.jinja:27 +#: counter/views.py:1635 msgid "Product" msgstr "Produit" -#: com/models.py:47 +#: com/models.py:46 msgid "alert message" msgstr "message d'alerte" -#: com/models.py:48 +#: com/models.py:47 msgid "info message" msgstr "message d'info" -#: com/models.py:49 +#: com/models.py:48 msgid "index page" msgstr "page d'accueil" -#: com/models.py:50 +#: com/models.py:49 msgid "weekmail destinations" msgstr "destinataires du weekmail" -#: com/models.py:60 +#: com/models.py:59 msgid "Notice" msgstr "Information" -#: com/models.py:61 +#: com/models.py:60 msgid "Event" msgstr "Événement" -#: com/models.py:62 +#: com/models.py:61 msgid "Weekly" msgstr "Hebdomadaire" -#: com/models.py:63 +#: com/models.py:62 msgid "Call" msgstr "Appel" -#: com/models.py:69 com/models.py:133 com/models.py:184 election/models.py:13 -#: election/models.py:98 election/models.py:134 forum/models.py:198 -#: forum/models.py:246 +#: com/models.py:69 com/models.py:155 com/models.py:213 election/models.py:14 +#: election/models.py:116 election/models.py:156 forum/models.py:242 +#: forum/models.py:296 msgid "title" msgstr "titre" @@ -1341,73 +1342,73 @@ msgstr "titre" msgid "summary" msgstr "résumé" -#: com/models.py:71 com/models.py:185 trombi/models.py:135 +#: com/models.py:71 com/models.py:214 trombi/models.py:188 msgid "content" msgstr "contenu" -#: com/models.py:72 core/models.py:1160 launderette/models.py:86 -#: launderette/models.py:112 launderette/models.py:149 stock/models.py:59 -#: stock/models.py:98 +#: com/models.py:73 core/models.py:1385 launderette/models.py:95 +#: launderette/models.py:130 launderette/models.py:182 stock/models.py:77 +#: stock/models.py:131 msgid "type" msgstr "type" -#: com/models.py:74 com/models.py:186 trombi/models.py:133 +#: com/models.py:77 com/models.py:216 trombi/models.py:183 msgid "author" msgstr "auteur" -#: com/models.py:121 +#: com/models.py:142 msgid "news_date" msgstr "date de la nouvelle" -#: com/models.py:122 +#: com/models.py:143 msgid "start_date" msgstr "date de début" -#: com/models.py:123 +#: com/models.py:144 msgid "end_date" msgstr "date de fin" -#: com/models.py:134 +#: com/models.py:156 msgid "intro" msgstr "intro" -#: com/models.py:135 +#: com/models.py:157 msgid "joke" msgstr "blague" -#: com/models.py:136 +#: com/models.py:158 msgid "protip" msgstr "astuce" -#: com/models.py:137 +#: com/models.py:159 msgid "conclusion" msgstr "conclusion" -#: com/models.py:138 +#: com/models.py:160 msgid "sent" msgstr "envoyé" -#: com/models.py:183 +#: com/models.py:211 msgid "weekmail" msgstr "weekmail" -#: com/models.py:188 +#: com/models.py:221 msgid "rank" msgstr "rang" -#: com/models.py:213 core/models.py:648 core/models.py:664 +#: com/models.py:250 core/models.py:776 core/models.py:820 msgid "file" msgstr "fichier" -#: com/models.py:218 +#: com/models.py:258 msgid "display time" msgstr "temps d'affichage" -#: com/models.py:231 +#: com/models.py:285 msgid "Begin date should be before end date" msgstr "La date de début doit être avant celle de fin" -#: com/templates/com/mailing_admin.jinja:4 com/views.py:111 +#: com/templates/com/mailing_admin.jinja:4 com/views.py:134 #: core/templates/core/user_tools.jinja:89 msgid "Mailing lists administration" msgstr "Administration des mailing listes" @@ -1477,7 +1478,7 @@ msgstr "Informations affichées" #: com/templates/com/news_admin_list.jinja:248 #: com/templates/com/news_admin_list.jinja:285 #: launderette/templates/launderette/launderette_admin.jinja:42 -#: launderette/views.py:184 +#: launderette/views.py:233 msgid "Type" msgstr "Type" @@ -1490,9 +1491,9 @@ msgstr "Type" #: com/templates/com/news_admin_list.jinja:249 #: com/templates/com/news_admin_list.jinja:286 #: com/templates/com/weekmail.jinja:19 com/templates/com/weekmail.jinja:48 -#: core/templates/core/base.jinja:307 forum/templates/forum/forum.jinja:29 +#: core/templates/core/base.jinja:306 forum/templates/forum/forum.jinja:29 #: forum/templates/forum/forum.jinja:48 forum/templates/forum/main.jinja:26 -#: forum/views.py:175 +#: forum/views.py:192 msgid "Title" msgstr "Titre" @@ -1723,7 +1724,7 @@ msgid "Slideshow" msgstr "Diaporama" #: com/templates/com/weekmail.jinja:5 com/templates/com/weekmail.jinja:9 -#: com/views.py:86 core/templates/core/user_tools.jinja:81 +#: com/views.py:108 core/templates/core/user_tools.jinja:81 msgid "Weekmail" msgstr "Weekmail" @@ -1766,7 +1767,7 @@ msgstr "Supprimer du Weekmail" #: com/templates/com/weekmail_preview.jinja:9 #: core/templates/core/user_account_detail.jinja:11 -#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:182 +#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:226 #: stock/templates/stock/shopping_list_items.jinja:9 #: trombi/templates/trombi/comment_moderation.jinja:10 #: trombi/templates/trombi/export.jinja:9 @@ -1810,90 +1811,90 @@ msgstr "Astuce" msgid "Final word" msgstr "Le mot de la fin" -#: com/views.py:63 com/views.py:176 election/views.py:133 -#: subscription/views.py:44 +#: com/views.py:78 com/views.py:204 election/views.py:185 +#: subscription/views.py:45 msgid "Start date" msgstr "Date de début" -#: com/views.py:79 +#: com/views.py:103 msgid "Communication administration" msgstr "Administration de la communication" -#: com/views.py:91 core/templates/core/user_tools.jinja:82 +#: com/views.py:114 core/templates/core/user_tools.jinja:82 msgid "Weekmail destinations" msgstr "Destinataires du Weekmail" -#: com/views.py:96 +#: com/views.py:118 msgid "Index page" msgstr "Page d'accueil" -#: com/views.py:101 +#: com/views.py:121 msgid "Info message" msgstr "Message d'info" -#: com/views.py:106 +#: com/views.py:127 msgid "Alert message" msgstr "Message d'alerte" -#: com/views.py:121 +#: com/views.py:148 msgid "Screens list" msgstr "Liste d'écrans" -#: com/views.py:178 +#: com/views.py:215 msgid "Until" msgstr "Jusqu'à" -#: com/views.py:179 +#: com/views.py:217 msgid "Automoderation" msgstr "Automodération" -#: com/views.py:185 com/views.py:187 com/views.py:191 +#: com/views.py:224 com/views.py:228 com/views.py:238 msgid "This field is required." msgstr "Ce champ est obligatoire." -#: com/views.py:189 +#: com/views.py:234 msgid "You crazy? You can not finish an event before starting it." msgstr "T'es fou? Un événement ne peut pas finir avant même de commencer." -#: com/views.py:371 +#: com/views.py:463 msgid "Delete and save to regenerate" msgstr "Supprimer et sauver pour regénérer" -#: com/views.py:379 +#: com/views.py:472 msgid "Weekmail of the " msgstr "Weekmail du " -#: com/views.py:459 +#: com/views.py:574 msgid "" "You must be a board member of the selected club to post in the Weekmail." msgstr "" "Vous devez êtres un membre du bureau du club sélectionné pour poster dans le " "Weekmail." -#: core/models.py:62 +#: core/models.py:69 msgid "meta group status" msgstr "status du meta-groupe" -#: core/models.py:64 +#: core/models.py:71 msgid "Whether a group is a meta group or not" msgstr "Si un groupe est un meta-groupe ou pas" -#: core/models.py:101 +#: core/models.py:108 #, python-format msgid "%(value)s is not a valid promo (between 0 and %(end)s)" msgstr "%(value)s n'est pas une promo valide (doit être entre 0 et %(end)s)" -#: core/models.py:118 +#: core/models.py:126 msgid "username" msgstr "nom d'utilisateur" -#: core/models.py:121 +#: core/models.py:130 msgid "Required. 254 characters or fewer. Letters, digits and ./+/-/_ only." msgstr "" "Requis. Pas plus de 254 caractères. Uniquement des lettres, numéros, et ./" "+/-/_" -#: core/models.py:125 +#: core/models.py:136 msgid "" "Enter a valid username. This value may contain only letters, numbers and ./" "+/-/_ characters." @@ -1901,43 +1902,43 @@ msgstr "" "Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, et ./" "+/-/_" -#: core/models.py:130 +#: core/models.py:142 msgid "A user with that username already exists." msgstr "Un utilisateur de ce nom existe déjà" -#: core/models.py:133 +#: core/models.py:144 msgid "first name" msgstr "Prénom" -#: core/models.py:134 +#: core/models.py:145 msgid "last name" msgstr "Nom" -#: core/models.py:135 +#: core/models.py:146 msgid "email address" msgstr "adresse email" -#: core/models.py:136 +#: core/models.py:147 msgid "date of birth" msgstr "date de naissance" -#: core/models.py:137 +#: core/models.py:148 msgid "nick name" msgstr "surnom" -#: core/models.py:139 +#: core/models.py:150 msgid "staff status" msgstr "status \"staff\"" -#: core/models.py:141 +#: core/models.py:152 msgid "Designates whether the user can log into this admin site." msgstr "Est-ce que l'utilisateur peut se logger à la partie admin du site." -#: core/models.py:144 +#: core/models.py:155 msgid "active" msgstr "actif" -#: core/models.py:147 +#: core/models.py:158 msgid "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." @@ -1945,159 +1946,159 @@ msgstr "" "Est-ce que l'utilisateur doit être traité comme actif. Déselectionnez au " "lieu de supprimer les comptes." -#: core/models.py:151 +#: core/models.py:162 msgid "date joined" msgstr "date d'inscription" -#: core/models.py:152 +#: core/models.py:163 msgid "last update" msgstr "dernière mise à jour" -#: core/models.py:154 +#: core/models.py:165 msgid "superuser" msgstr "super-utilisateur" -#: core/models.py:157 +#: core/models.py:167 msgid "Designates whether this user is a superuser. " msgstr "Est-ce que l'utilisateur est super-utilisateur." -#: core/models.py:163 +#: core/models.py:181 msgid "profile" msgstr "profil" -#: core/models.py:165 +#: core/models.py:189 msgid "avatar" msgstr "avatar" -#: core/models.py:167 +#: core/models.py:197 msgid "scrub" msgstr "blouse" -#: core/models.py:169 +#: core/models.py:203 msgid "sex" msgstr "sexe" -#: core/models.py:169 matmat/views.py:73 +#: core/models.py:205 matmat/views.py:73 msgid "Man" msgstr "Homme" -#: core/models.py:169 matmat/views.py:74 +#: core/models.py:205 matmat/views.py:73 msgid "Woman" msgstr "Femme" -#: core/models.py:170 +#: core/models.py:209 msgid "tshirt size" msgstr "taille de tshirt" -#: core/models.py:171 +#: core/models.py:212 msgid "-" msgstr "-" -#: core/models.py:172 +#: core/models.py:213 msgid "XS" msgstr "XS" -#: core/models.py:173 core/templates/core/base.jinja:320 +#: core/models.py:214 core/templates/core/base.jinja:319 msgid "S" msgstr "S" -#: core/models.py:174 +#: core/models.py:215 msgid "M" msgstr "M" -#: core/models.py:175 +#: core/models.py:216 msgid "L" msgstr "L" -#: core/models.py:176 +#: core/models.py:217 msgid "XL" msgstr "XL" -#: core/models.py:177 +#: core/models.py:218 msgid "XXL" msgstr "XXL" -#: core/models.py:178 +#: core/models.py:219 msgid "XXXL" msgstr "XXXL" -#: core/models.py:181 +#: core/models.py:227 msgid "Student" msgstr "Étudiant" -#: core/models.py:182 +#: core/models.py:228 msgid "Administrative agent" msgstr "Personnel administratif" -#: core/models.py:183 +#: core/models.py:229 msgid "Teacher" msgstr "Enseignant" -#: core/models.py:184 +#: core/models.py:230 msgid "Agent" msgstr "Personnel" -#: core/models.py:185 +#: core/models.py:231 msgid "Doctor" msgstr "Doctorant" -#: core/models.py:186 +#: core/models.py:232 msgid "Former student" msgstr "Ancien étudiant" -#: core/models.py:187 +#: core/models.py:233 msgid "Service" msgstr "Service" -#: core/models.py:189 +#: core/models.py:239 msgid "department" msgstr "département" -#: core/models.py:191 +#: core/models.py:246 msgid "dpt option" msgstr "Filière" -#: core/models.py:192 +#: core/models.py:248 msgid "semester" msgstr "semestre" -#: core/models.py:193 +#: core/models.py:249 msgid "quote" msgstr "citation" -#: core/models.py:194 +#: core/models.py:250 msgid "school" msgstr "école" -#: core/models.py:195 +#: core/models.py:252 msgid "promo" msgstr "promo" -#: core/models.py:196 +#: core/models.py:255 msgid "forum signature" msgstr "signature du forum" -#: core/models.py:197 +#: core/models.py:257 msgid "second email address" msgstr "adresse email secondaire" -#: core/models.py:199 +#: core/models.py:259 msgid "parent phone" msgstr "téléphone des parents" -#: core/models.py:201 +#: core/models.py:262 msgid "parent address" msgstr "adresse des parents" -#: core/models.py:202 +#: core/models.py:265 msgid "is subscriber viewable" msgstr "profil visible par les cotisants" -#: core/models.py:369 +#: core/models.py:476 msgid "A user with that username already exists" msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" -#: core/models.py:494 core/templates/core/macros.jinja:72 +#: core/models.py:614 core/templates/core/macros.jinja:72 #: core/templates/core/macros.jinja:74 core/templates/core/macros.jinja:75 #: core/templates/core/user_detail.jinja:79 #: core/templates/core/user_detail.jinja:80 @@ -2115,109 +2116,109 @@ msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" msgid "Profile" msgstr "Profil" -#: core/models.py:604 +#: core/models.py:734 msgid "Visitor" msgstr "Visiteur" -#: core/models.py:610 +#: core/models.py:740 msgid "do you want to receive the weekmail" msgstr "voulez-vous recevoir le Weekmail" -#: core/models.py:614 +#: core/models.py:742 msgid "show your stats to others" msgstr "montrez vos statistiques aux autres" -#: core/models.py:618 +#: core/models.py:744 msgid "get a notification for every click" msgstr "recevez une notification pour chaque click" -#: core/models.py:622 +#: core/models.py:747 msgid "get a notification for every refilling" msgstr "recevez une notification pour chaque rechargement" -#: core/models.py:646 +#: core/models.py:770 msgid "file name" msgstr "nom du fichier" -#: core/models.py:647 core/models.py:919 +#: core/models.py:772 core/models.py:1111 msgid "parent" msgstr "parent" -#: core/models.py:649 +#: core/models.py:783 msgid "compressed file" msgstr "version allégée" -#: core/models.py:650 +#: core/models.py:790 msgid "thumbnail" msgstr "miniature" -#: core/models.py:651 core/models.py:659 +#: core/models.py:795 core/models.py:810 msgid "owner" msgstr "propriétaire" -#: core/models.py:652 core/models.py:927 core/views/files.py:149 +#: core/models.py:797 core/models.py:1130 core/views/files.py:193 msgid "edit group" msgstr "groupe d'édition" -#: core/models.py:653 core/models.py:928 core/views/files.py:150 +#: core/models.py:800 core/models.py:1133 core/views/files.py:196 msgid "view group" msgstr "groupe de vue" -#: core/models.py:654 +#: core/models.py:802 msgid "is folder" msgstr "est un dossier" -#: core/models.py:655 +#: core/models.py:803 msgid "mime type" msgstr "type mime" -#: core/models.py:656 +#: core/models.py:804 msgid "size" msgstr "taille" -#: core/models.py:660 +#: core/models.py:814 msgid "asked for removal" msgstr "retrait demandé" -#: core/models.py:661 +#: core/models.py:816 msgid "is in the SAS" msgstr "est dans le SAS" -#: core/models.py:700 +#: core/models.py:858 msgid "Character '/' not authorized in name" msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" -#: core/models.py:703 core/models.py:708 +#: core/models.py:860 core/models.py:864 msgid "Loop in folder tree" msgstr "Boucle dans l'arborescence des dossiers" -#: core/models.py:712 +#: core/models.py:867 msgid "You can not make a file be a children of a non folder file" msgstr "" "Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " "un dossier" -#: core/models.py:716 +#: core/models.py:878 msgid "Duplicate file" msgstr "Un fichier de ce nom existe déjà" -#: core/models.py:730 +#: core/models.py:895 msgid "You must provide a file" msgstr "Vous devez fournir un fichier" -#: core/models.py:857 +#: core/models.py:1035 msgid "Folder: " msgstr "Dossier : " -#: core/models.py:859 +#: core/models.py:1037 msgid "File: " msgstr "Fichier : " -#: core/models.py:911 +#: core/models.py:1094 msgid "page unix name" msgstr "nom unix de la page" -#: core/models.py:915 +#: core/models.py:1100 msgid "" "Enter a valid page name. This value may contain only unaccented letters, " "numbers and ./+/-/_ characters." @@ -2225,51 +2226,51 @@ msgstr "" "Entrez un nom de page correct. Uniquement des lettres non accentuées, " "numéros, et ./+/-/_" -#: core/models.py:922 +#: core/models.py:1118 msgid "page name" msgstr "nom de la page" -#: core/models.py:925 +#: core/models.py:1126 msgid "owner group" msgstr "groupe propriétaire" -#: core/models.py:929 +#: core/models.py:1138 msgid "lock user" msgstr "utilisateur bloquant" -#: core/models.py:930 +#: core/models.py:1144 msgid "lock_timeout" msgstr "décompte du déblocage" -#: core/models.py:957 +#: core/models.py:1175 msgid "Duplicate page" msgstr "Une page de ce nom existe déjà" -#: core/models.py:963 +#: core/models.py:1178 msgid "Loop in page tree" msgstr "Boucle dans l'arborescence des pages" -#: core/models.py:1114 +#: core/models.py:1338 msgid "revision" msgstr "révision" -#: core/models.py:1115 +#: core/models.py:1339 msgid "page title" msgstr "titre de la page" -#: core/models.py:1116 +#: core/models.py:1340 msgid "page content" msgstr "contenu de la page" -#: core/models.py:1158 +#: core/models.py:1382 msgid "url" msgstr "url" -#: core/models.py:1159 +#: core/models.py:1383 msgid "param" msgstr "param" -#: core/models.py:1162 +#: core/models.py:1388 msgid "viewed" msgstr "vue" @@ -2281,6 +2282,10 @@ msgstr "403, Non autorisé" msgid "404, Not Found" msgstr "404. Non trouvé" +#: core/templates/core/500.jinja:8 +msgid "500, Server Error" +msgstr "500, Erreur Serveur" + #: core/templates/core/base.jinja:5 core/templates/core/index.jinja:4 msgid "Welcome!" msgstr "Bienvenue!" @@ -2327,7 +2332,7 @@ msgid "Main" msgstr "Accueil" #: core/templates/core/base.jinja:152 core/templates/core/search.jinja:18 -#: core/views/user.py:199 counter/templates/counter/stats.jinja:17 +#: core/views/user.py:256 counter/templates/counter/stats.jinja:17 msgid "Clubs" msgstr "Clubs" @@ -2360,7 +2365,7 @@ msgid "Services" msgstr "Services" #: core/templates/core/base.jinja:158 core/templates/core/file.jinja:20 -#: core/views/files.py:75 +#: core/views/files.py:86 msgid "Files" msgstr "Fichiers" @@ -2372,67 +2377,67 @@ msgstr "Partenaires" msgid "Help" msgstr "Aide" -#: core/templates/core/base.jinja:200 +#: core/templates/core/base.jinja:199 msgid "Contacts" msgstr "Contacts" -#: core/templates/core/base.jinja:201 +#: core/templates/core/base.jinja:200 msgid "Legal notices" msgstr "Mentions légales" -#: core/templates/core/base.jinja:202 +#: core/templates/core/base.jinja:201 msgid "Intellectual property" msgstr "Propriété intellectuelle" -#: core/templates/core/base.jinja:203 +#: core/templates/core/base.jinja:202 msgid "Help & Documentation" msgstr "Aide & Documentation" -#: core/templates/core/base.jinja:204 +#: core/templates/core/base.jinja:203 msgid "R&D" msgstr "R&D" -#: core/templates/core/base.jinja:205 +#: core/templates/core/base.jinja:204 msgid "Former website" msgstr "Ancien site" -#: core/templates/core/base.jinja:207 +#: core/templates/core/base.jinja:206 msgid "Site made by good people" msgstr "Site réalisé par des gens bons" -#: core/templates/core/base.jinja:304 +#: core/templates/core/base.jinja:303 msgid "https://path/to/image.gif" msgstr "https://chemin/vers/image.gif" -#: core/templates/core/base.jinja:306 +#: core/templates/core/base.jinja:305 msgid "alternative text" msgstr "texte alternatif" -#: core/templates/core/base.jinja:316 +#: core/templates/core/base.jinja:315 msgid "Image" msgstr "Image" -#: core/templates/core/base.jinja:317 +#: core/templates/core/base.jinja:316 msgid "Link" msgstr "Lien" -#: core/templates/core/base.jinja:318 +#: core/templates/core/base.jinja:317 msgid "sup" msgstr "exp" -#: core/templates/core/base.jinja:319 +#: core/templates/core/base.jinja:318 msgid "sub" msgstr "ind" -#: core/templates/core/base.jinja:321 +#: core/templates/core/base.jinja:320 msgid "U" msgstr "S" -#: core/templates/core/base.jinja:322 +#: core/templates/core/base.jinja:321 msgid "I" msgstr "I" -#: core/templates/core/base.jinja:323 +#: core/templates/core/base.jinja:322 msgid "B" msgstr "G" @@ -2620,7 +2625,7 @@ msgstr "Cotisant jusqu'au %(subscription_end)s" msgid "Account number: " msgstr "Numero de compte : " -#: core/templates/core/macros.jinja:88 launderette/models.py:155 +#: core/templates/core/macros.jinja:88 launderette/models.py:193 msgid "Slot" msgstr "Créneau" @@ -2893,7 +2898,7 @@ msgid "Eboutic invoices" msgstr "Facture eboutic" #: core/templates/core/user_account.jinja:57 -#: core/templates/core/user_tools.jinja:35 counter/views.py:601 +#: core/templates/core/user_tools.jinja:35 counter/views.py:745 msgid "Etickets" msgstr "Etickets" @@ -3049,8 +3054,8 @@ msgstr "Parrains de %(user_name)s" msgid "Show family picture" msgstr "Voir une image de la famille" -#: core/templates/core/user_godfathers.jinja:12 core/views/user.py:171 -#: core/views/user.py:395 +#: core/templates/core/user_godfathers.jinja:12 core/views/user.py:214 +#: core/views/user.py:486 msgid "Godfathers" msgstr "Parrains" @@ -3063,7 +3068,7 @@ msgstr "Voir l'arbre des ancêtres" msgid "No godfathers" msgstr "Pas de parrains" -#: core/templates/core/user_godfathers.jinja:25 core/views/user.py:393 +#: core/templates/core/user_godfathers.jinja:25 core/views/user.py:484 msgid "Godchildren" msgstr "Fillots" @@ -3119,11 +3124,11 @@ msgid "%(user_name)s's pictures" msgstr "Photos de %(user_name)s" #: core/templates/core/user_preferences.jinja:4 -#: core/templates/core/user_preferences.jinja:8 core/views/user.py:193 +#: core/templates/core/user_preferences.jinja:8 core/views/user.py:246 msgid "Preferences" msgstr "Préférences" -#: core/templates/core/user_preferences.jinja:14 trombi/views.py:48 +#: core/templates/core/user_preferences.jinja:14 trombi/views.py:55 msgid "Trombi" msgstr "Trombi" @@ -3166,7 +3171,7 @@ msgstr "Outils utilisateurs" msgid "Sith management" msgstr "Gestion de Sith" -#: core/templates/core/user_tools.jinja:14 core/views/user.py:205 +#: core/templates/core/user_tools.jinja:14 core/views/user.py:266 msgid "Groups" msgstr "Groupes" @@ -3184,8 +3189,8 @@ msgstr "Cotisations" msgid "Subscription stats" msgstr "Statistiques de cotisation" -#: core/templates/core/user_tools.jinja:27 counter/views.py:571 -#: counter/views.py:737 +#: core/templates/core/user_tools.jinja:27 counter/views.py:715 +#: counter/views.py:923 msgid "Counters" msgstr "Comptoirs" @@ -3202,16 +3207,16 @@ msgid "Product types management" msgstr "Gestion des types de produit" #: core/templates/core/user_tools.jinja:33 -#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:591 +#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:735 msgid "Cash register summaries" msgstr "Relevés de caisse" #: core/templates/core/user_tools.jinja:34 -#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:596 +#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:740 msgid "Invoices call" msgstr "Appels à facture" -#: core/templates/core/user_tools.jinja:42 core/views/user.py:215 +#: core/templates/core/user_tools.jinja:42 core/views/user.py:286 #: counter/templates/counter/counter_list.jinja:18 #: counter/templates/counter/counter_list.jinja:34 #: counter/templates/counter/counter_list.jinja:56 @@ -3302,42 +3307,42 @@ msgstr "Convertir de la syntaxe dokuwiki/BBcode vers Markdown" msgid "Trombi tools" msgstr "Outils Trombi" -#: core/views/files.py:74 +#: core/views/files.py:82 msgid "Add a new folder" msgstr "Ajouter un nouveau dossier" -#: core/views/files.py:87 +#: core/views/files.py:103 #, python-format msgid "Error creating folder %(folder_name)s: %(msg)s" msgstr "Erreur de création du dossier %(folder_name)s : %(msg)s" -#: core/views/files.py:97 core/views/forms.py:229 core/views/forms.py:233 -#: sas/views.py:70 +#: core/views/files.py:123 core/views/forms.py:302 core/views/forms.py:309 +#: sas/views.py:93 #, python-format msgid "Error uploading file %(file_name)s: %(msg)s" msgstr "Erreur d'envoi du fichier %(file_name)s : %(msg)s" -#: core/views/files.py:151 sas/views.py:288 +#: core/views/files.py:198 sas/views.py:356 msgid "Apply rights recursively" msgstr "Appliquer les droits récursivement" -#: core/views/forms.py:89 +#: core/views/forms.py:101 msgid "Help on the syntax" msgstr "Aide sur la syntaxe" -#: core/views/forms.py:103 core/views/forms.py:106 +#: core/views/forms.py:118 core/views/forms.py:126 msgid "Choose file" msgstr "Choisir un fichier" -#: core/views/forms.py:118 core/views/forms.py:121 +#: core/views/forms.py:142 core/views/forms.py:150 msgid "Choose user" msgstr "Choisir un utilisateur" -#: core/views/forms.py:145 +#: core/views/forms.py:182 msgid "Username, email, or account number" msgstr "Nom d'utilisateur, email, ou numéro de compte AE" -#: core/views/forms.py:187 +#: core/views/forms.py:248 msgid "" "Profile: you need to be visible on the picture, in order to be recognized (e." "g. by the barmen)" @@ -3345,199 +3350,199 @@ msgstr "" "Photo de profil: vous devez être visible sur la photo afin d'être reconnu " "(par exemple par les barmen)" -#: core/views/forms.py:188 +#: core/views/forms.py:250 msgid "Avatar: used on the forum" msgstr "Avatar : utilisé sur le forum" -#: core/views/forms.py:189 +#: core/views/forms.py:251 msgid "Scrub: let other know how your scrub looks like!" msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !" -#: core/views/forms.py:234 +#: core/views/forms.py:313 msgid "Bad image format, only jpeg, png, and gif are accepted" msgstr "Mauvais format d'image, seuls les jpeg, png, et gif sont acceptés" -#: core/views/forms.py:254 +#: core/views/forms.py:333 msgid "Godfather" msgstr "Parrain" -#: core/views/forms.py:254 +#: core/views/forms.py:333 msgid "Godchild" msgstr "Fillot" -#: core/views/forms.py:265 core/views/forms.py:278 election/models.py:22 -#: election/views.py:128 +#: core/views/forms.py:350 core/views/forms.py:368 election/models.py:24 +#: election/views.py:167 msgid "edit groups" msgstr "groupe d'édition" -#: core/views/forms.py:266 core/views/forms.py:279 election/models.py:26 -#: election/views.py:129 +#: core/views/forms.py:353 core/views/forms.py:371 election/models.py:31 +#: election/views.py:170 msgid "view groups" msgstr "groupe de vue" -#: core/views/user.py:176 trombi/templates/trombi/export.jinja:25 +#: core/views/user.py:223 trombi/templates/trombi/export.jinja:25 #: trombi/templates/trombi/user_profile.jinja:11 msgid "Pictures" msgstr "Photos" -#: core/views/user.py:397 +#: core/views/user.py:488 msgid "Family" msgstr "Famille" -#: core/views/user.py:480 +#: core/views/user.py:630 msgid "User already has a profile picture" msgstr "L'utilisateur a déjà une photo de profil" -#: counter/migrations/0013_customer_recorded_products.py:23 +#: counter/migrations/0013_customer_recorded_products.py:26 msgid "Ecocup regularization" msgstr "Régularization des ecocups" -#: counter/models.py:52 +#: counter/models.py:53 msgid "account id" msgstr "numéro de compte" -#: counter/models.py:54 +#: counter/models.py:55 msgid "recorded product" msgstr "produits consignés" -#: counter/models.py:57 +#: counter/models.py:58 msgid "customer" msgstr "client" -#: counter/models.py:58 +#: counter/models.py:59 msgid "customers" msgstr "clients" -#: counter/models.py:90 counter/templates/counter/counter_click.jinja:48 +#: counter/models.py:95 counter/templates/counter/counter_click.jinja:48 #: counter/templates/counter/counter_click.jinja:82 msgid "Not enough money" msgstr "Solde insuffisant" -#: counter/models.py:119 counter/models.py:142 +#: counter/models.py:125 counter/models.py:152 msgid "product type" msgstr "type du produit" -#: counter/models.py:145 +#: counter/models.py:158 msgid "purchase price" msgstr "prix d'achat" -#: counter/models.py:146 +#: counter/models.py:159 msgid "selling price" msgstr "prix de vente" -#: counter/models.py:147 +#: counter/models.py:160 msgid "special selling price" msgstr "prix de vente spécial" -#: counter/models.py:148 +#: counter/models.py:162 msgid "icon" msgstr "icône" -#: counter/models.py:150 +#: counter/models.py:165 msgid "limit age" msgstr "âge limite" -#: counter/models.py:151 +#: counter/models.py:166 msgid "tray price" msgstr "prix plateau" -#: counter/models.py:152 +#: counter/models.py:170 msgid "parent product" msgstr "produit parent" -#: counter/models.py:154 +#: counter/models.py:176 msgid "buying groups" msgstr "groupe d'achat" -#: counter/models.py:155 election/models.py:37 +#: counter/models.py:178 election/models.py:52 msgid "archived" msgstr "archivé" -#: counter/models.py:158 counter/models.py:567 +#: counter/models.py:181 counter/models.py:700 msgid "product" msgstr "produit" -#: counter/models.py:186 +#: counter/models.py:212 msgid "products" msgstr "produits" -#: counter/models.py:187 +#: counter/models.py:215 msgid "counter type" msgstr "type de comptoir" -#: counter/models.py:189 +#: counter/models.py:217 msgid "Bar" msgstr "Bar" -#: counter/models.py:189 +#: counter/models.py:217 msgid "Office" msgstr "Bureau" -#: counter/models.py:189 counter/templates/counter/counter_list.jinja:11 +#: counter/models.py:217 counter/templates/counter/counter_list.jinja:11 #: eboutic/templates/eboutic/eboutic_main.jinja:4 #: eboutic/templates/eboutic/eboutic_main.jinja:24 #: eboutic/templates/eboutic/eboutic_makecommand.jinja:8 #: eboutic/templates/eboutic/eboutic_payment_result.jinja:4 -#: sith/settings.py:377 sith/settings.py:385 +#: sith/settings.py:376 sith/settings.py:384 msgid "Eboutic" msgstr "Eboutic" -#: counter/models.py:190 +#: counter/models.py:220 msgid "sellers" msgstr "vendeurs" -#: counter/models.py:193 launderette/models.py:151 +#: counter/models.py:228 launderette/models.py:188 msgid "token" msgstr "jeton" -#: counter/models.py:196 counter/models.py:465 counter/models.py:483 -#: launderette/models.py:39 stock/models.py:39 +#: counter/models.py:231 counter/models.py:587 counter/models.py:611 +#: launderette/models.py:40 stock/models.py:42 msgid "counter" msgstr "comptoir" -#: counter/models.py:304 +#: counter/models.py:359 msgid "bank" msgstr "banque" -#: counter/models.py:306 counter/models.py:354 +#: counter/models.py:361 counter/models.py:451 msgid "is validated" msgstr "est validé" -#: counter/models.py:309 +#: counter/models.py:364 msgid "refilling" msgstr "rechargement" -#: counter/models.py:347 eboutic/models.py:129 +#: counter/models.py:428 eboutic/models.py:146 msgid "unit price" msgstr "prix unitaire" -#: counter/models.py:348 counter/models.py:556 eboutic/models.py:130 +#: counter/models.py:429 counter/models.py:687 eboutic/models.py:147 msgid "quantity" msgstr "quantité" -#: counter/models.py:353 +#: counter/models.py:448 msgid "Sith account" msgstr "Compte utilisateur" -#: counter/models.py:353 sith/settings.py:370 sith/settings.py:375 -#: sith/settings.py:397 +#: counter/models.py:448 sith/settings.py:369 sith/settings.py:374 +#: sith/settings.py:392 msgid "Credit card" msgstr "Carte bancaire" -#: counter/models.py:357 +#: counter/models.py:454 msgid "selling" msgstr "vente" -#: counter/models.py:376 +#: counter/models.py:477 msgid "Unknown event" msgstr "Événement inconnu" -#: counter/models.py:377 +#: counter/models.py:478 #, python-format msgid "Eticket bought for the event %(event)s" msgstr "Eticket acheté pour l'événement %(event)s" -#: counter/models.py:379 counter/models.py:391 +#: counter/models.py:480 counter/models.py:494 #, python-format msgid "" "You bought an eticket for the event %(event)s.\n" @@ -3546,51 +3551,51 @@ msgstr "" "Vous avez acheté un Eticket pour l'événement %(event)s.\n" "Vous pouvez le télécharger sur cette page: %(url)s" -#: counter/models.py:468 +#: counter/models.py:591 msgid "last activity date" msgstr "dernière activité" -#: counter/models.py:471 +#: counter/models.py:594 msgid "permanency" msgstr "permanence" -#: counter/models.py:486 +#: counter/models.py:615 msgid "emptied" msgstr "coffre vidée" -#: counter/models.py:489 +#: counter/models.py:618 msgid "cash register summary" msgstr "relevé de caisse" -#: counter/models.py:554 +#: counter/models.py:684 msgid "cash summary" msgstr "relevé" -#: counter/models.py:555 +#: counter/models.py:686 msgid "value" msgstr "valeur" -#: counter/models.py:557 +#: counter/models.py:688 msgid "check" msgstr "chèque" -#: counter/models.py:560 +#: counter/models.py:691 msgid "cash register summary item" msgstr "élément de relevé de caisse" -#: counter/models.py:568 +#: counter/models.py:703 msgid "banner" msgstr "bannière" -#: counter/models.py:569 +#: counter/models.py:705 msgid "event date" msgstr "date de l'événement" -#: counter/models.py:570 +#: counter/models.py:707 msgid "event title" msgstr "titre de l'événement" -#: counter/models.py:571 +#: counter/models.py:709 msgid "secret" msgstr "secret" @@ -3642,7 +3647,7 @@ msgstr "Liste des relevés de caisse" msgid "Theoric sums" msgstr "Sommes théoriques" -#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:856 +#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:1092 msgid "Emptied" msgstr "Coffre vidé" @@ -3861,149 +3866,149 @@ msgstr "Temps" msgid "Top 100 barman %(counter_name)s (all semesters)" msgstr "Top 100 barman %(counter_name)s (tous les semestres)" -#: counter/views.py:105 +#: counter/views.py:130 msgid "User not found" msgstr "Utilisateur non trouvé" -#: counter/views.py:141 +#: counter/views.py:187 msgid "Cash summary" msgstr "Relevé de caisse" -#: counter/views.py:147 +#: counter/views.py:201 msgid "Last operations" msgstr "Dernières opérations" -#: counter/views.py:154 +#: counter/views.py:216 msgid "Take items from stock" msgstr "Prendre des éléments du stock" -#: counter/views.py:191 +#: counter/views.py:269 msgid "Bad credentials" msgstr "Mauvais identifiants" -#: counter/views.py:193 +#: counter/views.py:271 msgid "User is not barman" msgstr "L'utilisateur n'est pas barman." -#: counter/views.py:197 +#: counter/views.py:276 msgid "Bad location, someone is already logged in somewhere else" msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs" -#: counter/views.py:425 +#: counter/views.py:544 msgid "END" msgstr "FIN" -#: counter/views.py:427 +#: counter/views.py:546 msgid "CAN" msgstr "ANN" -#: counter/views.py:450 +#: counter/views.py:569 msgid "You have not enough money to buy all the basket" msgstr "Vous n'avez pas assez d'argent pour acheter le panier" -#: counter/views.py:561 +#: counter/views.py:709 msgid "Counter administration" msgstr "Administration des comptoirs" -#: counter/views.py:566 +#: counter/views.py:711 msgid "Stocks" msgstr "Stocks" -#: counter/views.py:576 +#: counter/views.py:720 msgid "Products" msgstr "Produits" -#: counter/views.py:581 +#: counter/views.py:725 msgid "Archived products" msgstr "Produits archivés" -#: counter/views.py:586 +#: counter/views.py:730 msgid "Product types" msgstr "Types de produit" -#: counter/views.py:734 +#: counter/views.py:909 msgid "Parent product" msgstr "Produit parent" -#: counter/views.py:735 +#: counter/views.py:915 msgid "Buying groups" msgstr "Groupes d'achat" -#: counter/views.py:835 +#: counter/views.py:1049 msgid "10 cents" msgstr "10 centimes" -#: counter/views.py:836 +#: counter/views.py:1050 msgid "20 cents" msgstr "20 centimes" -#: counter/views.py:837 +#: counter/views.py:1051 msgid "50 cents" msgstr "50 centimes" -#: counter/views.py:838 +#: counter/views.py:1052 msgid "1 euro" msgstr "1 €" -#: counter/views.py:839 +#: counter/views.py:1053 msgid "2 euros" msgstr "2 €" -#: counter/views.py:840 +#: counter/views.py:1054 msgid "5 euros" msgstr "5 €" -#: counter/views.py:841 +#: counter/views.py:1055 msgid "10 euros" msgstr "10 €" -#: counter/views.py:842 +#: counter/views.py:1056 msgid "20 euros" msgstr "20 €" -#: counter/views.py:843 +#: counter/views.py:1057 msgid "50 euros" msgstr "50 €" -#: counter/views.py:844 +#: counter/views.py:1059 msgid "100 euros" msgstr "100 €" -#: counter/views.py:845 counter/views.py:847 counter/views.py:849 -#: counter/views.py:851 counter/views.py:853 +#: counter/views.py:1062 counter/views.py:1068 counter/views.py:1074 +#: counter/views.py:1080 counter/views.py:1086 msgid "Check amount" msgstr "Montant du chèque" -#: counter/views.py:846 counter/views.py:848 counter/views.py:850 -#: counter/views.py:852 counter/views.py:854 +#: counter/views.py:1065 counter/views.py:1071 counter/views.py:1077 +#: counter/views.py:1083 counter/views.py:1089 msgid "Check quantity" msgstr "Nombre de chèque" -#: counter/views.py:1262 +#: counter/views.py:1725 msgid "people(s)" msgstr "personne(s)" -#: eboutic/models.py:74 +#: eboutic/models.py:86 msgid "validated" msgstr "validé" -#: eboutic/models.py:87 +#: eboutic/models.py:99 msgid "Invoice already validated" msgstr "Facture déjà validée" -#: eboutic/models.py:126 +#: eboutic/models.py:143 msgid "product id" msgstr "ID du produit" -#: eboutic/models.py:127 +#: eboutic/models.py:144 msgid "product name" msgstr "nom du produit" -#: eboutic/models.py:128 +#: eboutic/models.py:145 msgid "product type id" msgstr "id du type du produit" -#: eboutic/models.py:140 +#: eboutic/models.py:161 msgid "basket" msgstr "panier" @@ -4042,39 +4047,39 @@ msgstr "Le paiement a été effectué" msgid "Return to eboutic" msgstr "Retourner à l'eboutic" -#: eboutic/views.py:168 +#: eboutic/views.py:217 msgid "You do not have enough money to buy the basket" msgstr "Vous n'avez pas assez d'argent pour acheter le panier" -#: election/models.py:15 +#: election/models.py:16 msgid "start candidature" msgstr "début des candidatures" -#: election/models.py:16 +#: election/models.py:17 msgid "end candidature" msgstr "fin des candidatures" -#: election/models.py:30 election/views.py:130 +#: election/models.py:38 election/views.py:173 msgid "vote groups" msgstr "groupe de vote" -#: election/models.py:34 election/views.py:131 +#: election/models.py:45 election/views.py:180 msgid "candidature groups" msgstr "groupe de candidature" -#: election/models.py:97 election/models.py:135 +#: election/models.py:114 election/models.py:158 msgid "election" msgstr "élection" -#: election/models.py:100 +#: election/models.py:118 msgid "max choice" msgstr "nombre de choix maxi" -#: election/models.py:156 +#: election/models.py:184 msgid "election list" msgstr "liste électorale" -#: election/models.py:175 +#: election/models.py:206 msgid "candidature" msgstr "candidature" @@ -4122,7 +4127,7 @@ msgstr "Vous avez déjà soumis votre vote." msgid "You have voted in this election." msgstr "Vous avez déjà voté pour cette élection." -#: election/templates/election/election_detail.jinja:266 election/views.py:84 +#: election/templates/election/election_detail.jinja:266 election/views.py:106 msgid "Blank vote" msgstr "Vote blanc" @@ -4191,87 +4196,87 @@ msgstr "au" msgid "Polls open from" msgstr "Votes ouverts du" -#: election/views.py:45 +#: election/views.py:57 msgid "You have selected too much candidates." msgstr "Vous avez sélectionné trop de candidats." -#: election/views.py:60 +#: election/views.py:73 msgid "User to candidate" msgstr "Utilisateur se présentant" -#: election/views.py:104 +#: election/views.py:131 msgid "This role already exists for this election" msgstr "Ce rôle existe déjà pour cette élection" -#: election/views.py:137 +#: election/views.py:194 msgid "Start candidature" msgstr "Début des candidatures" -#: election/views.py:139 +#: election/views.py:200 msgid "End candidature" msgstr "Fin des candidatures" -#: forum/models.py:56 +#: forum/models.py:60 msgid "is a category" msgstr "est une catégorie" -#: forum/models.py:58 +#: forum/models.py:65 msgid "owner club" msgstr "club propriétaire" -#: forum/models.py:64 +#: forum/models.py:81 msgid "number to choose a specific forum ordering" msgstr "numéro spécifiant l'ordre d'affichage" -#: forum/models.py:66 forum/models.py:196 +#: forum/models.py:86 forum/models.py:238 msgid "the last message" msgstr "le dernier message" -#: forum/models.py:67 +#: forum/models.py:90 msgid "number of topics" msgstr "nombre de sujets" -#: forum/models.py:144 +#: forum/models.py:177 msgid "You can not make loops in forums" msgstr "Vous ne pouvez pas faire de boucles dans les forums" -#: forum/models.py:195 +#: forum/models.py:233 msgid "subscribed users" msgstr "utilisateurs abonnés" -#: forum/models.py:199 +#: forum/models.py:243 msgid "number of messages" msgstr "nombre de messages" -#: forum/models.py:247 +#: forum/models.py:297 msgid "message" msgstr "message" -#: forum/models.py:249 +#: forum/models.py:300 msgid "readers" msgstr "lecteurs" -#: forum/models.py:250 +#: forum/models.py:302 msgid "is deleted" msgstr "est supprimé" -#: forum/models.py:314 +#: forum/models.py:382 msgid "Message edited by" msgstr "Message édité par" -#: forum/models.py:315 +#: forum/models.py:383 msgid "Message deleted by" msgstr "Message supprimé par" -#: forum/models.py:316 +#: forum/models.py:384 msgid "Message undeleted by" msgstr "Message restauré par" -#: forum/models.py:324 +#: forum/models.py:392 msgid "action" msgstr "action" -#: forum/models.py:339 +#: forum/models.py:409 msgid "last read date" msgstr "dernière date de lecture" @@ -4347,47 +4352,47 @@ msgstr "Enlever des favoris" msgid "Mark as favorite" msgstr "Ajouter aux favoris" -#: forum/views.py:122 +#: forum/views.py:138 msgid "Apply rights and club owner recursively" msgstr "Appliquer les droits et le club propriétaire récursivement" -#: forum/views.py:312 +#: forum/views.py:356 #, python-format msgid "%(author)s said" msgstr "Citation de %(author)s" -#: launderette/models.py:42 +#: launderette/models.py:44 #: launderette/templates/launderette/launderette_book.jinja:5 #: launderette/templates/launderette/launderette_book_choose.jinja:4 #: launderette/templates/launderette/launderette_main.jinja:4 msgid "Launderette" msgstr "Laverie" -#: launderette/models.py:85 launderette/models.py:111 +#: launderette/models.py:92 launderette/models.py:127 msgid "launderette" msgstr "laverie" -#: launderette/models.py:87 +#: launderette/models.py:97 msgid "is working" msgstr "fonctionne" -#: launderette/models.py:90 +#: launderette/models.py:100 msgid "Machine" msgstr "Machine" -#: launderette/models.py:113 +#: launderette/models.py:132 msgid "borrow date" msgstr "date d'emprunt" -#: launderette/models.py:117 +#: launderette/models.py:138 msgid "Token" msgstr "Jeton" -#: launderette/models.py:123 +#: launderette/models.py:144 msgid "Token name can not be blank" msgstr "Le nom du jeton ne peut pas être vide" -#: launderette/models.py:150 +#: launderette/models.py:185 msgid "machine" msgstr "machine" @@ -4412,12 +4417,12 @@ msgid "Washing and drying" msgstr "Lavage et séchage" #: launderette/templates/launderette/launderette_book.jinja:27 -#: sith/settings.py:575 +#: sith/settings.py:520 msgid "Washing" msgstr "Lavage" #: launderette/templates/launderette/launderette_book.jinja:31 -#: sith/settings.py:575 +#: sith/settings.py:520 msgid "Drying" msgstr "Séchage" @@ -4442,29 +4447,29 @@ msgstr "Éditer la page de présentation" msgid "Book launderette slot" msgstr "Réserver un créneau de laverie" -#: launderette/views.py:183 +#: launderette/views.py:228 msgid "Action" msgstr "Action" -#: launderette/views.py:186 +#: launderette/views.py:240 msgid "Tokens, separated by spaces" msgstr "Jetons, séparés par des espaces" -#: launderette/views.py:201 launderette/views.py:215 +#: launderette/views.py:260 launderette/views.py:282 #, python-format msgid "Token %(token_name)s does not exists" msgstr "Le jeton %(token_name)s n'existe pas" -#: launderette/views.py:209 +#: launderette/views.py:271 #, python-format msgid "Token %(token_name)s already exists" msgstr "Un jeton %(token_name)s existe déjà" -#: launderette/views.py:267 +#: launderette/views.py:338 msgid "User has booked no slot" msgstr "L'utilisateur n'a pas réservé de créneau" -#: launderette/views.py:360 +#: launderette/views.py:452 msgid "Token not found" msgstr "Jeton non trouvé" @@ -4489,7 +4494,7 @@ msgstr "Recherche inversée" msgid "Quick search" msgstr "Recherche rapide" -#: matmat/views.py:75 +#: matmat/views.py:73 msgid "Indifferent" msgstr "Indifferent" @@ -4497,7 +4502,7 @@ msgstr "Indifferent" msgid "Sex" msgstr "Sexe" -#: matmat/views.py:78 +#: matmat/views.py:79 msgid "Last/First name or nickname" msgstr "Nom de famille, prénom ou surnom" @@ -4509,15 +4514,15 @@ msgstr "Fusionner deux utilisateurs" msgid "Merge" msgstr "Fusion" -#: rootplace/views.py:91 +#: rootplace/views.py:92 msgid "User that will be kept" msgstr "Utilisateur qui sera conservé" -#: rootplace/views.py:92 +#: rootplace/views.py:95 msgid "User that will be deleted" msgstr "Utilisateur qui sera supprimé" -#: sas/models.py:186 +#: sas/models.py:243 msgid "picture" msgstr "photo" @@ -4575,24 +4580,24 @@ msgstr "Demander le retrait" msgid "Asked for removal" msgstr "Retrait demandé" -#: sas/views.py:47 +#: sas/views.py:48 msgid "Add a new album" msgstr "Ajouter un nouvel album" -#: sas/views.py:48 +#: sas/views.py:52 msgid "Upload images" msgstr "Envoyer les images" -#: sas/views.py:58 +#: sas/views.py:70 #, python-format msgid "Error creating album %(album)s: %(msg)s" msgstr "Erreur de création de l'album %(album)s : %(msg)s" -#: sas/views.py:78 trombi/templates/trombi/detail.jinja:15 +#: sas/views.py:105 trombi/templates/trombi/detail.jinja:15 msgid "Add user" msgstr "Ajouter une personne" -#: sith/settings.py:214 +#: sith/settings.py:215 msgid "English" msgstr "Anglais" @@ -4600,267 +4605,267 @@ msgstr "Anglais" msgid "French" msgstr "Français" -#: sith/settings.py:351 +#: sith/settings.py:350 msgid "TC" msgstr "TC" -#: sith/settings.py:352 +#: sith/settings.py:351 msgid "IMSI" msgstr "IMSI" -#: sith/settings.py:353 +#: sith/settings.py:352 msgid "IMAP" msgstr "IMAP" -#: sith/settings.py:354 +#: sith/settings.py:353 msgid "INFO" msgstr "INFO" -#: sith/settings.py:355 +#: sith/settings.py:354 msgid "GI" msgstr "GI" -#: sith/settings.py:356 +#: sith/settings.py:355 msgid "E" msgstr "E" -#: sith/settings.py:357 +#: sith/settings.py:356 msgid "EE" msgstr "EE" -#: sith/settings.py:358 +#: sith/settings.py:357 msgid "GESC" msgstr "GESC" -#: sith/settings.py:359 +#: sith/settings.py:358 msgid "GMC" msgstr "GMC" -#: sith/settings.py:360 +#: sith/settings.py:359 msgid "MC" msgstr "MC" -#: sith/settings.py:361 +#: sith/settings.py:360 msgid "EDIM" msgstr "EDIM" -#: sith/settings.py:362 +#: sith/settings.py:361 msgid "Humanities" msgstr "Humanités" -#: sith/settings.py:363 +#: sith/settings.py:362 msgid "N/A" msgstr "N/A" -#: sith/settings.py:367 sith/settings.py:374 sith/settings.py:395 +#: sith/settings.py:366 sith/settings.py:373 sith/settings.py:390 msgid "Check" msgstr "Chèque" -#: sith/settings.py:368 sith/settings.py:376 sith/settings.py:396 +#: sith/settings.py:367 sith/settings.py:375 sith/settings.py:391 msgid "Cash" msgstr "Espèces" -#: sith/settings.py:369 +#: sith/settings.py:368 msgid "Transfert" msgstr "Virement" -#: sith/settings.py:382 +#: sith/settings.py:381 msgid "Belfort" msgstr "Belfort" -#: sith/settings.py:383 +#: sith/settings.py:382 msgid "Sevenans" msgstr "Sevenans" -#: sith/settings.py:384 +#: sith/settings.py:383 msgid "Montbéliard" msgstr "Montbéliard" -#: sith/settings.py:442 +#: sith/settings.py:434 msgid "One semester" msgstr "Un semestre, 15 €" -#: sith/settings.py:447 +#: sith/settings.py:435 msgid "Two semesters" msgstr "Deux semestres, 28 €" -#: sith/settings.py:452 +#: sith/settings.py:437 msgid "Common core cursus" msgstr "Cursus tronc commun, 45 €" -#: sith/settings.py:457 +#: sith/settings.py:441 msgid "Branch cursus" msgstr "Cursus branche, 45 €" -#: sith/settings.py:462 +#: sith/settings.py:442 msgid "Alternating cursus" msgstr "Cursus alternant, 30 €" -#: sith/settings.py:467 +#: sith/settings.py:443 msgid "Honorary member" msgstr "Membre honoraire, 0 €" -#: sith/settings.py:472 +#: sith/settings.py:444 msgid "Assidu member" msgstr "Membre d'Assidu, 0 €" -#: sith/settings.py:477 +#: sith/settings.py:445 msgid "Amicale/DOCEO member" msgstr "Membre de l'Amicale/DOCEO, 0 €" -#: sith/settings.py:482 +#: sith/settings.py:446 msgid "UT network member" msgstr "Cotisant du réseau UT, 0 €" -#: sith/settings.py:487 +#: sith/settings.py:447 msgid "CROUS member" msgstr "Membres du CROUS, 0 €" -#: sith/settings.py:492 +#: sith/settings.py:448 msgid "Sbarro/ESTA member" msgstr "Membre de Sbarro ou de l'ESTA, 15 €" -#: sith/settings.py:497 +#: sith/settings.py:450 msgid "One semester Welcome Week" msgstr "Un semestre Welcome Week" -#: sith/settings.py:502 +#: sith/settings.py:454 msgid "Two months for free" msgstr "Deux mois gratuits" -#: sith/settings.py:507 +#: sith/settings.py:455 msgid "Eurok's volunteer" msgstr "Bénévole Eurockéennes" -#: sith/settings.py:512 +#: sith/settings.py:457 msgid "Six weeks for free" msgstr "6 semaines gratuites" -#: sith/settings.py:517 +#: sith/settings.py:461 msgid "One day" msgstr "Un jour" -#: sith/settings.py:539 +#: sith/settings.py:480 msgid "President" msgstr "Président" -#: sith/settings.py:540 +#: sith/settings.py:481 msgid "Vice-President" msgstr "Vice-Président" -#: sith/settings.py:541 +#: sith/settings.py:482 msgid "Treasurer" msgstr "Trésorier" -#: sith/settings.py:542 +#: sith/settings.py:483 msgid "Communication supervisor" msgstr "Responsable communication" -#: sith/settings.py:543 +#: sith/settings.py:484 msgid "Secretary" msgstr "Secrétaire" -#: sith/settings.py:544 +#: sith/settings.py:485 msgid "IT supervisor" msgstr "Responsable info" -#: sith/settings.py:545 +#: sith/settings.py:486 msgid "Board member" msgstr "Membre du bureau" -#: sith/settings.py:546 +#: sith/settings.py:487 msgid "Active member" msgstr "Membre actif" -#: sith/settings.py:547 +#: sith/settings.py:488 msgid "Curious" msgstr "Curieux" -#: sith/settings.py:582 +#: sith/settings.py:524 msgid "A new poster needs to be moderated" msgstr "Une nouvelle affiche a besoin d'être modérée" -#: sith/settings.py:583 +#: sith/settings.py:525 msgid "A new mailing list needs to be moderated" msgstr "Une nouvelle mailing list a besoin d'être modérée" -#: sith/settings.py:584 +#: sith/settings.py:526 #, python-format msgid "There are %s fresh news to be moderated" msgstr "Il y a %s nouvelles toutes fraîches à modérer" -#: sith/settings.py:585 +#: sith/settings.py:527 msgid "New files to be moderated" msgstr "Nouveaux fichiers à modérer" -#: sith/settings.py:586 +#: sith/settings.py:528 #, python-format msgid "There are %s pictures to be moderated in the SAS" msgstr "Il y a %s photos à modérer dans le SAS" -#: sith/settings.py:587 +#: sith/settings.py:529 msgid "You've been identified on some pictures" msgstr "Vous avez été identifié sur des photos" -#: sith/settings.py:588 +#: sith/settings.py:530 #, python-format msgid "You just refilled of %s €" msgstr "Vous avez rechargé votre compte de %s€" -#: sith/settings.py:589 +#: sith/settings.py:531 #, python-format msgid "You just bought %s" msgstr "Vous avez acheté %s" -#: sith/settings.py:590 +#: sith/settings.py:532 msgid "You have a notification" msgstr "Vous avez une notification" -#: sith/settings.py:602 +#: sith/settings.py:544 msgid "Success!" msgstr "Succès !" -#: sith/settings.py:603 +#: sith/settings.py:545 msgid "Fail!" msgstr "Échec !" -#: sith/settings.py:604 +#: sith/settings.py:546 msgid "You successfully posted an article in the Weekmail" msgstr "Article posté avec succès dans le Weekmail" -#: sith/settings.py:605 +#: sith/settings.py:547 msgid "You successfully edited an article in the Weekmail" msgstr "Article édité avec succès dans le Weekmail" -#: sith/settings.py:606 +#: sith/settings.py:548 msgid "You successfully sent the Weekmail" msgstr "Weekmail envoyé avec succès" -#: sith/settings.py:615 +#: sith/settings.py:556 msgid "AE tee-shirt" msgstr "Tee-shirt AE" -#: stock/models.py:55 +#: stock/models.py:62 msgid "unit quantity" msgstr "quantité unitaire" -#: stock/models.py:55 +#: stock/models.py:62 msgid "number of element in one box" msgstr "nombre d'éléments par boîte" -#: stock/models.py:56 +#: stock/models.py:65 msgid "effective quantity" msgstr "quantité effective" -#: stock/models.py:56 +#: stock/models.py:65 msgid "number of box" msgstr "nombre de boîtes" -#: stock/models.py:57 +#: stock/models.py:68 msgid "minimal quantity" msgstr "quantité minimale" -#: stock/models.py:58 +#: stock/models.py:71 msgid "" "if the effective quantity is less than the minimal, item is added to the " "shopping list" @@ -4868,27 +4873,27 @@ msgstr "" "si la quantité effective est en dessous du minima, l'item est ajouté àla " "liste de courses" -#: stock/models.py:78 +#: stock/models.py:101 msgid "todo" msgstr "à faire" -#: stock/models.py:95 +#: stock/models.py:121 msgid "shopping lists" msgstr "listes de courses" -#: stock/models.py:100 +#: stock/models.py:137 msgid "quantity to buy" msgstr "quantité à acheter" -#: stock/models.py:100 +#: stock/models.py:139 msgid "quantity to buy during the next shopping session" msgstr "quantité à acheter pendant les prochaines courses" -#: stock/models.py:101 +#: stock/models.py:142 msgid "quantity bought" msgstr "quantité achetée" -#: stock/models.py:101 +#: stock/models.py:144 msgid "quantity bought during the last shopping session" msgstr "quantité achetée pendant les dernières courses" @@ -4905,7 +4910,7 @@ msgstr "Quantité demandée" msgid "Quantity bought" msgstr "Quantité achetée" -#: stock/templates/stock/shopping_list_items.jinja:42 stock/views.py:206 +#: stock/templates/stock/shopping_list_items.jinja:42 stock/views.py:278 #: trombi/templates/trombi/export.jinja:70 msgid "Comments" msgstr "Commentaires" @@ -5014,15 +5019,15 @@ msgstr "Mettre à jour les quantités de %(s)s après les courses" msgid "Update stock quantities" msgstr "Mettre à jour les quantités en stock" -#: stock/views.py:198 +#: stock/views.py:257 msgid "Shopping list name" msgstr "Nom de la liste de courses" -#: stock/views.py:204 +#: stock/views.py:267 msgid " left" msgstr " restant" -#: stock/views.py:205 +#: stock/views.py:273 msgid "" "Add here, items to buy that are not reference as a stock item (example : " "sponge, knife, mugs ...)" @@ -5030,11 +5035,11 @@ msgstr "" "Ajouter ici les éléments non référencé comme élément de stock (example : " "éponge, couteau, mugs ...)" -#: stock/views.py:334 +#: stock/views.py:457 msgid " asked" msgstr " demandé" -#: stock/views.py:401 +#: stock/views.py:549 #, python-format msgid "%(effective_quantity)s left" msgstr "%(effective_quantity)s restant" @@ -5047,27 +5052,27 @@ msgstr "Mauvais type de cotisation" msgid "Bad payment method" msgstr "Mauvais type de paiement" -#: subscription/models.py:54 +#: subscription/models.py:55 msgid "subscription type" msgstr "type d'inscription" -#: subscription/models.py:57 +#: subscription/models.py:61 msgid "subscription start" msgstr "début de la cotisation" -#: subscription/models.py:58 +#: subscription/models.py:62 msgid "subscription end" msgstr "fin de la cotisation" -#: subscription/models.py:63 +#: subscription/models.py:71 msgid "location" msgstr "lieu" -#: subscription/models.py:72 +#: subscription/models.py:91 msgid "You can not subscribe many time for the same period" msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période" -#: subscription/models.py:76 +#: subscription/models.py:96 msgid "Subscription error" msgstr "Erreur de cotisation" @@ -5088,20 +5093,20 @@ msgid "Eboutic is reserved to specific users. In doubt, don't use it." msgstr "" "Eboutic est réservé à des cas particuliers. Dans le doute, ne l'utilisez pas." -#: subscription/views.py:83 +#: subscription/views.py:98 msgid "A user with that email address already exists" msgstr "Un utilisateur avec cette adresse email existe déjà" -#: subscription/views.py:99 +#: subscription/views.py:119 msgid "You must either choose an existing user or create a new one properly" msgstr "" "Vous devez soit choisir un utilisateur existant, soit en créer un proprement" -#: trombi/models.py:55 +#: trombi/models.py:60 msgid "subscription deadline" msgstr "fin des inscriptions" -#: trombi/models.py:56 +#: trombi/models.py:63 msgid "" "Before this date, users are allowed to subscribe to this Trombi. After this " "date, users subscribed will be allowed to comment on each other." @@ -5110,46 +5115,46 @@ msgstr "" "Après cette date, les utilisateurs inscrits peuvent se soumettre des " "commentaires entre eux." -#: trombi/models.py:59 +#: trombi/models.py:69 msgid "comments deadline" msgstr "fin des commentaires" -#: trombi/models.py:60 +#: trombi/models.py:72 msgid "After this date, users won't be able to make comments anymore." msgstr "" "Après cette date, les utilisateurs ne peuvent plus faire de commentaires." -#: trombi/models.py:62 +#: trombi/models.py:76 msgid "maximum characters" msgstr "nombre de caractères max" -#: trombi/models.py:63 +#: trombi/models.py:78 msgid "Maximum number of characters allowed in a comment." msgstr "Nombre maximum de caractères autorisés dans un commentaire." -#: trombi/models.py:64 +#: trombi/models.py:81 msgid "show users profiles to each other" msgstr "montrer les profils aux inscrits" -#: trombi/models.py:75 +#: trombi/models.py:95 msgid "" "Closing the subscriptions after the comments is definitively not a good idea." msgstr "" "Fermer les inscriptions après les commentaires est vraiment une idée pourrie." -#: trombi/models.py:96 +#: trombi/models.py:120 msgid "trombi user" msgstr "utilisateur trombi" -#: trombi/models.py:97 +#: trombi/models.py:124 msgid "trombi" msgstr "trombi" -#: trombi/models.py:98 +#: trombi/models.py:132 msgid "profile pict" msgstr "photo de profil" -#: trombi/models.py:99 +#: trombi/models.py:136 msgid "" "The profile picture you want in the trombi (warning: this picture may be " "published)" @@ -5157,11 +5162,11 @@ msgstr "" "La photo de profil que vous souhaitez voir dans le Trombi (attention: cette " "photo risque d'être publiée)" -#: trombi/models.py:100 +#: trombi/models.py:141 msgid "scrub pict" msgstr "photo de blouse" -#: trombi/models.py:101 +#: trombi/models.py:145 msgid "" "The scrub picture you want in the trombi (warning: this picture may be " "published)" @@ -5169,19 +5174,19 @@ msgstr "" "La photo de blouse que vous souhaitez voir dans le Trombi (attention: cette " "photo risque d'être publiée)" -#: trombi/models.py:134 +#: trombi/models.py:186 msgid "target" msgstr "cible" -#: trombi/models.py:136 +#: trombi/models.py:189 msgid "is the comment moderated" msgstr "le commentaire est modéré" -#: trombi/models.py:151 +#: trombi/models.py:207 msgid "start" msgstr "début" -#: trombi/models.py:152 +#: trombi/models.py:208 msgid "end" msgstr "fin" @@ -5312,27 +5317,27 @@ msgstr "" msgid "Edit comment" msgstr "Éditer le commentaire" -#: trombi/views.py:60 +#: trombi/views.py:66 msgid "My profile" msgstr "Mon profil" -#: trombi/views.py:65 +#: trombi/views.py:73 msgid "My pictures" msgstr "Mes photos" -#: trombi/views.py:73 +#: trombi/views.py:85 msgid "Admin tools" msgstr "Admin Trombi" -#: trombi/views.py:178 +#: trombi/views.py:205 msgid "Explain why you rejected the comment" msgstr "Expliquez pourquoi vous refusez le commentaire" -#: trombi/views.py:203 +#: trombi/views.py:238 msgid "Rejected comment" msgstr "Commentaire rejeté" -#: trombi/views.py:204 +#: trombi/views.py:240 #, python-format msgid "" "Your comment to %(target)s on the Trombi \"%(trombi)s\" was rejected for the " @@ -5349,16 +5354,16 @@ msgstr "" "\n" "%(content)s" -#: trombi/views.py:228 +#: trombi/views.py:272 #, python-format msgid "%(name)s (deadline: %(date)s)" msgstr "%(name)s (date limite: %(date)s)" -#: trombi/views.py:232 +#: trombi/views.py:282 msgid "Select trombi" msgstr "Choisir un trombi" -#: trombi/views.py:233 +#: trombi/views.py:284 msgid "" "This allows you to subscribe to a Trombi. Be aware that you can subscribe " "only once, so don't play with that, or you will expose yourself to the " @@ -5368,19 +5373,19 @@ msgstr "" "pouvez vous inscrire qu'à un seul Trombi, donc ne jouez pas avec cet option " "ou vous encourerez la colère des admins!" -#: trombi/views.py:284 +#: trombi/views.py:346 msgid "Personal email (not UTBM)" msgstr "Email personnel (pas UTBM)" -#: trombi/views.py:285 +#: trombi/views.py:347 msgid "Phone" msgstr "Téléphone" -#: trombi/views.py:286 +#: trombi/views.py:348 msgid "Native town" msgstr "Ville d'origine" -#: trombi/views.py:359 +#: trombi/views.py:432 msgid "" "You can not yet write comment, you must wait for the subscription deadline " "to be passed." @@ -5388,11 +5393,11 @@ msgstr "" "Vous ne pouvez pas encore écrire de commentaires, vous devez attendre la fin " "des inscriptions" -#: trombi/views.py:362 +#: trombi/views.py:439 msgid "You can not write comment anymore, the deadline is already passed." msgstr "Vous ne pouvez plus écrire de commentaires, la date est passée." -#: trombi/views.py:369 +#: trombi/views.py:452 #, python-format msgid "Maximum characters: %(max_length)s" msgstr "Nombre de caractères max: %(max_length)s" diff --git a/sith/urls.py b/sith/urls.py index 9b85e64e..179724b8 100644 --- a/sith/urls.py +++ b/sith/urls.py @@ -48,6 +48,7 @@ js_info_dict = {"packages": ("sith",)} handler403 = "core.views.forbidden" handler404 = "core.views.not_found" +handler500 = "core.views.internal_servor_error" urlpatterns = [ url(r"^", include("core.urls", namespace="core", app_name="core")),