feat(perf): borner les vues de liste, et choisir le motif une bonne fois
MNT-14. Chaque vue de liste faisait .all() sur sa table. L'audit evaluait l'impact a nul -- justement, a l'echelle d'une association etudiante -- et recommandait de choisir le motif maintenant plutot que de le retro-adapter plus tard. C'est ce que ceci est. Applique a list_users, list_evaluations et team_matches.list_matches. Pour cette derniere, la pagination borne aussi la boucle sur les participants, qui est le N+1 que le constat designait comme le premier a se degrader. Trois decisions, parce que ce sont celles qui se prennent deux fois differemment sinon. error_out=False : les numeros de page arrivent par l'URL, donc ?page=999 est une chose qu'on tape ou qu'un signet perime contient. Le defaut de Flask-SQLAlchemy y repond par un 404, ce qui est deroutant pour quelqu'un qui est simplement alle une page trop loin. Un plafond sur per_page : c'est aussi un parametre d'URL, et sans plafond ?per_page=100000 redonne a la main exactement la requete non bornee que la pagination existe pour empecher. page_url est un global Jinja plutot qu'une valeur que chaque vue passe. Ce qui se rate avec des liens de pagination, c'est le reste de la chaine de requete : la liste d'evaluations porte sort et order, celle des matchs d'equipe porte team_id, et un lien qui les perd reinitialise silencieusement la vue que la personne regardait. Les deux tests qui l'epinglent tombent si page_url cesse de les recopier -- verifie par mutation. Les tris sont completes par une cle unique : une requete paginee sans ORDER BY stable peut montrer la meme ligne deux fois et jamais une autre. Au passage, huit entrees fuzzy corrigees dans les catalogues, dont deux laissees par le commit SEC-16 : une entree fuzzy est ignoree a l'execution, donc ces messages retombaient en anglais. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
Binary file not shown.
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: team-tryouts VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2026-08-11 18:57-0400\n"
|
||||
"POT-Creation-Date: 2026-08-11 20:15-0400\n"
|
||||
"PO-Revision-Date: 2026-08-07 20:22-0400\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: fr\n"
|
||||
@@ -19,7 +19,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.18.0\n"
|
||||
|
||||
#: app/app.py:555
|
||||
#: app/app.py:562
|
||||
msgid "Please log in to access this page."
|
||||
msgstr "Veuillez vous connecter pour accéder à cette page."
|
||||
|
||||
@@ -92,95 +92,127 @@ msgstr "Vous devez choisir un joueur."
|
||||
msgid "Notes must be 2000 characters or less."
|
||||
msgstr "Les notes ne doivent pas dépasser 2000 caractères."
|
||||
|
||||
#: app/validators.py:476
|
||||
#: app/validators.py:482
|
||||
msgid "Date must be in YYYY-MM-DD format."
|
||||
msgstr "La date doit être au format AAAA-MM-JJ."
|
||||
|
||||
#: app/validators.py:481 app/validators.py:508
|
||||
#: app/validators.py:483
|
||||
msgid "A date is required."
|
||||
msgstr "Une date est requise."
|
||||
|
||||
#: app/validators.py:489 app/validators.py:554
|
||||
msgid "Start time must be in HH:MM format."
|
||||
msgstr "L’heure de début doit être au format HH:MM."
|
||||
|
||||
#: app/validators.py:485
|
||||
#: app/validators.py:490 app/validators.py:555
|
||||
msgid "A start time is required."
|
||||
msgstr "Une heure de début est requise."
|
||||
|
||||
#: app/validators.py:496
|
||||
msgid "End time must be in HH:MM format."
|
||||
msgstr "L’heure de fin doit être au format HH:MM."
|
||||
|
||||
#: app/validators.py:488
|
||||
#: app/validators.py:497
|
||||
msgid "An end time is required."
|
||||
msgstr "Une heure de fin est requise."
|
||||
|
||||
#: app/validators.py:501
|
||||
msgid "Points must be 2000 characters or less."
|
||||
msgstr "Les points ne doivent pas dépasser 2000 caractères."
|
||||
|
||||
#: app/validators.py:504
|
||||
#: app/validators.py:516
|
||||
msgid "End time must be after start time."
|
||||
msgstr "L'heure de fin doit être postérieure à l'heure de début."
|
||||
|
||||
#: app/validators.py:545 app/validators.py:547
|
||||
msgid "Day must be 0 (Monday) to 6 (Sunday)."
|
||||
msgstr "Le jour doit aller de 0 (lundi) à 6 (dimanche)."
|
||||
|
||||
#: app/validators.py:535
|
||||
#: app/validators.py:548
|
||||
msgid "A day is required."
|
||||
msgstr "Un jour est requis."
|
||||
|
||||
#: app/validators.py:583
|
||||
msgid "Player selection is malformed."
|
||||
msgstr "La sélection de joueurs est mal formée."
|
||||
|
||||
#: app/validators.py:561 app/validators.py:671
|
||||
#: app/validators.py:609 app/validators.py:719
|
||||
msgid "A title is required."
|
||||
msgstr "Un titre est requis."
|
||||
|
||||
#: app/validators.py:570
|
||||
#: app/validators.py:618
|
||||
msgid "Invalid date format."
|
||||
msgstr "Format de date invalide."
|
||||
|
||||
#: app/validators.py:575 app/validators.py:582
|
||||
#: app/validators.py:623 app/validators.py:630
|
||||
msgid "Invalid time format."
|
||||
msgstr "Format d’heure invalide."
|
||||
|
||||
#: app/validators.py:576
|
||||
#: app/validators.py:624
|
||||
msgid "Start time is required. Please select a time slot."
|
||||
msgstr "L’heure de début est obligatoire. Choisissez une plage horaire."
|
||||
|
||||
#: app/validators.py:590
|
||||
#: app/validators.py:638
|
||||
msgid "Unknown match status."
|
||||
msgstr "Statut de match inconnu."
|
||||
|
||||
#: app/validators.py:606
|
||||
#: app/validators.py:654
|
||||
msgid "The end time must come after the start time."
|
||||
msgstr "L'heure de fin doit être postérieure à l'heure de début."
|
||||
|
||||
#: app/validators.py:620
|
||||
#: app/validators.py:668
|
||||
msgid "Unknown match type."
|
||||
msgstr "Type de match inconnu."
|
||||
|
||||
#: app/validators.py:632
|
||||
#: app/validators.py:680
|
||||
msgid "A team cannot play against itself."
|
||||
msgstr "Une équipe ne peut pas jouer contre elle-même."
|
||||
|
||||
#: app/validators.py:680
|
||||
#: app/validators.py:728
|
||||
msgid "Unknown game."
|
||||
msgstr "Jeu inconnu."
|
||||
|
||||
#: app/validators.py:685
|
||||
#: app/validators.py:733
|
||||
msgid "Invalid start date format."
|
||||
msgstr "Format de date de début invalide."
|
||||
|
||||
#: app/validators.py:686
|
||||
#: app/validators.py:734
|
||||
msgid "A start date is required."
|
||||
msgstr "Une date de début est requise."
|
||||
|
||||
#: app/validators.py:692
|
||||
#: app/validators.py:740
|
||||
msgid "Invalid end date format."
|
||||
msgstr "Format de date de fin invalide."
|
||||
|
||||
#: app/validators.py:700
|
||||
#: app/validators.py:748
|
||||
msgid "A tryout must allow at least one player."
|
||||
msgstr "Une sélection doit accepter au moins un joueur."
|
||||
|
||||
#: app/validators.py:703
|
||||
#: app/validators.py:751
|
||||
msgid "The player limit must be a whole number."
|
||||
msgstr "La limite de joueurs doit être un nombre entier."
|
||||
|
||||
#: app/validators.py:715
|
||||
#: app/validators.py:763
|
||||
msgid "End date cannot be before start date."
|
||||
msgstr "La date de fin ne peut pas précéder la date de début."
|
||||
|
||||
#: app/validators.py:724
|
||||
#: app/validators.py:790 app/validators.py:791
|
||||
msgid "Team name is required."
|
||||
msgstr "Le nom de l’équipe est obligatoire."
|
||||
|
||||
#: app/validators.py:797
|
||||
msgid "Invalid coach selection."
|
||||
msgstr "Sélection de coach invalide."
|
||||
|
||||
#: app/validators.py:803
|
||||
msgid "Invalid manager selection."
|
||||
msgstr "Sélection de gérant invalide."
|
||||
|
||||
#: app/validators.py:815
|
||||
msgid "Scores run from 1 to 10."
|
||||
msgstr "Les notes vont de 1 à 10."
|
||||
|
||||
#: app/validators.py:725
|
||||
#: app/validators.py:816
|
||||
msgid "A score must be a whole number from 1 to 10."
|
||||
msgstr "Une note doit être un nombre entier de 1 à 10."
|
||||
|
||||
@@ -205,11 +237,11 @@ msgstr ""
|
||||
msgid "Your registration could not be processed. Please try again."
|
||||
msgstr "Votre inscription n'a pas pu être traitée. Veuillez réessayer."
|
||||
|
||||
#: app/routes/auth.py:388 app/routes/users/accounts.py:325
|
||||
#: app/routes/auth.py:388 app/routes/users/accounts.py:329
|
||||
msgid "Username already exists."
|
||||
msgstr "Ce nom d’utilisateur est déjà pris."
|
||||
|
||||
#: app/routes/auth.py:392 app/routes/users/accounts.py:329
|
||||
#: app/routes/auth.py:392 app/routes/users/accounts.py:333
|
||||
msgid "Email already registered."
|
||||
msgstr "Cette adresse courriel est déjà enregistrée."
|
||||
|
||||
@@ -253,7 +285,7 @@ msgstr "Compte Discord connecté. Votre profil a été pré-rempli."
|
||||
msgid "You have been logged out."
|
||||
msgstr "Vous avez été déconnecté."
|
||||
|
||||
#: app/routes/evaluations.py:36
|
||||
#: app/routes/evaluations.py:37
|
||||
msgid "You do not have permission to view evaluations."
|
||||
msgstr "Vous n’avez pas les droits pour consulter les évaluations."
|
||||
|
||||
@@ -281,9 +313,9 @@ msgstr "Évaluation enregistrée."
|
||||
msgid "Evaluation updated!"
|
||||
msgstr "Évaluation mise à jour."
|
||||
|
||||
#: app/routes/evaluations.py:210 app/routes/teams.py:289
|
||||
#: app/routes/teams.py:330 app/routes/teams.py:371 app/routes/teams.py:396
|
||||
#: app/routes/teams.py:421 app/routes/teams.py:456 app/routes/tryouts.py:437
|
||||
#: app/routes/evaluations.py:210 app/routes/teams.py:305
|
||||
#: app/routes/teams.py:346 app/routes/teams.py:387 app/routes/teams.py:412
|
||||
#: app/routes/teams.py:437 app/routes/teams.py:472 app/routes/tryouts.py:437
|
||||
#: app/routes/tryouts.py:453 app/routes/tryouts.py:473
|
||||
#: app/routes/tryouts.py:512 app/routes/tryouts.py:548
|
||||
#: app/routes/tryouts.py:567
|
||||
@@ -308,15 +340,15 @@ msgstr ""
|
||||
msgid "Match scheduled successfully!"
|
||||
msgstr "Match planifié."
|
||||
|
||||
#: app/routes/matches.py:444 app/routes/team_matches.py:212
|
||||
#: app/routes/matches.py:444 app/routes/team_matches.py:220
|
||||
msgid "You do not have permission to edit this match."
|
||||
msgstr "Vous n’avez pas les droits pour modifier ce match."
|
||||
|
||||
#: app/routes/matches.py:539 app/routes/team_matches.py:242
|
||||
#: app/routes/matches.py:539 app/routes/team_matches.py:250
|
||||
msgid "Match updated successfully!"
|
||||
msgstr "Match mis à jour."
|
||||
|
||||
#: app/routes/matches.py:575 app/routes/team_matches.py:257
|
||||
#: app/routes/matches.py:575 app/routes/team_matches.py:265
|
||||
msgid "You do not have permission to delete this match."
|
||||
msgstr "Vous n’avez pas les droits pour supprimer ce match."
|
||||
|
||||
@@ -324,155 +356,151 @@ msgstr "Vous n’avez pas les droits pour supprimer ce match."
|
||||
msgid "This tryout has ended. Matches can no longer be deleted."
|
||||
msgstr "Cette sélection est terminée. Les matchs ne peuvent plus être supprimés."
|
||||
|
||||
#: app/routes/matches.py:591 app/routes/team_matches.py:261
|
||||
#: app/routes/matches.py:591 app/routes/team_matches.py:269
|
||||
msgid "Match deleted successfully."
|
||||
msgstr "Match supprimé."
|
||||
|
||||
#: app/routes/team_matches.py:105
|
||||
#: app/routes/team_matches.py:113
|
||||
msgid "You do not have permission to schedule matches for this team."
|
||||
msgstr "Vous n’avez pas les droits pour planifier des matchs pour cette équipe."
|
||||
|
||||
#: app/routes/team_matches.py:197
|
||||
#: app/routes/team_matches.py:205
|
||||
#, python-format
|
||||
msgid "Team match \"%(title)s\" scheduled successfully!"
|
||||
msgstr "Match d’équipe « %(title)s » planifié."
|
||||
|
||||
#: app/routes/teams.py:41
|
||||
#: app/routes/teams.py:44
|
||||
msgid "Use My Team(s) to view your teams."
|
||||
msgstr "Utilisez « Mon ou mes équipes » pour consulter vos équipes."
|
||||
|
||||
#: app/routes/teams.py:44
|
||||
#: app/routes/teams.py:47
|
||||
msgid "You do not have permission to view teams."
|
||||
msgstr "Vous n’avez pas les droits pour consulter les équipes."
|
||||
|
||||
#: app/routes/teams.py:71
|
||||
#: app/routes/teams.py:74
|
||||
msgid "This page is for players."
|
||||
msgstr "Cette page est réservée aux joueurs."
|
||||
|
||||
#: app/routes/teams.py:124
|
||||
#: app/routes/teams.py:150
|
||||
msgid "You do not have permission to create teams."
|
||||
msgstr "Vous n’avez pas les droits pour créer une équipe."
|
||||
|
||||
#: app/routes/teams.py:132 app/routes/teams.py:177
|
||||
msgid "Team name is required."
|
||||
msgstr "Le nom de l’équipe est obligatoire."
|
||||
|
||||
#: app/routes/teams.py:137 app/routes/teams.py:182
|
||||
#: app/routes/teams.py:161 app/routes/teams.py:203
|
||||
#, python-format
|
||||
msgid "Team \"%(name)s\" already exists."
|
||||
msgstr "L’équipe « %(name)s » existe déjà."
|
||||
|
||||
#: app/routes/teams.py:159
|
||||
#: app/routes/teams.py:182
|
||||
#, python-format
|
||||
msgid "Team \"%(name)s\" created successfully!"
|
||||
msgstr "Équipe « %(name)s » créée."
|
||||
|
||||
#: app/routes/teams.py:169
|
||||
#: app/routes/teams.py:192
|
||||
msgid "You do not have permission to edit this team."
|
||||
msgstr "Vous n’avez pas les droits pour modifier cette équipe."
|
||||
|
||||
#: app/routes/teams.py:220
|
||||
#: app/routes/teams.py:236
|
||||
#, python-format
|
||||
msgid "Team \"%(name)s\" updated successfully!"
|
||||
msgstr "Équipe « %(name)s » mise à jour."
|
||||
|
||||
#: app/routes/teams.py:248
|
||||
#: app/routes/teams.py:264
|
||||
msgid "You do not have permission to delete teams."
|
||||
msgstr "Vous n’avez pas les droits pour supprimer une équipe."
|
||||
|
||||
#: app/routes/teams.py:279
|
||||
#: app/routes/teams.py:295
|
||||
#, python-format
|
||||
msgid "Team \"%(name)s\" deleted successfully."
|
||||
msgstr "Équipe « %(name)s » supprimée."
|
||||
|
||||
#: app/routes/teams.py:294
|
||||
#: app/routes/teams.py:310
|
||||
msgid "Please select a coach."
|
||||
msgstr "Veuillez choisir un coach."
|
||||
|
||||
#: app/routes/teams.py:299
|
||||
#: app/routes/teams.py:315
|
||||
msgid "Only coaches can be assigned as coach."
|
||||
msgstr "Seuls les coachs peuvent être assignés comme coach."
|
||||
|
||||
#: app/routes/teams.py:305
|
||||
#: app/routes/teams.py:321
|
||||
#, python-format
|
||||
msgid "%(username)s is already a coach of %(name)s."
|
||||
msgstr "%(username)s est déjà coach de %(name)s."
|
||||
|
||||
#: app/routes/teams.py:318
|
||||
#: app/routes/teams.py:334
|
||||
#, python-format
|
||||
msgid "%(username)s added as coach of %(name)s."
|
||||
msgstr "%(username)s a été ajouté comme coach de %(name)s."
|
||||
|
||||
#: app/routes/teams.py:335
|
||||
#: app/routes/teams.py:351
|
||||
msgid "Please select a manager."
|
||||
msgstr "Veuillez choisir un gérant."
|
||||
|
||||
#: app/routes/teams.py:340
|
||||
#: app/routes/teams.py:356
|
||||
msgid "Only managers can be assigned as manager."
|
||||
msgstr "Seuls les gérants peuvent être assignés comme gérant."
|
||||
|
||||
#: app/routes/teams.py:346
|
||||
#: app/routes/teams.py:362
|
||||
#, python-format
|
||||
msgid "%(username)s is already a manager of %(name)s."
|
||||
msgstr "%(username)s est déjà gérant de %(name)s."
|
||||
|
||||
#: app/routes/teams.py:359
|
||||
#: app/routes/teams.py:375
|
||||
#, python-format
|
||||
msgid "%(username)s added as manager of %(name)s."
|
||||
msgstr "%(username)s a été ajouté comme gérant de %(name)s."
|
||||
|
||||
#: app/routes/teams.py:386
|
||||
#: app/routes/teams.py:402
|
||||
#, python-format
|
||||
msgid "Coach removed from %(name)s."
|
||||
msgstr "Coach retiré de %(name)s."
|
||||
|
||||
#: app/routes/teams.py:411
|
||||
#: app/routes/teams.py:427
|
||||
#, python-format
|
||||
msgid "Manager removed from %(name)s."
|
||||
msgstr "Gérant retiré de %(name)s."
|
||||
|
||||
#: app/routes/teams.py:427 app/routes/tryouts.py:477 app/routes/tryouts.py:578
|
||||
#: app/routes/teams.py:443 app/routes/tryouts.py:477 app/routes/tryouts.py:578
|
||||
msgid "Please select a player."
|
||||
msgstr "Veuillez choisir un joueur."
|
||||
|
||||
#: app/routes/teams.py:432
|
||||
#: app/routes/teams.py:448
|
||||
msgid "Can only assign players to teams."
|
||||
msgstr "Seuls des joueurs peuvent être assignés à une équipe."
|
||||
|
||||
#: app/routes/teams.py:438
|
||||
#: app/routes/teams.py:454
|
||||
#, python-format
|
||||
msgid "%(username)s is already on %(name)s."
|
||||
msgstr "%(username)s fait déjà partie de %(name)s."
|
||||
|
||||
#: app/routes/teams.py:446
|
||||
#: app/routes/teams.py:462
|
||||
#, python-format
|
||||
msgid "%(username)s added to %(name)s!"
|
||||
msgstr "%(username)s a été ajouté à %(name)s."
|
||||
|
||||
#: app/routes/teams.py:463 app/routes/teams.py:537
|
||||
#: app/routes/teams.py:479 app/routes/teams.py:553
|
||||
#, python-format
|
||||
msgid "%(username)s is not on %(name)s."
|
||||
msgstr "%(username)s ne fait pas partie de %(name)s."
|
||||
|
||||
#: app/routes/teams.py:471
|
||||
#: app/routes/teams.py:487
|
||||
#, python-format
|
||||
msgid "%(username)s removed from %(name)s."
|
||||
msgstr "%(username)s a été retiré de %(name)s."
|
||||
|
||||
#: app/routes/teams.py:508 app/routes/teams.py:526
|
||||
#: app/routes/teams.py:524 app/routes/teams.py:542
|
||||
msgid "You do not have permission to add notes to this team."
|
||||
msgstr "Vous n’avez pas les droits pour ajouter des notes à cette équipe."
|
||||
|
||||
#: app/routes/teams.py:516
|
||||
#: app/routes/teams.py:532
|
||||
msgid "Team notes added successfully!"
|
||||
msgstr "Notes d’équipe ajoutées."
|
||||
|
||||
#: app/routes/teams.py:531 app/routes/users/notes.py:207
|
||||
#: app/routes/teams.py:547 app/routes/users/notes.py:207
|
||||
#: app/routes/users/notes.py:250
|
||||
msgid "Can only add notes for players."
|
||||
msgstr "Il n’est possible d’ajouter des notes que pour des joueurs."
|
||||
|
||||
#: app/routes/teams.py:547
|
||||
#: app/routes/teams.py:563
|
||||
#, python-format
|
||||
msgid "Note added for %(username)s!"
|
||||
msgstr "Note ajoutée pour %(username)s."
|
||||
@@ -586,25 +614,25 @@ msgstr "Seuls les fichiers PDF sont acceptés pour les contrats."
|
||||
msgid "That file is not a PDF, whatever its name says."
|
||||
msgstr "Ce fichier n’est pas un PDF, quel que soit son nom."
|
||||
|
||||
#: app/routes/users/accounts.py:54
|
||||
#: app/routes/users/accounts.py:55
|
||||
msgid "Only the president can manage users."
|
||||
msgstr "Seul le président peut gérer les utilisateurs."
|
||||
|
||||
#: app/routes/users/accounts.py:66
|
||||
#: app/routes/users/accounts.py:70
|
||||
msgid "Only the president can edit users."
|
||||
msgstr "Seul le président peut modifier des utilisateurs."
|
||||
|
||||
#: app/routes/users/accounts.py:107
|
||||
#: app/routes/users/accounts.py:111
|
||||
msgid "Email already in use by another account."
|
||||
msgstr "Cette adresse courriel est déjà utilisée par un autre compte."
|
||||
|
||||
#: app/routes/users/accounts.py:118
|
||||
#: app/routes/users/accounts.py:122
|
||||
msgid "You cannot change your own role. Ask another president to do it."
|
||||
msgstr ""
|
||||
"Vous ne pouvez pas modifier votre propre rôle. Demandez à un autre "
|
||||
"président de le faire."
|
||||
|
||||
#: app/routes/users/accounts.py:131
|
||||
#: app/routes/users/accounts.py:135
|
||||
msgid ""
|
||||
"This is the last active president. Promote another account before "
|
||||
"changing this one."
|
||||
@@ -612,34 +640,34 @@ msgstr ""
|
||||
"C’est le dernier président actif. Promouvez un autre compte avant de "
|
||||
"modifier celui-ci."
|
||||
|
||||
#: app/routes/users/accounts.py:210
|
||||
#: app/routes/users/accounts.py:214
|
||||
#, python-format
|
||||
msgid "User %(username)s updated successfully!"
|
||||
msgstr "Utilisateur %(username)s mis à jour."
|
||||
|
||||
#: app/routes/users/accounts.py:231
|
||||
#: app/routes/users/accounts.py:235
|
||||
msgid "Only the president can delete users."
|
||||
msgstr "Seul le président peut supprimer des utilisateurs."
|
||||
|
||||
#: app/routes/users/accounts.py:235
|
||||
#: app/routes/users/accounts.py:239
|
||||
msgid "You cannot delete your own account."
|
||||
msgstr "Vous ne pouvez pas supprimer votre propre compte."
|
||||
|
||||
#: app/routes/users/accounts.py:294
|
||||
#: app/routes/users/accounts.py:298
|
||||
#, python-format
|
||||
msgid "User %(deleted_username)s has been removed."
|
||||
msgstr "L’utilisateur %(deleted_username)s a été supprimé."
|
||||
|
||||
#: app/routes/users/accounts.py:305
|
||||
#: app/routes/users/accounts.py:309
|
||||
msgid "Only the president can create users."
|
||||
msgstr "Seul le président peut créer des utilisateurs."
|
||||
|
||||
#: app/routes/users/accounts.py:353
|
||||
#: app/routes/users/accounts.py:357
|
||||
#, python-format
|
||||
msgid "User %(full_name)s created as %(role)s!"
|
||||
msgstr "Utilisateur %(full_name)s créé avec le rôle %(role)s."
|
||||
|
||||
#: app/routes/users/availability.py:187
|
||||
#: app/routes/users/availability.py:210
|
||||
msgid "Only coaches can manage availability."
|
||||
msgstr "Seuls les coachs peuvent gérer leurs disponibilités."
|
||||
|
||||
@@ -722,52 +750,48 @@ msgstr "Seuls les coachs peuvent ajouter des notes personnelles."
|
||||
msgid "Note added successfully."
|
||||
msgstr "Note ajoutée."
|
||||
|
||||
#: app/routes/users/one_on_one.py:20
|
||||
#: app/routes/users/one_on_one.py:23
|
||||
msgid "Only players can request One on One sessions."
|
||||
msgstr "Seuls les joueurs peuvent demander une rencontre individuelle."
|
||||
|
||||
#: app/routes/users/one_on_one.py:33
|
||||
#: app/routes/users/one_on_one.py:36
|
||||
msgid "You do not have a coach assigned to your team."
|
||||
msgstr "Aucun coach n’est assigné à votre équipe."
|
||||
|
||||
#: app/routes/users/one_on_one.py:68
|
||||
#: app/routes/users/one_on_one.py:67
|
||||
msgid "Cannot request One on One - no coach assigned."
|
||||
msgstr "Impossible de demander une rencontre : aucun coach assigné."
|
||||
|
||||
#: app/routes/users/one_on_one.py:76
|
||||
msgid "Invalid date or time format."
|
||||
msgstr "Format de date ou d’heure invalide."
|
||||
|
||||
#: app/routes/users/one_on_one.py:90
|
||||
#: app/routes/users/one_on_one.py:93
|
||||
msgid "The requested time is not within the coach's availability."
|
||||
msgstr "L’horaire demandé ne correspond à aucune disponibilité du coach."
|
||||
|
||||
#: app/routes/users/one_on_one.py:118
|
||||
#: app/routes/users/one_on_one.py:121
|
||||
msgid "Your One on One request has been submitted!"
|
||||
msgstr "Votre demande de rencontre a été envoyée."
|
||||
|
||||
#: app/routes/users/one_on_one.py:163
|
||||
#: app/routes/users/one_on_one.py:166
|
||||
msgid "Only coaches can accept One on One requests."
|
||||
msgstr "Seuls les coachs peuvent accepter une demande de rencontre."
|
||||
|
||||
#: app/routes/users/one_on_one.py:169 app/routes/users/one_on_one.py:219
|
||||
#: app/routes/users/one_on_one.py:172 app/routes/users/one_on_one.py:222
|
||||
msgid "This request is not for you."
|
||||
msgstr "Cette demande ne vous est pas destinée."
|
||||
|
||||
#: app/routes/users/one_on_one.py:173 app/routes/users/one_on_one.py:223
|
||||
#: app/routes/users/one_on_one.py:176 app/routes/users/one_on_one.py:226
|
||||
msgid "This request has already been processed."
|
||||
msgstr "Cette demande a déjà été traitée."
|
||||
|
||||
#: app/routes/users/one_on_one.py:200
|
||||
#: app/routes/users/one_on_one.py:203
|
||||
#, python-format
|
||||
msgid "One on One request from %(player)s has been approved!"
|
||||
msgstr "La demande de rencontre de %(player)s a été approuvée."
|
||||
|
||||
#: app/routes/users/one_on_one.py:213
|
||||
#: app/routes/users/one_on_one.py:216
|
||||
msgid "Only coaches can reject One on One requests."
|
||||
msgstr "Seuls les coachs peuvent refuser une demande de rencontre."
|
||||
|
||||
#: app/routes/users/one_on_one.py:255
|
||||
#: app/routes/users/one_on_one.py:258
|
||||
#, python-format
|
||||
msgid "One on One request from %(player)s has been rejected."
|
||||
msgstr "La demande de rencontre de %(player)s a été refusée."
|
||||
@@ -903,6 +927,30 @@ msgstr "Réessayer"
|
||||
msgid "Language"
|
||||
msgstr "Langue"
|
||||
|
||||
#: app/templates/layouts/_pagination.html:19
|
||||
msgid "Pagination"
|
||||
msgstr "Pagination"
|
||||
|
||||
#: app/templates/layouts/_pagination.html:22
|
||||
#: app/templates/layouts/_pagination.html:24
|
||||
msgid "Previous"
|
||||
msgstr "Précédent"
|
||||
|
||||
#: app/templates/layouts/_pagination.html:28
|
||||
#, python-format
|
||||
msgid "Page %(page)s of %(pages)s"
|
||||
msgstr "Page %(page)s sur %(pages)s"
|
||||
|
||||
#: app/templates/layouts/_pagination.html:30
|
||||
#, python-format
|
||||
msgid "%(total)s in total"
|
||||
msgstr "%(total)s au total"
|
||||
|
||||
#: app/templates/layouts/_pagination.html:35
|
||||
#: app/templates/layouts/_pagination.html:37
|
||||
msgid "Next"
|
||||
msgstr "Suivant"
|
||||
|
||||
#: app/templates/layouts/base.html:48 app/templates/layouts/base.html:154
|
||||
#: app/templates/pages/dashboard.html:2 app/templates/pages/dashboard.html:3
|
||||
msgid "Dashboard"
|
||||
@@ -919,8 +967,8 @@ msgid "Calendar"
|
||||
msgstr "Calendrier"
|
||||
|
||||
#: app/templates/layouts/base.html:67 app/templates/pages/dashboard.html:43
|
||||
#: app/templates/pages/evaluations.html:2
|
||||
#: app/templates/pages/evaluations.html:3
|
||||
#: app/templates/pages/evaluations.html:4
|
||||
msgid "Evaluations"
|
||||
msgstr "Évaluations"
|
||||
|
||||
@@ -933,8 +981,8 @@ msgstr "Mon ou mes équipes"
|
||||
msgid "Manage Teams"
|
||||
msgstr "Gestion des équipes"
|
||||
|
||||
#: app/templates/layouts/base.html:90 app/templates/pages/users.html:2
|
||||
#: app/templates/pages/users.html:3
|
||||
#: app/templates/layouts/base.html:90 app/templates/pages/users.html:3
|
||||
#: app/templates/pages/users.html:4
|
||||
msgid "Manage Users"
|
||||
msgstr "Gestion des utilisateurs"
|
||||
|
||||
@@ -1127,12 +1175,12 @@ msgid "Confirm"
|
||||
msgstr "Confirmer"
|
||||
|
||||
#: app/templates/pages/calendar.html:102
|
||||
#: app/templates/pages/team_matches.html:102
|
||||
#: app/templates/pages/team_matches.html:103
|
||||
msgid "Delete Match"
|
||||
msgstr "Supprimer le match"
|
||||
|
||||
#: app/templates/pages/calendar.html:105
|
||||
#: app/templates/pages/team_matches.html:97
|
||||
#: app/templates/pages/team_matches.html:98
|
||||
msgid "Edit Match"
|
||||
msgstr "Modifier le match"
|
||||
|
||||
@@ -1177,7 +1225,7 @@ msgid "Contract Dropbox"
|
||||
msgstr "Dépôt de contrats"
|
||||
|
||||
#: app/templates/pages/contracts.html:26 app/templates/pages/notes.html:87
|
||||
#: app/templates/pages/team_matches.html:26
|
||||
#: app/templates/pages/team_matches.html:27
|
||||
msgid "Team"
|
||||
msgstr "Équipe"
|
||||
|
||||
@@ -1194,8 +1242,8 @@ msgstr "Contrat"
|
||||
#: app/templates/pages/notes.html:126 app/templates/pages/one_on_one.html:73
|
||||
#: app/templates/pages/players_to_evaluate.html:19
|
||||
#: app/templates/pages/team_match_form.html:61
|
||||
#: app/templates/pages/team_matches.html:32 app/templates/pages/teams.html:146
|
||||
#: app/templates/pages/users.html:23 app/templates/pages/view_tryout.html:149
|
||||
#: app/templates/pages/team_matches.html:33 app/templates/pages/teams.html:146
|
||||
#: app/templates/pages/users.html:24 app/templates/pages/view_tryout.html:149
|
||||
#: app/templates/pages/view_tryout.html:321
|
||||
msgid "Status"
|
||||
msgstr "Statut"
|
||||
@@ -1207,8 +1255,8 @@ msgstr "Téléversé le"
|
||||
#: app/templates/pages/contracts.html:30 app/templates/pages/dashboard.html:175
|
||||
#: app/templates/pages/notes.html:127
|
||||
#: app/templates/pages/players_to_evaluate.html:20
|
||||
#: app/templates/pages/team_matches.html:33 app/templates/pages/teams.html:151
|
||||
#: app/templates/pages/users.html:25 app/templates/pages/view_tryout.html:154
|
||||
#: app/templates/pages/team_matches.html:34 app/templates/pages/teams.html:151
|
||||
#: app/templates/pages/users.html:26 app/templates/pages/view_tryout.html:154
|
||||
#: app/templates/pages/view_tryout.html:323
|
||||
msgid "Actions"
|
||||
msgstr "Actions"
|
||||
@@ -1286,7 +1334,7 @@ msgstr "Saisir le nom complet"
|
||||
|
||||
#: app/templates/pages/create_user.html:17
|
||||
#: app/templates/pages/edit_profile.html:13 app/templates/pages/login.html:7
|
||||
#: app/templates/pages/register.html:15 app/templates/pages/users.html:20
|
||||
#: app/templates/pages/register.html:15 app/templates/pages/users.html:21
|
||||
msgid "Username"
|
||||
msgstr "Nom d’utilisateur"
|
||||
|
||||
@@ -1297,7 +1345,7 @@ msgstr "Choisir un nom d’utilisateur"
|
||||
#: app/templates/pages/create_user.html:23
|
||||
#: app/templates/pages/edit_profile.html:23
|
||||
#: app/templates/pages/edit_user.html:17 app/templates/pages/register.html:20
|
||||
#: app/templates/pages/teams.html:148 app/templates/pages/users.html:21
|
||||
#: app/templates/pages/teams.html:148 app/templates/pages/users.html:22
|
||||
msgid "Email"
|
||||
msgstr "Courriel"
|
||||
|
||||
@@ -1317,7 +1365,7 @@ msgstr "Numéro de téléphone"
|
||||
|
||||
#: app/templates/pages/create_user.html:31
|
||||
#: app/templates/pages/dashboard.html:74 app/templates/pages/edit_user.html:27
|
||||
#: app/templates/pages/users.html:22
|
||||
#: app/templates/pages/users.html:23
|
||||
msgid "Role"
|
||||
msgstr "Rôle"
|
||||
|
||||
@@ -1355,11 +1403,11 @@ msgstr "À venir"
|
||||
msgid "Recent Users"
|
||||
msgstr "Utilisateurs récents"
|
||||
|
||||
#: app/templates/pages/dashboard.html:74 app/templates/pages/users.html:19
|
||||
#: app/templates/pages/dashboard.html:74 app/templates/pages/users.html:20
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: app/templates/pages/dashboard.html:74 app/templates/pages/users.html:24
|
||||
#: app/templates/pages/dashboard.html:74 app/templates/pages/users.html:25
|
||||
msgid "Joined"
|
||||
msgstr "Inscrit le"
|
||||
|
||||
@@ -1377,7 +1425,7 @@ msgstr "Titre"
|
||||
#: app/templates/pages/match_form.html:55 app/templates/pages/my_teams.html:92
|
||||
#: app/templates/pages/notes.html:123 app/templates/pages/one_on_one.html:70
|
||||
#: app/templates/pages/team_match_form.html:34
|
||||
#: app/templates/pages/team_matches.html:28
|
||||
#: app/templates/pages/team_matches.html:29
|
||||
#: app/templates/pages/view_tryout.html:317
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
@@ -1390,7 +1438,7 @@ msgstr "Matchs à venir"
|
||||
#: app/templates/pages/dashboard.html:118
|
||||
#: app/templates/pages/dashboard.html:202
|
||||
#: app/templates/pages/dashboard.html:285 app/templates/pages/my_teams.html:90
|
||||
#: app/templates/pages/notes.html:69 app/templates/pages/team_matches.html:25
|
||||
#: app/templates/pages/notes.html:69 app/templates/pages/team_matches.html:26
|
||||
#: app/templates/pages/teams.html:132 app/templates/pages/view_tryout.html:315
|
||||
msgid "Match"
|
||||
msgstr "Match"
|
||||
@@ -1445,7 +1493,7 @@ msgid "My Next Matches"
|
||||
msgstr "Mes prochains matchs"
|
||||
|
||||
#: app/templates/pages/dashboard.html:285 app/templates/pages/my_teams.html:91
|
||||
#: app/templates/pages/team_matches.html:27
|
||||
#: app/templates/pages/team_matches.html:28
|
||||
msgid "Opponent"
|
||||
msgstr "Adversaire"
|
||||
|
||||
@@ -1744,7 +1792,7 @@ msgstr "Global"
|
||||
msgid "Position"
|
||||
msgstr "Poste"
|
||||
|
||||
#: app/templates/pages/evaluations.html:96
|
||||
#: app/templates/pages/evaluations.html:97
|
||||
msgid "No evaluations yet"
|
||||
msgstr "Aucune évaluation"
|
||||
|
||||
@@ -1815,7 +1863,7 @@ msgstr "Annulé"
|
||||
|
||||
#: app/templates/pages/match_form.html:69 app/templates/pages/my_teams.html:94
|
||||
#: app/templates/pages/team_match_form.html:54
|
||||
#: app/templates/pages/team_matches.html:30
|
||||
#: app/templates/pages/team_matches.html:31
|
||||
#: app/templates/pages/tryout_form.html:49
|
||||
msgid "Location"
|
||||
msgstr "Lieu"
|
||||
@@ -1975,14 +2023,14 @@ msgstr "Aucun joueur dans cette équipe."
|
||||
|
||||
#: app/templates/pages/my_teams.html:93 app/templates/pages/notes.html:124
|
||||
#: app/templates/pages/one_on_one.html:71
|
||||
#: app/templates/pages/team_matches.html:29
|
||||
#: app/templates/pages/team_matches.html:30
|
||||
#: app/templates/pages/view_tryout.html:319
|
||||
msgid "Time"
|
||||
msgstr "Heure"
|
||||
|
||||
#: app/templates/pages/my_teams.html:95
|
||||
#: app/templates/pages/team_match_form.html:115
|
||||
#: app/templates/pages/team_matches.html:31
|
||||
#: app/templates/pages/team_matches.html:32
|
||||
#: app/templates/pages/view_tryout.html:320
|
||||
msgid "Presence"
|
||||
msgstr "Présence"
|
||||
@@ -2477,28 +2525,28 @@ msgstr "Participants"
|
||||
msgid "No participants recorded."
|
||||
msgstr "Aucun participant enregistré."
|
||||
|
||||
#: app/templates/pages/team_matches.html:2
|
||||
#: app/templates/pages/team_matches.html:3
|
||||
#: app/templates/pages/team_matches.html:4
|
||||
msgid "Team Matches"
|
||||
msgstr "Matchs d’équipe"
|
||||
|
||||
#: app/templates/pages/team_matches.html:10
|
||||
#: app/templates/pages/team_matches.html:11
|
||||
msgid "+ Schedule Match"
|
||||
msgstr "+ Planifier un match"
|
||||
|
||||
#: app/templates/pages/team_matches.html:100
|
||||
#: app/templates/pages/team_matches.html:101
|
||||
msgid "Delete this match?"
|
||||
msgstr "Supprimer ce match ?"
|
||||
|
||||
#: app/templates/pages/team_matches.html:131
|
||||
#: app/templates/pages/team_matches.html:133
|
||||
msgid "No Team Matches"
|
||||
msgstr "Aucun match d’équipe"
|
||||
|
||||
#: app/templates/pages/team_matches.html:132
|
||||
#: app/templates/pages/team_matches.html:134
|
||||
msgid "Regular season matches have not been scheduled yet."
|
||||
msgstr "Aucun match de saison régulière n’a encore été planifié."
|
||||
|
||||
#: app/templates/pages/team_matches.html:136
|
||||
#: app/templates/pages/team_matches.html:138
|
||||
msgid "-- Schedule a Match --"
|
||||
msgstr "-- Planifier un match --"
|
||||
|
||||
@@ -2555,7 +2603,7 @@ msgstr "-- Aucun gérant assigné --"
|
||||
msgid "Create Team"
|
||||
msgstr "Créer l’équipe"
|
||||
|
||||
#: app/templates/pages/teams.html:64 app/templates/pages/users.html:50
|
||||
#: app/templates/pages/teams.html:64 app/templates/pages/users.html:51
|
||||
#: app/templates/pages/view_tryout.html:29
|
||||
#: app/templates/pages/view_tryout.html:453
|
||||
msgid "Edit"
|
||||
@@ -2764,11 +2812,11 @@ msgstr "Notes (facultatives)"
|
||||
msgid "Add any notes about this contract..."
|
||||
msgstr "Notes éventuelles sur ce contrat..."
|
||||
|
||||
#: app/templates/pages/users.html:8
|
||||
#: app/templates/pages/users.html:9
|
||||
msgid "Add User"
|
||||
msgstr "Ajouter un utilisateur"
|
||||
|
||||
#: app/templates/pages/users.html:53
|
||||
#: app/templates/pages/users.html:54
|
||||
#, python-format
|
||||
msgid "Delete %(name)s? This cannot be undone."
|
||||
msgstr "Supprimer %(name)s ? Cette action est irréversible."
|
||||
@@ -2949,3 +2997,6 @@ msgstr "Voir le profil"
|
||||
#~ msgid "Invalid end time format."
|
||||
#~ msgstr "Format d’heure de fin invalide."
|
||||
|
||||
#~ msgid "Invalid date or time format."
|
||||
#~ msgstr "Format de date ou d’heure invalide."
|
||||
|
||||
|
||||
Reference in New Issue
Block a user