From 74a506c48bad515061c5c2007d09da6ff4918c55 Mon Sep 17 00:00:00 2001 From: Sli Date: Wed, 16 Oct 2024 02:22:27 +0200 Subject: [PATCH] Add missing features * Fix display * Add internationalization * Avoid querying under a certain amount of characters * Update docs for translations with typescript * Add interpolate to typescript globals --- core/static/webpack/ajax-select-index.ts | 16 +- core/static/webpack/utils/globals.ts | 1 + docs/howto/translation.md | 8 +- locale/fr/LC_MESSAGES/django.po | 892 ++++++++++++----------- locale/fr/LC_MESSAGES/djangojs.po | 56 +- sas/static/sas/css/picture.scss | 54 +- sas/templates/sas/picture.jinja | 11 +- 7 files changed, 539 insertions(+), 499 deletions(-) diff --git a/core/static/webpack/ajax-select-index.ts b/core/static/webpack/ajax-select-index.ts index aa8c25b9..f1eb1190 100644 --- a/core/static/webpack/ajax-select-index.ts +++ b/core/static/webpack/ajax-select-index.ts @@ -1,6 +1,6 @@ import "tom-select/dist/css/tom-select.css"; import TomSelect from "tom-select"; -import type { TomItem, TomLoadCallback } from "tom-select/dist/types/types"; +import type { TomItem, TomLoadCallback, TomOption } from "tom-select/dist/types/types"; import type { escape_html } from "tom-select/dist/types/utils"; import { type UserProfileSchema, userSearchUsers } from "#openapi"; @@ -17,6 +17,7 @@ export class AjaxSelect extends HTMLSelectElement { } loadTomSelect() { + const minCharNumberForsearch = 2; let maxItems = 1; if (this.multiple) { @@ -25,12 +26,17 @@ export class AjaxSelect extends HTMLSelectElement { this.widget = new TomSelect(this, { hideSelected: true, + diacritics: true, + duplicates: false, maxItems: maxItems, loadThrottle: Number.parseInt(this.dataset.delay) ?? null, valueField: "id", labelField: "display_name", searchField: ["display_name", "nick_name", "first_name", "last_name"], placeholder: this.dataset.placeholder ?? "", + shouldLoad: (query: string) => { + return query.length >= minCharNumberForsearch; // Avoid launching search with less than 2 characters + }, load: (query: string, callback: TomLoadCallback) => { userSearchUsers({ query: { @@ -62,6 +68,14 @@ export class AjaxSelect extends HTMLSelectElement { item: (item: UserProfileSchema, sanitize: typeof escape_html) => { return `${sanitize(item.display_name)}`; }, + // biome-ignore lint/style/useNamingConvention: that's how it's defined + not_loading: (data: TomOption, _sanitize: typeof escape_html) => { + return `
${interpolate(gettext("You need to type %(number)s more characters"), { number: minCharNumberForsearch - data.input.length }, true)}
`; + }, + // biome-ignore lint/style/useNamingConvention: that's how it's defined + no_results: (_data: TomOption, _sanitize: typeof escape_html) => { + return `
${gettext("No results found")}
`; + }, }, }); diff --git a/core/static/webpack/utils/globals.ts b/core/static/webpack/utils/globals.ts index 905f9740..b4f9a457 100644 --- a/core/static/webpack/utils/globals.ts +++ b/core/static/webpack/utils/globals.ts @@ -3,6 +3,7 @@ import type { Alpine as AlpineType } from "alpinejs"; declare global { const Alpine: AlpineType; const gettext: (text: string) => string; + const interpolate: (fmt: string, args: string[] | T, isNamed?: boolean) => string; } /** diff --git a/docs/howto/translation.md b/docs/howto/translation.md index 88366492..6ae299ed 100644 --- a/docs/howto/translation.md +++ b/docs/howto/translation.md @@ -24,6 +24,12 @@ Si le mot apparaît dans le template Jinja : {% trans %}Hello{% endtrans %} ``` +Si on est dans un fichier javascript ou typescript : + +```js +gettext("Hello"); +``` + ## Générer le fichier django.po La traduction se fait en trois étapes. @@ -32,7 +38,7 @@ l'éditer et enfin le compiler au format binaire pour qu'il soit lu par le serve ```bash ./manage.py makemessages --locale=fr -e py,jinja --ignore=node_modules # Pour le backend -./manage.py makemessages --locale=fr -d djangojs --ignore=node_modules # Pour le frontend +./manage.py makemessages --locale=fr -d djangojs -e js,ts --ignore=node_modules # Pour le frontend ``` ## Éditer le fichier django.po diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 091fa388..e548dfba 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-14 00:46+0200\n" +"POT-Creation-Date: 2024-10-16 01:51+0200\n" "PO-Revision-Date: 2016-07-18\n" "Last-Translator: Maréchal \n" @@ -16,11 +16,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: accounting/models.py:62 accounting/models.py:103 accounting/models.py:136 -#: accounting/models.py:203 club/models.py:55 com/models.py:274 -#: com/models.py:293 counter/models.py:265 counter/models.py:298 -#: counter/models.py:456 forum/models.py:59 launderette/models.py:29 -#: launderette/models.py:84 launderette/models.py:122 +#: accounting/models.py:62 accounting/models.py:101 accounting/models.py:132 +#: accounting/models.py:190 club/models.py:55 com/models.py:274 +#: com/models.py:293 counter/models.py:265 counter/models.py:296 +#: counter/models.py:449 forum/models.py:60 launderette/models.py:29 +#: launderette/models.py:80 launderette/models.py:116 msgid "name" msgstr "nom" @@ -56,125 +56,125 @@ msgstr "site internet" msgid "company" msgstr "entreprise" -#: accounting/models.py:104 +#: accounting/models.py:102 msgid "iban" msgstr "IBAN" -#: accounting/models.py:105 +#: accounting/models.py:103 msgid "account number" msgstr "numéro de compte" -#: accounting/models.py:109 accounting/models.py:140 club/models.py:345 -#: com/models.py:74 com/models.py:259 com/models.py:299 counter/models.py:321 -#: counter/models.py:458 trombi/models.py:210 +#: accounting/models.py:107 accounting/models.py:136 club/models.py:345 +#: com/models.py:74 com/models.py:259 com/models.py:299 counter/models.py:319 +#: counter/models.py:451 trombi/models.py:209 msgid "club" msgstr "club" -#: accounting/models.py:114 +#: accounting/models.py:112 msgid "Bank account" msgstr "Compte en banque" -#: accounting/models.py:146 +#: accounting/models.py:142 msgid "bank account" msgstr "compte en banque" -#: accounting/models.py:151 +#: accounting/models.py:147 msgid "Club account" msgstr "Compte club" -#: accounting/models.py:192 +#: accounting/models.py:179 #, python-format msgid "%(club_account)s on %(bank_account)s" msgstr "%(club_account)s sur %(bank_account)s" -#: accounting/models.py:201 club/models.py:351 counter/models.py:944 -#: election/models.py:16 launderette/models.py:179 +#: accounting/models.py:188 club/models.py:351 counter/models.py:929 +#: election/models.py:16 launderette/models.py:165 msgid "start date" msgstr "date de début" -#: accounting/models.py:202 club/models.py:352 counter/models.py:945 +#: accounting/models.py:189 club/models.py:352 counter/models.py:930 #: election/models.py:17 msgid "end date" msgstr "date de fin" -#: accounting/models.py:204 +#: accounting/models.py:191 msgid "is closed" msgstr "est fermé" -#: accounting/models.py:209 accounting/models.py:519 +#: accounting/models.py:196 accounting/models.py:496 msgid "club account" msgstr "compte club" -#: accounting/models.py:212 accounting/models.py:272 counter/models.py:57 -#: counter/models.py:654 +#: accounting/models.py:199 accounting/models.py:255 counter/models.py:57 +#: counter/models.py:647 msgid "amount" msgstr "montant" -#: accounting/models.py:213 +#: accounting/models.py:200 msgid "effective_amount" msgstr "montant effectif" -#: accounting/models.py:216 +#: accounting/models.py:203 msgid "General journal" msgstr "Classeur" -#: accounting/models.py:264 +#: accounting/models.py:247 msgid "number" msgstr "numéro" -#: accounting/models.py:269 +#: accounting/models.py:252 msgid "journal" msgstr "classeur" -#: accounting/models.py:273 core/models.py:959 core/models.py:1479 -#: core/models.py:1524 core/models.py:1553 core/models.py:1577 -#: counter/models.py:664 counter/models.py:768 counter/models.py:980 -#: eboutic/models.py:57 eboutic/models.py:193 forum/models.py:311 -#: forum/models.py:412 +#: accounting/models.py:256 core/models.py:945 core/models.py:1456 +#: core/models.py:1501 core/models.py:1530 core/models.py:1554 +#: counter/models.py:657 counter/models.py:761 counter/models.py:965 +#: eboutic/models.py:57 eboutic/models.py:193 forum/models.py:312 +#: forum/models.py:413 msgid "date" msgstr "date" -#: accounting/models.py:274 counter/models.py:267 counter/models.py:981 -#: pedagogy/models.py:207 +#: accounting/models.py:257 counter/models.py:267 counter/models.py:966 +#: pedagogy/models.py:208 msgid "comment" msgstr "commentaire" -#: accounting/models.py:276 counter/models.py:666 counter/models.py:770 +#: accounting/models.py:259 counter/models.py:659 counter/models.py:763 #: subscription/models.py:56 msgid "payment method" msgstr "méthode de paiement" -#: accounting/models.py:281 +#: accounting/models.py:264 msgid "cheque number" msgstr "numéro de chèque" -#: accounting/models.py:286 eboutic/models.py:291 +#: accounting/models.py:269 eboutic/models.py:291 msgid "invoice" msgstr "facture" -#: accounting/models.py:291 +#: accounting/models.py:274 msgid "is done" msgstr "est fait" -#: accounting/models.py:295 +#: accounting/models.py:278 msgid "simple type" msgstr "type simplifié" -#: accounting/models.py:303 accounting/models.py:462 +#: accounting/models.py:286 accounting/models.py:441 msgid "accounting type" msgstr "type comptable" -#: accounting/models.py:311 accounting/models.py:450 accounting/models.py:483 -#: accounting/models.py:515 core/models.py:1552 core/models.py:1578 -#: counter/models.py:734 +#: accounting/models.py:294 accounting/models.py:429 accounting/models.py:460 +#: accounting/models.py:492 core/models.py:1529 core/models.py:1555 +#: counter/models.py:727 msgid "label" msgstr "étiquette" -#: accounting/models.py:317 +#: accounting/models.py:300 msgid "target type" msgstr "type de cible" -#: accounting/models.py:320 club/models.py:507 +#: accounting/models.py:303 club/models.py:505 #: club/templates/club/club_members.jinja:17 #: club/templates/club/club_old_members.jinja:8 #: club/templates/club/mailing.jinja:41 @@ -186,7 +186,7 @@ msgstr "type de cible" msgid "User" msgstr "Utilisateur" -#: accounting/models.py:321 club/models.py:410 +#: accounting/models.py:304 club/models.py:408 #: club/templates/club/club_detail.jinja:12 #: com/templates/com/mailing_admin.jinja:11 #: com/templates/com/news_admin_list.jinja:23 @@ -210,35 +210,35 @@ msgstr "Utilisateur" msgid "Club" msgstr "Club" -#: accounting/models.py:322 core/views/user.py:283 +#: accounting/models.py:305 core/views/user.py:284 msgid "Account" msgstr "Compte" -#: accounting/models.py:323 +#: accounting/models.py:306 msgid "Company" msgstr "Entreprise" -#: accounting/models.py:324 core/models.py:337 sith/settings.py:420 +#: accounting/models.py:307 core/models.py:337 sith/settings.py:420 msgid "Other" msgstr "Autre" -#: accounting/models.py:327 +#: accounting/models.py:310 msgid "target id" msgstr "id de la cible" -#: accounting/models.py:329 +#: accounting/models.py:312 msgid "target label" msgstr "nom de la cible" -#: accounting/models.py:334 +#: accounting/models.py:317 msgid "linked operation" msgstr "opération liée" -#: accounting/models.py:366 +#: accounting/models.py:349 msgid "The date must be set." msgstr "La date doit être indiquée." -#: accounting/models.py:370 +#: accounting/models.py:353 #, python-format msgid "" "The date can not be before the start date of the journal, which is\n" @@ -247,16 +247,16 @@ msgstr "" "La date ne peut pas être avant la date de début du journal, qui est\n" "%(start_date)s." -#: accounting/models.py:380 +#: accounting/models.py:363 msgid "Target does not exists" msgstr "La cible n'existe pas." -#: accounting/models.py:383 +#: accounting/models.py:366 msgid "Please add a target label if you set no existing target" msgstr "" "Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante" -#: accounting/models.py:388 +#: accounting/models.py:371 msgid "" "You need to provide ether a simplified accounting type or a standard " "accounting type" @@ -264,41 +264,41 @@ msgstr "" "Vous devez fournir soit un type comptable simplifié ou un type comptable " "standard" -#: accounting/models.py:442 counter/models.py:308 pedagogy/models.py:41 +#: accounting/models.py:421 counter/models.py:306 pedagogy/models.py:41 msgid "code" msgstr "code" -#: accounting/models.py:446 +#: accounting/models.py:425 msgid "An accounting type code contains only numbers" msgstr "Un code comptable ne contient que des numéros" -#: accounting/models.py:452 +#: accounting/models.py:431 msgid "movement type" msgstr "type de mouvement" -#: accounting/models.py:454 +#: accounting/models.py:433 #: accounting/templates/accounting/journal_statement_nature.jinja:9 #: accounting/templates/accounting/journal_statement_person.jinja:12 #: accounting/views.py:549 msgid "Credit" msgstr "Crédit" -#: accounting/models.py:455 +#: accounting/models.py:434 #: accounting/templates/accounting/journal_statement_nature.jinja:28 #: accounting/templates/accounting/journal_statement_person.jinja:40 #: accounting/views.py:549 msgid "Debit" msgstr "Débit" -#: accounting/models.py:456 +#: accounting/models.py:435 msgid "Neutral" msgstr "Neutre" -#: accounting/models.py:487 +#: accounting/models.py:464 msgid "simplified accounting types" msgstr "type simplifié" -#: accounting/models.py:492 +#: accounting/models.py:469 msgid "simplified type" msgstr "type simplifié" @@ -375,17 +375,17 @@ msgstr "Compte en banque : " #: election/templates/election/election_detail.jinja:187 #: forum/templates/forum/macros.jinja:21 #: launderette/templates/launderette/launderette_admin.jinja:16 -#: launderette/views.py:217 pedagogy/templates/pedagogy/guide.jinja:99 +#: launderette/views.py:210 pedagogy/templates/pedagogy/guide.jinja:99 #: pedagogy/templates/pedagogy/guide.jinja:114 #: pedagogy/templates/pedagogy/uv_detail.jinja:189 #: sas/templates/sas/album.jinja:36 sas/templates/sas/moderation.jinja:18 -#: sas/templates/sas/picture.jinja:69 trombi/templates/trombi/detail.jinja:35 +#: sas/templates/sas/picture.jinja:70 trombi/templates/trombi/detail.jinja:35 #: trombi/templates/trombi/edit_profile.jinja:35 msgid "Delete" msgstr "Supprimer" #: accounting/templates/accounting/bank_account_details.jinja:18 -#: club/views.py:79 core/views/user.py:202 sas/templates/sas/picture.jinja:89 +#: club/views.py:79 core/views/user.py:202 sas/templates/sas/picture.jinja:90 msgid "Infos" msgstr "Infos" @@ -650,7 +650,7 @@ msgid "Done" msgstr "Effectuées" #: accounting/templates/accounting/journal_details.jinja:41 -#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:962 +#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:955 #: pedagogy/templates/pedagogy/moderation.jinja:13 #: pedagogy/templates/pedagogy/uv_detail.jinja:142 #: trombi/templates/trombi/comment.jinja:4 @@ -783,7 +783,7 @@ msgstr "Sauver" #: accounting/templates/accounting/refound_account.jinja:4 #: accounting/templates/accounting/refound_account.jinja:9 -#: accounting/views.py:868 +#: accounting/views.py:863 msgid "Refound account" msgstr "Remboursement de compte" @@ -876,15 +876,15 @@ msgstr "Commentaire :" msgid "Signature:" msgstr "Signature :" -#: accounting/views.py:663 +#: accounting/views.py:661 msgid "General statement" msgstr "Bilan général" -#: accounting/views.py:670 +#: accounting/views.py:668 msgid "No label operations" msgstr "Opérations sans étiquette" -#: accounting/views.py:826 +#: accounting/views.py:821 msgid "Refound this account" msgstr "Rembourser ce compte" @@ -930,7 +930,7 @@ msgstr "S'abonner" msgid "Remove" msgstr "Retirer" -#: club/forms.py:70 launderette/views.py:219 +#: club/forms.py:70 launderette/views.py:212 #: pedagogy/templates/pedagogy/moderation.jinja:15 msgid "Action" msgstr "Action" @@ -959,23 +959,23 @@ msgstr "vous devez spécifier au moins un utilisateur ou une adresse email" msgid "Begin date" msgstr "Date de début" -#: club/forms.py:156 com/views.py:83 com/views.py:202 counter/forms.py:194 -#: election/views.py:167 subscription/views.py:38 +#: club/forms.py:156 com/views.py:83 com/views.py:201 counter/forms.py:194 +#: election/views.py:171 subscription/views.py:38 msgid "End date" msgstr "Date de fin" #: club/forms.py:160 club/templates/club/club_sellings.jinja:49 #: core/templates/core/user_account_detail.jinja:17 #: core/templates/core/user_account_detail.jinja:56 -#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:143 +#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:137 msgid "Counter" msgstr "Comptoir" -#: club/forms.py:167 counter/views.py:690 +#: club/forms.py:167 counter/views.py:683 msgid "Products" msgstr "Produits" -#: club/forms.py:172 counter/views.py:695 +#: club/forms.py:172 counter/views.py:688 msgid "Archived products" msgstr "Produits archivés" @@ -997,7 +997,7 @@ msgstr "Vous ne pouvez pas ajouter deux fois le même utilisateur" msgid "You should specify a role" msgstr "Vous devez choisir un rôle" -#: club/forms.py:283 sas/views.py:58 sas/views.py:177 +#: club/forms.py:283 sas/views.py:58 sas/views.py:176 msgid "You do not have the permission to do that" msgstr "Vous n'avez pas la permission de faire cela" @@ -1045,58 +1045,58 @@ msgstr "Vous ne pouvez pas faire de boucles dans les clubs" msgid "A club with that unix_name already exists" msgstr "Un club avec ce nom UNIX existe déjà." -#: club/models.py:337 counter/models.py:935 counter/models.py:971 +#: club/models.py:337 counter/models.py:920 counter/models.py:956 #: eboutic/models.py:53 eboutic/models.py:189 election/models.py:183 -#: launderette/models.py:136 launderette/models.py:198 sas/models.py:274 -#: trombi/models.py:206 +#: launderette/models.py:130 launderette/models.py:184 sas/models.py:273 +#: trombi/models.py:205 msgid "user" msgstr "nom d'utilisateur" #: club/models.py:354 core/models.py:356 election/models.py:178 -#: election/models.py:212 trombi/models.py:211 +#: election/models.py:212 trombi/models.py:210 msgid "role" msgstr "rôle" #: club/models.py:359 core/models.py:89 counter/models.py:266 -#: counter/models.py:299 election/models.py:13 election/models.py:115 -#: election/models.py:188 forum/models.py:60 forum/models.py:244 +#: counter/models.py:297 election/models.py:13 election/models.py:115 +#: election/models.py:188 forum/models.py:61 forum/models.py:245 msgid "description" msgstr "description" -#: club/models.py:417 club/models.py:513 +#: club/models.py:415 club/models.py:511 msgid "Email address" msgstr "Adresse email" -#: club/models.py:425 +#: club/models.py:423 msgid "Enter a valid address. Only the root of the address is needed." msgstr "" "Entrez une adresse valide. Seule la racine de l'adresse est nécessaire." -#: club/models.py:429 com/models.py:82 com/models.py:309 core/models.py:960 +#: club/models.py:427 com/models.py:82 com/models.py:309 core/models.py:946 msgid "is moderated" msgstr "est modéré" -#: club/models.py:433 com/models.py:86 com/models.py:313 +#: club/models.py:431 com/models.py:86 com/models.py:313 msgid "moderator" msgstr "modérateur" -#: club/models.py:460 +#: club/models.py:458 msgid "This mailing list already exists." msgstr "Cette liste de diffusion existe déjà." -#: club/models.py:499 club/templates/club/mailing.jinja:23 +#: club/models.py:497 club/templates/club/mailing.jinja:23 msgid "Mailing" msgstr "Liste de diffusion" -#: club/models.py:523 +#: club/models.py:521 msgid "At least user or email is required" msgstr "Au moins un utilisateur ou un email est nécessaire" -#: club/models.py:531 club/tests.py:769 +#: club/models.py:529 club/tests.py:769 msgid "This email is already suscribed in this mailing" msgstr "Cet email est déjà abonné à cette mailing" -#: club/models.py:559 +#: club/models.py:557 msgid "Unregistered user" msgstr "Utilisateur non enregistré" @@ -1151,7 +1151,7 @@ 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:312 -#: launderette/views.py:217 trombi/templates/trombi/detail.jinja:19 +#: launderette/views.py:210 trombi/templates/trombi/detail.jinja:19 msgid "Add" msgstr "Ajouter" @@ -1240,8 +1240,8 @@ msgstr "Quantité" #: counter/templates/counter/cash_summary_list.jinja:35 #: counter/templates/counter/last_ops.jinja:50 #: counter/templates/counter/stats.jinja:23 -#: subscription/templates/subscription/stats.jinja:40 -#: subscription/templates/subscription/stats.jinja:48 +#: subscription/templates/subscription/stats.jinja:42 +#: subscription/templates/subscription/stats.jinja:50 msgid "Total" msgstr "Total" @@ -1373,8 +1373,8 @@ msgstr "Anciens membres" msgid "History" msgstr "Historique" -#: club/views.py:116 core/templates/core/base.jinja:104 core/views/user.py:225 -#: sas/templates/sas/picture.jinja:108 trombi/views.py:61 +#: club/views.py:116 core/templates/core/base.jinja:105 core/views/user.py:225 +#: sas/templates/sas/picture.jinja:109 trombi/views.py:62 msgid "Tools" msgstr "Outils" @@ -1382,7 +1382,7 @@ msgstr "Outils" msgid "Edit club page" msgstr "Éditer la page de club" -#: club/views.py:145 club/views.py:451 +#: club/views.py:145 club/views.py:452 msgid "Sellings" msgstr "Vente" @@ -1390,7 +1390,7 @@ msgstr "Vente" msgid "Mailing list" msgstr "Listes de diffusion" -#: club/views.py:161 com/views.py:134 +#: club/views.py:161 com/views.py:133 msgid "Posters list" msgstr "Liste d'affiches" @@ -1429,8 +1429,8 @@ msgid "Call" msgstr "Appel" #: com/models.py:67 com/models.py:174 com/models.py:248 election/models.py:12 -#: election/models.py:114 election/models.py:152 forum/models.py:255 -#: forum/models.py:309 pedagogy/models.py:96 +#: election/models.py:114 election/models.py:152 forum/models.py:256 +#: forum/models.py:310 pedagogy/models.py:97 msgid "title" msgstr "titre" @@ -1438,17 +1438,17 @@ msgstr "titre" msgid "summary" msgstr "résumé" -#: com/models.py:69 com/models.py:249 trombi/models.py:189 +#: com/models.py:69 com/models.py:249 trombi/models.py:188 msgid "content" msgstr "contenu" -#: com/models.py:71 core/models.py:1522 launderette/models.py:92 -#: launderette/models.py:130 launderette/models.py:181 +#: com/models.py:71 core/models.py:1499 launderette/models.py:88 +#: launderette/models.py:124 launderette/models.py:167 msgid "type" msgstr "type" -#: com/models.py:79 com/models.py:253 pedagogy/models.py:56 -#: pedagogy/models.py:199 trombi/models.py:179 +#: com/models.py:79 com/models.py:253 pedagogy/models.py:57 +#: pedagogy/models.py:200 trombi/models.py:178 msgid "author" msgstr "auteur" @@ -1492,7 +1492,7 @@ msgstr "weekmail" msgid "rank" msgstr "rang" -#: com/models.py:295 core/models.py:925 core/models.py:975 +#: com/models.py:295 core/models.py:911 core/models.py:961 msgid "file" msgstr "fichier" @@ -1504,7 +1504,7 @@ msgstr "temps d'affichage" msgid "Begin date should be before end date" msgstr "La date de début doit être avant celle de fin" -#: com/templates/com/mailing_admin.jinja:4 com/views.py:127 +#: com/templates/com/mailing_admin.jinja:4 com/views.py:126 #: core/templates/core/user_tools.jinja:136 msgid "Mailing lists administration" msgstr "Administration des mailing listes" @@ -1517,7 +1517,7 @@ msgstr "Administration des mailing listes" #: com/templates/com/news_detail.jinja:39 #: core/templates/core/file_detail.jinja:65 #: core/templates/core/file_moderation.jinja:23 -#: sas/templates/sas/moderation.jinja:17 sas/templates/sas/picture.jinja:66 +#: sas/templates/sas/moderation.jinja:17 sas/templates/sas/picture.jinja:67 msgid "Moderate" msgstr "Modérer" @@ -1574,7 +1574,7 @@ msgstr "Informations affichées" #: com/templates/com/news_admin_list.jinja:248 #: com/templates/com/news_admin_list.jinja:285 #: launderette/templates/launderette/launderette_admin.jinja:42 -#: launderette/views.py:224 +#: launderette/views.py:217 msgid "Type" msgstr "Type" @@ -1613,7 +1613,7 @@ msgstr "Résumé" #: com/templates/com/news_admin_list.jinja:252 #: com/templates/com/news_admin_list.jinja:289 #: com/templates/com/weekmail.jinja:17 com/templates/com/weekmail.jinja:46 -#: forum/templates/forum/forum.jinja:55 sas/models.py:298 +#: forum/templates/forum/forum.jinja:55 sas/models.py:297 msgid "Author" msgstr "Auteur" @@ -1659,7 +1659,7 @@ msgid "Calls to moderate" msgstr "Appels à modérer" #: com/templates/com/news_admin_list.jinja:242 -#: core/templates/core/base.jinja:219 +#: core/templates/core/base.jinja:220 msgid "Events" msgstr "Événements" @@ -1819,7 +1819,7 @@ msgid "Slideshow" msgstr "Diaporama" #: com/templates/com/weekmail.jinja:5 com/templates/com/weekmail.jinja:9 -#: com/views.py:104 core/templates/core/user_tools.jinja:129 +#: com/views.py:103 core/templates/core/user_tools.jinja:129 msgid "Weekmail" msgstr "Weekmail" @@ -1862,7 +1862,7 @@ msgstr "Supprimer du Weekmail" #: com/templates/com/weekmail_preview.jinja:9 #: core/templates/core/user_account_detail.jinja:10 -#: core/templates/core/user_account_detail.jinja:116 launderette/views.py:217 +#: core/templates/core/user_account_detail.jinja:116 launderette/views.py:210 #: pedagogy/templates/pedagogy/uv_detail.jinja:16 #: pedagogy/templates/pedagogy/uv_detail.jinja:25 #: trombi/templates/trombi/comment_moderation.jinja:10 @@ -1919,56 +1919,56 @@ msgstr "Le mot de la fin" msgid "Format: 16:9 | Resolution: 1920x1080" msgstr "Format : 16:9 | Résolution : 1920x1080" -#: com/views.py:77 com/views.py:199 election/views.py:164 +#: com/views.py:77 com/views.py:198 election/views.py:168 #: subscription/views.py:35 msgid "Start date" msgstr "Date de début" -#: com/views.py:99 +#: com/views.py:98 msgid "Communication administration" msgstr "Administration de la communication" -#: com/views.py:110 core/templates/core/user_tools.jinja:130 +#: com/views.py:109 core/templates/core/user_tools.jinja:130 msgid "Weekmail destinations" msgstr "Destinataires du Weekmail" -#: com/views.py:114 +#: com/views.py:113 msgid "Info message" msgstr "Message d'info" -#: com/views.py:120 +#: com/views.py:119 msgid "Alert message" msgstr "Message d'alerte" -#: com/views.py:141 +#: com/views.py:140 msgid "Screens list" msgstr "Liste d'écrans" -#: com/views.py:204 +#: com/views.py:203 msgid "Until" msgstr "Jusqu'à" -#: com/views.py:206 +#: com/views.py:205 msgid "Automoderation" msgstr "Automodération" -#: com/views.py:213 com/views.py:217 com/views.py:231 +#: com/views.py:212 com/views.py:216 com/views.py:230 msgid "This field is required." msgstr "Ce champ est obligatoire." -#: com/views.py:227 +#: com/views.py:226 msgid "You crazy? You can not finish an event before starting it." msgstr "T'es fou? Un événement ne peut pas finir avant même de commencer." -#: com/views.py:451 +#: com/views.py:450 msgid "Delete and save to regenerate" msgstr "Supprimer et sauver pour régénérer" -#: com/views.py:466 +#: com/views.py:465 msgid "Weekmail of the " msgstr "Weekmail du " -#: com/views.py:570 +#: com/views.py:569 msgid "" "You must be a board member of the selected club to post in the Weekmail." msgstr "" @@ -2166,7 +2166,7 @@ msgstr "département" msgid "dpt option" msgstr "Filière" -#: core/models.py:380 pedagogy/models.py:69 pedagogy/models.py:293 +#: core/models.py:380 pedagogy/models.py:70 pedagogy/models.py:294 msgid "semester" msgstr "semestre" @@ -2206,7 +2206,7 @@ msgstr "profil visible par les cotisants" msgid "A user with that username already exists" msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" -#: core/models.py:756 core/templates/core/macros.jinja:75 +#: core/models.py:750 core/templates/core/macros.jinja:75 #: core/templates/core/macros.jinja:77 core/templates/core/macros.jinja:78 #: core/templates/core/user_detail.jinja:100 #: core/templates/core/user_detail.jinja:101 @@ -2226,101 +2226,101 @@ msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" msgid "Profile" msgstr "Profil" -#: core/models.py:875 +#: core/models.py:861 msgid "Visitor" msgstr "Visiteur" -#: core/models.py:882 +#: core/models.py:868 msgid "receive the Weekmail" msgstr "recevoir le Weekmail" -#: core/models.py:883 +#: core/models.py:869 msgid "show your stats to others" msgstr "montrez vos statistiques aux autres" -#: core/models.py:885 +#: core/models.py:871 msgid "get a notification for every click" msgstr "avoir une notification pour chaque click" -#: core/models.py:888 +#: core/models.py:874 msgid "get a notification for every refilling" msgstr "avoir une notification pour chaque rechargement" -#: core/models.py:914 sas/forms.py:89 +#: core/models.py:900 sas/forms.py:89 msgid "file name" msgstr "nom du fichier" -#: core/models.py:918 core/models.py:1271 +#: core/models.py:904 core/models.py:1257 msgid "parent" msgstr "parent" -#: core/models.py:932 +#: core/models.py:918 msgid "compressed file" msgstr "version allégée" -#: core/models.py:939 +#: core/models.py:925 msgid "thumbnail" msgstr "miniature" -#: core/models.py:947 core/models.py:964 +#: core/models.py:933 core/models.py:950 msgid "owner" msgstr "propriétaire" -#: core/models.py:951 core/models.py:1288 core/views/files.py:223 +#: core/models.py:937 core/models.py:1274 core/views/files.py:223 msgid "edit group" msgstr "groupe d'édition" -#: core/models.py:954 core/models.py:1291 core/views/files.py:226 +#: core/models.py:940 core/models.py:1277 core/views/files.py:226 msgid "view group" msgstr "groupe de vue" -#: core/models.py:956 +#: core/models.py:942 msgid "is folder" msgstr "est un dossier" -#: core/models.py:957 +#: core/models.py:943 msgid "mime type" msgstr "type mime" -#: core/models.py:958 +#: core/models.py:944 msgid "size" msgstr "taille" -#: core/models.py:969 +#: core/models.py:955 msgid "asked for removal" msgstr "retrait demandé" -#: core/models.py:971 +#: core/models.py:957 msgid "is in the SAS" msgstr "est dans le SAS" -#: core/models.py:1040 +#: core/models.py:1026 msgid "Character '/' not authorized in name" msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" -#: core/models.py:1042 core/models.py:1046 +#: core/models.py:1028 core/models.py:1032 msgid "Loop in folder tree" msgstr "Boucle dans l'arborescence des dossiers" -#: core/models.py:1049 +#: core/models.py:1035 msgid "You can not make a file be a children of a non folder file" msgstr "" "Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " "un dossier" -#: core/models.py:1060 +#: core/models.py:1046 msgid "Duplicate file" msgstr "Un fichier de ce nom existe déjà" -#: core/models.py:1077 +#: core/models.py:1063 msgid "You must provide a file" msgstr "Vous devez fournir un fichier" -#: core/models.py:1254 +#: core/models.py:1240 msgid "page unix name" msgstr "nom unix de la page" -#: core/models.py:1260 +#: core/models.py:1246 msgid "" "Enter a valid page name. This value may contain only unaccented letters, " "numbers and ./+/-/_ characters." @@ -2328,55 +2328,55 @@ msgstr "" "Entrez un nom de page correct. Uniquement des lettres non accentuées, " "numéros, et ./+/-/_" -#: core/models.py:1278 +#: core/models.py:1264 msgid "page name" msgstr "nom de la page" -#: core/models.py:1283 +#: core/models.py:1269 msgid "owner group" msgstr "groupe propriétaire" -#: core/models.py:1296 +#: core/models.py:1282 msgid "lock user" msgstr "utilisateur bloquant" -#: core/models.py:1303 +#: core/models.py:1289 msgid "lock_timeout" msgstr "décompte du déblocage" -#: core/models.py:1353 +#: core/models.py:1339 msgid "Duplicate page" msgstr "Une page de ce nom existe déjà" -#: core/models.py:1356 +#: core/models.py:1342 msgid "Loop in page tree" msgstr "Boucle dans l'arborescence des pages" -#: core/models.py:1476 +#: core/models.py:1453 msgid "revision" msgstr "révision" -#: core/models.py:1477 +#: core/models.py:1454 msgid "page title" msgstr "titre de la page" -#: core/models.py:1478 +#: core/models.py:1455 msgid "page content" msgstr "contenu de la page" -#: core/models.py:1519 +#: core/models.py:1496 msgid "url" msgstr "url" -#: core/models.py:1520 +#: core/models.py:1497 msgid "param" msgstr "param" -#: core/models.py:1525 +#: core/models.py:1502 msgid "viewed" msgstr "vue" -#: core/models.py:1583 +#: core/models.py:1560 msgid "operation type" msgstr "type d'opération" @@ -2396,18 +2396,18 @@ msgstr "500, Erreur Serveur" msgid "Welcome!" msgstr "Bienvenue !" -#: core/templates/core/base.jinja:56 core/templates/core/login.jinja:8 +#: core/templates/core/base.jinja:57 core/templates/core/login.jinja:8 #: core/templates/core/login.jinja:18 core/templates/core/login.jinja:51 #: core/templates/core/password_reset_complete.jinja:5 msgid "Login" msgstr "Connexion" -#: core/templates/core/base.jinja:57 core/templates/core/register.jinja:7 +#: core/templates/core/base.jinja:58 core/templates/core/register.jinja:7 #: core/templates/core/register.jinja:16 core/templates/core/register.jinja:22 msgid "Register" msgstr "Inscription" -#: core/templates/core/base.jinja:63 core/templates/core/base.jinja:64 +#: core/templates/core/base.jinja:64 core/templates/core/base.jinja:65 #: forum/templates/forum/macros.jinja:179 #: forum/templates/forum/macros.jinja:183 #: matmat/templates/matmat/search_form.jinja:39 @@ -2416,52 +2416,52 @@ msgstr "Inscription" msgid "Search" msgstr "Recherche" -#: core/templates/core/base.jinja:105 +#: core/templates/core/base.jinja:106 msgid "Logout" msgstr "Déconnexion" -#: core/templates/core/base.jinja:153 +#: core/templates/core/base.jinja:154 msgid "You do not have any unread notification" msgstr "Vous n'avez aucune notification non lue" -#: core/templates/core/base.jinja:158 +#: core/templates/core/base.jinja:159 msgid "View more" msgstr "Voir plus" -#: core/templates/core/base.jinja:161 +#: core/templates/core/base.jinja:162 #: forum/templates/forum/last_unread.jinja:21 msgid "Mark all as read" msgstr "Marquer tout comme lu" -#: core/templates/core/base.jinja:209 +#: core/templates/core/base.jinja:210 msgid "Main" msgstr "Accueil" -#: core/templates/core/base.jinja:211 +#: core/templates/core/base.jinja:212 msgid "Associations & Clubs" msgstr "Associations & Clubs" -#: core/templates/core/base.jinja:213 +#: core/templates/core/base.jinja:214 msgid "AE" msgstr "L'AE" -#: core/templates/core/base.jinja:214 +#: core/templates/core/base.jinja:215 msgid "AE's clubs" msgstr "Les clubs de L'AE" -#: core/templates/core/base.jinja:215 +#: core/templates/core/base.jinja:216 msgid "Others UTBM's Associations" msgstr "Les autres associations de l'UTBM" -#: core/templates/core/base.jinja:221 core/templates/core/user_tools.jinja:172 +#: core/templates/core/base.jinja:222 core/templates/core/user_tools.jinja:172 msgid "Elections" msgstr "Élections" -#: core/templates/core/base.jinja:222 +#: core/templates/core/base.jinja:223 msgid "Big event" msgstr "Grandes Activités" -#: core/templates/core/base.jinja:225 +#: core/templates/core/base.jinja:226 #: forum/templates/forum/favorite_topics.jinja:18 #: forum/templates/forum/last_unread.jinja:18 #: forum/templates/forum/macros.jinja:90 forum/templates/forum/main.jinja:6 @@ -2470,11 +2470,11 @@ msgstr "Grandes Activités" msgid "Forum" msgstr "Forum" -#: core/templates/core/base.jinja:226 +#: core/templates/core/base.jinja:227 msgid "Gallery" msgstr "Photos" -#: core/templates/core/base.jinja:227 counter/models.py:466 +#: core/templates/core/base.jinja:228 counter/models.py:459 #: counter/templates/counter/counter_list.jinja:11 #: eboutic/templates/eboutic/eboutic_main.jinja:4 #: eboutic/templates/eboutic/eboutic_main.jinja:22 @@ -2484,75 +2484,75 @@ msgstr "Photos" msgid "Eboutic" msgstr "Eboutic" -#: core/templates/core/base.jinja:229 +#: core/templates/core/base.jinja:230 msgid "Services" msgstr "Services" -#: core/templates/core/base.jinja:231 +#: core/templates/core/base.jinja:232 msgid "Matmatronch" msgstr "Matmatronch" -#: core/templates/core/base.jinja:232 launderette/models.py:38 +#: core/templates/core/base.jinja:233 launderette/models.py:38 #: launderette/templates/launderette/launderette_book.jinja:5 #: launderette/templates/launderette/launderette_book_choose.jinja:4 #: launderette/templates/launderette/launderette_main.jinja:4 msgid "Launderette" msgstr "Laverie" -#: core/templates/core/base.jinja:233 core/templates/core/file.jinja:20 +#: core/templates/core/base.jinja:234 core/templates/core/file.jinja:20 #: core/views/files.py:116 msgid "Files" msgstr "Fichiers" -#: core/templates/core/base.jinja:234 core/templates/core/user_tools.jinja:163 +#: core/templates/core/base.jinja:235 core/templates/core/user_tools.jinja:163 msgid "Pedagogy" msgstr "Pédagogie" -#: core/templates/core/base.jinja:238 +#: core/templates/core/base.jinja:239 msgid "My Benefits" msgstr "Mes Avantages" -#: core/templates/core/base.jinja:240 +#: core/templates/core/base.jinja:241 msgid "Sponsors" msgstr "Partenaires" -#: core/templates/core/base.jinja:241 +#: core/templates/core/base.jinja:242 msgid "Subscriber benefits" msgstr "Les avantages cotisants" -#: core/templates/core/base.jinja:245 +#: core/templates/core/base.jinja:246 msgid "Help" msgstr "Aide" -#: core/templates/core/base.jinja:247 +#: core/templates/core/base.jinja:248 msgid "FAQ" msgstr "FAQ" -#: core/templates/core/base.jinja:248 core/templates/core/base.jinja:288 +#: core/templates/core/base.jinja:249 core/templates/core/base.jinja:289 msgid "Contacts" msgstr "Contacts" -#: core/templates/core/base.jinja:249 +#: core/templates/core/base.jinja:250 msgid "Wiki" msgstr "Wiki" -#: core/templates/core/base.jinja:289 +#: core/templates/core/base.jinja:290 msgid "Legal notices" msgstr "Mentions légales" -#: core/templates/core/base.jinja:290 +#: core/templates/core/base.jinja:291 msgid "Intellectual property" msgstr "Propriété intellectuelle" -#: core/templates/core/base.jinja:291 +#: core/templates/core/base.jinja:292 msgid "Help & Documentation" msgstr "Aide & Documentation" -#: core/templates/core/base.jinja:292 +#: core/templates/core/base.jinja:293 msgid "R&D" msgstr "R&D" -#: core/templates/core/base.jinja:295 +#: core/templates/core/base.jinja:296 msgid "Site created by the IT Department of the AE" msgstr "Site réalisé par le Pôle Informatique de l'AE" @@ -2615,7 +2615,7 @@ msgstr "Propriétés" #: core/templates/core/file_detail.jinja:13 #: core/templates/core/file_moderation.jinja:20 -#: sas/templates/sas/picture.jinja:101 +#: sas/templates/sas/picture.jinja:102 msgid "Owner: " msgstr "Propriétaire : " @@ -2643,7 +2643,7 @@ msgstr "Nom réel : " #: core/templates/core/file_detail.jinja:54 #: core/templates/core/file_moderation.jinja:21 -#: sas/templates/sas/picture.jinja:92 +#: sas/templates/sas/picture.jinja:93 msgid "Date: " msgstr "Date : " @@ -2760,7 +2760,7 @@ msgstr "Cotisant jusqu'au %(subscription_end)s" msgid "Account number: " msgstr "Numéro de compte : " -#: core/templates/core/macros.jinja:91 launderette/models.py:202 +#: core/templates/core/macros.jinja:91 launderette/models.py:188 msgid "Slot" msgstr "Créneau" @@ -3040,11 +3040,11 @@ msgid "Eboutic invoices" msgstr "Facture eboutic" #: core/templates/core/user_account.jinja:54 -#: core/templates/core/user_tools.jinja:58 counter/views.py:715 +#: core/templates/core/user_tools.jinja:58 counter/views.py:708 msgid "Etickets" msgstr "Etickets" -#: core/templates/core/user_account.jinja:69 core/views/user.py:640 +#: core/templates/core/user_account.jinja:69 core/views/user.py:639 msgid "User has no account" msgstr "L'utilisateur n'a pas de compte" @@ -3152,7 +3152,7 @@ msgid "Subscription end" msgstr "Fin de la cotisation" #: core/templates/core/user_detail.jinja:185 -#: subscription/templates/subscription/stats.jinja:36 +#: subscription/templates/subscription/stats.jinja:38 msgid "Subscription type" msgstr "Type de cotisation" @@ -3280,7 +3280,7 @@ msgstr "Préférences" msgid "General" msgstr "Général" -#: core/templates/core/user_preferences.jinja:21 trombi/views.py:56 +#: core/templates/core/user_preferences.jinja:21 trombi/views.py:57 msgid "Trombi" msgstr "Trombi" @@ -3376,7 +3376,7 @@ msgid "Subscription stats" msgstr "Statistiques de cotisation" #: core/templates/core/user_tools.jinja:48 counter/forms.py:164 -#: counter/views.py:685 +#: counter/views.py:678 msgid "Counters" msgstr "Comptoirs" @@ -3393,16 +3393,16 @@ msgid "Product types management" msgstr "Gestion des types de produit" #: core/templates/core/user_tools.jinja:56 -#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:705 +#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:698 msgid "Cash register summaries" msgstr "Relevés de caisse" #: core/templates/core/user_tools.jinja:57 -#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:710 +#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:703 msgid "Invoices call" msgstr "Appels à facture" -#: core/templates/core/user_tools.jinja:72 core/views/user.py:274 +#: core/templates/core/user_tools.jinja:72 core/views/user.py:277 #: counter/templates/counter/counter_list.jinja:18 #: counter/templates/counter/counter_list.jinja:34 #: counter/templates/counter/counter_list.jinja:50 @@ -3550,7 +3550,7 @@ msgstr "Parrain / Marraine" msgid "Godchild" msgstr "Fillot / Fillote" -#: core/views/forms.py:315 counter/forms.py:72 trombi/views.py:149 +#: core/views/forms.py:315 counter/forms.py:72 trombi/views.py:151 msgid "Select user" msgstr "Choisir un utilisateur" @@ -3573,12 +3573,12 @@ msgid "%s is already your godchild" msgstr "%s est déjà votre fillot/fillote" #: core/views/forms.py:359 core/views/forms.py:377 election/models.py:22 -#: election/views.py:147 +#: election/views.py:151 msgid "edit groups" msgstr "groupe d'édition" #: core/views/forms.py:362 core/views/forms.py:380 election/models.py:29 -#: election/views.py:150 +#: election/views.py:154 msgid "view groups" msgstr "groupe de vue" @@ -3608,8 +3608,8 @@ msgstr "Photos" msgid "Galaxy" msgstr "Galaxie" -#: counter/apps.py:30 counter/models.py:482 counter/models.py:941 -#: counter/models.py:977 launderette/models.py:32 +#: counter/apps.py:30 counter/models.py:475 counter/models.py:926 +#: counter/models.py:962 launderette/models.py:32 msgid "counter" msgstr "comptoir" @@ -3653,7 +3653,7 @@ msgstr "client" msgid "customers" msgstr "clients" -#: counter/models.py:74 counter/views.py:267 +#: counter/models.py:74 counter/views.py:261 msgid "Not enough money" msgstr "Solde insuffisant" @@ -3701,117 +3701,117 @@ msgstr "Mettre à True si le mail a reçu une erreur" msgid "The operation that emptied the account." msgstr "L'opération qui a vidé le compte." -#: counter/models.py:277 counter/models.py:303 +#: counter/models.py:277 counter/models.py:301 msgid "product type" msgstr "type du produit" -#: counter/models.py:309 +#: counter/models.py:307 msgid "purchase price" msgstr "prix d'achat" -#: counter/models.py:310 +#: counter/models.py:308 msgid "selling price" msgstr "prix de vente" -#: counter/models.py:311 +#: counter/models.py:309 msgid "special selling price" msgstr "prix de vente spécial" -#: counter/models.py:318 +#: counter/models.py:316 msgid "icon" msgstr "icône" -#: counter/models.py:323 +#: counter/models.py:321 msgid "limit age" msgstr "âge limite" -#: counter/models.py:324 +#: counter/models.py:322 msgid "tray price" msgstr "prix plateau" -#: counter/models.py:328 +#: counter/models.py:326 msgid "parent product" msgstr "produit parent" -#: counter/models.py:334 +#: counter/models.py:332 msgid "buying groups" msgstr "groupe d'achat" -#: counter/models.py:336 election/models.py:50 +#: counter/models.py:334 election/models.py:50 msgid "archived" msgstr "archivé" -#: counter/models.py:339 counter/models.py:1077 +#: counter/models.py:337 counter/models.py:1060 msgid "product" msgstr "produit" -#: counter/models.py:461 +#: counter/models.py:454 msgid "products" msgstr "produits" -#: counter/models.py:464 +#: counter/models.py:457 msgid "counter type" msgstr "type de comptoir" -#: counter/models.py:466 +#: counter/models.py:459 msgid "Bar" msgstr "Bar" -#: counter/models.py:466 +#: counter/models.py:459 msgid "Office" msgstr "Bureau" -#: counter/models.py:469 +#: counter/models.py:462 msgid "sellers" msgstr "vendeurs" -#: counter/models.py:477 launderette/models.py:192 +#: counter/models.py:470 launderette/models.py:178 msgid "token" msgstr "jeton" -#: counter/models.py:672 +#: counter/models.py:665 msgid "bank" msgstr "banque" -#: counter/models.py:674 counter/models.py:775 +#: counter/models.py:667 counter/models.py:768 msgid "is validated" msgstr "est validé" -#: counter/models.py:679 +#: counter/models.py:672 msgid "refilling" msgstr "rechargement" -#: counter/models.py:752 eboutic/models.py:249 +#: counter/models.py:745 eboutic/models.py:249 msgid "unit price" msgstr "prix unitaire" -#: counter/models.py:753 counter/models.py:1057 eboutic/models.py:250 +#: counter/models.py:746 counter/models.py:1040 eboutic/models.py:250 msgid "quantity" msgstr "quantité" -#: counter/models.py:772 +#: counter/models.py:765 msgid "Sith account" msgstr "Compte utilisateur" -#: counter/models.py:772 sith/settings.py:412 sith/settings.py:417 +#: counter/models.py:765 sith/settings.py:412 sith/settings.py:417 #: sith/settings.py:437 msgid "Credit card" msgstr "Carte bancaire" -#: counter/models.py:780 +#: counter/models.py:773 msgid "selling" msgstr "vente" -#: counter/models.py:884 +#: counter/models.py:877 msgid "Unknown event" msgstr "Événement inconnu" -#: counter/models.py:885 +#: counter/models.py:878 #, python-format msgid "Eticket bought for the event %(event)s" msgstr "Eticket acheté pour l'événement %(event)s" -#: counter/models.py:887 counter/models.py:910 +#: counter/models.py:880 counter/models.py:893 #, python-format msgid "" "You bought an eticket for the event %(event)s.\n" @@ -3823,63 +3823,63 @@ msgstr "" "Vous pouvez également retrouver tous vos e-tickets sur votre page de compte " "%(url)s." -#: counter/models.py:946 +#: counter/models.py:931 msgid "last activity date" msgstr "dernière activité" -#: counter/models.py:949 +#: counter/models.py:934 msgid "permanency" msgstr "permanence" -#: counter/models.py:982 +#: counter/models.py:967 msgid "emptied" msgstr "coffre vidée" -#: counter/models.py:985 +#: counter/models.py:970 msgid "cash register summary" msgstr "relevé de caisse" -#: counter/models.py:1053 +#: counter/models.py:1036 msgid "cash summary" msgstr "relevé" -#: counter/models.py:1056 +#: counter/models.py:1039 msgid "value" msgstr "valeur" -#: counter/models.py:1059 +#: counter/models.py:1042 msgid "check" msgstr "chèque" -#: counter/models.py:1061 +#: counter/models.py:1044 msgid "True if this is a bank check, else False" msgstr "Vrai si c'est un chèque, sinon Faux." -#: counter/models.py:1065 +#: counter/models.py:1048 msgid "cash register summary item" msgstr "élément de relevé de caisse" -#: counter/models.py:1081 +#: counter/models.py:1064 msgid "banner" msgstr "bannière" -#: counter/models.py:1083 +#: counter/models.py:1066 msgid "event date" msgstr "date de l'événement" -#: counter/models.py:1085 +#: counter/models.py:1068 msgid "event title" msgstr "titre de l'événement" -#: counter/models.py:1087 +#: counter/models.py:1070 msgid "secret" msgstr "secret" -#: counter/models.py:1126 +#: counter/models.py:1109 msgid "uid" msgstr "uid" -#: counter/models.py:1131 +#: counter/models.py:1114 msgid "student cards" msgstr "cartes étudiante" @@ -3971,7 +3971,7 @@ msgstr "Liste des relevés de caisse" msgid "Theoric sums" msgstr "Sommes théoriques" -#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:963 +#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:956 msgid "Emptied" msgstr "Coffre vidé" @@ -3997,8 +3997,8 @@ msgstr "Ce n'est pas un UID de carte étudiante valide" #: counter/templates/counter/invoices_call.jinja:16 #: launderette/templates/launderette/launderette_admin.jinja:35 #: launderette/templates/launderette/launderette_click.jinja:13 -#: sas/templates/sas/picture.jinja:160 -#: subscription/templates/subscription/stats.jinja:19 +#: sas/templates/sas/picture.jinja:167 +#: subscription/templates/subscription/stats.jinja:20 msgid "Go" msgstr "Valider" @@ -4197,101 +4197,101 @@ msgstr "Temps" msgid "Top 100 barman %(counter_name)s (all semesters)" msgstr "Top 100 barman %(counter_name)s (tous les semestres)" -#: counter/views.py:153 +#: counter/views.py:147 msgid "Cash summary" msgstr "Relevé de caisse" -#: counter/views.py:162 +#: counter/views.py:156 msgid "Last operations" msgstr "Dernières opérations" -#: counter/views.py:209 +#: counter/views.py:203 msgid "Bad credentials" msgstr "Mauvais identifiants" -#: counter/views.py:211 +#: counter/views.py:205 msgid "User is not barman" msgstr "L'utilisateur n'est pas barman." -#: counter/views.py:216 +#: counter/views.py:210 msgid "Bad location, someone is already logged in somewhere else" msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs" -#: counter/views.py:258 +#: counter/views.py:252 msgid "Too young for that product" msgstr "Trop jeune pour ce produit" -#: counter/views.py:261 +#: counter/views.py:255 msgid "Not allowed for that product" msgstr "Non autorisé pour ce produit" -#: counter/views.py:264 +#: counter/views.py:258 msgid "No date of birth provided" msgstr "Pas de date de naissance renseignée" -#: counter/views.py:553 +#: counter/views.py:546 msgid "You have not enough money to buy all the basket" msgstr "Vous n'avez pas assez d'argent pour acheter le panier" -#: counter/views.py:680 +#: counter/views.py:673 msgid "Counter administration" msgstr "Administration des comptoirs" -#: counter/views.py:700 +#: counter/views.py:693 msgid "Product types" msgstr "Types de produit" -#: counter/views.py:920 +#: counter/views.py:913 msgid "10 cents" msgstr "10 centimes" -#: counter/views.py:921 +#: counter/views.py:914 msgid "20 cents" msgstr "20 centimes" -#: counter/views.py:922 +#: counter/views.py:915 msgid "50 cents" msgstr "50 centimes" -#: counter/views.py:923 +#: counter/views.py:916 msgid "1 euro" msgstr "1 €" -#: counter/views.py:924 +#: counter/views.py:917 msgid "2 euros" msgstr "2 €" -#: counter/views.py:925 +#: counter/views.py:918 msgid "5 euros" msgstr "5 €" -#: counter/views.py:926 +#: counter/views.py:919 msgid "10 euros" msgstr "10 €" -#: counter/views.py:927 +#: counter/views.py:920 msgid "20 euros" msgstr "20 €" -#: counter/views.py:928 +#: counter/views.py:921 msgid "50 euros" msgstr "50 €" -#: counter/views.py:930 +#: counter/views.py:923 msgid "100 euros" msgstr "100 €" -#: counter/views.py:933 counter/views.py:939 counter/views.py:945 -#: counter/views.py:951 counter/views.py:957 +#: counter/views.py:926 counter/views.py:932 counter/views.py:938 +#: counter/views.py:944 counter/views.py:950 msgid "Check amount" msgstr "Montant du chèque" -#: counter/views.py:936 counter/views.py:942 counter/views.py:948 -#: counter/views.py:954 counter/views.py:960 +#: counter/views.py:929 counter/views.py:935 counter/views.py:941 +#: counter/views.py:947 counter/views.py:953 msgid "Check quantity" msgstr "Nombre de chèque" -#: counter/views.py:1480 +#: counter/views.py:1473 msgid "people(s)" msgstr "personne(s)" @@ -4457,11 +4457,11 @@ msgstr "début des candidatures" msgid "end candidature" msgstr "fin des candidatures" -#: election/models.py:36 election/views.py:153 +#: election/models.py:36 election/views.py:157 msgid "vote groups" msgstr "groupe de vote" -#: election/models.py:43 election/views.py:160 +#: election/models.py:43 election/views.py:164 msgid "candidature groups" msgstr "groupe de candidature" @@ -4525,7 +4525,7 @@ msgstr "Vous avez déjà soumis votre vote." msgid "You have voted in this election." msgstr "Vous avez déjà voté pour cette élection." -#: election/templates/election/election_detail.jinja:49 election/views.py:86 +#: election/templates/election/election_detail.jinja:49 election/views.py:90 msgid "Blank vote" msgstr "Vote blanc" @@ -4589,87 +4589,87 @@ msgstr "au" msgid "Polls open from" msgstr "Votes ouverts du" -#: election/views.py:37 +#: election/views.py:41 msgid "You have selected too much candidates." msgstr "Vous avez sélectionné trop de candidats." -#: election/views.py:53 +#: election/views.py:57 msgid "User to candidate" msgstr "Utilisateur se présentant" -#: election/views.py:111 +#: election/views.py:115 msgid "This role already exists for this election" msgstr "Ce rôle existe déjà pour cette élection" -#: election/views.py:170 +#: election/views.py:174 msgid "Start candidature" msgstr "Début des candidatures" -#: election/views.py:173 +#: election/views.py:177 msgid "End candidature" msgstr "Fin des candidatures" -#: forum/models.py:61 +#: forum/models.py:62 msgid "is a category" msgstr "est une catégorie" -#: forum/models.py:72 +#: forum/models.py:73 msgid "owner club" msgstr "club propriétaire" -#: forum/models.py:89 +#: forum/models.py:90 msgid "number to choose a specific forum ordering" msgstr "numéro spécifiant l'ordre d'affichage" -#: forum/models.py:94 forum/models.py:251 +#: forum/models.py:95 forum/models.py:252 msgid "the last message" msgstr "le dernier message" -#: forum/models.py:98 +#: forum/models.py:99 msgid "number of topics" msgstr "nombre de sujets" -#: forum/models.py:194 +#: forum/models.py:195 msgid "You can not make loops in forums" msgstr "Vous ne pouvez pas faire de boucles dans les forums" -#: forum/models.py:246 +#: forum/models.py:247 msgid "subscribed users" msgstr "utilisateurs abonnés" -#: forum/models.py:256 +#: forum/models.py:257 msgid "number of messages" msgstr "nombre de messages" -#: forum/models.py:310 +#: forum/models.py:311 msgid "message" msgstr "message" -#: forum/models.py:313 +#: forum/models.py:314 msgid "readers" msgstr "lecteurs" -#: forum/models.py:315 +#: forum/models.py:316 msgid "is deleted" msgstr "est supprimé" -#: forum/models.py:399 +#: forum/models.py:400 msgid "Message edited by" msgstr "Message édité par" -#: forum/models.py:400 +#: forum/models.py:401 msgid "Message deleted by" msgstr "Message supprimé par" -#: forum/models.py:401 +#: forum/models.py:402 msgid "Message undeleted by" msgstr "Message restauré par" -#: forum/models.py:413 +#: forum/models.py:414 msgid "action" msgstr "action" -#: forum/models.py:436 +#: forum/models.py:437 msgid "last read date" msgstr "dernière date de lecture" @@ -4811,31 +4811,31 @@ msgstr "Galaxie de %(user_name)s" msgid "This citizen has not yet joined the galaxy" msgstr "Ce citoyen n'a pas encore rejoint la galaxie" -#: launderette/models.py:88 launderette/models.py:126 +#: launderette/models.py:84 launderette/models.py:120 msgid "launderette" msgstr "laverie" -#: launderette/models.py:94 +#: launderette/models.py:90 msgid "is working" msgstr "fonctionne" -#: launderette/models.py:97 +#: launderette/models.py:93 msgid "Machine" msgstr "Machine" -#: launderette/models.py:132 +#: launderette/models.py:126 msgid "borrow date" msgstr "date d'emprunt" -#: launderette/models.py:143 +#: launderette/models.py:137 msgid "Token" msgstr "Jeton" -#: launderette/models.py:155 +#: launderette/models.py:149 launderette/views.py:262 msgid "Token name can not be blank" msgstr "Le nom du jeton ne peut pas être vide" -#: launderette/models.py:186 +#: launderette/models.py:172 msgid "machine" msgstr "machine" @@ -4864,12 +4864,12 @@ msgid "Washing and drying" msgstr "Lavage et séchage" #: launderette/templates/launderette/launderette_book.jinja:27 -#: sith/settings.py:653 +#: sith/settings.py:655 msgid "Washing" msgstr "Lavage" #: launderette/templates/launderette/launderette_book.jinja:31 -#: sith/settings.py:653 +#: sith/settings.py:655 msgid "Drying" msgstr "Séchage" @@ -4894,25 +4894,25 @@ msgstr "Éditer la page de présentation" msgid "Book launderette slot" msgstr "Réserver un créneau de laverie" -#: launderette/views.py:231 +#: launderette/views.py:224 msgid "Tokens, separated by spaces" msgstr "Jetons, séparés par des espaces" -#: launderette/views.py:251 launderette/views.py:273 +#: launderette/views.py:246 #, python-format msgid "Token %(token_name)s does not exists" msgstr "Le jeton %(token_name)s n'existe pas" -#: launderette/views.py:262 +#: launderette/views.py:258 #, python-format msgid "Token %(token_name)s already exists" msgstr "Un jeton %(token_name)s existe déjà" -#: launderette/views.py:325 +#: launderette/views.py:309 msgid "User has booked no slot" msgstr "L'utilisateur n'a pas réservé de créneau" -#: launderette/views.py:433 +#: launderette/views.py:417 msgid "Token not found" msgstr "Jeton non trouvé" @@ -4965,103 +4965,103 @@ msgstr "" "Le code d'une UV doit seulement contenir des caractères majuscule sans " "accents et nombres" -#: pedagogy/models.py:62 +#: pedagogy/models.py:63 msgid "credit type" msgstr "type de crédit" -#: pedagogy/models.py:67 pedagogy/models.py:97 +#: pedagogy/models.py:68 pedagogy/models.py:98 msgid "uv manager" msgstr "gestionnaire d'uv" -#: pedagogy/models.py:75 +#: pedagogy/models.py:76 msgid "language" msgstr "langue" -#: pedagogy/models.py:81 +#: pedagogy/models.py:82 msgid "credits" msgstr "crédits" -#: pedagogy/models.py:89 +#: pedagogy/models.py:90 msgid "departmenmt" msgstr "département" -#: pedagogy/models.py:98 +#: pedagogy/models.py:99 msgid "objectives" msgstr "objectifs" -#: pedagogy/models.py:99 +#: pedagogy/models.py:100 msgid "program" msgstr "programme" -#: pedagogy/models.py:100 +#: pedagogy/models.py:101 msgid "skills" msgstr "compétences" -#: pedagogy/models.py:101 +#: pedagogy/models.py:102 msgid "key concepts" msgstr "concepts clefs" -#: pedagogy/models.py:106 +#: pedagogy/models.py:107 msgid "hours CM" msgstr "heures CM" -#: pedagogy/models.py:113 +#: pedagogy/models.py:114 msgid "hours TD" msgstr "heures TD" -#: pedagogy/models.py:120 +#: pedagogy/models.py:121 msgid "hours TP" msgstr "heures TP" -#: pedagogy/models.py:127 +#: pedagogy/models.py:128 msgid "hours THE" msgstr "heures THE" -#: pedagogy/models.py:134 +#: pedagogy/models.py:135 msgid "hours TE" msgstr "heures TE" -#: pedagogy/models.py:205 pedagogy/models.py:281 +#: pedagogy/models.py:206 pedagogy/models.py:282 msgid "uv" msgstr "UE" -#: pedagogy/models.py:209 +#: pedagogy/models.py:210 msgid "global grade" msgstr "note globale" -#: pedagogy/models.py:216 +#: pedagogy/models.py:217 msgid "utility grade" msgstr "note d'utilité" -#: pedagogy/models.py:223 +#: pedagogy/models.py:224 msgid "interest grade" msgstr "note d'intérêt" -#: pedagogy/models.py:230 +#: pedagogy/models.py:231 msgid "teaching grade" msgstr "note d'enseignement" -#: pedagogy/models.py:237 +#: pedagogy/models.py:238 msgid "work load grade" msgstr "note de charge de travail" -#: pedagogy/models.py:243 +#: pedagogy/models.py:244 msgid "publish date" msgstr "date de publication" -#: pedagogy/models.py:287 +#: pedagogy/models.py:288 msgid "grade" msgstr "note" -#: pedagogy/models.py:308 +#: pedagogy/models.py:309 msgid "report" msgstr "signaler" -#: pedagogy/models.py:314 +#: pedagogy/models.py:315 msgid "reporter" msgstr "signalant" -#: pedagogy/models.py:317 +#: pedagogy/models.py:318 msgid "reason" msgstr "raison" @@ -5100,7 +5100,7 @@ msgstr "non noté" msgid "UV comment moderation" msgstr "Modération des commentaires d'UV" -#: pedagogy/templates/pedagogy/moderation.jinja:14 sas/models.py:309 +#: pedagogy/templates/pedagogy/moderation.jinja:14 sas/models.py:308 msgid "Reason" msgstr "Raison" @@ -5256,15 +5256,15 @@ msgstr "Fusionner deux utilisateurs" msgid "Merge" msgstr "Fusion" -#: rootplace/views.py:159 +#: rootplace/views.py:160 msgid "User that will be kept" msgstr "Utilisateur qui sera conservé" -#: rootplace/views.py:162 +#: rootplace/views.py:163 msgid "User that will be deleted" msgstr "Utilisateur qui sera supprimé" -#: rootplace/views.py:168 +#: rootplace/views.py:169 msgid "User to be selected" msgstr "Utilisateur à sélectionner" @@ -5289,29 +5289,29 @@ msgstr "Ajouter une personne" msgid "You already requested moderation for this picture." msgstr "Vous avez déjà déposé une demande de retrait pour cette photo." -#: sas/models.py:280 +#: sas/models.py:279 msgid "picture" msgstr "photo" -#: sas/models.py:304 +#: sas/models.py:303 msgid "Picture" msgstr "Photo" -#: sas/models.py:311 +#: sas/models.py:310 msgid "Why do you want this image to be removed ?" msgstr "Pourquoi voulez-vous retirer cette image ?" -#: sas/models.py:315 +#: sas/models.py:314 msgid "Picture moderation request" msgstr "Demande de modération de photo" -#: sas/models.py:316 +#: sas/models.py:315 msgid "Picture moderation requests" msgstr "Demandes de modération de photo" #: sas/templates/sas/album.jinja:13 #: sas/templates/sas/ask_picture_removal.jinja:4 sas/templates/sas/main.jinja:8 -#: sas/templates/sas/main.jinja:17 sas/templates/sas/picture.jinja:13 +#: sas/templates/sas/main.jinja:17 sas/templates/sas/picture.jinja:14 msgid "SAS" msgstr "SAS" @@ -5351,11 +5351,11 @@ msgstr "Toutes les catégories" msgid "SAS moderation" msgstr "Modération du SAS" -#: sas/templates/sas/picture.jinja:36 +#: sas/templates/sas/picture.jinja:37 msgid "Asked for removal" msgstr "Retrait demandé" -#: sas/templates/sas/picture.jinja:39 +#: sas/templates/sas/picture.jinja:40 msgid "" "This picture can be viewed only by root users and by SAS admins. It will be " "hidden to other users until it has been moderated." @@ -5364,26 +5364,30 @@ msgstr "" "SAS. Elle sera cachée pour les autres utilisateurs tant qu'elle ne sera pas " "modérée." -#: sas/templates/sas/picture.jinja:47 +#: sas/templates/sas/picture.jinja:48 msgid "The following issues have been raised:" msgstr "Les problèmes suivants ont été remontés :" -#: sas/templates/sas/picture.jinja:112 +#: sas/templates/sas/picture.jinja:113 msgid "HD version" msgstr "Version HD" -#: sas/templates/sas/picture.jinja:116 +#: sas/templates/sas/picture.jinja:117 msgid "Ask for removal" msgstr "Demander le retrait" -#: sas/templates/sas/picture.jinja:137 sas/templates/sas/picture.jinja:148 +#: sas/templates/sas/picture.jinja:138 sas/templates/sas/picture.jinja:149 msgid "Previous picture" msgstr "Image précédente" -#: sas/templates/sas/picture.jinja:156 +#: sas/templates/sas/picture.jinja:157 msgid "People" msgstr "Personne(s)" +#: sas/templates/sas/picture.jinja:165 +msgid "Identify users on pictures" +msgstr "Identifiez les utilisateurs sur les photos" + #: sith/settings.py:255 sith/settings.py:474 msgid "English" msgstr "Anglais" @@ -5560,204 +5564,204 @@ msgstr "Suppression de vente" msgid "Refilling deletion" msgstr "Suppression de rechargement" -#: sith/settings.py:534 +#: sith/settings.py:536 msgid "One semester" msgstr "Un semestre, 20 €" -#: sith/settings.py:535 +#: sith/settings.py:537 msgid "Two semesters" msgstr "Deux semestres, 35 €" -#: sith/settings.py:537 +#: sith/settings.py:539 msgid "Common core cursus" msgstr "Cursus tronc commun, 60 €" -#: sith/settings.py:541 +#: sith/settings.py:543 msgid "Branch cursus" msgstr "Cursus branche, 60 €" -#: sith/settings.py:542 +#: sith/settings.py:544 msgid "Alternating cursus" msgstr "Cursus alternant, 30 €" -#: sith/settings.py:543 +#: sith/settings.py:545 msgid "Honorary member" msgstr "Membre honoraire, 0 €" -#: sith/settings.py:544 +#: sith/settings.py:546 msgid "Assidu member" msgstr "Membre d'Assidu, 0 €" -#: sith/settings.py:545 +#: sith/settings.py:547 msgid "Amicale/DOCEO member" msgstr "Membre de l'Amicale/DOCEO, 0 €" -#: sith/settings.py:546 +#: sith/settings.py:548 msgid "UT network member" msgstr "Cotisant du réseau UT, 0 €" -#: sith/settings.py:547 +#: sith/settings.py:549 msgid "CROUS member" msgstr "Membres du CROUS, 0 €" -#: sith/settings.py:548 +#: sith/settings.py:550 msgid "Sbarro/ESTA member" msgstr "Membre de Sbarro ou de l'ESTA, 20 €" -#: sith/settings.py:550 +#: sith/settings.py:552 msgid "One semester Welcome Week" msgstr "Un semestre Welcome Week" -#: sith/settings.py:554 +#: sith/settings.py:556 msgid "One month for free" msgstr "Un mois gratuit" -#: sith/settings.py:555 +#: sith/settings.py:557 msgid "Two months for free" msgstr "Deux mois gratuits" -#: sith/settings.py:556 +#: sith/settings.py:558 msgid "Eurok's volunteer" msgstr "Bénévole Eurockéennes" -#: sith/settings.py:558 +#: sith/settings.py:560 msgid "Six weeks for free" msgstr "6 semaines gratuites" -#: sith/settings.py:562 +#: sith/settings.py:564 msgid "One day" msgstr "Un jour" -#: sith/settings.py:563 +#: sith/settings.py:565 msgid "GA staff member" msgstr "Membre staff GA (2 semaines), 1 €" -#: sith/settings.py:566 +#: sith/settings.py:568 msgid "One semester (-20%)" msgstr "Un semestre (-20%), 12 €" -#: sith/settings.py:571 +#: sith/settings.py:573 msgid "Two semesters (-20%)" msgstr "Deux semestres (-20%), 22 €" -#: sith/settings.py:576 +#: sith/settings.py:578 msgid "Common core cursus (-20%)" msgstr "Cursus tronc commun (-20%), 36 €" -#: sith/settings.py:581 +#: sith/settings.py:583 msgid "Branch cursus (-20%)" msgstr "Cursus branche (-20%), 36 €" -#: sith/settings.py:586 +#: sith/settings.py:588 msgid "Alternating cursus (-20%)" msgstr "Cursus alternant (-20%), 24 €" -#: sith/settings.py:592 +#: sith/settings.py:594 msgid "One year for free(CA offer)" msgstr "Une année offerte (Offre CA)" -#: sith/settings.py:612 +#: sith/settings.py:614 msgid "President" msgstr "Président⸱e" -#: sith/settings.py:613 +#: sith/settings.py:615 msgid "Vice-President" msgstr "Vice-Président⸱e" -#: sith/settings.py:614 +#: sith/settings.py:616 msgid "Treasurer" msgstr "Trésorier⸱e" -#: sith/settings.py:615 +#: sith/settings.py:617 msgid "Communication supervisor" msgstr "Responsable communication" -#: sith/settings.py:616 +#: sith/settings.py:618 msgid "Secretary" msgstr "Secrétaire" -#: sith/settings.py:617 +#: sith/settings.py:619 msgid "IT supervisor" msgstr "Responsable info" -#: sith/settings.py:618 +#: sith/settings.py:620 msgid "Board member" msgstr "Membre du bureau" -#: sith/settings.py:619 +#: sith/settings.py:621 msgid "Active member" msgstr "Membre actif⸱ve" -#: sith/settings.py:620 +#: sith/settings.py:622 msgid "Curious" msgstr "Curieux⸱euse" -#: sith/settings.py:657 +#: sith/settings.py:659 msgid "A new poster needs to be moderated" msgstr "Une nouvelle affiche a besoin d'être modérée" -#: sith/settings.py:658 +#: sith/settings.py:660 msgid "A new mailing list needs to be moderated" msgstr "Une nouvelle mailing list a besoin d'être modérée" -#: sith/settings.py:661 +#: sith/settings.py:663 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:663 +#: sith/settings.py:665 #, 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:664 +#: sith/settings.py:666 msgid "New files to be moderated" msgstr "Nouveaux fichiers à modérer" -#: sith/settings.py:665 +#: sith/settings.py:667 #, 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:666 +#: sith/settings.py:668 msgid "You've been identified on some pictures" msgstr "Vous avez été identifié sur des photos" -#: sith/settings.py:667 +#: sith/settings.py:669 #, python-format msgid "You just refilled of %s €" msgstr "Vous avez rechargé votre compte de %s€" -#: sith/settings.py:668 +#: sith/settings.py:670 #, python-format msgid "You just bought %s" msgstr "Vous avez acheté %s" -#: sith/settings.py:669 +#: sith/settings.py:671 msgid "You have a notification" msgstr "Vous avez une notification" -#: sith/settings.py:681 +#: sith/settings.py:683 msgid "Success!" msgstr "Succès !" -#: sith/settings.py:682 +#: sith/settings.py:684 msgid "Fail!" msgstr "Échec !" -#: sith/settings.py:683 +#: sith/settings.py:685 msgid "You successfully posted an article in the Weekmail" msgstr "Article posté avec succès dans le Weekmail" -#: sith/settings.py:684 +#: sith/settings.py:686 msgid "You successfully edited an article in the Weekmail" msgstr "Article édité avec succès dans le Weekmail" -#: sith/settings.py:685 +#: sith/settings.py:687 msgid "You successfully sent the Weekmail" msgstr "Weekmail envoyé avec succès" -#: sith/settings.py:693 +#: sith/settings.py:695 msgid "AE tee-shirt" msgstr "Tee-shirt AE" @@ -5789,11 +5793,11 @@ msgstr "lieu" msgid "You can not subscribe many time for the same period" msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période" -#: subscription/templates/subscription/stats.jinja:25 +#: subscription/templates/subscription/stats.jinja:27 msgid "Total subscriptions" msgstr "Cotisations totales" -#: subscription/templates/subscription/stats.jinja:26 +#: subscription/templates/subscription/stats.jinja:28 msgid "Subscriptions by type" msgstr "Cotisations par type" @@ -5806,7 +5810,7 @@ msgstr "" msgid "A user with that email address already exists" msgstr "Un utilisateur avec cette adresse email existe déjà" -#: subscription/views.py:101 +#: subscription/views.py:102 msgid "You must either choose an existing user or create a new one properly" msgstr "" "Vous devez soit choisir un utilisateur existant, soit en créer un proprement" @@ -5871,11 +5875,11 @@ msgstr "" "La photo de profil que vous souhaitez voir dans le Trombi (attention: cette " "photo risque d'être publiée)" -#: trombi/models.py:139 +#: trombi/models.py:140 msgid "scrub pict" msgstr "photo de blouse" -#: trombi/models.py:143 +#: trombi/models.py:144 msgid "" "The scrub picture you want in the trombi (warning: this picture may be " "published)" @@ -5883,19 +5887,19 @@ msgstr "" "La photo de blouse que vous souhaitez voir dans le Trombi (attention: cette " "photo risque d'être publiée)" -#: trombi/models.py:185 +#: trombi/models.py:184 msgid "target" msgstr "cible" -#: trombi/models.py:190 +#: trombi/models.py:189 msgid "is the comment moderated" msgstr "le commentaire est modéré" -#: trombi/models.py:212 +#: trombi/models.py:211 msgid "start" msgstr "début" -#: trombi/models.py:213 +#: trombi/models.py:212 msgid "end" msgstr "fin" @@ -6026,27 +6030,27 @@ msgstr "" msgid "Edit comment" msgstr "Éditer le commentaire" -#: trombi/views.py:68 +#: trombi/views.py:69 msgid "My profile" msgstr "Mon profil" -#: trombi/views.py:75 +#: trombi/views.py:76 msgid "My pictures" msgstr "Mes photos" -#: trombi/views.py:87 +#: trombi/views.py:91 msgid "Admin tools" msgstr "Admin Trombi" -#: trombi/views.py:213 +#: trombi/views.py:215 msgid "Explain why you rejected the comment" msgstr "Expliquez pourquoi vous refusez le commentaire" -#: trombi/views.py:244 +#: trombi/views.py:246 msgid "Rejected comment" msgstr "Commentaire rejeté" -#: trombi/views.py:246 +#: trombi/views.py:248 #, python-format msgid "" "Your comment to %(target)s on the Trombi \"%(trombi)s\" was rejected for the " @@ -6063,16 +6067,16 @@ msgstr "" "\n" "%(content)s" -#: trombi/views.py:278 +#: trombi/views.py:280 #, python-format msgid "%(name)s (deadline: %(date)s)" msgstr "%(name)s (date limite: %(date)s)" -#: trombi/views.py:288 +#: trombi/views.py:290 msgid "Select trombi" msgstr "Choisir un trombi" -#: trombi/views.py:290 +#: trombi/views.py:292 msgid "" "This allows you to subscribe to a Trombi. Be aware that you can subscribe " "only once, so don't play with that, or you will expose yourself to the " @@ -6082,19 +6086,19 @@ msgstr "" "pouvez vous inscrire qu'à un seul Trombi, donc ne jouez pas avec cet option " "ou vous encourerez la colère des admins!" -#: trombi/views.py:361 +#: trombi/views.py:363 msgid "Personal email (not UTBM)" msgstr "Email personnel (pas UTBM)" -#: trombi/views.py:362 +#: trombi/views.py:364 msgid "Phone" msgstr "Téléphone" -#: trombi/views.py:363 +#: trombi/views.py:365 msgid "Native town" msgstr "Ville d'origine" -#: trombi/views.py:471 +#: trombi/views.py:473 msgid "" "You can not yet write comment, you must wait for the subscription deadline " "to be passed." @@ -6102,11 +6106,11 @@ msgstr "" "Vous ne pouvez pas encore écrire de commentaires, vous devez attendre la fin " "des inscriptions" -#: trombi/views.py:478 +#: trombi/views.py:480 msgid "You can not write comment anymore, the deadline is already passed." msgstr "Vous ne pouvez plus écrire de commentaires, la date est passée." -#: trombi/views.py:491 +#: trombi/views.py:493 #, python-format msgid "Maximum characters: %(max_length)s" msgstr "Nombre de caractères max: %(max_length)s" diff --git a/locale/fr/LC_MESSAGES/djangojs.po b/locale/fr/LC_MESSAGES/djangojs.po index 02032e52..644f4a43 100644 --- a/locale/fr/LC_MESSAGES/djangojs.po +++ b/locale/fr/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-09 11:50+0200\n" +"POT-Creation-Date: 2024-10-16 02:19+0200\n" "PO-Revision-Date: 2024-09-17 11:54+0200\n" "Last-Translator: Sli \n" "Language-Team: AE info \n" @@ -22,87 +22,95 @@ msgstr "" msgid "captured.%s" msgstr "capture.%s" -#: core/static/webpack/easymde-index.js:32 +#: core/static/webpack/ajax-select-index.ts:73 +msgid "You need to type %(number)s more characters" +msgstr "Vous devez taper %(number)s caractères de plus" + +#: core/static/webpack/ajax-select-index.ts:76 +msgid "No results found" +msgstr "Aucun résultat trouvé" + +#: core/static/webpack/easymde-index.ts:31 msgid "Heading" msgstr "Titre" -#: core/static/webpack/easymde-index.js:38 +#: core/static/webpack/easymde-index.ts:37 msgid "Italic" msgstr "Italique" -#: core/static/webpack/easymde-index.js:44 +#: core/static/webpack/easymde-index.ts:43 msgid "Bold" msgstr "Gras" -#: core/static/webpack/easymde-index.js:50 +#: core/static/webpack/easymde-index.ts:49 msgid "Strikethrough" msgstr "Barré" -#: core/static/webpack/easymde-index.js:59 +#: core/static/webpack/easymde-index.ts:58 msgid "Underline" msgstr "Souligné" -#: core/static/webpack/easymde-index.js:68 +#: core/static/webpack/easymde-index.ts:67 msgid "Superscript" msgstr "Exposant" -#: core/static/webpack/easymde-index.js:77 +#: core/static/webpack/easymde-index.ts:76 msgid "Subscript" msgstr "Indice" -#: core/static/webpack/easymde-index.js:83 +#: core/static/webpack/easymde-index.ts:82 msgid "Code" msgstr "Code" -#: core/static/webpack/easymde-index.js:90 +#: core/static/webpack/easymde-index.ts:89 msgid "Quote" msgstr "Citation" -#: core/static/webpack/easymde-index.js:96 +#: core/static/webpack/easymde-index.ts:95 msgid "Unordered list" msgstr "Liste non ordonnée" -#: core/static/webpack/easymde-index.js:102 +#: core/static/webpack/easymde-index.ts:101 msgid "Ordered list" msgstr "Liste ordonnée" -#: core/static/webpack/easymde-index.js:109 +#: core/static/webpack/easymde-index.ts:108 msgid "Insert link" msgstr "Insérer lien" -#: core/static/webpack/easymde-index.js:115 +#: core/static/webpack/easymde-index.ts:114 msgid "Insert image" msgstr "Insérer image" -#: core/static/webpack/easymde-index.js:121 +#: core/static/webpack/easymde-index.ts:120 msgid "Insert table" msgstr "Insérer tableau" -#: core/static/webpack/easymde-index.js:128 +#: core/static/webpack/easymde-index.ts:127 msgid "Clean block" msgstr "Nettoyer bloc" -#: core/static/webpack/easymde-index.js:135 +#: core/static/webpack/easymde-index.ts:134 msgid "Toggle preview" msgstr "Activer la prévisualisation" -#: core/static/webpack/easymde-index.js:141 +#: core/static/webpack/easymde-index.ts:140 msgid "Toggle side by side" msgstr "Activer la vue côte à côte" -#: core/static/webpack/easymde-index.js:147 +#: core/static/webpack/easymde-index.ts:146 msgid "Toggle fullscreen" msgstr "Activer le plein écran" -#: core/static/webpack/easymde-index.js:154 +#: core/static/webpack/easymde-index.ts:153 msgid "Markdown guide" msgstr "Guide markdown" -#: core/static/webpack/user/family-graph-index.js:222 +#: core/static/webpack/user/family-graph-index.js:233 msgid "family_tree.%(extension)s" msgstr "arbre_genealogique.%(extension)s" -#: core/static/webpack/user/pictures-index.js:67 +#: core/static/webpack/user/pictures-index.js:76 msgid "pictures.%(extension)s" msgstr "photos.%(extension)s" @@ -110,10 +118,10 @@ msgstr "photos.%(extension)s" msgid "Incorrect value" msgstr "Valeur incorrecte" -#: sas/static/sas/js/viewer.js:205 +#: sas/static/webpack/sas/viewer-index.ts:271 msgid "Couldn't moderate picture" msgstr "Il n'a pas été possible de modérer l'image" -#: sas/static/sas/js/viewer.js:217 +#: sas/static/webpack/sas/viewer-index.ts:284 msgid "Couldn't delete picture" msgstr "Il n'a pas été possible de supprimer l'image" diff --git a/sas/static/sas/css/picture.scss b/sas/static/sas/css/picture.scss index b8c0f6fb..f62bb8bf 100644 --- a/sas/static/sas/css/picture.scss +++ b/sas/static/sas/css/picture.scss @@ -29,7 +29,7 @@ width: 100%; } - > .photo { + >.photo { box-sizing: border-box; height: 500px; display: flex; @@ -42,7 +42,7 @@ height: auto; } - > img { + >img { height: 100%; max-width: 100%; object-fit: contain; @@ -57,7 +57,7 @@ width: 100%; } - > .navigation { + >.navigation { display: flex; flex-direction: row; gap: 10px; @@ -66,8 +66,8 @@ width: 100%; } - > #prev, - > #next { + >#prev, + >#next { width: calc(50% - 5px); aspect-ratio: 16/9; background: #333333; @@ -80,6 +80,7 @@ object-fit: cover; opacity: 70%; } + .overlay { position: absolute; top: 50%; @@ -89,7 +90,7 @@ font-size: 40px; } - > div { + >div { display: flex; position: relative; width: 100%; @@ -98,12 +99,12 @@ } } - > .tags { + >.tags { @media (min-width: 1001px) { margin-right: 5px; } - > ul { + >ul { list-style-type: none; margin: 0; display: flex; @@ -118,7 +119,7 @@ margin-right: 5px; } - > li { + >li { box-sizing: border-box; display: flex; flex-direction: row; @@ -135,7 +136,7 @@ max-width: calc(50% - 5px); } - > a { + >a { box-sizing: border-box; display: flex; flex-direction: row; @@ -155,7 +156,7 @@ background-color: #aaa; } - > span { + >span { width: 100%; text-overflow: ellipsis; white-space: nowrap; @@ -167,14 +168,14 @@ margin-left: 10px; } - > img { + >img { width: 25px; max-height: 25px; object-fit: contain; border-radius: 50%; } - > .profile-pic { + >.profile-pic { background-position: center center; background-size: cover; background-repeat: no-repeat; @@ -187,23 +188,24 @@ } } - > form { - > p { + >form { + >p { box-sizing: border-box; } - > .results_on_deck > div { + >.results_on_deck>div { position: relative; display: flex; align-items: center; word-break: break-word; - > span { + >span { position: absolute; top: 0; right: 0; } } + input { min-width: 100%; max-width: 100%; @@ -226,17 +228,17 @@ flex-direction: column; } - > .infos { + >.infos { display: flex; flex-direction: column; width: 50%; - > div > div { + >div>div { display: flex; flex-direction: row; justify-content: space-between; - > *:first-child { + >*:first-child { min-width: 150px; @media (max-width: 1000px) { @@ -246,18 +248,18 @@ } } - > .tools { + >.tools { display: flex; flex-direction: column; width: 50%; - > div { + >div { display: flex; flex-direction: row; justify-content: space-between; - > div { - > a.button { + >div { + >a.button { box-sizing: border-box; background-color: #f2f2f2; display: flex; @@ -274,7 +276,7 @@ } } - > a.text.danger { + >a.text.danger { color: red; &:hover { @@ -289,4 +291,4 @@ } } } -} +} \ No newline at end of file diff --git a/sas/templates/sas/picture.jinja b/sas/templates/sas/picture.jinja index 30f674ce..879b5a8d 100644 --- a/sas/templates/sas/picture.jinja +++ b/sas/templates/sas/picture.jinja @@ -3,11 +3,10 @@ {%- block additional_css -%} - {%- endblock -%} {%- block additional_js -%} - + {%- endblock -%} @@ -158,7 +157,13 @@
{% trans %}People{% endtrans %}
{% if user.was_subscribed %}
- +
{% endif %}