mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-22 06:03:20 +00:00
Better form for user submiting images, fix potential attack vector on bad file being resized and treated as an image
This commit is contained in:
parent
e564c6604c
commit
cc5df9b171
@ -61,6 +61,7 @@
|
||||
<p>
|
||||
{{ form[field_name].label }}
|
||||
</p>
|
||||
{{ form[field_name].errors }}
|
||||
{%- else -%}
|
||||
<em>{% trans %}To edit your profile picture, ask a member of the AE{% endtrans %}</em>
|
||||
{%- endif -%}
|
||||
|
@ -201,10 +201,7 @@ class RegisteringForm(UserCreationForm):
|
||||
|
||||
|
||||
class UserProfileForm(forms.ModelForm):
|
||||
"""Form handling the user profile, managing the files
|
||||
This form is actually pretty bad and was made in the rush before the migration. It should be refactored.
|
||||
TODO: refactor this form.
|
||||
"""
|
||||
"""Form handling the user profile, managing the files"""
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
@ -237,25 +234,35 @@ class UserProfileForm(forms.ModelForm):
|
||||
]
|
||||
widgets = {
|
||||
"date_of_birth": SelectDate,
|
||||
"profile_pict": forms.ClearableFileInput,
|
||||
"avatar_pict": forms.ClearableFileInput,
|
||||
"scrub_pict": forms.ClearableFileInput,
|
||||
"phone": RegionalPhoneNumberWidget,
|
||||
"parent_phone": RegionalPhoneNumberWidget,
|
||||
"quote": forms.Textarea,
|
||||
}
|
||||
labels = {
|
||||
"profile_pict": _(
|
||||
"Profile: you need to be visible on the picture, in order to be recognized (e.g. by the barmen)"
|
||||
),
|
||||
"avatar_pict": _("Avatar: used on the forum"),
|
||||
"scrub_pict": _("Scrub: let other know how your scrub looks like!"),
|
||||
}
|
||||
|
||||
def generate_name(self, field_name, f):
|
||||
field_name = field_name[:-4]
|
||||
return field_name + str(self.instance.id) + "." + f.content_type.split("/")[-1]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
# Image fields are injected here to override the file field provided by the model
|
||||
# This would be better if we could have a SithImage sort of model input instead of a generic SithFile
|
||||
self.fields["profile_pict"] = forms.ImageField(
|
||||
required=False,
|
||||
label=_(
|
||||
"Profile: you need to be visible on the picture, in order to be recognized (e.g. by the barmen)"
|
||||
),
|
||||
)
|
||||
self.fields["avatar_pict"] = forms.ImageField(
|
||||
required=False,
|
||||
label=_("Avatar: used on the forum"),
|
||||
)
|
||||
self.fields["scrub_pict"] = forms.ImageField(
|
||||
required=False,
|
||||
label=_("Scrub: let other know how your scrub looks like!"),
|
||||
)
|
||||
|
||||
def process(self, files):
|
||||
avatar = self.instance.avatar_pict
|
||||
profile = self.instance.profile_pict
|
||||
@ -305,7 +312,7 @@ class UserProfileForm(forms.ModelForm):
|
||||
% {
|
||||
"file_name": f,
|
||||
"msg": _(
|
||||
"Bad image format, only jpeg, png, and gif are accepted"
|
||||
"Bad image format, only jpeg, png, webp and gif are accepted"
|
||||
),
|
||||
},
|
||||
)
|
||||
|
@ -6,7 +6,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-21 15:30+0200\n"
|
||||
"POT-Creation-Date: 2024-08-27 17:02+0200\n"
|
||||
"PO-Revision-Date: 2016-07-18\n"
|
||||
"Last-Translator: Skia <skia@libskia.so>\n"
|
||||
"Language-Team: AE info <ae.info@utbm.fr>\n"
|
||||
@ -219,7 +219,7 @@ msgstr "Compte"
|
||||
msgid "Company"
|
||||
msgstr "Entreprise"
|
||||
|
||||
#: accounting/models.py:312 core/models.py:311 sith/settings.py:404
|
||||
#: accounting/models.py:312 core/models.py:311 sith/settings.py:413
|
||||
#: stock/templates/stock/shopping_list_items.jinja:37
|
||||
msgid "Other"
|
||||
msgstr "Autre"
|
||||
@ -370,17 +370,17 @@ msgstr "Compte en banque : "
|
||||
#: core/templates/core/user_account_detail.jinja:66
|
||||
#: core/templates/core/user_clubs.jinja:34
|
||||
#: core/templates/core/user_clubs.jinja:63
|
||||
#: core/templates/core/user_edit.jinja:53
|
||||
#: core/templates/core/user_edit.jinja:57
|
||||
#: core/templates/core/user_preferences.jinja:48
|
||||
#: counter/templates/counter/last_ops.jinja:35
|
||||
#: counter/templates/counter/last_ops.jinja:65
|
||||
#: election/templates/election/election_detail.jinja:187
|
||||
#: forum/templates/forum/macros.jinja:21 forum/templates/forum/macros.jinja:134
|
||||
#: launderette/templates/launderette/launderette_admin.jinja:16
|
||||
#: launderette/views.py:217 pedagogy/templates/pedagogy/guide.jinja:95
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:110
|
||||
#: launderette/views.py:217 pedagogy/templates/pedagogy/guide.jinja:96
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:111
|
||||
#: pedagogy/templates/pedagogy/uv_detail.jinja:185
|
||||
#: sas/templates/sas/album.jinja:32 sas/templates/sas/moderation.jinja:18
|
||||
#: sas/templates/sas/album.jinja:33 sas/templates/sas/moderation.jinja:18
|
||||
#: sas/templates/sas/picture.jinja:48
|
||||
#: stock/templates/stock/stock_shopping_list.jinja:43
|
||||
#: stock/templates/stock/stock_shopping_list.jinja:69
|
||||
@ -433,10 +433,10 @@ msgstr "Nouveau compte club"
|
||||
#: forum/templates/forum/macros.jinja:20 forum/templates/forum/macros.jinja:62
|
||||
#: forum/templates/forum/macros.jinja:128
|
||||
#: launderette/templates/launderette/launderette_list.jinja:16
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:94
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:109
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:95
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:110
|
||||
#: pedagogy/templates/pedagogy/uv_detail.jinja:184
|
||||
#: sas/templates/sas/album.jinja:31 trombi/templates/trombi/detail.jinja:9
|
||||
#: sas/templates/sas/album.jinja:32 trombi/templates/trombi/detail.jinja:9
|
||||
#: trombi/templates/trombi/edit_profile.jinja:34
|
||||
msgid "Edit"
|
||||
msgstr "Éditer"
|
||||
@ -526,7 +526,7 @@ msgid "Effective amount"
|
||||
msgstr "Montant effectif"
|
||||
|
||||
#: accounting/templates/accounting/club_account_details.jinja:36
|
||||
#: sith/settings.py:450
|
||||
#: sith/settings.py:459
|
||||
msgid "Closed"
|
||||
msgstr "Fermé"
|
||||
|
||||
@ -1162,7 +1162,7 @@ msgid "There are no members in this club."
|
||||
msgstr "Il n'y a pas de membres dans ce club."
|
||||
|
||||
#: club/templates/club/club_members.jinja:80
|
||||
#: core/templates/core/file_detail.jinja:19 core/views/forms.py:332
|
||||
#: core/templates/core/file_detail.jinja:19 core/views/forms.py:339
|
||||
#: launderette/views.py:217 trombi/templates/trombi/detail.jinja:19
|
||||
msgid "Add"
|
||||
msgstr "Ajouter"
|
||||
@ -1587,7 +1587,7 @@ msgstr "Type"
|
||||
#: com/templates/com/weekmail.jinja:19 com/templates/com/weekmail.jinja:48
|
||||
#: forum/templates/forum/forum.jinja:28 forum/templates/forum/forum.jinja:47
|
||||
#: forum/templates/forum/main.jinja:30 forum/views.py:246
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:88
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:89
|
||||
msgid "Title"
|
||||
msgstr "Titre"
|
||||
|
||||
@ -2387,7 +2387,7 @@ msgstr "403, Non autorisé"
|
||||
msgid "404, Not Found"
|
||||
msgstr "404. Non trouvé"
|
||||
|
||||
#: core/templates/core/500.jinja:12
|
||||
#: core/templates/core/500.jinja:11
|
||||
msgid "500, Server Error"
|
||||
msgstr "500, Erreur Serveur"
|
||||
|
||||
@ -2479,7 +2479,7 @@ msgstr "Photos"
|
||||
#: eboutic/templates/eboutic/eboutic_main.jinja:22
|
||||
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:16
|
||||
#: eboutic/templates/eboutic/eboutic_payment_result.jinja:4
|
||||
#: sith/settings.py:403 sith/settings.py:411
|
||||
#: sith/settings.py:412 sith/settings.py:420
|
||||
msgid "Eboutic"
|
||||
msgstr "Eboutic"
|
||||
|
||||
@ -2621,20 +2621,20 @@ msgstr "Propriétés"
|
||||
msgid "Owner: "
|
||||
msgstr "Propriétaire : "
|
||||
|
||||
#: core/templates/core/file_detail.jinja:26 sas/templates/sas/album.jinja:46
|
||||
#: core/templates/core/file_detail.jinja:26 sas/templates/sas/album.jinja:47
|
||||
#: sas/templates/sas/main.jinja:49
|
||||
msgid "Clear clipboard"
|
||||
msgstr "Vider le presse-papier"
|
||||
|
||||
#: core/templates/core/file_detail.jinja:27 sas/templates/sas/album.jinja:33
|
||||
#: core/templates/core/file_detail.jinja:27 sas/templates/sas/album.jinja:34
|
||||
msgid "Cut"
|
||||
msgstr "Couper"
|
||||
|
||||
#: core/templates/core/file_detail.jinja:28 sas/templates/sas/album.jinja:34
|
||||
#: core/templates/core/file_detail.jinja:28 sas/templates/sas/album.jinja:35
|
||||
msgid "Paste"
|
||||
msgstr "Coller"
|
||||
|
||||
#: core/templates/core/file_detail.jinja:31 sas/templates/sas/album.jinja:40
|
||||
#: core/templates/core/file_detail.jinja:31 sas/templates/sas/album.jinja:41
|
||||
#: sas/templates/sas/main.jinja:43
|
||||
msgid "Clipboard: "
|
||||
msgstr "Presse-papier : "
|
||||
@ -2696,7 +2696,7 @@ msgid "Edit group"
|
||||
msgstr "Éditer le groupe"
|
||||
|
||||
#: core/templates/core/group_edit.jinja:9
|
||||
#: core/templates/core/user_edit.jinja:235
|
||||
#: core/templates/core/user_edit.jinja:268
|
||||
#: core/templates/core/user_group.jinja:13
|
||||
#: pedagogy/templates/pedagogy/uv_edit.jinja:36
|
||||
msgid "Update"
|
||||
@ -2771,23 +2771,23 @@ msgstr "Créneau"
|
||||
msgid "Tokens"
|
||||
msgstr "Jetons"
|
||||
|
||||
#: core/templates/core/macros.jinja:123 core/templates/core/macros.jinja:125
|
||||
#: core/templates/core/macros.jinja:163 core/templates/core/macros.jinja:165
|
||||
msgid "Previous"
|
||||
msgstr "Précédent"
|
||||
|
||||
#: core/templates/core/macros.jinja:129
|
||||
#: core/templates/core/macros.jinja:169
|
||||
msgid "current"
|
||||
msgstr "actuel"
|
||||
|
||||
#: core/templates/core/macros.jinja:135 core/templates/core/macros.jinja:137
|
||||
#: core/templates/core/macros.jinja:175 core/templates/core/macros.jinja:177
|
||||
msgid "Next"
|
||||
msgstr "Suivant"
|
||||
|
||||
#: core/templates/core/macros.jinja:153
|
||||
#: core/templates/core/macros.jinja:193
|
||||
msgid "Select All"
|
||||
msgstr "Tout sélectionner"
|
||||
|
||||
#: core/templates/core/macros.jinja:154
|
||||
#: core/templates/core/macros.jinja:194
|
||||
msgid "Unselect All"
|
||||
msgstr "Tout désélectionner"
|
||||
|
||||
@ -3194,31 +3194,31 @@ msgstr "Activer la caméra"
|
||||
msgid "Take a picture"
|
||||
msgstr "Prendre une photo"
|
||||
|
||||
#: core/templates/core/user_edit.jinja:60
|
||||
#: core/templates/core/user_edit.jinja:64
|
||||
msgid "To edit your profile picture, ask a member of the AE"
|
||||
msgstr "Pour changer votre photo de profil, demandez à un membre de l'AE"
|
||||
|
||||
#: core/templates/core/user_edit.jinja:142
|
||||
#: core/templates/core/user_edit.jinja:173
|
||||
msgid "captured"
|
||||
msgstr "capturé"
|
||||
|
||||
#: core/templates/core/user_edit.jinja:163
|
||||
#: core/templates/core/user_edit.jinja:196
|
||||
msgid "Edit user profile"
|
||||
msgstr "Éditer le profil de l'utilisateur"
|
||||
|
||||
#: core/templates/core/user_edit.jinja:225
|
||||
#: core/templates/core/user_edit.jinja:258
|
||||
msgid "Change my password"
|
||||
msgstr "Changer mon mot de passe"
|
||||
|
||||
#: core/templates/core/user_edit.jinja:230
|
||||
#: core/templates/core/user_edit.jinja:263
|
||||
msgid "Change user password"
|
||||
msgstr "Changer le mot de passe"
|
||||
|
||||
#: core/templates/core/user_edit.jinja:240
|
||||
#: core/templates/core/user_edit.jinja:273
|
||||
msgid "Username:"
|
||||
msgstr "Nom d'utilisateur : "
|
||||
|
||||
#: core/templates/core/user_edit.jinja:243
|
||||
#: core/templates/core/user_edit.jinja:276
|
||||
msgid "Account number:"
|
||||
msgstr "Numéro de compte : "
|
||||
|
||||
@ -3308,12 +3308,12 @@ msgstr "Photos de %(user_name)s"
|
||||
msgid "Download all my pictures"
|
||||
msgstr "Télécharger toutes mes photos"
|
||||
|
||||
#: core/templates/core/user_pictures.jinja:49 sas/templates/sas/album.jinja:74
|
||||
#: core/templates/core/user_pictures.jinja:49 sas/templates/sas/album.jinja:75
|
||||
#: sas/templates/sas/macros.jinja:16
|
||||
msgid "To be moderated"
|
||||
msgstr "A modérer"
|
||||
|
||||
#: core/templates/core/user_pictures.jinja:130
|
||||
#: core/templates/core/user_pictures.jinja:136
|
||||
msgid "pictures"
|
||||
msgstr "photos"
|
||||
|
||||
@ -3508,12 +3508,12 @@ msgid "Moderate pictures"
|
||||
msgstr "Modérer les photos"
|
||||
|
||||
#: core/templates/core/user_tools.jinja:173
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:21
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:22
|
||||
msgid "Create UV"
|
||||
msgstr "Créer UV"
|
||||
|
||||
#: core/templates/core/user_tools.jinja:174
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:24
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:25
|
||||
#: trombi/templates/trombi/detail.jinja:10
|
||||
msgid "Moderate comments"
|
||||
msgstr "Modérer les commentaires"
|
||||
@ -3538,7 +3538,7 @@ msgstr "Autres outils"
|
||||
msgid "Trombi tools"
|
||||
msgstr "Outils Trombi"
|
||||
|
||||
#: core/templatetags/renderer.py:84
|
||||
#: core/templatetags/renderer.py:89
|
||||
#, python-format
|
||||
msgid "%(nb_days)d day, %(remainder)s"
|
||||
msgid_plural "%(nb_days)d days, %(remainder)s"
|
||||
@ -3554,7 +3554,7 @@ msgstr "Ajouter un nouveau dossier"
|
||||
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:154 core/views/forms.py:297 core/views/forms.py:304
|
||||
#: core/views/files.py:154 core/views/forms.py:304 core/views/forms.py:311
|
||||
#: sas/views.py:81
|
||||
#, python-format
|
||||
msgid "Error uploading file %(file_name)s: %(msg)s"
|
||||
@ -3652,7 +3652,7 @@ msgstr "Choisir un utilisateur"
|
||||
msgid "Username, email, or account number"
|
||||
msgstr "Nom d'utilisateur, email, ou numéro de compte AE"
|
||||
|
||||
#: core/views/forms.py:249
|
||||
#: core/views/forms.py:254
|
||||
msgid ""
|
||||
"Profile: you need to be visible on the picture, in order to be recognized (e."
|
||||
"g. by the barmen)"
|
||||
@ -3660,36 +3660,36 @@ msgstr ""
|
||||
"Photo de profil: vous devez être visible sur la photo afin d'être reconnu "
|
||||
"(par exemple par les barmen)"
|
||||
|
||||
#: core/views/forms.py:251
|
||||
#: core/views/forms.py:259
|
||||
msgid "Avatar: used on the forum"
|
||||
msgstr "Avatar : utilisé sur le forum"
|
||||
|
||||
#: core/views/forms.py:252
|
||||
#: core/views/forms.py:263
|
||||
msgid "Scrub: let other know how your scrub looks like!"
|
||||
msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !"
|
||||
|
||||
#: core/views/forms.py:308
|
||||
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:315
|
||||
msgid "Bad image format, only jpeg, png, webp and gif are accepted"
|
||||
msgstr "Mauvais format d'image, seuls les jpeg, png, webp et gif sont acceptés"
|
||||
|
||||
#: core/views/forms.py:329
|
||||
#: core/views/forms.py:336
|
||||
msgid "Godfather / Godmother"
|
||||
msgstr "Parrain / Marraine"
|
||||
|
||||
#: core/views/forms.py:330
|
||||
#: core/views/forms.py:337
|
||||
msgid "Godchild"
|
||||
msgstr "Fillot / Fillote"
|
||||
|
||||
#: core/views/forms.py:335 counter/forms.py:67 trombi/views.py:149
|
||||
#: core/views/forms.py:342 counter/forms.py:67 trombi/views.py:149
|
||||
msgid "Select user"
|
||||
msgstr "Choisir un utilisateur"
|
||||
|
||||
#: core/views/forms.py:348 core/views/forms.py:366 election/models.py:22
|
||||
#: core/views/forms.py:355 core/views/forms.py:373 election/models.py:22
|
||||
#: election/views.py:147
|
||||
msgid "edit groups"
|
||||
msgstr "groupe d'édition"
|
||||
|
||||
#: core/views/forms.py:351 core/views/forms.py:369 election/models.py:29
|
||||
#: core/views/forms.py:358 core/views/forms.py:376 election/models.py:29
|
||||
#: election/views.py:150
|
||||
msgid "view groups"
|
||||
msgstr "groupe de vue"
|
||||
@ -3710,7 +3710,7 @@ msgstr "Nous n'avons pas réussi à vérifier que cette adresse mail existe."
|
||||
msgid "Family"
|
||||
msgstr "Famille"
|
||||
|
||||
#: core/views/user.py:207 sas/templates/sas/album.jinja:63
|
||||
#: core/views/user.py:207 sas/templates/sas/album.jinja:64
|
||||
#: trombi/templates/trombi/export.jinja:25
|
||||
#: trombi/templates/trombi/user_profile.jinja:11
|
||||
msgid "Pictures"
|
||||
@ -3889,8 +3889,8 @@ msgstr "quantité"
|
||||
msgid "Sith account"
|
||||
msgstr "Compte utilisateur"
|
||||
|
||||
#: counter/models.py:683 sith/settings.py:396 sith/settings.py:401
|
||||
#: sith/settings.py:421
|
||||
#: counter/models.py:683 sith/settings.py:405 sith/settings.py:410
|
||||
#: sith/settings.py:430
|
||||
msgid "Credit card"
|
||||
msgstr "Carte bancaire"
|
||||
|
||||
@ -4926,12 +4926,12 @@ msgid "Washing and drying"
|
||||
msgstr "Lavage et séchage"
|
||||
|
||||
#: launderette/templates/launderette/launderette_book.jinja:27
|
||||
#: sith/settings.py:635
|
||||
#: sith/settings.py:644
|
||||
msgid "Washing"
|
||||
msgstr "Lavage"
|
||||
|
||||
#: launderette/templates/launderette/launderette_book.jinja:31
|
||||
#: sith/settings.py:635
|
||||
#: sith/settings.py:644
|
||||
msgid "Drying"
|
||||
msgstr "Séchage"
|
||||
|
||||
@ -5127,30 +5127,30 @@ msgstr "signalant"
|
||||
msgid "reason"
|
||||
msgstr "raison"
|
||||
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:4
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:5
|
||||
msgid "UV Guide"
|
||||
msgstr "Guide des UVs"
|
||||
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:55
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:56
|
||||
#, python-format
|
||||
msgid "%(display_name)s"
|
||||
msgstr "%(display_name)s"
|
||||
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:69
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:70
|
||||
#, python-format
|
||||
msgid "%(credit_type)s"
|
||||
msgstr "%(credit_type)s"
|
||||
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:87
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:88
|
||||
#: pedagogy/templates/pedagogy/moderation.jinja:12
|
||||
msgid "UV"
|
||||
msgstr "UE"
|
||||
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:89
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:90
|
||||
msgid "Department"
|
||||
msgstr "Département"
|
||||
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:90
|
||||
#: pedagogy/templates/pedagogy/guide.jinja:91
|
||||
msgid "Credit type"
|
||||
msgstr "Type de crédit"
|
||||
|
||||
@ -5335,20 +5335,20 @@ msgstr "Utilisateur à sélectionner"
|
||||
msgid "picture"
|
||||
msgstr "photo"
|
||||
|
||||
#: sas/templates/sas/album.jinja:9 sas/templates/sas/main.jinja:8
|
||||
#: sas/templates/sas/album.jinja:10 sas/templates/sas/main.jinja:8
|
||||
#: sas/templates/sas/main.jinja:17 sas/templates/sas/picture.jinja:8
|
||||
msgid "SAS"
|
||||
msgstr "SAS"
|
||||
|
||||
#: sas/templates/sas/album.jinja:52 sas/templates/sas/moderation.jinja:10
|
||||
#: sas/templates/sas/album.jinja:53 sas/templates/sas/moderation.jinja:10
|
||||
msgid "Albums"
|
||||
msgstr "Albums"
|
||||
|
||||
#: sas/templates/sas/album.jinja:117
|
||||
#: sas/templates/sas/album.jinja:97
|
||||
msgid "Upload"
|
||||
msgstr "Envoyer"
|
||||
|
||||
#: sas/templates/sas/album.jinja:124
|
||||
#: sas/templates/sas/album.jinja:104
|
||||
msgid "Template generation time: "
|
||||
msgstr "Temps de génération du template : "
|
||||
|
||||
@ -5401,380 +5401,380 @@ msgstr "Erreur de création de l'album %(album)s : %(msg)s"
|
||||
msgid "Add user"
|
||||
msgstr "Ajouter une personne"
|
||||
|
||||
#: sith/settings.py:247 sith/settings.py:458
|
||||
#: sith/settings.py:247 sith/settings.py:467
|
||||
msgid "English"
|
||||
msgstr "Anglais"
|
||||
|
||||
#: sith/settings.py:247 sith/settings.py:457
|
||||
#: sith/settings.py:247 sith/settings.py:466
|
||||
msgid "French"
|
||||
msgstr "Français"
|
||||
|
||||
#: sith/settings.py:377
|
||||
#: sith/settings.py:386
|
||||
msgid "TC"
|
||||
msgstr "TC"
|
||||
|
||||
#: sith/settings.py:378
|
||||
#: sith/settings.py:387
|
||||
msgid "IMSI"
|
||||
msgstr "IMSI"
|
||||
|
||||
#: sith/settings.py:379
|
||||
#: sith/settings.py:388
|
||||
msgid "IMAP"
|
||||
msgstr "IMAP"
|
||||
|
||||
#: sith/settings.py:380
|
||||
#: sith/settings.py:389
|
||||
msgid "INFO"
|
||||
msgstr "INFO"
|
||||
|
||||
#: sith/settings.py:381
|
||||
#: sith/settings.py:390
|
||||
msgid "GI"
|
||||
msgstr "GI"
|
||||
|
||||
#: sith/settings.py:382 sith/settings.py:468
|
||||
#: sith/settings.py:391 sith/settings.py:477
|
||||
msgid "E"
|
||||
msgstr "E"
|
||||
|
||||
#: sith/settings.py:383
|
||||
#: sith/settings.py:392
|
||||
msgid "EE"
|
||||
msgstr "EE"
|
||||
|
||||
#: sith/settings.py:384
|
||||
#: sith/settings.py:393
|
||||
msgid "GESC"
|
||||
msgstr "GESC"
|
||||
|
||||
#: sith/settings.py:385
|
||||
#: sith/settings.py:394
|
||||
msgid "GMC"
|
||||
msgstr "GMC"
|
||||
|
||||
#: sith/settings.py:386
|
||||
#: sith/settings.py:395
|
||||
msgid "MC"
|
||||
msgstr "MC"
|
||||
|
||||
#: sith/settings.py:387
|
||||
#: sith/settings.py:396
|
||||
msgid "EDIM"
|
||||
msgstr "EDIM"
|
||||
|
||||
#: sith/settings.py:388
|
||||
#: sith/settings.py:397
|
||||
msgid "Humanities"
|
||||
msgstr "Humanités"
|
||||
|
||||
#: sith/settings.py:389
|
||||
#: sith/settings.py:398
|
||||
msgid "N/A"
|
||||
msgstr "N/A"
|
||||
|
||||
#: sith/settings.py:393 sith/settings.py:400 sith/settings.py:419
|
||||
#: sith/settings.py:402 sith/settings.py:409 sith/settings.py:428
|
||||
msgid "Check"
|
||||
msgstr "Chèque"
|
||||
|
||||
#: sith/settings.py:394 sith/settings.py:402 sith/settings.py:420
|
||||
#: sith/settings.py:403 sith/settings.py:411 sith/settings.py:429
|
||||
msgid "Cash"
|
||||
msgstr "Espèces"
|
||||
|
||||
#: sith/settings.py:395
|
||||
#: sith/settings.py:404
|
||||
msgid "Transfert"
|
||||
msgstr "Virement"
|
||||
|
||||
#: sith/settings.py:408
|
||||
#: sith/settings.py:417
|
||||
msgid "Belfort"
|
||||
msgstr "Belfort"
|
||||
|
||||
#: sith/settings.py:409
|
||||
#: sith/settings.py:418
|
||||
msgid "Sevenans"
|
||||
msgstr "Sevenans"
|
||||
|
||||
#: sith/settings.py:410
|
||||
#: sith/settings.py:419
|
||||
msgid "Montbéliard"
|
||||
msgstr "Montbéliard"
|
||||
|
||||
#: sith/settings.py:438
|
||||
#: sith/settings.py:447
|
||||
msgid "Free"
|
||||
msgstr "Libre"
|
||||
|
||||
#: sith/settings.py:439
|
||||
#: sith/settings.py:448
|
||||
msgid "CS"
|
||||
msgstr "CS"
|
||||
|
||||
#: sith/settings.py:440
|
||||
#: sith/settings.py:449
|
||||
msgid "TM"
|
||||
msgstr "TM"
|
||||
|
||||
#: sith/settings.py:441
|
||||
#: sith/settings.py:450
|
||||
msgid "OM"
|
||||
msgstr "OM"
|
||||
|
||||
#: sith/settings.py:442
|
||||
#: sith/settings.py:451
|
||||
msgid "QC"
|
||||
msgstr "QC"
|
||||
|
||||
#: sith/settings.py:443
|
||||
#: sith/settings.py:452
|
||||
msgid "EC"
|
||||
msgstr "EC"
|
||||
|
||||
#: sith/settings.py:444
|
||||
#: sith/settings.py:453
|
||||
msgid "RN"
|
||||
msgstr "RN"
|
||||
|
||||
#: sith/settings.py:445
|
||||
#: sith/settings.py:454
|
||||
msgid "ST"
|
||||
msgstr "ST"
|
||||
|
||||
#: sith/settings.py:446
|
||||
#: sith/settings.py:455
|
||||
msgid "EXT"
|
||||
msgstr "EXT"
|
||||
|
||||
#: sith/settings.py:451
|
||||
#: sith/settings.py:460
|
||||
msgid "Autumn"
|
||||
msgstr "Automne"
|
||||
|
||||
#: sith/settings.py:452
|
||||
#: sith/settings.py:461
|
||||
msgid "Spring"
|
||||
msgstr "Printemps"
|
||||
|
||||
#: sith/settings.py:453
|
||||
#: sith/settings.py:462
|
||||
msgid "Autumn and spring"
|
||||
msgstr "Automne et printemps"
|
||||
|
||||
#: sith/settings.py:459
|
||||
#: sith/settings.py:468
|
||||
msgid "German"
|
||||
msgstr "Allemand"
|
||||
|
||||
#: sith/settings.py:460
|
||||
#: sith/settings.py:469
|
||||
msgid "Spanish"
|
||||
msgstr "Espagnol"
|
||||
|
||||
#: sith/settings.py:464
|
||||
#: sith/settings.py:473
|
||||
msgid "A"
|
||||
msgstr "A"
|
||||
|
||||
#: sith/settings.py:465
|
||||
#: sith/settings.py:474
|
||||
msgid "B"
|
||||
msgstr "B"
|
||||
|
||||
#: sith/settings.py:466
|
||||
#: sith/settings.py:475
|
||||
msgid "C"
|
||||
msgstr "C"
|
||||
|
||||
#: sith/settings.py:467
|
||||
#: sith/settings.py:476
|
||||
msgid "D"
|
||||
msgstr "D"
|
||||
|
||||
#: sith/settings.py:469
|
||||
#: sith/settings.py:478
|
||||
msgid "FX"
|
||||
msgstr "FX"
|
||||
|
||||
#: sith/settings.py:470
|
||||
#: sith/settings.py:479
|
||||
msgid "F"
|
||||
msgstr "F"
|
||||
|
||||
#: sith/settings.py:471
|
||||
#: sith/settings.py:480
|
||||
msgid "Abs"
|
||||
msgstr "Abs"
|
||||
|
||||
#: sith/settings.py:475
|
||||
#: sith/settings.py:484
|
||||
msgid "Selling deletion"
|
||||
msgstr "Suppression de vente"
|
||||
|
||||
#: sith/settings.py:476
|
||||
#: sith/settings.py:485
|
||||
msgid "Refilling deletion"
|
||||
msgstr "Suppression de rechargement"
|
||||
|
||||
#: sith/settings.py:513
|
||||
#: sith/settings.py:522
|
||||
msgid "One semester"
|
||||
msgstr "Un semestre, 20 €"
|
||||
|
||||
#: sith/settings.py:514
|
||||
#: sith/settings.py:523
|
||||
msgid "Two semesters"
|
||||
msgstr "Deux semestres, 35 €"
|
||||
|
||||
#: sith/settings.py:516
|
||||
#: sith/settings.py:525
|
||||
msgid "Common core cursus"
|
||||
msgstr "Cursus tronc commun, 60 €"
|
||||
|
||||
#: sith/settings.py:520
|
||||
#: sith/settings.py:529
|
||||
msgid "Branch cursus"
|
||||
msgstr "Cursus branche, 60 €"
|
||||
|
||||
#: sith/settings.py:521
|
||||
#: sith/settings.py:530
|
||||
msgid "Alternating cursus"
|
||||
msgstr "Cursus alternant, 30 €"
|
||||
|
||||
#: sith/settings.py:522
|
||||
#: sith/settings.py:531
|
||||
msgid "Honorary member"
|
||||
msgstr "Membre honoraire, 0 €"
|
||||
|
||||
#: sith/settings.py:523
|
||||
#: sith/settings.py:532
|
||||
msgid "Assidu member"
|
||||
msgstr "Membre d'Assidu, 0 €"
|
||||
|
||||
#: sith/settings.py:524
|
||||
#: sith/settings.py:533
|
||||
msgid "Amicale/DOCEO member"
|
||||
msgstr "Membre de l'Amicale/DOCEO, 0 €"
|
||||
|
||||
#: sith/settings.py:525
|
||||
#: sith/settings.py:534
|
||||
msgid "UT network member"
|
||||
msgstr "Cotisant du réseau UT, 0 €"
|
||||
|
||||
#: sith/settings.py:526
|
||||
#: sith/settings.py:535
|
||||
msgid "CROUS member"
|
||||
msgstr "Membres du CROUS, 0 €"
|
||||
|
||||
#: sith/settings.py:527
|
||||
#: sith/settings.py:536
|
||||
msgid "Sbarro/ESTA member"
|
||||
msgstr "Membre de Sbarro ou de l'ESTA, 20 €"
|
||||
|
||||
#: sith/settings.py:529
|
||||
#: sith/settings.py:538
|
||||
msgid "One semester Welcome Week"
|
||||
msgstr "Un semestre Welcome Week"
|
||||
|
||||
#: sith/settings.py:533
|
||||
#: sith/settings.py:542
|
||||
msgid "One month for free"
|
||||
msgstr "Un mois gratuit"
|
||||
|
||||
#: sith/settings.py:534
|
||||
#: sith/settings.py:543
|
||||
msgid "Two months for free"
|
||||
msgstr "Deux mois gratuits"
|
||||
|
||||
#: sith/settings.py:535
|
||||
#: sith/settings.py:544
|
||||
msgid "Eurok's volunteer"
|
||||
msgstr "Bénévole Eurockéennes"
|
||||
|
||||
#: sith/settings.py:537
|
||||
#: sith/settings.py:546
|
||||
msgid "Six weeks for free"
|
||||
msgstr "6 semaines gratuites"
|
||||
|
||||
#: sith/settings.py:541
|
||||
#: sith/settings.py:550
|
||||
msgid "One day"
|
||||
msgstr "Un jour"
|
||||
|
||||
#: sith/settings.py:542
|
||||
#: sith/settings.py:551
|
||||
msgid "GA staff member"
|
||||
msgstr "Membre staff GA (2 semaines), 1 €"
|
||||
|
||||
#: sith/settings.py:545
|
||||
#: sith/settings.py:554
|
||||
msgid "One semester (-20%)"
|
||||
msgstr "Un semestre (-20%), 12 €"
|
||||
|
||||
#: sith/settings.py:550
|
||||
#: sith/settings.py:559
|
||||
msgid "Two semesters (-20%)"
|
||||
msgstr "Deux semestres (-20%), 22 €"
|
||||
|
||||
#: sith/settings.py:555
|
||||
#: sith/settings.py:564
|
||||
msgid "Common core cursus (-20%)"
|
||||
msgstr "Cursus tronc commun (-20%), 36 €"
|
||||
|
||||
#: sith/settings.py:560
|
||||
#: sith/settings.py:569
|
||||
msgid "Branch cursus (-20%)"
|
||||
msgstr "Cursus branche (-20%), 36 €"
|
||||
|
||||
#: sith/settings.py:565
|
||||
#: sith/settings.py:574
|
||||
msgid "Alternating cursus (-20%)"
|
||||
msgstr "Cursus alternant (-20%), 24 €"
|
||||
|
||||
#: sith/settings.py:571
|
||||
#: sith/settings.py:580
|
||||
msgid "One year for free(CA offer)"
|
||||
msgstr "Une année offerte (Offre CA)"
|
||||
|
||||
#: sith/settings.py:591
|
||||
#: sith/settings.py:600
|
||||
msgid "President"
|
||||
msgstr "Président⸱e"
|
||||
|
||||
#: sith/settings.py:592
|
||||
#: sith/settings.py:601
|
||||
msgid "Vice-President"
|
||||
msgstr "Vice-Président⸱e"
|
||||
|
||||
#: sith/settings.py:593
|
||||
#: sith/settings.py:602
|
||||
msgid "Treasurer"
|
||||
msgstr "Trésorier⸱e"
|
||||
|
||||
#: sith/settings.py:594
|
||||
#: sith/settings.py:603
|
||||
msgid "Communication supervisor"
|
||||
msgstr "Responsable communication"
|
||||
|
||||
#: sith/settings.py:595
|
||||
#: sith/settings.py:604
|
||||
msgid "Secretary"
|
||||
msgstr "Secrétaire"
|
||||
|
||||
#: sith/settings.py:596
|
||||
#: sith/settings.py:605
|
||||
msgid "IT supervisor"
|
||||
msgstr "Responsable info"
|
||||
|
||||
#: sith/settings.py:597
|
||||
#: sith/settings.py:606
|
||||
msgid "Board member"
|
||||
msgstr "Membre du bureau"
|
||||
|
||||
#: sith/settings.py:598
|
||||
#: sith/settings.py:607
|
||||
msgid "Active member"
|
||||
msgstr "Membre actif⸱ve"
|
||||
|
||||
#: sith/settings.py:599
|
||||
#: sith/settings.py:608
|
||||
msgid "Curious"
|
||||
msgstr "Curieux⸱euse"
|
||||
|
||||
#: sith/settings.py:639
|
||||
#: sith/settings.py:648
|
||||
msgid "A new poster needs to be moderated"
|
||||
msgstr "Une nouvelle affiche a besoin d'être modérée"
|
||||
|
||||
#: sith/settings.py:640
|
||||
#: sith/settings.py:649
|
||||
msgid "A new mailing list needs to be moderated"
|
||||
msgstr "Une nouvelle mailing list a besoin d'être modérée"
|
||||
|
||||
#: sith/settings.py:643
|
||||
#: sith/settings.py:652
|
||||
msgid "A new pedagogy comment has been signaled for moderation"
|
||||
msgstr ""
|
||||
"Un nouveau commentaire de la pédagogie a été signalé pour la modération"
|
||||
|
||||
#: sith/settings.py:645
|
||||
#: sith/settings.py:654
|
||||
#, 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:646
|
||||
#: sith/settings.py:655
|
||||
msgid "New files to be moderated"
|
||||
msgstr "Nouveaux fichiers à modérer"
|
||||
|
||||
#: sith/settings.py:647
|
||||
#: sith/settings.py:656
|
||||
#, 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:648
|
||||
#: sith/settings.py:657
|
||||
msgid "You've been identified on some pictures"
|
||||
msgstr "Vous avez été identifié sur des photos"
|
||||
|
||||
#: sith/settings.py:649
|
||||
#: sith/settings.py:658
|
||||
#, python-format
|
||||
msgid "You just refilled of %s €"
|
||||
msgstr "Vous avez rechargé votre compte de %s€"
|
||||
|
||||
#: sith/settings.py:650
|
||||
#: sith/settings.py:659
|
||||
#, python-format
|
||||
msgid "You just bought %s"
|
||||
msgstr "Vous avez acheté %s"
|
||||
|
||||
#: sith/settings.py:651
|
||||
#: sith/settings.py:660
|
||||
msgid "You have a notification"
|
||||
msgstr "Vous avez une notification"
|
||||
|
||||
#: sith/settings.py:663
|
||||
#: sith/settings.py:672
|
||||
msgid "Success!"
|
||||
msgstr "Succès !"
|
||||
|
||||
#: sith/settings.py:664
|
||||
#: sith/settings.py:673
|
||||
msgid "Fail!"
|
||||
msgstr "Échec !"
|
||||
|
||||
#: sith/settings.py:665
|
||||
#: sith/settings.py:674
|
||||
msgid "You successfully posted an article in the Weekmail"
|
||||
msgstr "Article posté avec succès dans le Weekmail"
|
||||
|
||||
#: sith/settings.py:666
|
||||
#: sith/settings.py:675
|
||||
msgid "You successfully edited an article in the Weekmail"
|
||||
msgstr "Article édité avec succès dans le Weekmail"
|
||||
|
||||
#: sith/settings.py:667
|
||||
#: sith/settings.py:676
|
||||
msgid "You successfully sent the Weekmail"
|
||||
msgstr "Weekmail envoyé avec succès"
|
||||
|
||||
#: sith/settings.py:675
|
||||
#: sith/settings.py:684
|
||||
msgid "AE tee-shirt"
|
||||
msgstr "Tee-shirt AE"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user