mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2024-12-24 17:42:23 +00:00
Add forbidden trigrams, closes #17
This commit is contained in:
parent
4a39d206d5
commit
600ebd087e
19
apps/participation/migrations/0003_alter_team_trigram.py
Normal file
19
apps/participation/migrations/0003_alter_team_trigram.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Generated by Django 3.2.18 on 2023-02-19 22:13
|
||||||
|
|
||||||
|
import django.core.validators
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('participation', '0002_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='team',
|
||||||
|
name='trigram',
|
||||||
|
field=models.CharField(help_text='The trigram must be composed of three uppercase letters.', max_length=3, unique=True, validators=[django.core.validators.RegexValidator('^[A-Z]{3}$'), django.core.validators.RegexValidator('^(?!BIT$|CNO$|CRO$|CUL$|FTG$|FCK$|FUC$|FUK$|FYS$|HIV$|IST$|MST$|KKK$|KYS$|SEX$)', message='This trigram is forbidden.')], verbose_name='trigram'),
|
||||||
|
),
|
||||||
|
]
|
@ -39,7 +39,11 @@ class Team(models.Model):
|
|||||||
verbose_name=_("trigram"),
|
verbose_name=_("trigram"),
|
||||||
help_text=_("The trigram must be composed of three uppercase letters."),
|
help_text=_("The trigram must be composed of three uppercase letters."),
|
||||||
unique=True,
|
unique=True,
|
||||||
validators=[RegexValidator("[A-Z]{3}")],
|
validators=[
|
||||||
|
RegexValidator(r"^[A-Z]{3}$"),
|
||||||
|
RegexValidator(fr"^(?!{'|'.join(f'{t}$' for t in settings.FORBIDDEN_TRIGRAMS)})",
|
||||||
|
message=_("This trigram is forbidden.")),
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
access_code = models.CharField(
|
access_code = models.CharField(
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: TFJM\n"
|
"Project-Id-Version: TFJM\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-01-10 20:31+0100\n"
|
"POT-Creation-Date: 2023-02-19 19:48+0100\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: Emmy D'Anello <emmy.danello@animath.fr>\n"
|
"Last-Translator: Emmy D'Anello <emmy.danello@animath.fr>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -99,88 +99,88 @@ msgstr "changelogs"
|
|||||||
msgid "Changelog of type \"{action}\" for model {model} at {timestamp}"
|
msgid "Changelog of type \"{action}\" for model {model} at {timestamp}"
|
||||||
msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}"
|
msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}"
|
||||||
|
|
||||||
#: apps/participation/admin.py:19 apps/participation/models.py:314
|
#: apps/participation/admin.py:19 apps/participation/models.py:318
|
||||||
#: apps/participation/tables.py:44 apps/registration/models.py:370
|
#: apps/participation/tables.py:44 apps/registration/models.py:370
|
||||||
msgid "valid"
|
msgid "valid"
|
||||||
msgstr "valide"
|
msgstr "valide"
|
||||||
|
|
||||||
#: apps/participation/forms.py:30
|
#: apps/participation/forms.py:29
|
||||||
msgid "This name is already used."
|
msgid "This name is already used."
|
||||||
msgstr "Ce nom est déjà utilisé."
|
msgstr "Ce nom est déjà utilisé."
|
||||||
|
|
||||||
#: apps/participation/forms.py:37 apps/participation/models.py:40
|
#: apps/participation/forms.py:36 apps/participation/models.py:40
|
||||||
msgid "The trigram must be composed of three uppercase letters."
|
msgid "The trigram must be composed of three uppercase letters."
|
||||||
msgstr "Le trigramme doit être composé de trois lettres majuscules."
|
msgstr "Le trigramme doit être composé de trois lettres majuscules."
|
||||||
|
|
||||||
#: apps/participation/forms.py:40
|
#: apps/participation/forms.py:39
|
||||||
msgid "This trigram is already used."
|
msgid "This trigram is already used."
|
||||||
msgstr "Ce trigramme est déjà utilisé."
|
msgstr "Ce trigramme est déjà utilisé."
|
||||||
|
|
||||||
#: apps/participation/forms.py:55
|
#: apps/participation/forms.py:54
|
||||||
msgid "No team was found with this access code."
|
msgid "No team was found with this access code."
|
||||||
msgstr "Aucune équipe n'a été trouvée avec ce code d'accès."
|
msgstr "Aucune équipe n'a été trouvée avec ce code d'accès."
|
||||||
|
|
||||||
#: apps/participation/forms.py:84 apps/participation/forms.py:284
|
#: apps/participation/forms.py:83 apps/participation/forms.py:281
|
||||||
#: apps/registration/forms.py:117 apps/registration/forms.py:139
|
#: apps/registration/forms.py:121 apps/registration/forms.py:143
|
||||||
#: apps/registration/forms.py:161 apps/registration/forms.py:215
|
#: apps/registration/forms.py:165 apps/registration/forms.py:219
|
||||||
msgid "The uploaded file size must be under 2 Mo."
|
msgid "The uploaded file size must be under 2 Mo."
|
||||||
msgstr "Le fichier envoyé doit peser moins de 2 Mo."
|
msgstr "Le fichier envoyé doit peser moins de 2 Mo."
|
||||||
|
|
||||||
#: apps/participation/forms.py:86 apps/registration/forms.py:119
|
#: apps/participation/forms.py:85 apps/registration/forms.py:123
|
||||||
#: apps/registration/forms.py:141 apps/registration/forms.py:163
|
#: apps/registration/forms.py:145 apps/registration/forms.py:167
|
||||||
#: apps/registration/forms.py:217
|
#: apps/registration/forms.py:221
|
||||||
msgid "The uploaded file must be a PDF, PNG of JPEG file."
|
msgid "The uploaded file must be a PDF, PNG of JPEG file."
|
||||||
msgstr "Le fichier envoyé doit être au format PDF, PNG ou JPEG."
|
msgstr "Le fichier envoyé doit être au format PDF, PNG ou JPEG."
|
||||||
|
|
||||||
#: apps/participation/forms.py:104
|
#: apps/participation/forms.py:103
|
||||||
msgid "I engage myself to participate to the whole TFJM²."
|
msgid "I engage myself to participate to the whole TFJM²."
|
||||||
msgstr "Je m'engage à participer à l'intégralité du TFJM²."
|
msgstr "Je m'engage à participer à l'intégralité du TFJM²."
|
||||||
|
|
||||||
#: apps/participation/forms.py:119
|
#: apps/participation/forms.py:118
|
||||||
msgid "Message to address to the team:"
|
msgid "Message to address to the team:"
|
||||||
msgstr "Message à adresser à l'équipe :"
|
msgstr "Message à adresser à l'équipe :"
|
||||||
|
|
||||||
#: apps/participation/forms.py:157
|
#: apps/participation/forms.py:154
|
||||||
msgid "The uploaded file size must be under 5 Mo."
|
msgid "The uploaded file size must be under 5 Mo."
|
||||||
msgstr "Le fichier envoyé doit peser moins de 5 Mo."
|
msgstr "Le fichier envoyé doit peser moins de 5 Mo."
|
||||||
|
|
||||||
#: apps/participation/forms.py:159 apps/participation/forms.py:286
|
#: apps/participation/forms.py:156 apps/participation/forms.py:283
|
||||||
msgid "The uploaded file must be a PDF file."
|
msgid "The uploaded file must be a PDF file."
|
||||||
msgstr "Le fichier envoyé doit être au format PDF."
|
msgstr "Le fichier envoyé doit être au format PDF."
|
||||||
|
|
||||||
#: apps/participation/forms.py:163
|
#: apps/participation/forms.py:160
|
||||||
msgid "The PDF file must not have more than 30 pages."
|
msgid "The PDF file must not have more than 30 pages."
|
||||||
msgstr "Le fichier PDF ne doit pas avoir plus de 30 pages."
|
msgstr "Le fichier PDF ne doit pas avoir plus de 30 pages."
|
||||||
|
|
||||||
#: apps/participation/forms.py:200
|
#: apps/participation/forms.py:197
|
||||||
msgid "CSV file:"
|
msgid "CSV file:"
|
||||||
msgstr "Tableur au format CSV :"
|
msgstr "Tableur au format CSV :"
|
||||||
|
|
||||||
#: apps/participation/forms.py:217
|
#: apps/participation/forms.py:214
|
||||||
msgid ""
|
msgid ""
|
||||||
"This file contains non-UTF-8 content. Please send your sheet as a CSV file."
|
"This file contains non-UTF-8 content. Please send your sheet as a CSV file."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ce fichier contient des éléments non-UTF-8. Merci d'envoyer votre tableur au "
|
"Ce fichier contient des éléments non-UTF-8. Merci d'envoyer votre tableur au "
|
||||||
"format CSV."
|
"format CSV."
|
||||||
|
|
||||||
#: apps/participation/forms.py:242
|
#: apps/participation/forms.py:239
|
||||||
msgid "The following note is higher of the maximum expected value:"
|
msgid "The following note is higher of the maximum expected value:"
|
||||||
msgstr "La note suivante est supérieure au maximum attendu :"
|
msgstr "La note suivante est supérieure au maximum attendu :"
|
||||||
|
|
||||||
#: apps/participation/forms.py:250
|
#: apps/participation/forms.py:247
|
||||||
msgid "The following user was not found:"
|
msgid "The following user was not found:"
|
||||||
msgstr "L'utilisateur⋅rice suivant n'a pas été trouvé :"
|
msgstr "L'utilisateur⋅rice suivant n'a pas été trouvé :"
|
||||||
|
|
||||||
#: apps/participation/forms.py:267
|
#: apps/participation/forms.py:264
|
||||||
msgid "The defender, the opponent and the reporter must be different."
|
msgid "The defender, the opponent and the reporter must be different."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Læ défenseur⋅se, l'opposant⋅e et læ rapporteur⋅e doivent être différent⋅es."
|
"Læ défenseur⋅se, l'opposant⋅e et læ rapporteur⋅e doivent être différent⋅es."
|
||||||
|
|
||||||
#: apps/participation/forms.py:271
|
#: apps/participation/forms.py:268
|
||||||
msgid "This defender did not work on this problem."
|
msgid "This defender did not work on this problem."
|
||||||
msgstr "Ce⋅tte défenseur⋅se ne travaille pas sur ce problème."
|
msgstr "Ce⋅tte défenseur⋅se ne travaille pas sur ce problème."
|
||||||
|
|
||||||
#: apps/participation/models.py:33 apps/participation/models.py:131
|
#: apps/participation/models.py:33 apps/participation/models.py:135
|
||||||
#: apps/participation/tables.py:17 apps/participation/tables.py:34
|
#: apps/participation/tables.py:17 apps/participation/tables.py:34
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr "nom"
|
msgstr "nom"
|
||||||
@ -189,158 +189,162 @@ msgstr "nom"
|
|||||||
msgid "trigram"
|
msgid "trigram"
|
||||||
msgstr "trigramme"
|
msgstr "trigramme"
|
||||||
|
|
||||||
#: apps/participation/models.py:47
|
#: apps/participation/models.py:45
|
||||||
|
msgid "This trigram is forbidden."
|
||||||
|
msgstr "Ce trigramme est interdit."
|
||||||
|
|
||||||
|
#: apps/participation/models.py:51
|
||||||
msgid "access code"
|
msgid "access code"
|
||||||
msgstr "code d'accès"
|
msgstr "code d'accès"
|
||||||
|
|
||||||
#: apps/participation/models.py:48
|
#: apps/participation/models.py:52
|
||||||
msgid "The access code let other people to join the team."
|
msgid "The access code let other people to join the team."
|
||||||
msgstr "Le code d'accès permet aux autres participants de rejoindre l'équipe."
|
msgstr "Le code d'accès permet aux autres participants de rejoindre l'équipe."
|
||||||
|
|
||||||
#: apps/participation/models.py:52
|
#: apps/participation/models.py:56
|
||||||
msgid "motivation letter"
|
msgid "motivation letter"
|
||||||
msgstr "lettre de motivation"
|
msgstr "lettre de motivation"
|
||||||
|
|
||||||
#: apps/participation/models.py:118
|
#: apps/participation/models.py:122
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Team {name} ({trigram})"
|
msgid "Team {name} ({trigram})"
|
||||||
msgstr "Équipe {name} ({trigram})"
|
msgstr "Équipe {name} ({trigram})"
|
||||||
|
|
||||||
#: apps/participation/models.py:121 apps/participation/models.py:299
|
#: apps/participation/models.py:125 apps/participation/models.py:303
|
||||||
#: apps/registration/models.py:123
|
#: apps/registration/models.py:123
|
||||||
msgid "team"
|
msgid "team"
|
||||||
msgstr "équipe"
|
msgstr "équipe"
|
||||||
|
|
||||||
#: apps/participation/models.py:122 apps/participation/tables.py:85
|
#: apps/participation/models.py:126 apps/participation/tables.py:85
|
||||||
msgid "teams"
|
msgid "teams"
|
||||||
msgstr "équipes"
|
msgstr "équipes"
|
||||||
|
|
||||||
#: apps/participation/models.py:136
|
#: apps/participation/models.py:140
|
||||||
msgid "start"
|
msgid "start"
|
||||||
msgstr "début"
|
msgstr "début"
|
||||||
|
|
||||||
#: apps/participation/models.py:141
|
#: apps/participation/models.py:145
|
||||||
msgid "end"
|
msgid "end"
|
||||||
msgstr "fin"
|
msgstr "fin"
|
||||||
|
|
||||||
#: apps/participation/models.py:147
|
#: apps/participation/models.py:151
|
||||||
#: apps/participation/templates/participation/tournament_detail.html:18
|
#: apps/participation/templates/participation/tournament_detail.html:18
|
||||||
msgid "place"
|
msgid "place"
|
||||||
msgstr "lieu"
|
msgstr "lieu"
|
||||||
|
|
||||||
#: apps/participation/models.py:151
|
#: apps/participation/models.py:155
|
||||||
msgid "max team count"
|
msgid "max team count"
|
||||||
msgstr "nombre maximal d'équipes"
|
msgstr "nombre maximal d'équipes"
|
||||||
|
|
||||||
#: apps/participation/models.py:156
|
#: apps/participation/models.py:160
|
||||||
#: apps/participation/templates/participation/tournament_detail.html:21
|
#: apps/participation/templates/participation/tournament_detail.html:21
|
||||||
msgid "price"
|
msgid "price"
|
||||||
msgstr "prix"
|
msgstr "prix"
|
||||||
|
|
||||||
#: apps/participation/models.py:161
|
#: apps/participation/models.py:165
|
||||||
#: apps/participation/templates/participation/tournament_detail.html:24
|
#: apps/participation/templates/participation/tournament_detail.html:24
|
||||||
msgid "remote"
|
msgid "remote"
|
||||||
msgstr "à distance"
|
msgstr "à distance"
|
||||||
|
|
||||||
#: apps/participation/models.py:166
|
#: apps/participation/models.py:170
|
||||||
msgid "limit date for registrations"
|
msgid "limit date for registrations"
|
||||||
msgstr "date limite d'inscription"
|
msgstr "date limite d'inscription"
|
||||||
|
|
||||||
#: apps/participation/models.py:171
|
#: apps/participation/models.py:175
|
||||||
msgid "limit date to upload solutions"
|
msgid "limit date to upload solutions"
|
||||||
msgstr "date limite pour envoyer les solutions"
|
msgstr "date limite pour envoyer les solutions"
|
||||||
|
|
||||||
#: apps/participation/models.py:176
|
#: apps/participation/models.py:180
|
||||||
msgid "random draw for solutions"
|
msgid "random draw for solutions"
|
||||||
msgstr "tirage au sort des solutions"
|
msgstr "tirage au sort des solutions"
|
||||||
|
|
||||||
#: apps/participation/models.py:181
|
#: apps/participation/models.py:185
|
||||||
msgid "limit date to upload the syntheses for the first phase"
|
msgid "limit date to upload the syntheses for the first phase"
|
||||||
msgstr "date limite pour envoyer les notes de synthèses pour la première phase"
|
msgstr "date limite pour envoyer les notes de synthèses pour la première phase"
|
||||||
|
|
||||||
#: apps/participation/models.py:186
|
#: apps/participation/models.py:190
|
||||||
msgid "date when the solutions for the second round become available"
|
msgid "date when the solutions for the second round become available"
|
||||||
msgstr "date à laquelle les solutions pour le second tour sont accessibles"
|
msgstr "date à laquelle les solutions pour le second tour sont accessibles"
|
||||||
|
|
||||||
#: apps/participation/models.py:191
|
#: apps/participation/models.py:195
|
||||||
msgid "limit date to upload the syntheses for the second phase"
|
msgid "limit date to upload the syntheses for the second phase"
|
||||||
msgstr "date limite d'envoi des notes de synthèse pour la seconde phase"
|
msgstr "date limite d'envoi des notes de synthèse pour la seconde phase"
|
||||||
|
|
||||||
#: apps/participation/models.py:196
|
#: apps/participation/models.py:200
|
||||||
#: apps/participation/templates/participation/tournament_detail.html:48
|
#: apps/participation/templates/participation/tournament_detail.html:48
|
||||||
msgid "description"
|
msgid "description"
|
||||||
msgstr "description"
|
msgstr "description"
|
||||||
|
|
||||||
#: apps/participation/models.py:202
|
#: apps/participation/models.py:206
|
||||||
#: apps/participation/templates/participation/tournament_detail.html:12
|
#: apps/participation/templates/participation/tournament_detail.html:12
|
||||||
msgid "organizers"
|
msgid "organizers"
|
||||||
msgstr "organisateur⋅rices"
|
msgstr "organisateur⋅rices"
|
||||||
|
|
||||||
#: apps/participation/models.py:207
|
#: apps/participation/models.py:211
|
||||||
msgid "final"
|
msgid "final"
|
||||||
msgstr "finale"
|
msgstr "finale"
|
||||||
|
|
||||||
#: apps/participation/models.py:284 apps/participation/models.py:308
|
#: apps/participation/models.py:288 apps/participation/models.py:312
|
||||||
#: apps/participation/models.py:340
|
#: apps/participation/models.py:344
|
||||||
msgid "tournament"
|
msgid "tournament"
|
||||||
msgstr "tournoi"
|
msgstr "tournoi"
|
||||||
|
|
||||||
#: apps/participation/models.py:285
|
#: apps/participation/models.py:289
|
||||||
msgid "tournaments"
|
msgid "tournaments"
|
||||||
msgstr "tournois"
|
msgstr "tournois"
|
||||||
|
|
||||||
#: apps/participation/models.py:315
|
#: apps/participation/models.py:319
|
||||||
msgid "The participation got the validation of the organizers."
|
msgid "The participation got the validation of the organizers."
|
||||||
msgstr "La participation a été validée par les organisateur⋅rices."
|
msgstr "La participation a été validée par les organisateur⋅rices."
|
||||||
|
|
||||||
#: apps/participation/models.py:320
|
#: apps/participation/models.py:324
|
||||||
msgid "selected for final"
|
msgid "selected for final"
|
||||||
msgstr "sélectionnée pour la finale"
|
msgstr "sélectionnée pour la finale"
|
||||||
|
|
||||||
#: apps/participation/models.py:321
|
#: apps/participation/models.py:325
|
||||||
msgid "The team is selected for the final tournament."
|
msgid "The team is selected for the final tournament."
|
||||||
msgstr "L'équipe est sélectionnée pour la finale."
|
msgstr "L'équipe est sélectionnée pour la finale."
|
||||||
|
|
||||||
#: apps/participation/models.py:328
|
#: apps/participation/models.py:332
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Participation of the team {name} ({trigram})"
|
msgid "Participation of the team {name} ({trigram})"
|
||||||
msgstr "Participation de l'équipe {name} ({trigram})"
|
msgstr "Participation de l'équipe {name} ({trigram})"
|
||||||
|
|
||||||
#: apps/participation/models.py:331 apps/participation/models.py:528
|
#: apps/participation/models.py:335 apps/participation/models.py:532
|
||||||
#: apps/participation/models.py:558 apps/participation/models.py:596
|
#: apps/participation/models.py:562 apps/participation/models.py:600
|
||||||
msgid "participation"
|
msgid "participation"
|
||||||
msgstr "participation"
|
msgstr "participation"
|
||||||
|
|
||||||
#: apps/participation/models.py:332 apps/participation/models.py:354
|
#: apps/participation/models.py:336 apps/participation/models.py:358
|
||||||
msgid "participations"
|
msgid "participations"
|
||||||
msgstr "participations"
|
msgstr "participations"
|
||||||
|
|
||||||
#: apps/participation/models.py:344
|
#: apps/participation/models.py:348
|
||||||
msgid "round"
|
msgid "round"
|
||||||
msgstr "tour"
|
msgstr "tour"
|
||||||
|
|
||||||
#: apps/participation/models.py:346 apps/participation/models.py:347
|
#: apps/participation/models.py:350 apps/participation/models.py:351
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Round {round}"
|
msgid "Round {round}"
|
||||||
msgstr "Tour {round}"
|
msgstr "Tour {round}"
|
||||||
|
|
||||||
#: apps/participation/models.py:360
|
#: apps/participation/models.py:364
|
||||||
msgid "juries"
|
msgid "juries"
|
||||||
msgstr "jurys"
|
msgstr "jurys"
|
||||||
|
|
||||||
#: apps/participation/models.py:367
|
#: apps/participation/models.py:371
|
||||||
msgid "BigBlueButton URL"
|
msgid "BigBlueButton URL"
|
||||||
msgstr "Lien BigBlueButton"
|
msgstr "Lien BigBlueButton"
|
||||||
|
|
||||||
#: apps/participation/models.py:368
|
#: apps/participation/models.py:372
|
||||||
msgid "The link of the BBB visio for this pool."
|
msgid "The link of the BBB visio for this pool."
|
||||||
msgstr "Le lien du salon BBB pour cette poule."
|
msgstr "Le lien du salon BBB pour cette poule."
|
||||||
|
|
||||||
#: apps/participation/models.py:373
|
#: apps/participation/models.py:377
|
||||||
msgid "results available"
|
msgid "results available"
|
||||||
msgstr "résultats disponibles"
|
msgstr "résultats disponibles"
|
||||||
|
|
||||||
#: apps/participation/models.py:374
|
#: apps/participation/models.py:378
|
||||||
msgid ""
|
msgid ""
|
||||||
"Check this case when results become accessible to teams. They stay "
|
"Check this case when results become accessible to teams. They stay "
|
||||||
"accessible to you. Only averages are given."
|
"accessible to you. Only averages are given."
|
||||||
@ -349,45 +353,45 @@ msgstr ""
|
|||||||
"Ils restent toujours accessibles pour vous. Seules les moyennes sont "
|
"Ils restent toujours accessibles pour vous. Seules les moyennes sont "
|
||||||
"communiquées."
|
"communiquées."
|
||||||
|
|
||||||
#: apps/participation/models.py:390
|
#: apps/participation/models.py:394
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Pool of day {round} for tournament {tournament} with teams {teams}"
|
msgid "Pool of day {round} for tournament {tournament} with teams {teams}"
|
||||||
msgstr "Poule du jour {round} du tournoi {tournament} avec les équipes {teams}"
|
msgstr "Poule du jour {round} du tournoi {tournament} avec les équipes {teams}"
|
||||||
|
|
||||||
#: apps/participation/models.py:396 apps/participation/models.py:404
|
#: apps/participation/models.py:400 apps/participation/models.py:408
|
||||||
msgid "pool"
|
msgid "pool"
|
||||||
msgstr "poule"
|
msgstr "poule"
|
||||||
|
|
||||||
#: apps/participation/models.py:397
|
#: apps/participation/models.py:401
|
||||||
msgid "pools"
|
msgid "pools"
|
||||||
msgstr "poules"
|
msgstr "poules"
|
||||||
|
|
||||||
#: apps/participation/models.py:409
|
#: apps/participation/models.py:413
|
||||||
msgid "defended solution"
|
msgid "defended solution"
|
||||||
msgstr "solution défendue"
|
msgstr "solution défendue"
|
||||||
|
|
||||||
#: apps/participation/models.py:411 apps/participation/models.py:565
|
#: apps/participation/models.py:415 apps/participation/models.py:569
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Problem #{problem}"
|
msgid "Problem #{problem}"
|
||||||
msgstr "Problème n°{problem}"
|
msgstr "Problème n°{problem}"
|
||||||
|
|
||||||
#: apps/participation/models.py:418 apps/participation/tables.py:106
|
#: apps/participation/models.py:422 apps/participation/tables.py:106
|
||||||
msgid "defender"
|
msgid "defender"
|
||||||
msgstr "défenseur"
|
msgstr "défenseur"
|
||||||
|
|
||||||
#: apps/participation/models.py:425 apps/participation/models.py:608
|
#: apps/participation/models.py:429 apps/participation/models.py:612
|
||||||
msgid "opponent"
|
msgid "opponent"
|
||||||
msgstr "opposant"
|
msgstr "opposant"
|
||||||
|
|
||||||
#: apps/participation/models.py:432 apps/participation/models.py:609
|
#: apps/participation/models.py:436 apps/participation/models.py:613
|
||||||
msgid "reporter"
|
msgid "reporter"
|
||||||
msgstr "rapporteur"
|
msgstr "rapporteur"
|
||||||
|
|
||||||
#: apps/participation/models.py:437
|
#: apps/participation/models.py:441
|
||||||
msgid "penalties"
|
msgid "penalties"
|
||||||
msgstr "pénalités"
|
msgstr "pénalités"
|
||||||
|
|
||||||
#: apps/participation/models.py:439
|
#: apps/participation/models.py:443
|
||||||
msgid ""
|
msgid ""
|
||||||
"Number of penalties for the defender. The defender will loose a 0.5 "
|
"Number of penalties for the defender. The defender will loose a 0.5 "
|
||||||
"coefficient per penalty."
|
"coefficient per penalty."
|
||||||
@ -395,124 +399,124 @@ msgstr ""
|
|||||||
"Nombre de pénalités pour læ défenseur⋅se. Læ défenseur⋅se perd un "
|
"Nombre de pénalités pour læ défenseur⋅se. Læ défenseur⋅se perd un "
|
||||||
"coefficient 0.5 sur sa solution écrite par pénalité."
|
"coefficient 0.5 sur sa solution écrite par pénalité."
|
||||||
|
|
||||||
#: apps/participation/models.py:499 apps/participation/models.py:502
|
#: apps/participation/models.py:503 apps/participation/models.py:506
|
||||||
#: apps/participation/models.py:505
|
#: apps/participation/models.py:509
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Team {trigram} is not registered in the pool."
|
msgid "Team {trigram} is not registered in the pool."
|
||||||
msgstr "L'équipe {trigram} n'est pas inscrite dans la poule."
|
msgstr "L'équipe {trigram} n'est pas inscrite dans la poule."
|
||||||
|
|
||||||
#: apps/participation/models.py:510
|
#: apps/participation/models.py:514
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Passage of {defender} for problem {problem}"
|
msgid "Passage of {defender} for problem {problem}"
|
||||||
msgstr "Passage de {defender} pour le problème {problem}"
|
msgstr "Passage de {defender} pour le problème {problem}"
|
||||||
|
|
||||||
#: apps/participation/models.py:514 apps/participation/models.py:522
|
#: apps/participation/models.py:518 apps/participation/models.py:526
|
||||||
#: apps/participation/models.py:603 apps/participation/models.py:645
|
#: apps/participation/models.py:607 apps/participation/models.py:649
|
||||||
msgid "passage"
|
msgid "passage"
|
||||||
msgstr "passage"
|
msgstr "passage"
|
||||||
|
|
||||||
#: apps/participation/models.py:515
|
#: apps/participation/models.py:519
|
||||||
msgid "passages"
|
msgid "passages"
|
||||||
msgstr "passages"
|
msgstr "passages"
|
||||||
|
|
||||||
#: apps/participation/models.py:533
|
#: apps/participation/models.py:537
|
||||||
msgid "difference"
|
msgid "difference"
|
||||||
msgstr "différence"
|
msgstr "différence"
|
||||||
|
|
||||||
#: apps/participation/models.py:534
|
#: apps/participation/models.py:538
|
||||||
msgid "Score to add/remove on the final score"
|
msgid "Score to add/remove on the final score"
|
||||||
msgstr "Score à ajouter/retrancher au score final"
|
msgstr "Score à ajouter/retrancher au score final"
|
||||||
|
|
||||||
#: apps/participation/models.py:541
|
#: apps/participation/models.py:545
|
||||||
msgid "tweak"
|
msgid "tweak"
|
||||||
msgstr "harmonisation"
|
msgstr "harmonisation"
|
||||||
|
|
||||||
#: apps/participation/models.py:542
|
#: apps/participation/models.py:546
|
||||||
msgid "tweaks"
|
msgid "tweaks"
|
||||||
msgstr "harmonisations"
|
msgstr "harmonisations"
|
||||||
|
|
||||||
#: apps/participation/models.py:563
|
#: apps/participation/models.py:567
|
||||||
msgid "problem"
|
msgid "problem"
|
||||||
msgstr "numéro de problème"
|
msgstr "numéro de problème"
|
||||||
|
|
||||||
#: apps/participation/models.py:570
|
#: apps/participation/models.py:574
|
||||||
msgid "solution for the final tournament"
|
msgid "solution for the final tournament"
|
||||||
msgstr "solution pour la finale"
|
msgstr "solution pour la finale"
|
||||||
|
|
||||||
#: apps/participation/models.py:575 apps/participation/models.py:614
|
#: apps/participation/models.py:579 apps/participation/models.py:618
|
||||||
msgid "file"
|
msgid "file"
|
||||||
msgstr "fichier"
|
msgstr "fichier"
|
||||||
|
|
||||||
#: apps/participation/models.py:581
|
#: apps/participation/models.py:585
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Solution of team {team} for problem {problem}"
|
msgid "Solution of team {team} for problem {problem}"
|
||||||
msgstr "Solution de l'équipe {team} pour le problème {problem}"
|
msgstr "Solution de l'équipe {team} pour le problème {problem}"
|
||||||
|
|
||||||
#: apps/participation/models.py:583
|
#: apps/participation/models.py:587
|
||||||
msgid "for final"
|
msgid "for final"
|
||||||
msgstr "pour la finale"
|
msgstr "pour la finale"
|
||||||
|
|
||||||
#: apps/participation/models.py:586
|
#: apps/participation/models.py:590
|
||||||
msgid "solution"
|
msgid "solution"
|
||||||
msgstr "solution"
|
msgstr "solution"
|
||||||
|
|
||||||
#: apps/participation/models.py:587
|
#: apps/participation/models.py:591
|
||||||
msgid "solutions"
|
msgid "solutions"
|
||||||
msgstr "solutions"
|
msgstr "solutions"
|
||||||
|
|
||||||
#: apps/participation/models.py:620
|
#: apps/participation/models.py:624
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Synthesis of {team} as {type} for problem {problem} of {defender}"
|
msgid "Synthesis of {team} as {type} for problem {problem} of {defender}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Note de synthèse de l'équipe {team} en tant que {type} pour le problème "
|
"Note de synthèse de l'équipe {team} en tant que {type} pour le problème "
|
||||||
"{problem} de {defender}"
|
"{problem} de {defender}"
|
||||||
|
|
||||||
#: apps/participation/models.py:628
|
#: apps/participation/models.py:632
|
||||||
msgid "synthesis"
|
msgid "synthesis"
|
||||||
msgstr "note de synthèse"
|
msgstr "note de synthèse"
|
||||||
|
|
||||||
#: apps/participation/models.py:629
|
#: apps/participation/models.py:633
|
||||||
msgid "syntheses"
|
msgid "syntheses"
|
||||||
msgstr "notes de synthèse"
|
msgstr "notes de synthèse"
|
||||||
|
|
||||||
#: apps/participation/models.py:638
|
#: apps/participation/models.py:642
|
||||||
msgid "jury"
|
msgid "jury"
|
||||||
msgstr "jury"
|
msgstr "jury"
|
||||||
|
|
||||||
#: apps/participation/models.py:650
|
#: apps/participation/models.py:654
|
||||||
msgid "defender writing note"
|
msgid "defender writing note"
|
||||||
msgstr "note d'écrit de læ défenseur⋅se"
|
msgstr "note d'écrit de læ défenseur⋅se"
|
||||||
|
|
||||||
#: apps/participation/models.py:656
|
#: apps/participation/models.py:660
|
||||||
msgid "defender oral note"
|
msgid "defender oral note"
|
||||||
msgstr "note d'oral de læ défenseur⋅se"
|
msgstr "note d'oral de læ défenseur⋅se"
|
||||||
|
|
||||||
#: apps/participation/models.py:662
|
#: apps/participation/models.py:666
|
||||||
msgid "opponent writing note"
|
msgid "opponent writing note"
|
||||||
msgstr "note d'écrit de l'opposant⋅e"
|
msgstr "note d'écrit de l'opposant⋅e"
|
||||||
|
|
||||||
#: apps/participation/models.py:668
|
#: apps/participation/models.py:672
|
||||||
msgid "opponent oral note"
|
msgid "opponent oral note"
|
||||||
msgstr "note d'oral de l'opposant⋅e"
|
msgstr "note d'oral de l'opposant⋅e"
|
||||||
|
|
||||||
#: apps/participation/models.py:674
|
#: apps/participation/models.py:678
|
||||||
msgid "reporter writing note"
|
msgid "reporter writing note"
|
||||||
msgstr "note d'écrit de læ rapporteur⋅e"
|
msgstr "note d'écrit de læ rapporteur⋅e"
|
||||||
|
|
||||||
#: apps/participation/models.py:680
|
#: apps/participation/models.py:684
|
||||||
msgid "reporter oral note"
|
msgid "reporter oral note"
|
||||||
msgstr "note d'oral de læ rapporteur⋅e"
|
msgstr "note d'oral de læ rapporteur⋅e"
|
||||||
|
|
||||||
#: apps/participation/models.py:698
|
#: apps/participation/models.py:702
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Notes of {jury} for {passage}"
|
msgid "Notes of {jury} for {passage}"
|
||||||
msgstr "Notes de {jury} pour le {passage}"
|
msgstr "Notes de {jury} pour le {passage}"
|
||||||
|
|
||||||
#: apps/participation/models.py:705
|
#: apps/participation/models.py:709
|
||||||
msgid "note"
|
msgid "note"
|
||||||
msgstr "note"
|
msgstr "note"
|
||||||
|
|
||||||
#: apps/participation/models.py:706
|
#: apps/participation/models.py:710
|
||||||
msgid "notes"
|
msgid "notes"
|
||||||
msgstr "notes"
|
msgstr "notes"
|
||||||
|
|
||||||
@ -939,7 +943,7 @@ msgid "Invalidate"
|
|||||||
msgstr "Invalider"
|
msgstr "Invalider"
|
||||||
|
|
||||||
#: apps/participation/templates/participation/team_detail.html:171
|
#: apps/participation/templates/participation/team_detail.html:171
|
||||||
#: apps/participation/views.py:328
|
#: apps/participation/views.py:332
|
||||||
msgid "Upload motivation letter"
|
msgid "Upload motivation letter"
|
||||||
msgstr "Envoyer la lettre de motivation"
|
msgstr "Envoyer la lettre de motivation"
|
||||||
|
|
||||||
@ -948,7 +952,7 @@ msgid "Update team"
|
|||||||
msgstr "Modifier l'équipe"
|
msgstr "Modifier l'équipe"
|
||||||
|
|
||||||
#: apps/participation/templates/participation/team_detail.html:181
|
#: apps/participation/templates/participation/team_detail.html:181
|
||||||
#: apps/participation/views.py:431
|
#: apps/participation/views.py:435
|
||||||
msgid "Leave team"
|
msgid "Leave team"
|
||||||
msgstr "Quitter l'équipe"
|
msgstr "Quitter l'équipe"
|
||||||
|
|
||||||
@ -1078,12 +1082,12 @@ msgstr "Vous êtes déjà dans une équipe."
|
|||||||
msgid "Join team"
|
msgid "Join team"
|
||||||
msgstr "Rejoindre une équipe"
|
msgstr "Rejoindre une équipe"
|
||||||
|
|
||||||
#: apps/participation/views.py:151 apps/participation/views.py:437
|
#: apps/participation/views.py:151 apps/participation/views.py:441
|
||||||
#: apps/participation/views.py:471
|
#: apps/participation/views.py:475
|
||||||
msgid "You are not in a team."
|
msgid "You are not in a team."
|
||||||
msgstr "Vous n'êtes pas dans une équipe."
|
msgstr "Vous n'êtes pas dans une équipe."
|
||||||
|
|
||||||
#: apps/participation/views.py:152 apps/participation/views.py:472
|
#: apps/participation/views.py:152 apps/participation/views.py:476
|
||||||
msgid "You don't participate, so you don't have any team."
|
msgid "You don't participate, so you don't have any team."
|
||||||
msgstr "Vous ne participez pas, vous n'avez donc pas d'équipe."
|
msgstr "Vous ne participez pas, vous n'avez donc pas d'équipe."
|
||||||
|
|
||||||
@ -1123,62 +1127,62 @@ msgstr "L'équipe n'a pas de validation en attente."
|
|||||||
msgid "You must specify if you validate the registration or not."
|
msgid "You must specify if you validate the registration or not."
|
||||||
msgstr "Vous devez spécifier si vous validez l'inscription ou non."
|
msgstr "Vous devez spécifier si vous validez l'inscription ou non."
|
||||||
|
|
||||||
#: apps/participation/views.py:308
|
#: apps/participation/views.py:310
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Update team {trigram}"
|
msgid "Update team {trigram}"
|
||||||
msgstr "Mise à jour de l'équipe {trigram}"
|
msgstr "Mise à jour de l'équipe {trigram}"
|
||||||
|
|
||||||
#: apps/participation/views.py:367 apps/participation/views.py:417
|
#: apps/participation/views.py:371 apps/participation/views.py:421
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Motivation letter of {team}.{ext}"
|
msgid "Motivation letter of {team}.{ext}"
|
||||||
msgstr "Lettre de motivation de {team}.{ext}"
|
msgstr "Lettre de motivation de {team}.{ext}"
|
||||||
|
|
||||||
#: apps/participation/views.py:398
|
#: apps/participation/views.py:402
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Photo authorization of {participant}.{ext}"
|
msgid "Photo authorization of {participant}.{ext}"
|
||||||
msgstr "Autorisation de droit à l'image de {participant}.{ext}"
|
msgstr "Autorisation de droit à l'image de {participant}.{ext}"
|
||||||
|
|
||||||
#: apps/participation/views.py:404
|
#: apps/participation/views.py:408
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Parental authorization of {participant}.{ext}"
|
msgid "Parental authorization of {participant}.{ext}"
|
||||||
msgstr "Autorisation parentale de {participant}.{ext}"
|
msgstr "Autorisation parentale de {participant}.{ext}"
|
||||||
|
|
||||||
#: apps/participation/views.py:411
|
#: apps/participation/views.py:415
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Health sheet of {participant}.{ext}"
|
msgid "Health sheet of {participant}.{ext}"
|
||||||
msgstr "Fiche sanitaire de {participant}.{ext}"
|
msgstr "Fiche sanitaire de {participant}.{ext}"
|
||||||
|
|
||||||
#: apps/participation/views.py:421
|
#: apps/participation/views.py:425
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Photo authorizations of team {trigram}.zip"
|
msgid "Photo authorizations of team {trigram}.zip"
|
||||||
msgstr "Autorisations de droit à l'image de l'équipe {trigram}.zip"
|
msgstr "Autorisations de droit à l'image de l'équipe {trigram}.zip"
|
||||||
|
|
||||||
#: apps/participation/views.py:439
|
#: apps/participation/views.py:443
|
||||||
msgid "The team is already validated or the validation is pending."
|
msgid "The team is already validated or the validation is pending."
|
||||||
msgstr "La validation de l'équipe est déjà faite ou en cours."
|
msgstr "La validation de l'équipe est déjà faite ou en cours."
|
||||||
|
|
||||||
#: apps/participation/views.py:486
|
#: apps/participation/views.py:490
|
||||||
msgid "The team is not validated yet."
|
msgid "The team is not validated yet."
|
||||||
msgstr "L'équipe n'est pas encore validée."
|
msgstr "L'équipe n'est pas encore validée."
|
||||||
|
|
||||||
#: apps/participation/views.py:500
|
#: apps/participation/views.py:504
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Participation of team {trigram}"
|
msgid "Participation of team {trigram}"
|
||||||
msgstr "Participation de l'équipe {trigram}"
|
msgstr "Participation de l'équipe {trigram}"
|
||||||
|
|
||||||
#: apps/participation/views.py:626
|
#: apps/participation/views.py:630
|
||||||
msgid "You can't upload a solution after the deadline."
|
msgid "You can't upload a solution after the deadline."
|
||||||
msgstr "Vous ne pouvez pas envoyer de solution après la date limite."
|
msgstr "Vous ne pouvez pas envoyer de solution après la date limite."
|
||||||
|
|
||||||
#: apps/participation/views.py:729
|
#: apps/participation/views.py:733
|
||||||
msgid "The following user is not registered as a jury:"
|
msgid "The following user is not registered as a jury:"
|
||||||
msgstr "L'utilisateur⋅rice suivant n'est pas inscrit⋅e en tant que juré⋅e :"
|
msgstr "L'utilisateur⋅rice suivant n'est pas inscrit⋅e en tant que juré⋅e :"
|
||||||
|
|
||||||
#: apps/participation/views.py:737
|
#: apps/participation/views.py:741
|
||||||
msgid "Notes were successfully uploaded."
|
msgid "Notes were successfully uploaded."
|
||||||
msgstr "Les notes ont bien été envoyées."
|
msgstr "Les notes ont bien été envoyées."
|
||||||
|
|
||||||
#: apps/participation/views.py:849
|
#: apps/participation/views.py:853
|
||||||
msgid "You can't upload a synthesis after the deadline."
|
msgid "You can't upload a synthesis after the deadline."
|
||||||
msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite."
|
msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite."
|
||||||
|
|
||||||
@ -1206,11 +1210,11 @@ msgstr "bénévole"
|
|||||||
msgid "admin"
|
msgid "admin"
|
||||||
msgstr "admin"
|
msgstr "admin"
|
||||||
|
|
||||||
#: apps/registration/forms.py:209
|
#: apps/registration/forms.py:213
|
||||||
msgid "Pending"
|
msgid "Pending"
|
||||||
msgstr "En attente"
|
msgstr "En attente"
|
||||||
|
|
||||||
#: apps/registration/forms.py:225
|
#: apps/registration/forms.py:229
|
||||||
msgid "You must upload your scholarship attestation."
|
msgid "You must upload your scholarship attestation."
|
||||||
msgstr "Vous devez envoyer votre attestation de bourse."
|
msgstr "Vous devez envoyer votre attestation de bourse."
|
||||||
|
|
||||||
@ -1843,11 +1847,11 @@ msgstr "Autorisation parentale de {student}.{ext}"
|
|||||||
msgid "Scholarship attestation of {user}.{ext}"
|
msgid "Scholarship attestation of {user}.{ext}"
|
||||||
msgstr "Notification de bourse de {user}.{ext}"
|
msgstr "Notification de bourse de {user}.{ext}"
|
||||||
|
|
||||||
#: tfjm/settings.py:162
|
#: tfjm/settings.py:161
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Anglais"
|
msgstr "Anglais"
|
||||||
|
|
||||||
#: tfjm/settings.py:163
|
#: tfjm/settings.py:162
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Français"
|
msgstr "Français"
|
||||||
|
|
||||||
|
@ -224,11 +224,6 @@ else:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if os.getenv("TFJM_STAGE", "dev") == "prod": # pragma: no cover
|
|
||||||
from .settings_prod import * # noqa: F401,F403
|
|
||||||
else:
|
|
||||||
from .settings_dev import * # noqa: F401,F403
|
|
||||||
|
|
||||||
# Custom phone number format
|
# Custom phone number format
|
||||||
PHONENUMBER_DB_FORMAT = 'NATIONAL'
|
PHONENUMBER_DB_FORMAT = 'NATIONAL'
|
||||||
PHONENUMBER_DEFAULT_REGION = 'FR'
|
PHONENUMBER_DEFAULT_REGION = 'FR'
|
||||||
@ -240,3 +235,25 @@ JQUERY_URL = False
|
|||||||
|
|
||||||
# Custom parameters
|
# Custom parameters
|
||||||
PROBLEM_COUNT = 8
|
PROBLEM_COUNT = 8
|
||||||
|
FORBIDDEN_TRIGRAMS = [
|
||||||
|
"BIT",
|
||||||
|
"CNO",
|
||||||
|
"CRO",
|
||||||
|
"CUL",
|
||||||
|
"FTG",
|
||||||
|
"FCK",
|
||||||
|
"FUC",
|
||||||
|
"FUK",
|
||||||
|
"FYS",
|
||||||
|
"HIV",
|
||||||
|
"IST",
|
||||||
|
"MST",
|
||||||
|
"KKK",
|
||||||
|
"KYS",
|
||||||
|
"SEX",
|
||||||
|
]
|
||||||
|
|
||||||
|
if os.getenv("TFJM_STAGE", "dev") == "prod": # pragma: no cover
|
||||||
|
from .settings_prod import * # noqa: F401,F403
|
||||||
|
else:
|
||||||
|
from .settings_dev import * # noqa: F401,F403
|
||||||
|
Loading…
Reference in New Issue
Block a user