From ef3f1bdaa697bb31191b72be1f350f336c4ab222 Mon Sep 17 00:00:00 2001 From: Karl Determe Date: Fri, 14 Aug 2026 22:48:09 +0200 Subject: [PATCH] feat: implement notification system, email reminders, and user language preferences --- .../0011_userconfig_preferred_language.py | 18 + streetup/common/models.py | 12 + streetup/common/tests.py | 6 + streetup/common/views.py | 21 + streetup/notifications/forms.py | 4 + .../locale/en/LC_MESSAGES/django.mo | Bin 5685 -> 13968 bytes .../locale/en/LC_MESSAGES/django.po | 735 +++++++++------- .../locale/fr/LC_MESSAGES/django.mo | Bin 10773 -> 14841 bytes .../locale/fr/LC_MESSAGES/django.po | 537 +++++++----- .../locale/nl/LC_MESSAGES/django.mo | Bin 3423 -> 14320 bytes .../locale/nl/LC_MESSAGES/django.po | 781 ++++++++++-------- .../send_unread_notification_reminders.py | 160 ++-- .../notifications/notification_settings.html | 16 + streetup/notifications/tests.py | 36 + streetup/notifications/views.py | 3 +- streetup/streetup/urls.py | 5 +- 16 files changed, 1402 insertions(+), 932 deletions(-) create mode 100644 streetup/common/migrations/0011_userconfig_preferred_language.py diff --git a/streetup/common/migrations/0011_userconfig_preferred_language.py b/streetup/common/migrations/0011_userconfig_preferred_language.py new file mode 100644 index 0000000..7289b8a --- /dev/null +++ b/streetup/common/migrations/0011_userconfig_preferred_language.py @@ -0,0 +1,18 @@ +# Generated by Django 6.0.7 on 2026-08-14 20:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0010_userconfig_notification_reminder_delay_hours_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='userconfig', + name='preferred_language', + field=models.CharField(choices=[('fr', 'Français'), ('nl', 'Nederlands'), ('en', 'English')], default='fr', help_text="Langue utilisée pour l'interface, les e-mails et les notifications.", max_length=5, verbose_name='Langue préférée'), + ), + ] diff --git a/streetup/common/models.py b/streetup/common/models.py index d2a4d56..ea4dbf5 100644 --- a/streetup/common/models.py +++ b/streetup/common/models.py @@ -158,6 +158,18 @@ class UserConfig(models.Model): verbose_name="Tri de la liste des interventions", help_text="Préférences de tri pour la vue liste des interventions.", ) + PREFERRED_LANGUAGE_CHOICES = [ + ('fr', _('Français')), + ('nl', _('Nederlands')), + ('en', _('English')), + ] + preferred_language = models.CharField( + max_length=5, + choices=PREFERRED_LANGUAGE_CHOICES, + default='fr', + verbose_name=_("Langue préférée"), + help_text=_("Langue utilisée pour l'interface, les e-mails et les notifications."), + ) notification_reminder_enabled = models.BooleanField( default=False, verbose_name=_("Activer les rappels par e-mail"), diff --git a/streetup/common/tests.py b/streetup/common/tests.py index 963cadd..3343e6c 100644 --- a/streetup/common/tests.py +++ b/streetup/common/tests.py @@ -120,6 +120,8 @@ class LanguageSwitchingTests(TestCase): # Check that the language cookie is set self.assertIn(settings.LANGUAGE_COOKIE_NAME, self.client.cookies) self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, "fr") + self.user.config.refresh_from_db() + self.assertEqual(self.user.config.preferred_language, "fr") def test_set_language_to_dutch(self): """Test switching to Dutch language.""" @@ -134,6 +136,8 @@ class LanguageSwitchingTests(TestCase): self.assertEqual(response.status_code, 200) self.assertIn(settings.LANGUAGE_COOKIE_NAME, self.client.cookies) self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, "nl") + self.user.config.refresh_from_db() + self.assertEqual(self.user.config.preferred_language, "nl") def test_set_language_to_english(self): """Test switching to English language.""" @@ -148,6 +152,8 @@ class LanguageSwitchingTests(TestCase): self.assertEqual(response.status_code, 200) self.assertIn(settings.LANGUAGE_COOKIE_NAME, self.client.cookies) self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, "en") + self.user.config.refresh_from_db() + self.assertEqual(self.user.config.preferred_language, "en") def test_invalid_language_code(self): """Test that invalid language codes are handled gracefully.""" diff --git a/streetup/common/views.py b/streetup/common/views.py index c52ef4c..07f009b 100644 --- a/streetup/common/views.py +++ b/streetup/common/views.py @@ -587,4 +587,25 @@ def get_help_document(request, doc_name): return JsonResponse({'html': html_content}) +from django.views.i18n import set_language as django_set_language + +@login_not_required +def set_language(request): + """ + Wraps Django's set_language to persist the chosen language in UserConfig.preferred_language + when the user is authenticated. + """ + response = django_set_language(request) + if request.user.is_authenticated and request.method == 'POST': + lang_code = request.POST.get('language') + valid_langs = [code for code, _ in getattr(settings, 'LANGUAGES', [('fr', 'Français'), ('nl', 'Nederlands'), ('en', 'English')])] + if lang_code and lang_code in valid_langs: + config, _ = UserConfig.objects.get_or_create(user=request.user) + if config.preferred_language != lang_code: + config.preferred_language = lang_code + config.save(update_fields=['preferred_language']) + return response + + + diff --git a/streetup/notifications/forms.py b/streetup/notifications/forms.py index b45bce1..f9abc86 100644 --- a/streetup/notifications/forms.py +++ b/streetup/notifications/forms.py @@ -109,11 +109,15 @@ class NotificationReminderSettingsForm(forms.ModelForm): class Meta: model = UserConfig fields = [ + 'preferred_language', 'notification_reminder_enabled', 'notification_reminder_emails', 'notification_reminder_delay_hours', ] widgets = { + 'preferred_language': forms.Select( + attrs={'class': 'form-select rounded-3'} + ), 'notification_reminder_enabled': forms.CheckboxInput( attrs={'class': 'form-check-input', 'role': 'switch'} ), diff --git a/streetup/notifications/locale/en/LC_MESSAGES/django.mo b/streetup/notifications/locale/en/LC_MESSAGES/django.mo index 4ff5a3746f7536511a72afebab388c33f596d9ad..225556f31cb563f507e568a42ecc6e3d665b075d 100644 GIT binary patch literal 13968 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 literal 5685 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 Bwaowk diff --git a/streetup/notifications/locale/en/LC_MESSAGES/django.po b/streetup/notifications/locale/en/LC_MESSAGES/django.po index 946e83f..aef2c0e 100644 --- a/streetup/notifications/locale/en/LC_MESSAGES/django.po +++ b/streetup/notifications/locale/en/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-13 19:20+0200\n" +"POT-Creation-Date: 2026-08-14 22:44+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,723 +17,836 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: streetup/notifications/forms.py:35 streetup/notifications/models.py:71 -#: streetup/notifications/models.py:321 +#: .\notifications\forms.py:35 .\notifications\models.py:71 +#: .\notifications\models.py:321 msgid "Titre" -msgstr "Titre" +msgstr "Title" -#: streetup/notifications/forms.py:40 streetup/notifications/models.py:72 -#: streetup/notifications/models.py:406 +#: .\notifications\forms.py:40 .\notifications\models.py:72 +#: .\notifications\models.py:455 msgid "Contenu" -msgstr "Contenu" +msgstr "Content" -#: streetup/notifications/forms.py:46 streetup/notifications/models.py:69 +#: .\notifications\forms.py:46 .\notifications\models.py:69 msgid "Type" msgstr "Type" -#: streetup/notifications/forms.py:52 +#: .\notifications\forms.py:52 msgid "Lien d'action (URL)" -msgstr "" +msgstr "Action URL" -#: streetup/notifications/forms.py:58 streetup/notifications/models.py:98 +#: .\notifications\forms.py:58 .\notifications\models.py:98 msgid "Libellé du lien" -msgstr "" +msgstr "Link label" -#: streetup/notifications/forms.py:63 streetup/notifications/models.py:85 -#: streetup/notifications/templates/notifications/inbox.html:180 +#: .\notifications\forms.py:63 .\notifications\models.py:85 +#: .\notifications\templates\notifications\inbox.html:304 msgid "Expire le" -msgstr "Expire le" +msgstr "Expires on" -#: streetup/notifications/forms.py:68 streetup/notifications/models.py:284 -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:41 +#: .\notifications\forms.py:68 .\notifications\models.py:284 +#: .\notifications\templates\notifications\_new_discussion_modal.html:41 msgid "Pièces jointes" msgstr "Attachments" -#: streetup/notifications/forms.py:69 +#: .\notifications\forms.py:69 msgid "Photos ou documents (plusieurs fichiers possibles)." -msgstr "Photos or documents (multiple files possible)." +msgstr "Photos or documents (multiple files allowed)." -#: streetup/notifications/forms.py:76 +#: .\notifications\forms.py:76 msgid "Destinataires individuels" -msgstr "Destinataires individuels" +msgstr "Individual recipients" -#: streetup/notifications/forms.py:82 streetup/notifications/models.py:504 +#: .\notifications\forms.py:82 .\notifications\models.py:553 msgid "Équipes destinataires" -msgstr "" +msgstr "Recipient teams" -#: streetup/notifications/forms.py:92 +#: .\notifications\forms.py:92 msgid "Veuillez sélectionner au moins un destinataire ou une équipe." -msgstr "" +msgstr "Please select at least one recipient or team." -#: streetup/notifications/forms.py:123 +#: .\notifications\forms.py:127 msgid "Ex: email1@exemple.com, email2@exemple.com" -msgstr "" +msgstr "E.g.: email1@example.com, email2@example.com" -#: streetup/notifications/forms.py:148 +#: .\notifications\forms.py:152 #, python-format msgid "L'adresse e-mail '%(email)s' n'est pas valide." -msgstr "" +msgstr "The email address '%(email)s' is invalid." -#: streetup/notifications/management/commands/send_unread_notification_reminders.py:106 +#: .\notifications\management\commands\send_unread_notification_reminders.py:95 +#, python-format +msgid "[StreetUp] Rappel : %(count)d notification(s) non lue(s)" +msgstr "[StreetUp] Reminder: %(count)d unread notification(s)" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:101 +#, python-format +msgid "Bonjour %(name)s," +msgstr "Hello %(name)s," + +#: .\notifications\management\commands\send_unread_notification_reminders.py:102 +#, python-format +msgid "" +"Vous avez %(count)d notification(s) non lue(s) reçue(s) il y a plus de " +"%(delay)d heure(s) :" +msgstr "You have %(count)d unread notification(s) received more than %(delay)d hour(s) ago:" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:117 msgid "Système" -msgstr "" +msgstr "System" -#: streetup/notifications/models.py:12 +#: .\notifications\management\commands\send_unread_notification_reminders.py:125 +msgid "reçue le" +msgstr "received on" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:125 +msgid "par" +msgstr "by" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:126 +msgid "Lien" +msgstr "Link" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:131 +msgid "Reçue le" +msgstr "Received on" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:132 +msgid "Consulter" +msgstr "View" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:136 +msgid "Accédez à votre boîte de réception :" +msgstr "Go to your inbox:" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:139 +msgid "Notifications non lues" +msgstr "Unread notifications" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:140 +#, python-format +msgid "" +"Vous avez %(count)d notification(s) non lue(s) qui " +"attendent votre attention :" +msgstr "You have %(count)d unread notification(s) waiting for your attention:" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:141 +msgid "Voir mes notifications" +msgstr "View my notifications" + +#: .\notifications\models.py:12 msgid "Nom" -msgstr "Nom" +msgstr "Name" -#: streetup/notifications/models.py:13 +#: .\notifications\models.py:13 msgid "Description" msgstr "Description" -#: streetup/notifications/models.py:18 +#: .\notifications\models.py:18 msgid "Membres" -msgstr "Membres" +msgstr "Members" -#: streetup/notifications/models.py:26 streetup/notifications/models.py:328 +#: .\notifications\models.py:26 .\notifications\models.py:328 msgid "Créé par" -msgstr "" +msgstr "Created by" -#: streetup/notifications/models.py:28 streetup/notifications/models.py:81 -#: streetup/notifications/models.py:330 +#: .\notifications\models.py:28 .\notifications\models.py:81 +#: .\notifications\models.py:330 msgid "Créé le" -msgstr "" +msgstr "Created on" -#: streetup/notifications/models.py:34 streetup/notifications/models.py:224 +#: .\notifications\models.py:34 .\notifications\models.py:224 msgid "Équipe" -msgstr "" +msgstr "Team" -#: streetup/notifications/models.py:35 -#: streetup/notifications/templates/notifications/team_list.html:9 +#: .\notifications\models.py:35 +#: .\notifications\templates\notifications\team_list.html:9 msgid "Équipes" -msgstr "" +msgstr "Teams" -#: streetup/notifications/models.py:49 streetup/notifications/models.py:415 -#: streetup/notifications/models.py:544 +#: .\notifications\models.py:49 .\notifications\models.py:464 +#: .\notifications\models.py:593 msgid "Message" msgstr "Message" -#: streetup/notifications/models.py:50 +#: .\notifications\models.py:50 msgid "Rappel" msgstr "Reminder" -#: streetup/notifications/models.py:51 +#: .\notifications\models.py:51 msgid "Tâche" msgstr "Task" -#: streetup/notifications/models.py:52 +#: .\notifications\models.py:52 msgid "Alerte" msgstr "Alert" -#: streetup/notifications/models.py:53 +#: .\notifications\models.py:53 msgid "Information" msgstr "Information" -#: streetup/notifications/models.py:79 +#: .\notifications\models.py:79 msgid "Expéditeur" -msgstr "" +msgstr "Sender" -#: streetup/notifications/models.py:86 +#: .\notifications\models.py:86 msgid "Laisser vide pour ne pas faire expirer la notification." -msgstr "Laisser vide pour ne pas faire expirer la notification." +msgstr "Leave blank if the notification should not expire." -#: streetup/notifications/models.py:92 +#: .\notifications\models.py:92 msgid "Lien d'action" -msgstr "" +msgstr "Action link" -#: streetup/notifications/models.py:93 +#: .\notifications\models.py:93 msgid "URL relative ou absolue vers laquelle l'utilisateur est redirigé." -msgstr "" +msgstr "Relative or absolute URL the user is redirected to." -#: streetup/notifications/models.py:104 +#: .\notifications\models.py:104 msgid "Application source" -msgstr "Application source" +msgstr "Source application" -#: streetup/notifications/models.py:105 +#: .\notifications\models.py:105 msgid "Nom de l'application qui a généré la notification." -msgstr "" +msgstr "Name of the application that generated the notification." -#: streetup/notifications/models.py:109 +#: .\notifications\models.py:109 msgid "Notification système" -msgstr "" +msgstr "System notification" -#: streetup/notifications/models.py:110 +#: .\notifications\models.py:110 msgid "Générée automatiquement par le système." -msgstr "" +msgstr "Generated automatically by the system." -#: streetup/notifications/models.py:114 streetup/notifications/models.py:517 +#: .\notifications\models.py:114 .\notifications\models.py:566 msgid "Prise en charge unique" msgstr "Single claim" -#: streetup/notifications/models.py:116 +#: .\notifications\models.py:116 msgid "" "Si activé, dès qu'un destinataire marque cette notification comme lue, elle " "est automatiquement archivée pour tous les autres destinataires." -msgstr "" +msgstr "If enabled, as soon as one recipient marks this notification as read, it is automatically archived for all other recipients." -#: streetup/notifications/models.py:126 +#: .\notifications\models.py:126 msgid "Discussion liée" -msgstr "" +msgstr "Linked discussion" -#: streetup/notifications/models.py:147 streetup/notifications/models.py:159 -#: streetup/notifications/models.py:218 streetup/notifications/models.py:246 +#: .\notifications\models.py:147 .\notifications\models.py:159 +#: .\notifications\models.py:218 .\notifications\models.py:246 msgid "Notification" msgstr "Notification" -#: streetup/notifications/models.py:148 -#: streetup/notifications/templates/notifications/discussion_list.html:44 -#: streetup/notifications/templates/notifications/inbox.html:32 -#: streetup/notifications/templates/notifications/inbox_mobile.html:4 -#: streetup/notifications/templates/notifications/inbox_mobile.html:30 +#: .\notifications\models.py:148 +#: .\notifications\templates\notifications\discussion_list.html:77 +#: .\notifications\templates\notifications\inbox.html:116 +#: .\notifications\templates\notifications\inbox_mobile.html:4 +#: .\notifications\templates\notifications\inbox_mobile.html:30 msgid "Notifications" msgstr "Notifications" -#: streetup/notifications/models.py:165 +#: .\notifications\models.py:165 msgid "Destinataire" -msgstr "Destinataire" +msgstr "Recipient" -#: streetup/notifications/models.py:167 streetup/notifications/models.py:303 +#: .\notifications\models.py:167 .\notifications\models.py:303 msgid "Lu le" -msgstr "Lu le" +msgstr "Read on" -#: streetup/notifications/models.py:168 +#: .\notifications\models.py:168 msgid "Archivé le" -msgstr "" +msgstr "Archived on" -#: streetup/notifications/models.py:169 +#: .\notifications\models.py:169 msgid "Rappel envoyé le" -msgstr "" +msgstr "Reminder sent on" -#: streetup/notifications/models.py:205 +#: .\notifications\models.py:205 msgid "Destinataire de notification" -msgstr "Destinataire de notification" +msgstr "Notification recipient" -#: streetup/notifications/models.py:206 +#: .\notifications\models.py:206 msgid "Destinataires de notification" -msgstr "Destinataires de notification" +msgstr "Notification recipients" -#: streetup/notifications/models.py:231 streetup/notifications/models.py:295 +#: .\notifications\models.py:231 .\notifications\models.py:295 msgid "Notification d'équipe" -msgstr "" +msgstr "Team notification" -#: streetup/notifications/models.py:232 +#: .\notifications\models.py:232 msgid "Notifications d'équipe" -msgstr "" +msgstr "Team notifications" -#: streetup/notifications/models.py:250 streetup/notifications/models.py:548 +#: .\notifications\models.py:250 .\notifications\models.py:597 msgid "Fichier" msgstr "File" -#: streetup/notifications/models.py:255 streetup/notifications/models.py:550 +#: .\notifications\models.py:255 .\notifications\models.py:599 msgid "Nom du fichier" -msgstr "Nom du fichier" +msgstr "File name" -#: streetup/notifications/models.py:263 +#: .\notifications\models.py:263 msgid "Ajouté par" -msgstr "" +msgstr "Added by" -#: streetup/notifications/models.py:265 streetup/notifications/models.py:551 +#: .\notifications\models.py:265 .\notifications\models.py:600 msgid "Ajouté le" -msgstr "" +msgstr "Added on" -#: streetup/notifications/models.py:283 +#: .\notifications\models.py:283 msgid "Pièce jointe" -msgstr "" +msgstr "Attachment" -#: streetup/notifications/models.py:301 +#: .\notifications\models.py:301 msgid "Utilisateur" -msgstr "Utilisateur" +msgstr "User" -#: streetup/notifications/models.py:306 +#: .\notifications\models.py:306 msgid "Lecture de notification d'équipe" -msgstr "" +msgstr "Team notification read" -#: streetup/notifications/models.py:307 +#: .\notifications\models.py:307 msgid "Lectures de notifications d'équipe" -msgstr "" +msgstr "Team notification reads" -#: streetup/notifications/models.py:331 +#: .\notifications\models.py:331 msgid "Mis à jour le" -msgstr "" +msgstr "Updated on" -#: streetup/notifications/models.py:336 -#: streetup/notifications/templates/notifications/discussion_detail.html:105 +#: .\notifications\models.py:336 +#: .\notifications\templates\notifications\discussion_detail.html:105 +#: .\notifications\templates\notifications\discussion_list.html:144 +#: .\notifications\templates\notifications\inbox.html:421 msgid "Participants" msgstr "Participants" -#: streetup/notifications/models.py:338 -#: streetup/notifications/templates/notifications/discussion_detail.html:97 +#: .\notifications\models.py:338 +#: .\notifications\templates\notifications\discussion_detail.html:97 +#: .\notifications\templates\notifications\discussion_list.html:120 +#: .\notifications\templates\notifications\inbox.html:397 msgid "Clôturée" msgstr "Closed" -#: streetup/notifications/models.py:346 +#: .\notifications\models.py:346 msgid "Type d'objet lié" -msgstr "" +msgstr "Linked object type" -#: streetup/notifications/models.py:349 +#: .\notifications\models.py:349 msgid "ID objet lié" -msgstr "" +msgstr "Linked object ID" -#: streetup/notifications/models.py:355 +#: .\notifications\models.py:355 msgid "URL objet lié" -msgstr "" +msgstr "Linked object URL" -#: streetup/notifications/models.py:358 +#: .\notifications\models.py:358 msgid "Libellé objet lié" -msgstr "" +msgstr "Linked object label" -#: streetup/notifications/models.py:380 streetup/notifications/models.py:396 +#: .\notifications\models.py:392 +msgid "Intervention" +msgstr "Intervention" + +#: .\notifications\models.py:400 +msgid "Observation" +msgstr "Observation" + +#: .\notifications\models.py:408 +msgid "Ordre de préparation" +msgstr "Preparation order" + +#: .\notifications\models.py:416 +msgid "Projet" +msgstr "Project" + +#: .\notifications\models.py:424 +msgid "Générale" +msgstr "General" + +#: .\notifications\models.py:429 .\notifications\models.py:445 msgid "Discussion" msgstr "Discussion" -#: streetup/notifications/models.py:381 -#: streetup/notifications/templates/notifications/discussion_list.html:37 -#: streetup/notifications/templates/notifications/inbox.html:54 +#: .\notifications\models.py:430 +#: .\notifications\templates\notifications\discussion_list.html:70 +#: .\notifications\templates\notifications\inbox.html:133 msgid "Discussions" msgstr "Discussions" -#: streetup/notifications/models.py:404 +#: .\notifications\models.py:453 msgid "Auteur" -msgstr "Auteur" +msgstr "Author" -#: streetup/notifications/models.py:407 +#: .\notifications\models.py:456 msgid "Envoyé le" -msgstr "" +msgstr "Sent on" -#: streetup/notifications/models.py:408 +#: .\notifications\models.py:457 msgid "Supprimé" -msgstr "" +msgstr "Deleted" -#: streetup/notifications/models.py:416 +#: .\notifications\models.py:465 msgid "Messages" msgstr "Messages" -#: streetup/notifications/models.py:441 +#: .\notifications\models.py:490 msgid "Intervention annulée" -msgstr "" +msgstr "Intervention cancelled" -#: streetup/notifications/models.py:446 +#: .\notifications\models.py:495 msgid "Tous (pas de filtre)" -msgstr "Tous (pas de filtre)" +msgstr "All (no filter)" -#: streetup/notifications/models.py:447 +#: .\notifications\models.py:496 msgid "Doublon" -msgstr "Doublon" +msgstr "Duplicate" -#: streetup/notifications/models.py:448 +#: .\notifications\models.py:497 msgid "A rediriger" -msgstr "A rediriger" +msgstr "To redirect" -#: streetup/notifications/models.py:449 +#: .\notifications\models.py:498 msgid "Pas sous notre gestion" -msgstr "Pas sous notre gestion" +msgstr "Not under our management" -#: streetup/notifications/models.py:450 +#: .\notifications\models.py:499 msgid "Non-relevant" -msgstr "Non-relevant" +msgstr "Not relevant" -#: streetup/notifications/models.py:451 +#: .\notifications\models.py:500 msgid "Autre" -msgstr "Autre" +msgstr "Other" -#: streetup/notifications/models.py:455 +#: .\notifications\models.py:504 msgid "Nom de la règle" -msgstr "" +msgstr "Rule name" -#: streetup/notifications/models.py:456 +#: .\notifications\models.py:505 msgid "Active" msgstr "Active" -#: streetup/notifications/models.py:462 +#: .\notifications\models.py:511 msgid "Événement déclencheur" -msgstr "" +msgstr "Trigger event" -#: streetup/notifications/models.py:468 +#: .\notifications\models.py:517 msgid "Filtre : type d'annulation" -msgstr "" +msgstr "Filter: cancellation type" -#: streetup/notifications/models.py:470 +#: .\notifications\models.py:519 msgid "" "Laisser vide pour déclencher sur tout type d'annulation. Sélectionner une " "valeur pour n'agir que sur ce type précis." -msgstr "" +msgstr "Leave blank to trigger on all cancellation types. Select a value to trigger only on that type." -#: streetup/notifications/models.py:480 +#: .\notifications\models.py:529 msgid "Type de notification" -msgstr "Type de notification" +msgstr "Notification type" -#: streetup/notifications/models.py:484 +#: .\notifications\models.py:533 msgid "Modèle de titre" -msgstr "" +msgstr "Title template" -#: streetup/notifications/models.py:486 +#: .\notifications\models.py:535 #, python-brace-format msgid "" "Variables disponibles : {intervention_code}, {intervention_title}, " "{cancellation_type_label}" -msgstr "" +msgstr "Available variables: {intervention_code}, {intervention_title}, {cancellation_type_label}" -#: streetup/notifications/models.py:492 +#: .\notifications\models.py:541 msgid "Modèle de contenu" -msgstr "" +msgstr "Content template" -#: streetup/notifications/models.py:494 +#: .\notifications\models.py:543 #, python-brace-format msgid "" "Variables disponibles : {intervention_code}, {intervention_title}, " "{cancellation_type_label}, {cancellation_reason}" -msgstr "" +msgstr "Available variables: {intervention_code}, {intervention_title}, {cancellation_type_label}, {cancellation_reason}" -#: streetup/notifications/models.py:505 +#: .\notifications\models.py:554 msgid "" "Les notifications seront envoyées à tous les membres (CompanyMember) de ces " "équipes." -msgstr "" +msgstr "Notifications will be sent to all members (CompanyMember) of these teams." -#: streetup/notifications/models.py:511 +#: .\notifications\models.py:560 msgid "Utilisateurs destinataires supplémentaires" -msgstr "" +msgstr "Additional individual recipients" -#: streetup/notifications/models.py:519 +#: .\notifications\models.py:568 msgid "" "Si activé, dès qu'un destinataire marque la notification comme lue (prise en " "charge), elle est automatiquement archivée pour tous les autres " "destinataires." -msgstr "" +msgstr "If enabled, as soon as one recipient claims the notification, it is automatically archived for all other recipients." -#: streetup/notifications/models.py:525 +#: .\notifications\models.py:574 msgid "Créée le" -msgstr "" +msgstr "Created on" -#: streetup/notifications/models.py:526 +#: .\notifications\models.py:575 msgid "Mise à jour le" -msgstr "" +msgstr "Updated on" -#: streetup/notifications/models.py:532 +#: .\notifications\models.py:581 msgid "Règle de notification" -msgstr "" +msgstr "Notification rule" -#: streetup/notifications/models.py:533 +#: .\notifications\models.py:582 msgid "Règles de notification" -msgstr "" +msgstr "Notification rules" -#: streetup/notifications/models.py:569 +#: .\notifications\models.py:618 msgid "Pièce jointe de message" -msgstr "" +msgstr "Message attachment" -#: streetup/notifications/models.py:570 +#: .\notifications\models.py:619 msgid "Pièces jointes de messages" -msgstr "" +msgstr "Message attachments" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:8 -#: streetup/notifications/templates/notifications/discussion_list.html:41 +#: .\notifications\templates\notifications\_new_discussion_modal.html:8 +#: .\notifications\templates\notifications\discussion_list.html:74 +#: .\notifications\templates\notifications\inbox.html:165 msgid "Nouvelle discussion" msgstr "New discussion" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:10 +#: .\notifications\templates\notifications\_new_discussion_modal.html:10 msgid "Fermer" msgstr "Close" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:17 +#: .\notifications\templates\notifications\_new_discussion_modal.html:17 msgid "Sujet / Titre (optionnel)" msgstr "Subject / Title (optional)" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:20 +#: .\notifications\templates\notifications\_new_discussion_modal.html:20 msgid "Ex: Question sur le dossier..." -msgstr "Ex: Question about the file..." +msgstr "E.g.: Question about the file..." -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:25 +#: .\notifications\templates\notifications\_new_discussion_modal.html:25 msgid "Message *" msgstr "Message *" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:28 +#: .\notifications\templates\notifications\_new_discussion_modal.html:28 msgid "Tapez @ pour mentionner/tagger des utilisateurs ou des équipes." msgstr "Type @ to mention/tag users or teams." -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:32 +#: .\notifications\templates\notifications\_new_discussion_modal.html:32 msgid "Rédigez votre message... (@ pour tagger quelqu'un)" msgstr "Write your message... (@ to tag someone)" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:44 +#: .\notifications\templates\notifications\_new_discussion_modal.html:44 msgid "Joindre des fichiers" msgstr "Attach files" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:52 -#: streetup/notifications/templates/notifications/create.html:82 -#: streetup/notifications/templates/notifications/notification_settings.html:83 -#: streetup/notifications/templates/notifications/team_form.html:39 +#: .\notifications\templates\notifications\_new_discussion_modal.html:52 +#: .\notifications\templates\notifications\create.html:82 +#: .\notifications\templates\notifications\notification_settings.html:99 +#: .\notifications\templates\notifications\team_form.html:39 msgid "Annuler" msgstr "Cancel" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:55 -#: streetup/notifications/templates/notifications/create.html:85 -#: streetup/notifications/templates/notifications/discussion_detail.html:194 +#: .\notifications\templates\notifications\_new_discussion_modal.html:55 +#: .\notifications\templates\notifications\create.html:85 +#: .\notifications\templates\notifications\discussion_detail.html:194 msgid "Envoyer" msgstr "Send" -#: streetup/notifications/templates/notifications/create.html:11 +#: .\notifications\templates\notifications\create.html:11 msgid "Créer une notification" -msgstr "" +msgstr "Create notification" -#: streetup/notifications/templates/notifications/create.html:69 -#: streetup/notifications/templates/notifications/create.html:75 +#: .\notifications\templates\notifications\create.html:69 +#: .\notifications\templates\notifications\create.html:75 msgid "Ctrl+clic pour sélectionner plusieurs" -msgstr "" +msgstr "Ctrl+click to select multiple" -#: streetup/notifications/templates/notifications/discussion_detail.html:120 +#: .\notifications\templates\notifications\discussion_detail.html:85 +msgid "Retour aux discussions" +msgstr "Back to discussions" + +#: .\notifications\templates\notifications\discussion_detail.html:120 msgid "Aucun message pour l'instant. Soyez le premier à écrire." msgstr "No messages yet. Be the first to write." -#: streetup/notifications/templates/notifications/discussion_detail.html:184 +#: .\notifications\templates\notifications\discussion_detail.html:184 msgid "Écrire un message... (@ pour mentionner)" msgstr "Write a message... (@ to mention)" -#: streetup/notifications/templates/notifications/discussion_detail.html:187 +#: .\notifications\templates\notifications\discussion_detail.html:187 msgid "Joindre" msgstr "Attach" -#: streetup/notifications/templates/notifications/discussion_detail.html:202 +#: .\notifications\templates\notifications\discussion_detail.html:202 msgid "Cette discussion est clôturée." msgstr "This discussion is closed." -#: streetup/notifications/templates/notifications/discussion_list.html:46 -#: streetup/notifications/templates/notifications/discussion_list.html:47 -#: streetup/notifications/templates/notifications/inbox.html:57 +#: .\notifications\templates\notifications\discussion_list.html:79 +#: .\notifications\templates\notifications\discussion_list.html:80 +#: .\notifications\templates\notifications\inbox.html:170 +#: .\notifications\templates\notifications\inbox.html:171 msgid "Paramètres" msgstr "Settings" -#: streetup/notifications/templates/notifications/discussion_list.html:56 +#: .\notifications\templates\notifications\discussion_list.html:89 +#: .\notifications\templates\notifications\inbox.html:366 msgid "Vous n'avez encore aucune discussion." -msgstr "You do not have any discussions yet." +msgstr "You don't have any discussions yet." -#: streetup/notifications/templates/notifications/discussion_list.html:92 +#: .\notifications\templates\notifications\discussion_list.html:137 +#: .\notifications\templates\notifications\inbox.html:414 msgid "Aucun message encore." -msgstr "Aucun message encore." +msgstr "No messages yet." -#: streetup/notifications/templates/notifications/inbox.html:44 -#: streetup/notifications/templates/notifications/inbox_mobile.html:72 +#: .\notifications\templates\notifications\discussion_list.html:160 +#: .\notifications\templates\notifications\inbox.html:437 +msgid "participants au total" +msgstr "participants in total" + +#: .\notifications\templates\notifications\discussion_list.html:170 +#: .\notifications\templates\notifications\inbox.html:447 +msgid "non lu(s)" +msgstr "unread" + +#: .\notifications\templates\notifications\inbox.html:151 +#: .\notifications\templates\notifications\inbox_mobile.html:72 msgid "Tout marquer comme lu" msgstr "Mark all as read" -#: streetup/notifications/templates/notifications/inbox.html:50 +#: .\notifications\templates\notifications\inbox.html:157 msgid "Nouvelle notification" msgstr "New notification" -#: streetup/notifications/templates/notifications/inbox.html:68 -#: streetup/notifications/templates/notifications/inbox_mobile.html:45 +#: .\notifications\templates\notifications\inbox.html:192 +#: .\notifications\templates\notifications\inbox_mobile.html:45 msgid "Tous les types" msgstr "All types" -#: streetup/notifications/templates/notifications/inbox.html:80 -#: streetup/notifications/templates/notifications/inbox_mobile.html:57 +#: .\notifications\templates\notifications\inbox.html:204 +#: .\notifications\templates\notifications\inbox_mobile.html:57 msgid "Archivées" msgstr "Archived" -#: streetup/notifications/templates/notifications/inbox.html:86 -#: streetup/notifications/templates/notifications/inbox_mobile.html:61 +#: .\notifications\templates\notifications\inbox.html:210 +#: .\notifications\templates\notifications\inbox_mobile.html:61 msgid "Réinitialiser" msgstr "Reset" -#: streetup/notifications/templates/notifications/inbox.html:120 -#: streetup/notifications/templates/notifications/inbox_mobile.html:90 +#: .\notifications\templates\notifications\inbox.html:244 +#: .\notifications\templates\notifications\inbox_mobile.html:90 msgid "Nouveau" msgstr "New" -#: streetup/notifications/templates/notifications/inbox.html:131 -#: streetup/notifications/templates/notifications/inbox.html:135 +#: .\notifications\templates\notifications\inbox.html:255 +#: .\notifications\templates\notifications\inbox.html:259 msgid "Prendre en charge" -msgstr "Claim" +msgstr "Take over" -#: streetup/notifications/templates/notifications/inbox.html:131 -#: streetup/notifications/templates/notifications/inbox.html:137 +#: .\notifications\templates\notifications\inbox.html:255 +#: .\notifications\templates\notifications\inbox.html:261 msgid "Marquer comme lu" msgstr "Mark as read" -#: streetup/notifications/templates/notifications/inbox.html:146 -#: streetup/notifications/templates/notifications/inbox_mobile.html:125 +#: .\notifications\templates\notifications\inbox.html:270 +#: .\notifications\templates\notifications\inbox_mobile.html:125 msgid "Archiver" msgstr "Archive" -#: streetup/notifications/templates/notifications/inbox.html:223 -#: streetup/notifications/templates/notifications/inbox_mobile.html:141 +#: .\notifications\templates\notifications\inbox.html:347 +#: .\notifications\templates\notifications\inbox_mobile.html:141 msgid "Aucune notification archivée." msgstr "No archived notifications." -#: streetup/notifications/templates/notifications/inbox.html:225 -#: streetup/notifications/templates/notifications/inbox_mobile.html:143 +#: .\notifications\templates\notifications\inbox.html:349 +#: .\notifications\templates\notifications\inbox_mobile.html:143 msgid "Vous n'avez aucune notification." msgstr "You have no notifications." -#: streetup/notifications/templates/notifications/inbox_mobile.html:36 +#: .\notifications\templates\notifications\inbox_mobile.html:36 msgid "Accueil" msgstr "Home" -#: streetup/notifications/templates/notifications/inbox_mobile.html:115 +#: .\notifications\templates\notifications\inbox_mobile.html:115 msgid "Prendre" -msgstr "Claim" +msgstr "Take" -#: streetup/notifications/templates/notifications/inbox_mobile.html:117 +#: .\notifications\templates\notifications\inbox_mobile.html:117 msgid "Lu" msgstr "Read" -#: streetup/notifications/templates/notifications/notification_settings.html:15 +#: .\notifications\templates\notifications\notification_settings.html:15 msgid "Paramètres des notifications" msgstr "Notification settings" -#: streetup/notifications/templates/notifications/notification_settings.html:17 +#: .\notifications\templates\notifications\notification_settings.html:17 msgid "" "Gérez vos préférences de rappel par e-mail pour les notifications non lues." -msgstr "" +msgstr "Manage your email reminder preferences for unread notifications." -#: streetup/notifications/templates/notifications/notification_settings.html:26 +#: .\notifications\templates\notifications\notification_settings.html:26 msgid "Rappels par e-mail" msgstr "Email reminders" -#: streetup/notifications/templates/notifications/notification_settings.html:37 +#: .\notifications\templates\notifications\notification_settings.html:36 +msgid "Langue préférée pour les e-mails et notifications" +msgstr "Preferred language for emails and notifications" + +#: .\notifications\templates\notifications\notification_settings.html:45 +msgid "" +"Les e-mails de rappel et les notifications automatiques vous seront envoyés " +"dans cette langue." +msgstr "Reminder emails and automatic notifications will be sent in this language." + +#: .\notifications\templates\notifications\notification_settings.html:53 msgid "Activer les rappels par e-mail" msgstr "Enable email reminders" -#: streetup/notifications/templates/notifications/notification_settings.html:40 +#: .\notifications\templates\notifications\notification_settings.html:56 msgid "" "Recevoir un récapitulatif par e-mail si des notifications restent non lues " "au-delà du délai spécifié." -msgstr "" +msgstr "Receive an email summary if notifications remain unread past the specified delay." -#: streetup/notifications/templates/notifications/notification_settings.html:51 +#: .\notifications\templates\notifications\notification_settings.html:67 msgid "Adresse(s) e-mail de réception" msgstr "Recipient email address(es)" -#: streetup/notifications/templates/notifications/notification_settings.html:59 +#: .\notifications\templates\notifications\notification_settings.html:75 msgid "Laissez vide pour utiliser l'e-mail principal de votre compte" -msgstr "Leave empty to use your account primary email" +msgstr "Leave blank to use your account's primary email" -#: streetup/notifications/templates/notifications/notification_settings.html:60 +#: .\notifications\templates\notifications\notification_settings.html:76 msgid "Pour plusieurs destinataires, séparez les adresses par des virgules." msgstr "For multiple recipients, separate addresses with commas." -#: streetup/notifications/templates/notifications/notification_settings.html:67 +#: .\notifications\templates\notifications\notification_settings.html:83 msgid "Délai avant l'envoi du rappel (en heures)" msgstr "Delay before sending reminder (in hours)" -#: streetup/notifications/templates/notifications/notification_settings.html:71 +#: .\notifications\templates\notifications\notification_settings.html:87 msgid "heures" msgstr "hours" -#: streetup/notifications/templates/notifications/notification_settings.html:77 +#: .\notifications\templates\notifications\notification_settings.html:93 msgid "" "Exemple: 24h = un rappel sera envoyé si une notification n'a pas été lue au " "bout de 24 heures." -msgstr "" +msgstr "Example: 24h = a reminder will be sent if a notification is unread after 24 hours." -#: streetup/notifications/templates/notifications/notification_settings.html:86 +#: .\notifications\templates\notifications\notification_settings.html:102 msgid "Enregistrer mes préférences" msgstr "Save my preferences" -#: streetup/notifications/templates/notifications/team_form.html:11 +#: .\notifications\templates\notifications\team_form.html:11 msgid "une équipe" -msgstr "" +msgstr "a team" -#: streetup/notifications/templates/notifications/team_form.html:34 +#: .\notifications\templates\notifications\team_form.html:34 msgid "Ctrl+clic pour sélectionner plusieurs membres" -msgstr "" +msgstr "Ctrl+click to select multiple members" -#: streetup/notifications/templates/notifications/team_form.html:42 +#: .\notifications\templates\notifications\team_form.html:42 msgid "Enregistrer" msgstr "Save" -#: streetup/notifications/templates/notifications/team_list.html:14 +#: .\notifications\templates\notifications\team_list.html:14 msgid "Nouvelle équipe" -msgstr "" +msgstr "New team" -#: streetup/notifications/templates/notifications/team_list.html:18 +#: .\notifications\templates\notifications\team_list.html:18 msgid "Retour aux notifications" -msgstr "Retour aux notifications" +msgstr "Back to notifications" -#: streetup/notifications/templates/notifications/team_list.html:46 -#: streetup/notifications/views.py:456 +#: .\notifications\templates\notifications\team_list.html:46 +#: .\notifications\views.py:498 msgid "Modifier" msgstr "Edit" -#: streetup/notifications/templates/notifications/team_list.html:51 +#: .\notifications\templates\notifications\team_list.html:51 msgid "Supprimer cette équipe ?" -msgstr "" +msgstr "Delete this team?" -#: streetup/notifications/templates/notifications/team_list.html:54 +#: .\notifications\templates\notifications\team_list.html:54 msgid "Supprimer" msgstr "Delete" -#: streetup/notifications/templates/notifications/team_list.html:68 +#: .\notifications\templates\notifications\team_list.html:68 msgid "Aucun membre" -msgstr "Aucun membre" +msgstr "No members" -#: streetup/notifications/templates/notifications/team_list.html:73 +#: .\notifications\templates\notifications\team_list.html:73 msgid "membre(s)" -msgstr "membre(s)" +msgstr "member(s)" -#: streetup/notifications/templates/notifications/team_list.html:75 +#: .\notifications\templates\notifications\team_list.html:75 msgid "Créée par" -msgstr "" +msgstr "Created by" -#: streetup/notifications/templates/notifications/team_list.html:85 +#: .\notifications\templates\notifications\team_list.html:85 msgid "Aucune équipe définie." -msgstr "" +msgstr "No teams defined." -#: streetup/notifications/templates/notifications/team_list.html:88 +#: .\notifications\templates\notifications\team_list.html:88 msgid "Créer une équipe" -msgstr "" +msgstr "Create team" -#: streetup/notifications/views.py:348 +#: .\notifications\views.py:390 msgid "Vous n'avez pas les droits pour créer une notification." -msgstr "" +msgstr "You do not have permission to create a notification." -#: streetup/notifications/views.py:381 +#: .\notifications\views.py:423 msgid "Notification envoyée avec succès." -msgstr "" +msgstr "Notification sent successfully." -#: streetup/notifications/views.py:418 +#: .\notifications\views.py:460 msgid "Vous n'avez pas les droits pour créer une équipe." -msgstr "" +msgstr "You do not have permission to create a team." -#: streetup/notifications/views.py:428 +#: .\notifications\views.py:470 msgid "Équipe créée avec succès." -msgstr "" +msgstr "Team created successfully." -#: streetup/notifications/views.py:433 +#: .\notifications\views.py:475 msgid "Créer" -msgstr "" +msgstr "Create" -#: streetup/notifications/views.py:444 +#: .\notifications\views.py:486 msgid "Vous n'avez pas les droits pour modifier une équipe." -msgstr "" +msgstr "You do not have permission to edit a team." -#: streetup/notifications/views.py:451 +#: .\notifications\views.py:493 msgid "Équipe mise à jour." -msgstr "" +msgstr "Team updated." -#: streetup/notifications/views.py:466 +#: .\notifications\views.py:508 msgid "Vous n'avez pas les droits pour supprimer une équipe." -msgstr "" +msgstr "You do not have permission to delete a team." -#: streetup/notifications/views.py:469 +#: .\notifications\views.py:511 msgid "Équipe supprimée." -msgstr "" +msgstr "Team deleted." -#: streetup/notifications/views.py:550 +#: .\notifications\views.py:561 msgid "Vous n'êtes pas participant de cette discussion." -msgstr "" +msgstr "You are not a participant in this discussion." -#: streetup/notifications/views.py:563 +#: .\notifications\views.py:574 msgid "Message envoyé." -msgstr "" +msgstr "Message sent." -#: streetup/notifications/views.py:601 +#: .\notifications\views.py:602 +#, python-format +msgid "Discussion de %(name)s" +msgstr "Discussion from %(name)s" + +#: .\notifications\views.py:613 msgid "Discussion créée avec succès." msgstr "Discussion created successfully." -#: streetup/notifications/views.py:604 +#: .\notifications\views.py:616 msgid "Le contenu du message ne peut pas être vide." msgstr "Message content cannot be empty." -#: streetup/notifications/views.py:621 +#: .\notifications\views.py:633 msgid "Vos préférences de rappel par e-mail ont été enregistrées." msgstr "Your email reminder preferences have been saved." diff --git a/streetup/notifications/locale/fr/LC_MESSAGES/django.mo b/streetup/notifications/locale/fr/LC_MESSAGES/django.mo index 1726f7bd74f450b95a9f67814e67670bbde29e61..b2d9814d803f93bcf1de5cc0399007efd6167ded 100644 GIT binary patch literal 14841 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\n" "Language-Team: LANGUAGE \n" @@ -17,723 +17,836 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: streetup/notifications/forms.py:35 streetup/notifications/models.py:71 -#: streetup/notifications/models.py:321 +#: .\notifications\forms.py:35 .\notifications\models.py:71 +#: .\notifications\models.py:321 msgid "Titre" msgstr "Titre" -#: streetup/notifications/forms.py:40 streetup/notifications/models.py:72 -#: streetup/notifications/models.py:406 +#: .\notifications\forms.py:40 .\notifications\models.py:72 +#: .\notifications\models.py:455 msgid "Contenu" msgstr "Contenu" -#: streetup/notifications/forms.py:46 streetup/notifications/models.py:69 +#: .\notifications\forms.py:46 .\notifications\models.py:69 msgid "Type" msgstr "Type" -#: streetup/notifications/forms.py:52 +#: .\notifications\forms.py:52 msgid "Lien d'action (URL)" msgstr "Lien d'action (URL)" -#: streetup/notifications/forms.py:58 streetup/notifications/models.py:98 +#: .\notifications\forms.py:58 .\notifications\models.py:98 msgid "Libellé du lien" msgstr "Libellé du lien" -#: streetup/notifications/forms.py:63 streetup/notifications/models.py:85 -#: streetup/notifications/templates/notifications/inbox.html:180 +#: .\notifications\forms.py:63 .\notifications\models.py:85 +#: .\notifications\templates\notifications\inbox.html:304 msgid "Expire le" msgstr "Expire le" -#: streetup/notifications/forms.py:68 streetup/notifications/models.py:284 -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:41 +#: .\notifications\forms.py:68 .\notifications\models.py:284 +#: .\notifications\templates\notifications\_new_discussion_modal.html:41 msgid "Pièces jointes" msgstr "Pièces jointes" -#: streetup/notifications/forms.py:69 +#: .\notifications\forms.py:69 msgid "Photos ou documents (plusieurs fichiers possibles)." msgstr "Photos ou documents (plusieurs fichiers possibles)." -#: streetup/notifications/forms.py:76 +#: .\notifications\forms.py:76 msgid "Destinataires individuels" msgstr "Destinataires individuels" -#: streetup/notifications/forms.py:82 streetup/notifications/models.py:504 +#: .\notifications\forms.py:82 .\notifications\models.py:553 msgid "Équipes destinataires" msgstr "Équipes destinataires" -#: streetup/notifications/forms.py:92 +#: .\notifications\forms.py:92 msgid "Veuillez sélectionner au moins un destinataire ou une équipe." msgstr "Veuillez sélectionner au moins un destinataire ou une équipe." -#: streetup/notifications/forms.py:123 +#: .\notifications\forms.py:127 msgid "Ex: email1@exemple.com, email2@exemple.com" msgstr "Ex: email1@exemple.com, email2@exemple.com" -#: streetup/notifications/forms.py:148 +#: .\notifications\forms.py:152 #, python-format msgid "L'adresse e-mail '%(email)s' n'est pas valide." msgstr "L'adresse e-mail '%(email)s' n'est pas valide." -#: streetup/notifications/management/commands/send_unread_notification_reminders.py:106 +#: .\notifications\management\commands\send_unread_notification_reminders.py:95 +#, python-format +msgid "[StreetUp] Rappel : %(count)d notification(s) non lue(s)" +msgstr "[StreetUp] Rappel : %(count)d notification(s) non lue(s)" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:101 +#, python-format +msgid "Bonjour %(name)s," +msgstr "Bonjour %(name)s," + +#: .\notifications\management\commands\send_unread_notification_reminders.py:102 +#, python-format +msgid "" +"Vous avez %(count)d notification(s) non lue(s) reçue(s) il y a plus de " +"%(delay)d heure(s) :" +msgstr "Vous avez %(count)d notification(s) non lue(s) reçue(s) il y a plus de %(delay)d heure(s) :" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:117 msgid "Système" msgstr "Système" -#: streetup/notifications/models.py:12 +#: .\notifications\management\commands\send_unread_notification_reminders.py:125 +msgid "reçue le" +msgstr "reçue le" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:125 +msgid "par" +msgstr "par" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:126 +msgid "Lien" +msgstr "Lien" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:131 +msgid "Reçue le" +msgstr "Reçue le" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:132 +msgid "Consulter" +msgstr "Consulter" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:136 +msgid "Accédez à votre boîte de réception :" +msgstr "Accédez à votre boîte de réception :" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:139 +msgid "Notifications non lues" +msgstr "Notifications non lues" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:140 +#, python-format +msgid "" +"Vous avez %(count)d notification(s) non lue(s) qui " +"attendent votre attention :" +msgstr "Vous avez %(count)d notification(s) non lue(s) qui attendent votre attention :" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:141 +msgid "Voir mes notifications" +msgstr "Voir mes notifications" + +#: .\notifications\models.py:12 msgid "Nom" msgstr "Nom" -#: streetup/notifications/models.py:13 +#: .\notifications\models.py:13 msgid "Description" msgstr "Description" -#: streetup/notifications/models.py:18 +#: .\notifications\models.py:18 msgid "Membres" msgstr "Membres" -#: streetup/notifications/models.py:26 streetup/notifications/models.py:328 +#: .\notifications\models.py:26 .\notifications\models.py:328 msgid "Créé par" msgstr "Créé par" -#: streetup/notifications/models.py:28 streetup/notifications/models.py:81 -#: streetup/notifications/models.py:330 +#: .\notifications\models.py:28 .\notifications\models.py:81 +#: .\notifications\models.py:330 msgid "Créé le" msgstr "Créé le" -#: streetup/notifications/models.py:34 streetup/notifications/models.py:224 +#: .\notifications\models.py:34 .\notifications\models.py:224 msgid "Équipe" msgstr "Équipe" -#: streetup/notifications/models.py:35 -#: streetup/notifications/templates/notifications/team_list.html:9 +#: .\notifications\models.py:35 +#: .\notifications\templates\notifications\team_list.html:9 msgid "Équipes" msgstr "Équipes" -#: streetup/notifications/models.py:49 streetup/notifications/models.py:415 -#: streetup/notifications/models.py:544 +#: .\notifications\models.py:49 .\notifications\models.py:464 +#: .\notifications\models.py:593 msgid "Message" msgstr "Message" -#: streetup/notifications/models.py:50 +#: .\notifications\models.py:50 msgid "Rappel" msgstr "Rappel" -#: streetup/notifications/models.py:51 +#: .\notifications\models.py:51 msgid "Tâche" msgstr "Tâche" -#: streetup/notifications/models.py:52 +#: .\notifications\models.py:52 msgid "Alerte" msgstr "Alerte" -#: streetup/notifications/models.py:53 +#: .\notifications\models.py:53 msgid "Information" msgstr "Information" -#: streetup/notifications/models.py:79 +#: .\notifications\models.py:79 msgid "Expéditeur" msgstr "Expéditeur" -#: streetup/notifications/models.py:86 +#: .\notifications\models.py:86 msgid "Laisser vide pour ne pas faire expirer la notification." msgstr "Laisser vide pour ne pas faire expirer la notification." -#: streetup/notifications/models.py:92 +#: .\notifications\models.py:92 msgid "Lien d'action" msgstr "Lien d'action" -#: streetup/notifications/models.py:93 +#: .\notifications\models.py:93 msgid "URL relative ou absolue vers laquelle l'utilisateur est redirigé." msgstr "URL relative ou absolue vers laquelle l'utilisateur est redirigé." -#: streetup/notifications/models.py:104 +#: .\notifications\models.py:104 msgid "Application source" msgstr "Application source" -#: streetup/notifications/models.py:105 +#: .\notifications\models.py:105 msgid "Nom de l'application qui a généré la notification." msgstr "Nom de l'application qui a généré la notification." -#: streetup/notifications/models.py:109 +#: .\notifications\models.py:109 msgid "Notification système" msgstr "Notification système" -#: streetup/notifications/models.py:110 +#: .\notifications\models.py:110 msgid "Générée automatiquement par le système." msgstr "Générée automatiquement par le système." -#: streetup/notifications/models.py:114 streetup/notifications/models.py:517 +#: .\notifications\models.py:114 .\notifications\models.py:566 msgid "Prise en charge unique" msgstr "Prise en charge unique" -#: streetup/notifications/models.py:116 +#: .\notifications\models.py:116 msgid "" "Si activé, dès qu'un destinataire marque cette notification comme lue, elle " "est automatiquement archivée pour tous les autres destinataires." -msgstr "" +msgstr "Si activé, dès qu'un destinataire marque cette notification comme lue, elle est automatiquement archivée pour tous les autres destinataires." -#: streetup/notifications/models.py:126 +#: .\notifications\models.py:126 msgid "Discussion liée" msgstr "Discussion liée" -#: streetup/notifications/models.py:147 streetup/notifications/models.py:159 -#: streetup/notifications/models.py:218 streetup/notifications/models.py:246 +#: .\notifications\models.py:147 .\notifications\models.py:159 +#: .\notifications\models.py:218 .\notifications\models.py:246 msgid "Notification" msgstr "Notification" -#: streetup/notifications/models.py:148 -#: streetup/notifications/templates/notifications/discussion_list.html:44 -#: streetup/notifications/templates/notifications/inbox.html:32 -#: streetup/notifications/templates/notifications/inbox_mobile.html:4 -#: streetup/notifications/templates/notifications/inbox_mobile.html:30 +#: .\notifications\models.py:148 +#: .\notifications\templates\notifications\discussion_list.html:77 +#: .\notifications\templates\notifications\inbox.html:116 +#: .\notifications\templates\notifications\inbox_mobile.html:4 +#: .\notifications\templates\notifications\inbox_mobile.html:30 msgid "Notifications" msgstr "Notifications" -#: streetup/notifications/models.py:165 +#: .\notifications\models.py:165 msgid "Destinataire" msgstr "Destinataire" -#: streetup/notifications/models.py:167 streetup/notifications/models.py:303 +#: .\notifications\models.py:167 .\notifications\models.py:303 msgid "Lu le" msgstr "Lu le" -#: streetup/notifications/models.py:168 +#: .\notifications\models.py:168 msgid "Archivé le" msgstr "Archivé le" -#: streetup/notifications/models.py:169 +#: .\notifications\models.py:169 msgid "Rappel envoyé le" msgstr "Rappel envoyé le" -#: streetup/notifications/models.py:205 +#: .\notifications\models.py:205 msgid "Destinataire de notification" msgstr "Destinataire de notification" -#: streetup/notifications/models.py:206 +#: .\notifications\models.py:206 msgid "Destinataires de notification" msgstr "Destinataires de notification" -#: streetup/notifications/models.py:231 streetup/notifications/models.py:295 +#: .\notifications\models.py:231 .\notifications\models.py:295 msgid "Notification d'équipe" msgstr "Notification d'équipe" -#: streetup/notifications/models.py:232 +#: .\notifications\models.py:232 msgid "Notifications d'équipe" msgstr "Notifications d'équipe" -#: streetup/notifications/models.py:250 streetup/notifications/models.py:548 +#: .\notifications\models.py:250 .\notifications\models.py:597 msgid "Fichier" msgstr "Fichier" -#: streetup/notifications/models.py:255 streetup/notifications/models.py:550 +#: .\notifications\models.py:255 .\notifications\models.py:599 msgid "Nom du fichier" msgstr "Nom du fichier" -#: streetup/notifications/models.py:263 +#: .\notifications\models.py:263 msgid "Ajouté par" msgstr "Ajouté par" -#: streetup/notifications/models.py:265 streetup/notifications/models.py:551 +#: .\notifications\models.py:265 .\notifications\models.py:600 msgid "Ajouté le" msgstr "Ajouté le" -#: streetup/notifications/models.py:283 +#: .\notifications\models.py:283 msgid "Pièce jointe" msgstr "Pièce jointe" -#: streetup/notifications/models.py:301 +#: .\notifications\models.py:301 msgid "Utilisateur" msgstr "Utilisateur" -#: streetup/notifications/models.py:306 +#: .\notifications\models.py:306 msgid "Lecture de notification d'équipe" msgstr "Lecture de notification d'équipe" -#: streetup/notifications/models.py:307 +#: .\notifications\models.py:307 msgid "Lectures de notifications d'équipe" msgstr "Lectures de notifications d'équipe" -#: streetup/notifications/models.py:331 +#: .\notifications\models.py:331 msgid "Mis à jour le" msgstr "Mis à jour le" -#: streetup/notifications/models.py:336 -#: streetup/notifications/templates/notifications/discussion_detail.html:105 +#: .\notifications\models.py:336 +#: .\notifications\templates\notifications\discussion_detail.html:105 +#: .\notifications\templates\notifications\discussion_list.html:144 +#: .\notifications\templates\notifications\inbox.html:421 msgid "Participants" msgstr "Participants" -#: streetup/notifications/models.py:338 -#: streetup/notifications/templates/notifications/discussion_detail.html:97 +#: .\notifications\models.py:338 +#: .\notifications\templates\notifications\discussion_detail.html:97 +#: .\notifications\templates\notifications\discussion_list.html:120 +#: .\notifications\templates\notifications\inbox.html:397 msgid "Clôturée" msgstr "Clôturée" -#: streetup/notifications/models.py:346 +#: .\notifications\models.py:346 msgid "Type d'objet lié" msgstr "Type d'objet lié" -#: streetup/notifications/models.py:349 +#: .\notifications\models.py:349 msgid "ID objet lié" msgstr "ID objet lié" -#: streetup/notifications/models.py:355 +#: .\notifications\models.py:355 msgid "URL objet lié" msgstr "URL objet lié" -#: streetup/notifications/models.py:358 +#: .\notifications\models.py:358 msgid "Libellé objet lié" msgstr "Libellé objet lié" -#: streetup/notifications/models.py:380 streetup/notifications/models.py:396 +#: .\notifications\models.py:392 +msgid "Intervention" +msgstr "Intervention" + +#: .\notifications\models.py:400 +msgid "Observation" +msgstr "Observation" + +#: .\notifications\models.py:408 +msgid "Ordre de préparation" +msgstr "Ordre de préparation" + +#: .\notifications\models.py:416 +msgid "Projet" +msgstr "Projet" + +#: .\notifications\models.py:424 +msgid "Générale" +msgstr "Générale" + +#: .\notifications\models.py:429 .\notifications\models.py:445 msgid "Discussion" msgstr "Discussion" -#: streetup/notifications/models.py:381 -#: streetup/notifications/templates/notifications/discussion_list.html:37 -#: streetup/notifications/templates/notifications/inbox.html:54 +#: .\notifications\models.py:430 +#: .\notifications\templates\notifications\discussion_list.html:70 +#: .\notifications\templates\notifications\inbox.html:133 msgid "Discussions" msgstr "Discussions" -#: streetup/notifications/models.py:404 +#: .\notifications\models.py:453 msgid "Auteur" msgstr "Auteur" -#: streetup/notifications/models.py:407 +#: .\notifications\models.py:456 msgid "Envoyé le" msgstr "Envoyé le" -#: streetup/notifications/models.py:408 +#: .\notifications\models.py:457 msgid "Supprimé" msgstr "Supprimé" -#: streetup/notifications/models.py:416 +#: .\notifications\models.py:465 msgid "Messages" msgstr "Messages" -#: streetup/notifications/models.py:441 +#: .\notifications\models.py:490 msgid "Intervention annulée" msgstr "Intervention annulée" -#: streetup/notifications/models.py:446 +#: .\notifications\models.py:495 msgid "Tous (pas de filtre)" msgstr "Tous (pas de filtre)" -#: streetup/notifications/models.py:447 +#: .\notifications\models.py:496 msgid "Doublon" msgstr "Doublon" -#: streetup/notifications/models.py:448 +#: .\notifications\models.py:497 msgid "A rediriger" msgstr "A rediriger" -#: streetup/notifications/models.py:449 +#: .\notifications\models.py:498 msgid "Pas sous notre gestion" msgstr "Pas sous notre gestion" -#: streetup/notifications/models.py:450 +#: .\notifications\models.py:499 msgid "Non-relevant" msgstr "Non-relevant" -#: streetup/notifications/models.py:451 +#: .\notifications\models.py:500 msgid "Autre" msgstr "Autre" -#: streetup/notifications/models.py:455 +#: .\notifications\models.py:504 msgid "Nom de la règle" msgstr "Nom de la règle" -#: streetup/notifications/models.py:456 +#: .\notifications\models.py:505 msgid "Active" msgstr "Active" -#: streetup/notifications/models.py:462 +#: .\notifications\models.py:511 msgid "Événement déclencheur" msgstr "Événement déclencheur" -#: streetup/notifications/models.py:468 +#: .\notifications\models.py:517 msgid "Filtre : type d'annulation" msgstr "Filtre : type d'annulation" -#: streetup/notifications/models.py:470 +#: .\notifications\models.py:519 msgid "" "Laisser vide pour déclencher sur tout type d'annulation. Sélectionner une " "valeur pour n'agir que sur ce type précis." -msgstr "" +msgstr "Laisser vide pour déclencher sur tout type d'annulation. Sélectionner une valeur pour n'agir que sur ce type précis." -#: streetup/notifications/models.py:480 +#: .\notifications\models.py:529 msgid "Type de notification" msgstr "Type de notification" -#: streetup/notifications/models.py:484 +#: .\notifications\models.py:533 msgid "Modèle de titre" msgstr "Modèle de titre" -#: streetup/notifications/models.py:486 +#: .\notifications\models.py:535 #, python-brace-format msgid "" "Variables disponibles : {intervention_code}, {intervention_title}, " "{cancellation_type_label}" -msgstr "" +msgstr "Variables disponibles : {intervention_code}, {intervention_title}, {cancellation_type_label}" -#: streetup/notifications/models.py:492 +#: .\notifications\models.py:541 msgid "Modèle de contenu" msgstr "Modèle de contenu" -#: streetup/notifications/models.py:494 +#: .\notifications\models.py:543 #, python-brace-format msgid "" "Variables disponibles : {intervention_code}, {intervention_title}, " "{cancellation_type_label}, {cancellation_reason}" -msgstr "" +msgstr "Variables disponibles : {intervention_code}, {intervention_title}, {cancellation_type_label}, {cancellation_reason}" -#: streetup/notifications/models.py:505 +#: .\notifications\models.py:554 msgid "" "Les notifications seront envoyées à tous les membres (CompanyMember) de ces " "équipes." -msgstr "" +msgstr "Les notifications seront envoyées à tous les membres (CompanyMember) de ces équipes." -#: streetup/notifications/models.py:511 +#: .\notifications\models.py:560 msgid "Utilisateurs destinataires supplémentaires" msgstr "Utilisateurs destinataires supplémentaires" -#: streetup/notifications/models.py:519 +#: .\notifications\models.py:568 msgid "" "Si activé, dès qu'un destinataire marque la notification comme lue (prise en " "charge), elle est automatiquement archivée pour tous les autres " "destinataires." -msgstr "" +msgstr "Si activé, dès qu'un destinataire marque la notification comme lue (prise en charge), elle est automatiquement archivée pour tous les autres destinataires." -#: streetup/notifications/models.py:525 +#: .\notifications\models.py:574 msgid "Créée le" msgstr "Créée le" -#: streetup/notifications/models.py:526 +#: .\notifications\models.py:575 msgid "Mise à jour le" msgstr "Mise à jour le" -#: streetup/notifications/models.py:532 +#: .\notifications\models.py:581 msgid "Règle de notification" msgstr "Règle de notification" -#: streetup/notifications/models.py:533 +#: .\notifications\models.py:582 msgid "Règles de notification" msgstr "Règles de notification" -#: streetup/notifications/models.py:569 +#: .\notifications\models.py:618 msgid "Pièce jointe de message" msgstr "Pièce jointe de message" -#: streetup/notifications/models.py:570 +#: .\notifications\models.py:619 msgid "Pièces jointes de messages" msgstr "Pièces jointes de messages" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:8 -#: streetup/notifications/templates/notifications/discussion_list.html:41 +#: .\notifications\templates\notifications\_new_discussion_modal.html:8 +#: .\notifications\templates\notifications\discussion_list.html:74 +#: .\notifications\templates\notifications\inbox.html:165 msgid "Nouvelle discussion" msgstr "Nouvelle discussion" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:10 +#: .\notifications\templates\notifications\_new_discussion_modal.html:10 msgid "Fermer" msgstr "Fermer" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:17 +#: .\notifications\templates\notifications\_new_discussion_modal.html:17 msgid "Sujet / Titre (optionnel)" msgstr "Sujet / Titre (optionnel)" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:20 +#: .\notifications\templates\notifications\_new_discussion_modal.html:20 msgid "Ex: Question sur le dossier..." msgstr "Ex: Question sur le dossier..." -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:25 +#: .\notifications\templates\notifications\_new_discussion_modal.html:25 msgid "Message *" msgstr "Message *" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:28 +#: .\notifications\templates\notifications\_new_discussion_modal.html:28 msgid "Tapez @ pour mentionner/tagger des utilisateurs ou des équipes." msgstr "Tapez @ pour mentionner/tagger des utilisateurs ou des équipes." -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:32 +#: .\notifications\templates\notifications\_new_discussion_modal.html:32 msgid "Rédigez votre message... (@ pour tagger quelqu'un)" msgstr "Rédigez votre message... (@ pour tagger quelqu'un)" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:44 +#: .\notifications\templates\notifications\_new_discussion_modal.html:44 msgid "Joindre des fichiers" msgstr "Joindre des fichiers" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:52 -#: streetup/notifications/templates/notifications/create.html:82 -#: streetup/notifications/templates/notifications/notification_settings.html:83 -#: streetup/notifications/templates/notifications/team_form.html:39 +#: .\notifications\templates\notifications\_new_discussion_modal.html:52 +#: .\notifications\templates\notifications\create.html:82 +#: .\notifications\templates\notifications\notification_settings.html:99 +#: .\notifications\templates\notifications\team_form.html:39 msgid "Annuler" msgstr "Annuler" -#: streetup/notifications/templates/notifications/_new_discussion_modal.html:55 -#: streetup/notifications/templates/notifications/create.html:85 -#: streetup/notifications/templates/notifications/discussion_detail.html:194 +#: .\notifications\templates\notifications\_new_discussion_modal.html:55 +#: .\notifications\templates\notifications\create.html:85 +#: .\notifications\templates\notifications\discussion_detail.html:194 msgid "Envoyer" msgstr "Envoyer" -#: streetup/notifications/templates/notifications/create.html:11 +#: .\notifications\templates\notifications\create.html:11 msgid "Créer une notification" msgstr "Créer une notification" -#: streetup/notifications/templates/notifications/create.html:69 -#: streetup/notifications/templates/notifications/create.html:75 +#: .\notifications\templates\notifications\create.html:69 +#: .\notifications\templates\notifications\create.html:75 msgid "Ctrl+clic pour sélectionner plusieurs" msgstr "Ctrl+clic pour sélectionner plusieurs" -#: streetup/notifications/templates/notifications/discussion_detail.html:120 +#: .\notifications\templates\notifications\discussion_detail.html:85 +msgid "Retour aux discussions" +msgstr "Retour aux discussions" + +#: .\notifications\templates\notifications\discussion_detail.html:120 msgid "Aucun message pour l'instant. Soyez le premier à écrire." msgstr "Aucun message pour l'instant. Soyez le premier à écrire." -#: streetup/notifications/templates/notifications/discussion_detail.html:184 +#: .\notifications\templates\notifications\discussion_detail.html:184 msgid "Écrire un message... (@ pour mentionner)" msgstr "Écrire un message... (@ pour mentionner)" -#: streetup/notifications/templates/notifications/discussion_detail.html:187 +#: .\notifications\templates\notifications\discussion_detail.html:187 msgid "Joindre" msgstr "Joindre" -#: streetup/notifications/templates/notifications/discussion_detail.html:202 +#: .\notifications\templates\notifications\discussion_detail.html:202 msgid "Cette discussion est clôturée." msgstr "Cette discussion est clôturée." -#: streetup/notifications/templates/notifications/discussion_list.html:46 -#: streetup/notifications/templates/notifications/discussion_list.html:47 -#: streetup/notifications/templates/notifications/inbox.html:57 +#: .\notifications\templates\notifications\discussion_list.html:79 +#: .\notifications\templates\notifications\discussion_list.html:80 +#: .\notifications\templates\notifications\inbox.html:170 +#: .\notifications\templates\notifications\inbox.html:171 msgid "Paramètres" msgstr "Paramètres" -#: streetup/notifications/templates/notifications/discussion_list.html:56 +#: .\notifications\templates\notifications\discussion_list.html:89 +#: .\notifications\templates\notifications\inbox.html:366 msgid "Vous n'avez encore aucune discussion." msgstr "Vous n'avez encore aucune discussion." -#: streetup/notifications/templates/notifications/discussion_list.html:92 +#: .\notifications\templates\notifications\discussion_list.html:137 +#: .\notifications\templates\notifications\inbox.html:414 msgid "Aucun message encore." msgstr "Aucun message encore." -#: streetup/notifications/templates/notifications/inbox.html:44 -#: streetup/notifications/templates/notifications/inbox_mobile.html:72 +#: .\notifications\templates\notifications\discussion_list.html:160 +#: .\notifications\templates\notifications\inbox.html:437 +msgid "participants au total" +msgstr "participants au total" + +#: .\notifications\templates\notifications\discussion_list.html:170 +#: .\notifications\templates\notifications\inbox.html:447 +msgid "non lu(s)" +msgstr "non lu(s)" + +#: .\notifications\templates\notifications\inbox.html:151 +#: .\notifications\templates\notifications\inbox_mobile.html:72 msgid "Tout marquer comme lu" msgstr "Tout marquer comme lu" -#: streetup/notifications/templates/notifications/inbox.html:50 +#: .\notifications\templates\notifications\inbox.html:157 msgid "Nouvelle notification" msgstr "Nouvelle notification" -#: streetup/notifications/templates/notifications/inbox.html:68 -#: streetup/notifications/templates/notifications/inbox_mobile.html:45 +#: .\notifications\templates\notifications\inbox.html:192 +#: .\notifications\templates\notifications\inbox_mobile.html:45 msgid "Tous les types" msgstr "Tous les types" -#: streetup/notifications/templates/notifications/inbox.html:80 -#: streetup/notifications/templates/notifications/inbox_mobile.html:57 +#: .\notifications\templates\notifications\inbox.html:204 +#: .\notifications\templates\notifications\inbox_mobile.html:57 msgid "Archivées" msgstr "Archivées" -#: streetup/notifications/templates/notifications/inbox.html:86 -#: streetup/notifications/templates/notifications/inbox_mobile.html:61 +#: .\notifications\templates\notifications\inbox.html:210 +#: .\notifications\templates\notifications\inbox_mobile.html:61 msgid "Réinitialiser" msgstr "Réinitialiser" -#: streetup/notifications/templates/notifications/inbox.html:120 -#: streetup/notifications/templates/notifications/inbox_mobile.html:90 +#: .\notifications\templates\notifications\inbox.html:244 +#: .\notifications\templates\notifications\inbox_mobile.html:90 msgid "Nouveau" msgstr "Nouveau" -#: streetup/notifications/templates/notifications/inbox.html:131 -#: streetup/notifications/templates/notifications/inbox.html:135 +#: .\notifications\templates\notifications\inbox.html:255 +#: .\notifications\templates\notifications\inbox.html:259 msgid "Prendre en charge" msgstr "Prendre en charge" -#: streetup/notifications/templates/notifications/inbox.html:131 -#: streetup/notifications/templates/notifications/inbox.html:137 +#: .\notifications\templates\notifications\inbox.html:255 +#: .\notifications\templates\notifications\inbox.html:261 msgid "Marquer comme lu" msgstr "Marquer comme lu" -#: streetup/notifications/templates/notifications/inbox.html:146 -#: streetup/notifications/templates/notifications/inbox_mobile.html:125 +#: .\notifications\templates\notifications\inbox.html:270 +#: .\notifications\templates\notifications\inbox_mobile.html:125 msgid "Archiver" msgstr "Archiver" -#: streetup/notifications/templates/notifications/inbox.html:223 -#: streetup/notifications/templates/notifications/inbox_mobile.html:141 +#: .\notifications\templates\notifications\inbox.html:347 +#: .\notifications\templates\notifications\inbox_mobile.html:141 msgid "Aucune notification archivée." msgstr "Aucune notification archivée." -#: streetup/notifications/templates/notifications/inbox.html:225 -#: streetup/notifications/templates/notifications/inbox_mobile.html:143 +#: .\notifications\templates\notifications\inbox.html:349 +#: .\notifications\templates\notifications\inbox_mobile.html:143 msgid "Vous n'avez aucune notification." msgstr "Vous n'avez aucune notification." -#: streetup/notifications/templates/notifications/inbox_mobile.html:36 +#: .\notifications\templates\notifications\inbox_mobile.html:36 msgid "Accueil" msgstr "Accueil" -#: streetup/notifications/templates/notifications/inbox_mobile.html:115 +#: .\notifications\templates\notifications\inbox_mobile.html:115 msgid "Prendre" msgstr "Prendre" -#: streetup/notifications/templates/notifications/inbox_mobile.html:117 +#: .\notifications\templates\notifications\inbox_mobile.html:117 msgid "Lu" msgstr "Lu" -#: streetup/notifications/templates/notifications/notification_settings.html:15 +#: .\notifications\templates\notifications\notification_settings.html:15 msgid "Paramètres des notifications" msgstr "Paramètres des notifications" -#: streetup/notifications/templates/notifications/notification_settings.html:17 +#: .\notifications\templates\notifications\notification_settings.html:17 msgid "" "Gérez vos préférences de rappel par e-mail pour les notifications non lues." -msgstr "" +msgstr "Gérez vos préférences de rappel par e-mail pour les notifications non lues." -#: streetup/notifications/templates/notifications/notification_settings.html:26 +#: .\notifications\templates\notifications\notification_settings.html:26 msgid "Rappels par e-mail" msgstr "Rappels par e-mail" -#: streetup/notifications/templates/notifications/notification_settings.html:37 +#: .\notifications\templates\notifications\notification_settings.html:36 +msgid "Langue préférée pour les e-mails et notifications" +msgstr "Langue préférée pour les e-mails et notifications" + +#: .\notifications\templates\notifications\notification_settings.html:45 +msgid "" +"Les e-mails de rappel et les notifications automatiques vous seront envoyés " +"dans cette langue." +msgstr "Les e-mails de rappel et les notifications automatiques vous seront envoyés dans cette langue." + +#: .\notifications\templates\notifications\notification_settings.html:53 msgid "Activer les rappels par e-mail" msgstr "Activer les rappels par e-mail" -#: streetup/notifications/templates/notifications/notification_settings.html:40 +#: .\notifications\templates\notifications\notification_settings.html:56 msgid "" "Recevoir un récapitulatif par e-mail si des notifications restent non lues " "au-delà du délai spécifié." -msgstr "" +msgstr "Recevoir un récapitulatif par e-mail si des notifications restent non lues au-delà du délai spécifié." -#: streetup/notifications/templates/notifications/notification_settings.html:51 +#: .\notifications\templates\notifications\notification_settings.html:67 msgid "Adresse(s) e-mail de réception" msgstr "Adresse(s) e-mail de réception" -#: streetup/notifications/templates/notifications/notification_settings.html:59 +#: .\notifications\templates\notifications\notification_settings.html:75 msgid "Laissez vide pour utiliser l'e-mail principal de votre compte" msgstr "Laissez vide pour utiliser l'e-mail principal de votre compte" -#: streetup/notifications/templates/notifications/notification_settings.html:60 +#: .\notifications\templates\notifications\notification_settings.html:76 msgid "Pour plusieurs destinataires, séparez les adresses par des virgules." msgstr "Pour plusieurs destinataires, séparez les adresses par des virgules." -#: streetup/notifications/templates/notifications/notification_settings.html:67 +#: .\notifications\templates\notifications\notification_settings.html:83 msgid "Délai avant l'envoi du rappel (en heures)" msgstr "Délai avant l'envoi du rappel (en heures)" -#: streetup/notifications/templates/notifications/notification_settings.html:71 +#: .\notifications\templates\notifications\notification_settings.html:87 msgid "heures" msgstr "heures" -#: streetup/notifications/templates/notifications/notification_settings.html:77 +#: .\notifications\templates\notifications\notification_settings.html:93 msgid "" "Exemple: 24h = un rappel sera envoyé si une notification n'a pas été lue au " "bout de 24 heures." -msgstr "" +msgstr "Exemple: 24h = un rappel sera envoyé si une notification n'a pas été lue au bout de 24 heures." -#: streetup/notifications/templates/notifications/notification_settings.html:86 +#: .\notifications\templates\notifications\notification_settings.html:102 msgid "Enregistrer mes préférences" msgstr "Enregistrer mes préférences" -#: streetup/notifications/templates/notifications/team_form.html:11 +#: .\notifications\templates\notifications\team_form.html:11 msgid "une équipe" msgstr "une équipe" -#: streetup/notifications/templates/notifications/team_form.html:34 +#: .\notifications\templates\notifications\team_form.html:34 msgid "Ctrl+clic pour sélectionner plusieurs membres" msgstr "Ctrl+clic pour sélectionner plusieurs membres" -#: streetup/notifications/templates/notifications/team_form.html:42 +#: .\notifications\templates\notifications\team_form.html:42 msgid "Enregistrer" msgstr "Enregistrer" -#: streetup/notifications/templates/notifications/team_list.html:14 +#: .\notifications\templates\notifications\team_list.html:14 msgid "Nouvelle équipe" msgstr "Nouvelle équipe" -#: streetup/notifications/templates/notifications/team_list.html:18 +#: .\notifications\templates\notifications\team_list.html:18 msgid "Retour aux notifications" msgstr "Retour aux notifications" -#: streetup/notifications/templates/notifications/team_list.html:46 -#: streetup/notifications/views.py:456 +#: .\notifications\templates\notifications\team_list.html:46 +#: .\notifications\views.py:498 msgid "Modifier" msgstr "Modifier" -#: streetup/notifications/templates/notifications/team_list.html:51 +#: .\notifications\templates\notifications\team_list.html:51 msgid "Supprimer cette équipe ?" msgstr "Supprimer cette équipe ?" -#: streetup/notifications/templates/notifications/team_list.html:54 +#: .\notifications\templates\notifications\team_list.html:54 msgid "Supprimer" msgstr "Supprimer" -#: streetup/notifications/templates/notifications/team_list.html:68 +#: .\notifications\templates\notifications\team_list.html:68 msgid "Aucun membre" msgstr "Aucun membre" -#: streetup/notifications/templates/notifications/team_list.html:73 +#: .\notifications\templates\notifications\team_list.html:73 msgid "membre(s)" msgstr "membre(s)" -#: streetup/notifications/templates/notifications/team_list.html:75 +#: .\notifications\templates\notifications\team_list.html:75 msgid "Créée par" msgstr "Créée par" -#: streetup/notifications/templates/notifications/team_list.html:85 +#: .\notifications\templates\notifications\team_list.html:85 msgid "Aucune équipe définie." msgstr "Aucune équipe définie." -#: streetup/notifications/templates/notifications/team_list.html:88 +#: .\notifications\templates\notifications\team_list.html:88 msgid "Créer une équipe" msgstr "Créer une équipe" -#: streetup/notifications/views.py:348 +#: .\notifications\views.py:390 msgid "Vous n'avez pas les droits pour créer une notification." msgstr "Vous n'avez pas les droits pour créer une notification." -#: streetup/notifications/views.py:381 +#: .\notifications\views.py:423 msgid "Notification envoyée avec succès." msgstr "Notification envoyée avec succès." -#: streetup/notifications/views.py:418 +#: .\notifications\views.py:460 msgid "Vous n'avez pas les droits pour créer une équipe." msgstr "Vous n'avez pas les droits pour créer une équipe." -#: streetup/notifications/views.py:428 +#: .\notifications\views.py:470 msgid "Équipe créée avec succès." msgstr "Équipe créée avec succès." -#: streetup/notifications/views.py:433 +#: .\notifications\views.py:475 msgid "Créer" msgstr "Créer" -#: streetup/notifications/views.py:444 +#: .\notifications\views.py:486 msgid "Vous n'avez pas les droits pour modifier une équipe." msgstr "Vous n'avez pas les droits pour modifier une équipe." -#: streetup/notifications/views.py:451 +#: .\notifications\views.py:493 msgid "Équipe mise à jour." msgstr "Équipe mise à jour." -#: streetup/notifications/views.py:466 +#: .\notifications\views.py:508 msgid "Vous n'avez pas les droits pour supprimer une équipe." msgstr "Vous n'avez pas les droits pour supprimer une équipe." -#: streetup/notifications/views.py:469 +#: .\notifications\views.py:511 msgid "Équipe supprimée." msgstr "Équipe supprimée." -#: streetup/notifications/views.py:550 +#: .\notifications\views.py:561 msgid "Vous n'êtes pas participant de cette discussion." msgstr "Vous n'êtes pas participant de cette discussion." -#: streetup/notifications/views.py:563 +#: .\notifications\views.py:574 msgid "Message envoyé." msgstr "Message envoyé." -#: streetup/notifications/views.py:601 +#: .\notifications\views.py:602 +#| msgid "Discussion de %(name)s" +msgid "Discussion de %(name)s" +msgstr "Discussion de %(name)s" + +#: .\notifications\views.py:613 msgid "Discussion créée avec succès." msgstr "Discussion créée avec succès." -#: streetup/notifications/views.py:604 +#: .\notifications\views.py:616 msgid "Le contenu du message ne peut pas être vide." msgstr "Le contenu du message ne peut pas être vide." -#: streetup/notifications/views.py:621 +#: .\notifications\views.py:633 msgid "Vos préférences de rappel par e-mail ont été enregistrées." msgstr "Vos préférences de rappel par e-mail ont été enregistrées." diff --git a/streetup/notifications/locale/nl/LC_MESSAGES/django.mo b/streetup/notifications/locale/nl/LC_MESSAGES/django.mo index 3217c1c0e3f324722207af53b6f1de9397845d16..4fdd8573b92e26e8f356eb1f83e247604bf04199 100644 GIT binary patch literal 14320 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 diff --git a/streetup/notifications/locale/nl/LC_MESSAGES/django.po b/streetup/notifications/locale/nl/LC_MESSAGES/django.po index 7d40a3f..7e1f724 100644 --- a/streetup/notifications/locale/nl/LC_MESSAGES/django.po +++ b/streetup/notifications/locale/nl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-12 12:19+0200\n" +"POT-Creation-Date: 2026-08-14 22:44+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,723 +17,836 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: notifications/forms.py:35 notifications/models.py:71 -#: notifications/models.py:321 +#: .\notifications\forms.py:35 .\notifications\models.py:71 +#: .\notifications\models.py:321 msgid "Titre" -msgstr "" +msgstr "Titel" -#: notifications/forms.py:40 notifications/models.py:72 -#: notifications/models.py:406 +#: .\notifications\forms.py:40 .\notifications\models.py:72 +#: .\notifications\models.py:455 msgid "Contenu" -msgstr "" +msgstr "Inhoud" -#: notifications/forms.py:46 notifications/models.py:69 +#: .\notifications\forms.py:46 .\notifications\models.py:69 msgid "Type" -msgstr "" +msgstr "Type" -#: notifications/forms.py:52 +#: .\notifications\forms.py:52 msgid "Lien d'action (URL)" -msgstr "" +msgstr "Actielink (URL)" -#: notifications/forms.py:58 notifications/models.py:98 +#: .\notifications\forms.py:58 .\notifications\models.py:98 msgid "Libellé du lien" -msgstr "" +msgstr "Linklabel" -#: notifications/forms.py:63 notifications/models.py:85 -#: notifications/templates/notifications/inbox.html:180 +#: .\notifications\forms.py:63 .\notifications\models.py:85 +#: .\notifications\templates\notifications\inbox.html:304 msgid "Expire le" -msgstr "" +msgstr "Vervalt op" -#: notifications/forms.py:68 notifications/models.py:284 -#: notifications/templates/notifications/_new_discussion_modal.html:41 +#: .\notifications\forms.py:68 .\notifications\models.py:284 +#: .\notifications\templates\notifications\_new_discussion_modal.html:41 msgid "Pièces jointes" msgstr "Bijlagen" -#: notifications/forms.py:69 +#: .\notifications\forms.py:69 msgid "Photos ou documents (plusieurs fichiers possibles)." msgstr "Foto's of documenten (meerdere bestanden mogelijk)." -#: notifications/forms.py:76 +#: .\notifications\forms.py:76 msgid "Destinataires individuels" -msgstr "" +msgstr "Individuele ontvangers" -#: notifications/forms.py:82 notifications/models.py:504 +#: .\notifications\forms.py:82 .\notifications\models.py:553 msgid "Équipes destinataires" -msgstr "" +msgstr "Ontvangende teams" -#: notifications/forms.py:92 +#: .\notifications\forms.py:92 msgid "Veuillez sélectionner au moins un destinataire ou une équipe." -msgstr "" +msgstr "Selecteer ten minste één ontvanger of team." -#: notifications/forms.py:123 +#: .\notifications\forms.py:127 msgid "Ex: email1@exemple.com, email2@exemple.com" -msgstr "" +msgstr "Bijv: email1@voorbeeld.com, email2@voorbeeld.com" -#: notifications/forms.py:148 +#: .\notifications\forms.py:152 #, python-format msgid "L'adresse e-mail '%(email)s' n'est pas valide." -msgstr "" +msgstr "Het e-mailadres '%(email)s' is ongeldig." -#: notifications/management/commands/send_unread_notification_reminders.py:106 +#: .\notifications\management\commands\send_unread_notification_reminders.py:95 +#, python-format +msgid "[StreetUp] Rappel : %(count)d notification(s) non lue(s)" +msgstr "[StreetUp] Herinnering: %(count)d ongelezen melding(en)" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:101 +#, python-format +msgid "Bonjour %(name)s," +msgstr "Hallo %(name)s," + +#: .\notifications\management\commands\send_unread_notification_reminders.py:102 +#, python-format +msgid "" +"Vous avez %(count)d notification(s) non lue(s) reçue(s) il y a plus de " +"%(delay)d heure(s) :" +msgstr "U heeft %(count)d ongelezen melding(en) die meer dan %(delay)d uur geleden zijn ontvangen:" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:117 msgid "Système" -msgstr "" +msgstr "Systeem" -#: notifications/models.py:12 +#: .\notifications\management\commands\send_unread_notification_reminders.py:125 +msgid "reçue le" +msgstr "ontvangen op" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:125 +msgid "par" +msgstr "door" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:126 +msgid "Lien" +msgstr "Link" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:131 +msgid "Reçue le" +msgstr "Ontvangen op" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:132 +msgid "Consulter" +msgstr "Bekijken" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:136 +msgid "Accédez à votre boîte de réception :" +msgstr "Ga naar uw inbox:" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:139 +msgid "Notifications non lues" +msgstr "Ongelezen meldingen" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:140 +#, python-format +msgid "" +"Vous avez %(count)d notification(s) non lue(s) qui " +"attendent votre attention :" +msgstr "U heeft %(count)d ongelezen melding(en) die op uw aandacht wachten:" + +#: .\notifications\management\commands\send_unread_notification_reminders.py:141 +msgid "Voir mes notifications" +msgstr "Mijn meldingen bekijken" + +#: .\notifications\models.py:12 msgid "Nom" -msgstr "" +msgstr "Naam" -#: notifications/models.py:13 +#: .\notifications\models.py:13 msgid "Description" -msgstr "" +msgstr "Beschrijving" -#: notifications/models.py:18 +#: .\notifications\models.py:18 msgid "Membres" -msgstr "" +msgstr "Leden" -#: notifications/models.py:26 notifications/models.py:328 +#: .\notifications\models.py:26 .\notifications\models.py:328 msgid "Créé par" -msgstr "" +msgstr "Aangemaakt door" -#: notifications/models.py:28 notifications/models.py:81 -#: notifications/models.py:330 +#: .\notifications\models.py:28 .\notifications\models.py:81 +#: .\notifications\models.py:330 msgid "Créé le" -msgstr "" +msgstr "Aangemaakt op" -#: notifications/models.py:34 notifications/models.py:224 +#: .\notifications\models.py:34 .\notifications\models.py:224 msgid "Équipe" -msgstr "" +msgstr "Team" -#: notifications/models.py:35 -#: notifications/templates/notifications/team_list.html:9 +#: .\notifications\models.py:35 +#: .\notifications\templates\notifications\team_list.html:9 msgid "Équipes" -msgstr "" +msgstr "Teams" -#: notifications/models.py:49 notifications/models.py:415 -#: notifications/models.py:544 +#: .\notifications\models.py:49 .\notifications\models.py:464 +#: .\notifications\models.py:593 msgid "Message" msgstr "Bericht" -#: notifications/models.py:50 +#: .\notifications\models.py:50 msgid "Rappel" msgstr "Herinnering" -#: notifications/models.py:51 +#: .\notifications\models.py:51 msgid "Tâche" msgstr "Taak" -#: notifications/models.py:52 +#: .\notifications\models.py:52 msgid "Alerte" -msgstr "Waarschuwing" +msgstr "Melding" -#: notifications/models.py:53 +#: .\notifications\models.py:53 msgid "Information" msgstr "Informatie" -#: notifications/models.py:79 +#: .\notifications\models.py:79 msgid "Expéditeur" -msgstr "" +msgstr "Afzender" -#: notifications/models.py:86 +#: .\notifications\models.py:86 msgid "Laisser vide pour ne pas faire expirer la notification." -msgstr "" +msgstr "Leeg laten om de melding niet te laten vervallen." -#: notifications/models.py:92 +#: .\notifications\models.py:92 msgid "Lien d'action" -msgstr "" +msgstr "Actielink" -#: notifications/models.py:93 +#: .\notifications\models.py:93 msgid "URL relative ou absolue vers laquelle l'utilisateur est redirigé." -msgstr "" +msgstr "Relatieve of absolute URL waarnaar de gebruiker wordt omgeleid." -#: notifications/models.py:104 +#: .\notifications\models.py:104 msgid "Application source" -msgstr "" +msgstr "Bronapplicatie" -#: notifications/models.py:105 +#: .\notifications\models.py:105 msgid "Nom de l'application qui a généré la notification." -msgstr "" +msgstr "Naam van de applicatie die de melding heeft gegenereerd." -#: notifications/models.py:109 +#: .\notifications\models.py:109 msgid "Notification système" -msgstr "" +msgstr "Systeemmelding" -#: notifications/models.py:110 +#: .\notifications\models.py:110 msgid "Générée automatiquement par le système." -msgstr "" +msgstr "Automatisch gegenereerd door het systeem." -#: notifications/models.py:114 notifications/models.py:517 +#: .\notifications\models.py:114 .\notifications\models.py:566 msgid "Prise en charge unique" -msgstr "" +msgstr "Enkele overname" -#: notifications/models.py:116 +#: .\notifications\models.py:116 msgid "" "Si activé, dès qu'un destinataire marque cette notification comme lue, elle " "est automatiquement archivée pour tous les autres destinataires." -msgstr "" +msgstr "Indien ingeschakeld, zodra een ontvanger deze melding als gelezen markeert, wordt deze automatisch gearchiveerd voor alle andere ontvangers." -#: notifications/models.py:126 +#: .\notifications\models.py:126 msgid "Discussion liée" -msgstr "" +msgstr "Gekoppeld gesprek" -#: notifications/models.py:147 notifications/models.py:159 -#: notifications/models.py:218 notifications/models.py:246 +#: .\notifications\models.py:147 .\notifications\models.py:159 +#: .\notifications\models.py:218 .\notifications\models.py:246 msgid "Notification" -msgstr "" +msgstr "Melding" -#: notifications/models.py:148 -#: notifications/templates/notifications/discussion_list.html:44 -#: notifications/templates/notifications/inbox.html:32 -#: notifications/templates/notifications/inbox_mobile.html:4 -#: notifications/templates/notifications/inbox_mobile.html:30 +#: .\notifications\models.py:148 +#: .\notifications\templates\notifications\discussion_list.html:77 +#: .\notifications\templates\notifications\inbox.html:116 +#: .\notifications\templates\notifications\inbox_mobile.html:4 +#: .\notifications\templates\notifications\inbox_mobile.html:30 msgid "Notifications" msgstr "Meldingen" -#: notifications/models.py:165 +#: .\notifications\models.py:165 msgid "Destinataire" -msgstr "" +msgstr "Ontvanger" -#: notifications/models.py:167 notifications/models.py:303 +#: .\notifications\models.py:167 .\notifications\models.py:303 msgid "Lu le" -msgstr "" +msgstr "Gelezen op" -#: notifications/models.py:168 +#: .\notifications\models.py:168 msgid "Archivé le" -msgstr "" +msgstr "Gearchiveerd op" -#: notifications/models.py:169 +#: .\notifications\models.py:169 msgid "Rappel envoyé le" -msgstr "" +msgstr "Herinnering verzonden op" -#: notifications/models.py:205 +#: .\notifications\models.py:205 msgid "Destinataire de notification" -msgstr "" +msgstr "Meldingontvanger" -#: notifications/models.py:206 +#: .\notifications\models.py:206 msgid "Destinataires de notification" -msgstr "" +msgstr "Meldingontvangers" -#: notifications/models.py:231 notifications/models.py:295 +#: .\notifications\models.py:231 .\notifications\models.py:295 msgid "Notification d'équipe" -msgstr "" +msgstr "Teammelding" -#: notifications/models.py:232 +#: .\notifications\models.py:232 msgid "Notifications d'équipe" -msgstr "" +msgstr "Teammeldingen" -#: notifications/models.py:250 notifications/models.py:548 +#: .\notifications\models.py:250 .\notifications\models.py:597 msgid "Fichier" -msgstr "" +msgstr "Bestand" -#: notifications/models.py:255 notifications/models.py:550 +#: .\notifications\models.py:255 .\notifications\models.py:599 msgid "Nom du fichier" -msgstr "" +msgstr "Bestandsnaam" -#: notifications/models.py:263 +#: .\notifications\models.py:263 msgid "Ajouté par" -msgstr "" +msgstr "Toegevoegd door" -#: notifications/models.py:265 notifications/models.py:551 +#: .\notifications\models.py:265 .\notifications\models.py:600 msgid "Ajouté le" -msgstr "" +msgstr "Toegevoegd op" -#: notifications/models.py:283 +#: .\notifications\models.py:283 msgid "Pièce jointe" -msgstr "" +msgstr "Bijlage" -#: notifications/models.py:301 +#: .\notifications\models.py:301 msgid "Utilisateur" -msgstr "" +msgstr "Gebruiker" -#: notifications/models.py:306 +#: .\notifications\models.py:306 msgid "Lecture de notification d'équipe" -msgstr "" +msgstr "Teammelding gelezen" -#: notifications/models.py:307 +#: .\notifications\models.py:307 msgid "Lectures de notifications d'équipe" -msgstr "" +msgstr "Teammeldingen gelezen" -#: notifications/models.py:331 +#: .\notifications\models.py:331 msgid "Mis à jour le" -msgstr "" +msgstr "Bijgewerkt op" -#: notifications/models.py:336 -#: notifications/templates/notifications/discussion_detail.html:105 +#: .\notifications\models.py:336 +#: .\notifications\templates\notifications\discussion_detail.html:105 +#: .\notifications\templates\notifications\discussion_list.html:144 +#: .\notifications\templates\notifications\inbox.html:421 msgid "Participants" -msgstr "" +msgstr "Deelnemers" -#: notifications/models.py:338 -#: notifications/templates/notifications/discussion_detail.html:97 +#: .\notifications\models.py:338 +#: .\notifications\templates\notifications\discussion_detail.html:97 +#: .\notifications\templates\notifications\discussion_list.html:120 +#: .\notifications\templates\notifications\inbox.html:397 msgid "Clôturée" -msgstr "" +msgstr "Gesloten" -#: notifications/models.py:346 +#: .\notifications\models.py:346 msgid "Type d'objet lié" -msgstr "" +msgstr "Type gekoppeld object" -#: notifications/models.py:349 +#: .\notifications\models.py:349 msgid "ID objet lié" -msgstr "" +msgstr "ID gekoppeld object" -#: notifications/models.py:355 +#: .\notifications\models.py:355 msgid "URL objet lié" -msgstr "" +msgstr "URL gekoppeld object" -#: notifications/models.py:358 +#: .\notifications\models.py:358 msgid "Libellé objet lié" -msgstr "" +msgstr "Label gekoppeld object" -#: notifications/models.py:380 notifications/models.py:396 +#: .\notifications\models.py:392 +msgid "Intervention" +msgstr "Interventie" + +#: .\notifications\models.py:400 +msgid "Observation" +msgstr "Observatie" + +#: .\notifications\models.py:408 +msgid "Ordre de préparation" +msgstr "Voorbereidingsopdracht" + +#: .\notifications\models.py:416 +msgid "Projet" +msgstr "Project" + +#: .\notifications\models.py:424 +msgid "Générale" +msgstr "Algemeen" + +#: .\notifications\models.py:429 .\notifications\models.py:445 msgid "Discussion" -msgstr "" +msgstr "Gesprek" -#: notifications/models.py:381 -#: notifications/templates/notifications/discussion_list.html:37 -#: notifications/templates/notifications/inbox.html:54 +#: .\notifications\models.py:430 +#: .\notifications\templates\notifications\discussion_list.html:70 +#: .\notifications\templates\notifications\inbox.html:133 msgid "Discussions" msgstr "Gesprekken" -#: notifications/models.py:404 +#: .\notifications\models.py:453 msgid "Auteur" -msgstr "" +msgstr "Auteur" -#: notifications/models.py:407 +#: .\notifications\models.py:456 msgid "Envoyé le" -msgstr "" +msgstr "Verzonden op" -#: notifications/models.py:408 +#: .\notifications\models.py:457 msgid "Supprimé" -msgstr "" +msgstr "Verwijderd" -#: notifications/models.py:416 +#: .\notifications\models.py:465 msgid "Messages" -msgstr "" +msgstr "Berichten" -#: notifications/models.py:441 +#: .\notifications\models.py:490 msgid "Intervention annulée" -msgstr "" +msgstr "Interventie geannuleerd" -#: notifications/models.py:446 +#: .\notifications\models.py:495 msgid "Tous (pas de filtre)" -msgstr "" +msgstr "Alle (geen filter)" -#: notifications/models.py:447 +#: .\notifications\models.py:496 msgid "Doublon" -msgstr "" +msgstr "Duplicaat" -#: notifications/models.py:448 +#: .\notifications\models.py:497 msgid "A rediriger" -msgstr "" +msgstr "Door te sturen" -#: notifications/models.py:449 +#: .\notifications\models.py:498 msgid "Pas sous notre gestion" -msgstr "" +msgstr "Niet onder ons beheer" -#: notifications/models.py:450 +#: .\notifications\models.py:499 msgid "Non-relevant" -msgstr "" +msgstr "Niet relevant" -#: notifications/models.py:451 +#: .\notifications\models.py:500 msgid "Autre" -msgstr "" +msgstr "Overige" -#: notifications/models.py:455 +#: .\notifications\models.py:504 msgid "Nom de la règle" -msgstr "" +msgstr "Regelnaam" -#: notifications/models.py:456 +#: .\notifications\models.py:505 msgid "Active" -msgstr "" +msgstr "Actief" -#: notifications/models.py:462 +#: .\notifications\models.py:511 msgid "Événement déclencheur" -msgstr "" +msgstr "Triggergebeurtenis" -#: notifications/models.py:468 +#: .\notifications\models.py:517 msgid "Filtre : type d'annulation" -msgstr "" +msgstr "Filter: annuleringstype" -#: notifications/models.py:470 +#: .\notifications\models.py:519 msgid "" "Laisser vide pour déclencher sur tout type d'annulation. Sélectionner une " "valeur pour n'agir que sur ce type précis." -msgstr "" +msgstr "Leeg laten om te triggeren op elk type annulering. Selecteer een waarde om alleen op dit specifieke type te reageren." -#: notifications/models.py:480 +#: .\notifications\models.py:529 msgid "Type de notification" -msgstr "" +msgstr "Type melding" -#: notifications/models.py:484 +#: .\notifications\models.py:533 msgid "Modèle de titre" -msgstr "" +msgstr "Titelsjabloon" -#: notifications/models.py:486 +#: .\notifications\models.py:535 #, python-brace-format msgid "" "Variables disponibles : {intervention_code}, {intervention_title}, " "{cancellation_type_label}" -msgstr "" +msgstr "Beschikbare variabelen: {intervention_code}, {intervention_title}, {cancellation_type_label}" -#: notifications/models.py:492 +#: .\notifications\models.py:541 msgid "Modèle de contenu" -msgstr "" +msgstr "Inhoudssjabloon" -#: notifications/models.py:494 +#: .\notifications\models.py:543 #, python-brace-format msgid "" "Variables disponibles : {intervention_code}, {intervention_title}, " "{cancellation_type_label}, {cancellation_reason}" -msgstr "" +msgstr "Beschikbare variabelen: {intervention_code}, {intervention_title}, {cancellation_type_label}, {cancellation_reason}" -#: notifications/models.py:505 +#: .\notifications\models.py:554 msgid "" "Les notifications seront envoyées à tous les membres (CompanyMember) de ces " "équipes." -msgstr "" +msgstr "Meldingen worden verzonden naar alle leden (CompanyMember) van deze teams." -#: notifications/models.py:511 +#: .\notifications\models.py:560 msgid "Utilisateurs destinataires supplémentaires" -msgstr "" +msgstr "Extra individuele ontvangers" -#: notifications/models.py:519 +#: .\notifications\models.py:568 msgid "" "Si activé, dès qu'un destinataire marque la notification comme lue (prise en " "charge), elle est automatiquement archivée pour tous les autres " "destinataires." -msgstr "" +msgstr "Indien ingeschakeld, zodra een ontvanger de melding als gelezen markeert (overname), wordt deze automatisch gearchiveerd voor alle andere ontvangers." -#: notifications/models.py:525 +#: .\notifications\models.py:574 msgid "Créée le" -msgstr "" +msgstr "Aangemaakt op" -#: notifications/models.py:526 +#: .\notifications\models.py:575 msgid "Mise à jour le" -msgstr "" +msgstr "Bijgewerkt op" -#: notifications/models.py:532 +#: .\notifications\models.py:581 msgid "Règle de notification" -msgstr "" +msgstr "Meldingsregel" -#: notifications/models.py:533 +#: .\notifications\models.py:582 msgid "Règles de notification" -msgstr "" +msgstr "Meldingsregels" -#: notifications/models.py:569 +#: .\notifications\models.py:618 msgid "Pièce jointe de message" -msgstr "" +msgstr "Berichtbijlage" -#: notifications/models.py:570 +#: .\notifications\models.py:619 msgid "Pièces jointes de messages" -msgstr "" +msgstr "Berichtbijlagen" -#: notifications/templates/notifications/_new_discussion_modal.html:8 -#: notifications/templates/notifications/discussion_list.html:41 +#: .\notifications\templates\notifications\_new_discussion_modal.html:8 +#: .\notifications\templates\notifications\discussion_list.html:74 +#: .\notifications\templates\notifications\inbox.html:165 msgid "Nouvelle discussion" msgstr "Nieuw gesprek" -#: notifications/templates/notifications/_new_discussion_modal.html:10 +#: .\notifications\templates\notifications\_new_discussion_modal.html:10 msgid "Fermer" msgstr "Sluiten" -#: notifications/templates/notifications/_new_discussion_modal.html:17 +#: .\notifications\templates\notifications\_new_discussion_modal.html:17 msgid "Sujet / Titre (optionnel)" msgstr "Onderwerp / Titel (optioneel)" -#: notifications/templates/notifications/_new_discussion_modal.html:20 +#: .\notifications\templates\notifications\_new_discussion_modal.html:20 msgid "Ex: Question sur le dossier..." msgstr "Bijv: Vraag over het dossier..." -#: notifications/templates/notifications/_new_discussion_modal.html:25 +#: .\notifications\templates\notifications\_new_discussion_modal.html:25 msgid "Message *" msgstr "Bericht *" -#: notifications/templates/notifications/_new_discussion_modal.html:28 +#: .\notifications\templates\notifications\_new_discussion_modal.html:28 msgid "Tapez @ pour mentionner/tagger des utilisateurs ou des équipes." -msgstr "Typ @ om gebruikers of teams te vermelden/taggen." +msgstr "Typ @ om gebruikers of teams te vermelden." -#: notifications/templates/notifications/_new_discussion_modal.html:32 +#: .\notifications\templates\notifications\_new_discussion_modal.html:32 msgid "Rédigez votre message... (@ pour tagger quelqu'un)" msgstr "Schrijf uw bericht... (@ om iemand te taggen)" -#: notifications/templates/notifications/_new_discussion_modal.html:44 +#: .\notifications\templates\notifications\_new_discussion_modal.html:44 msgid "Joindre des fichiers" msgstr "Bestanden bijvoegen" -#: notifications/templates/notifications/_new_discussion_modal.html:52 -#: notifications/templates/notifications/create.html:82 -#: notifications/templates/notifications/notification_settings.html:83 -#: notifications/templates/notifications/team_form.html:39 +#: .\notifications\templates\notifications\_new_discussion_modal.html:52 +#: .\notifications\templates\notifications\create.html:82 +#: .\notifications\templates\notifications\notification_settings.html:99 +#: .\notifications\templates\notifications\team_form.html:39 msgid "Annuler" msgstr "Annuleren" -#: notifications/templates/notifications/_new_discussion_modal.html:55 -#: notifications/templates/notifications/create.html:85 -#: notifications/templates/notifications/discussion_detail.html:194 +#: .\notifications\templates\notifications\_new_discussion_modal.html:55 +#: .\notifications\templates\notifications\create.html:85 +#: .\notifications\templates\notifications\discussion_detail.html:194 msgid "Envoyer" msgstr "Verzenden" -#: notifications/templates/notifications/create.html:11 +#: .\notifications\templates\notifications\create.html:11 msgid "Créer une notification" -msgstr "" +msgstr "Melding aanmaken" -#: notifications/templates/notifications/create.html:69 -#: notifications/templates/notifications/create.html:75 +#: .\notifications\templates\notifications\create.html:69 +#: .\notifications\templates\notifications\create.html:75 msgid "Ctrl+clic pour sélectionner plusieurs" -msgstr "" +msgstr "Ctrl+klik om meerdere te selecteren" -#: notifications/templates/notifications/discussion_detail.html:120 +#: .\notifications\templates\notifications\discussion_detail.html:85 +msgid "Retour aux discussions" +msgstr "Terug naar gesprekken" + +#: .\notifications\templates\notifications\discussion_detail.html:120 msgid "Aucun message pour l'instant. Soyez le premier à écrire." -msgstr "" +msgstr "Nog geen berichten. Wees de eerste om te schrijven." -#: notifications/templates/notifications/discussion_detail.html:184 +#: .\notifications\templates\notifications\discussion_detail.html:184 msgid "Écrire un message... (@ pour mentionner)" -msgstr "" +msgstr "Schrijf een bericht... (@ om te vermelden)" -#: notifications/templates/notifications/discussion_detail.html:187 +#: .\notifications\templates\notifications\discussion_detail.html:187 msgid "Joindre" -msgstr "" +msgstr "Bijvoegen" -#: notifications/templates/notifications/discussion_detail.html:202 +#: .\notifications\templates\notifications\discussion_detail.html:202 msgid "Cette discussion est clôturée." -msgstr "" +msgstr "Dit gesprek is gesloten." -#: notifications/templates/notifications/discussion_list.html:46 -#: notifications/templates/notifications/discussion_list.html:47 -#: notifications/templates/notifications/inbox.html:57 +#: .\notifications\templates\notifications\discussion_list.html:79 +#: .\notifications\templates\notifications\discussion_list.html:80 +#: .\notifications\templates\notifications\inbox.html:170 +#: .\notifications\templates\notifications\inbox.html:171 msgid "Paramètres" msgstr "Instellingen" -#: notifications/templates/notifications/discussion_list.html:56 +#: .\notifications\templates\notifications\discussion_list.html:89 +#: .\notifications\templates\notifications\inbox.html:366 msgid "Vous n'avez encore aucune discussion." -msgstr "" +msgstr "U heeft nog geen gesprekken." -#: notifications/templates/notifications/discussion_list.html:92 +#: .\notifications\templates\notifications\discussion_list.html:137 +#: .\notifications\templates\notifications\inbox.html:414 msgid "Aucun message encore." -msgstr "" +msgstr "Nog geen bericht." -#: notifications/templates/notifications/inbox.html:44 -#: notifications/templates/notifications/inbox_mobile.html:72 +#: .\notifications\templates\notifications\discussion_list.html:160 +#: .\notifications\templates\notifications\inbox.html:437 +msgid "participants au total" +msgstr "deelnemers in totaal" + +#: .\notifications\templates\notifications\discussion_list.html:170 +#: .\notifications\templates\notifications\inbox.html:447 +msgid "non lu(s)" +msgstr "ongelezen" + +#: .\notifications\templates\notifications\inbox.html:151 +#: .\notifications\templates\notifications\inbox_mobile.html:72 msgid "Tout marquer comme lu" msgstr "Alles als gelezen markeren" -#: notifications/templates/notifications/inbox.html:50 +#: .\notifications\templates\notifications\inbox.html:157 msgid "Nouvelle notification" msgstr "Nieuwe melding" -#: notifications/templates/notifications/inbox.html:68 -#: notifications/templates/notifications/inbox_mobile.html:45 +#: .\notifications\templates\notifications\inbox.html:192 +#: .\notifications\templates\notifications\inbox_mobile.html:45 msgid "Tous les types" msgstr "Alle types" -#: notifications/templates/notifications/inbox.html:80 -#: notifications/templates/notifications/inbox_mobile.html:57 +#: .\notifications\templates\notifications\inbox.html:204 +#: .\notifications\templates\notifications\inbox_mobile.html:57 msgid "Archivées" msgstr "Gearchiveerd" -#: notifications/templates/notifications/inbox.html:86 -#: notifications/templates/notifications/inbox_mobile.html:61 +#: .\notifications\templates\notifications\inbox.html:210 +#: .\notifications\templates\notifications\inbox_mobile.html:61 msgid "Réinitialiser" -msgstr "Resetten" +msgstr "Herstellen" -#: notifications/templates/notifications/inbox.html:120 -#: notifications/templates/notifications/inbox_mobile.html:90 +#: .\notifications\templates\notifications\inbox.html:244 +#: .\notifications\templates\notifications\inbox_mobile.html:90 msgid "Nouveau" msgstr "Nieuw" -#: notifications/templates/notifications/inbox.html:131 -#: notifications/templates/notifications/inbox.html:135 +#: .\notifications\templates\notifications\inbox.html:255 +#: .\notifications\templates\notifications\inbox.html:259 msgid "Prendre en charge" -msgstr "In behandeling nemen" +msgstr "Overnemen" -#: notifications/templates/notifications/inbox.html:131 -#: notifications/templates/notifications/inbox.html:137 +#: .\notifications\templates\notifications\inbox.html:255 +#: .\notifications\templates\notifications\inbox.html:261 msgid "Marquer comme lu" -msgstr "Markeren als gelezen" +msgstr "Als gelezen markeren" -#: notifications/templates/notifications/inbox.html:146 -#: notifications/templates/notifications/inbox_mobile.html:125 +#: .\notifications\templates\notifications\inbox.html:270 +#: .\notifications\templates\notifications\inbox_mobile.html:125 msgid "Archiver" msgstr "Archiveren" -#: notifications/templates/notifications/inbox.html:223 -#: notifications/templates/notifications/inbox_mobile.html:141 +#: .\notifications\templates\notifications\inbox.html:347 +#: .\notifications\templates\notifications\inbox_mobile.html:141 msgid "Aucune notification archivée." msgstr "Geen gearchiveerde meldingen." -#: notifications/templates/notifications/inbox.html:225 -#: notifications/templates/notifications/inbox_mobile.html:143 +#: .\notifications\templates\notifications\inbox.html:349 +#: .\notifications\templates\notifications\inbox_mobile.html:143 msgid "Vous n'avez aucune notification." msgstr "U heeft geen meldingen." -#: notifications/templates/notifications/inbox_mobile.html:36 +#: .\notifications\templates\notifications\inbox_mobile.html:36 msgid "Accueil" -msgstr "" +msgstr "Startpagina" -#: notifications/templates/notifications/inbox_mobile.html:115 +#: .\notifications\templates\notifications\inbox_mobile.html:115 msgid "Prendre" -msgstr "Neem" +msgstr "Nemen" -#: notifications/templates/notifications/inbox_mobile.html:117 +#: .\notifications\templates\notifications\inbox_mobile.html:117 msgid "Lu" msgstr "Gelezen" -#: notifications/templates/notifications/notification_settings.html:15 +#: .\notifications\templates\notifications\notification_settings.html:15 msgid "Paramètres des notifications" msgstr "Meldingsinstellingen" -#: notifications/templates/notifications/notification_settings.html:17 +#: .\notifications\templates\notifications\notification_settings.html:17 msgid "" "Gérez vos préférences de rappel par e-mail pour les notifications non lues." -msgstr "" +msgstr "Beheer uw e-mailherinneringsvoorkeuren voor ongelezen meldingen." -#: notifications/templates/notifications/notification_settings.html:26 +#: .\notifications\templates\notifications\notification_settings.html:26 msgid "Rappels par e-mail" msgstr "E-mailherinneringen" -#: notifications/templates/notifications/notification_settings.html:37 +#: .\notifications\templates\notifications\notification_settings.html:36 +msgid "Langue préférée pour les e-mails et notifications" +msgstr "Voorkeurstaal voor e-mails en meldingen" + +#: .\notifications\templates\notifications\notification_settings.html:45 +msgid "" +"Les e-mails de rappel et les notifications automatiques vous seront envoyés " +"dans cette langue." +msgstr "Herinneringsmails en automatische meldingen worden in deze taal verzonden." + +#: .\notifications\templates\notifications\notification_settings.html:53 msgid "Activer les rappels par e-mail" msgstr "E-mailherinneringen inschakelen" -#: notifications/templates/notifications/notification_settings.html:40 +#: .\notifications\templates\notifications\notification_settings.html:56 msgid "" "Recevoir un récapitulatif par e-mail si des notifications restent non lues " "au-delà du délai spécifié." -msgstr "" +msgstr "Ontvang een samenvatting per e-mail als meldingen langer dan de opgegeven tijd ongelezen blijven." -#: notifications/templates/notifications/notification_settings.html:51 +#: .\notifications\templates\notifications\notification_settings.html:67 msgid "Adresse(s) e-mail de réception" msgstr "E-mailadres(sen) voor ontvangst" -#: notifications/templates/notifications/notification_settings.html:59 +#: .\notifications\templates\notifications\notification_settings.html:75 msgid "Laissez vide pour utiliser l'e-mail principal de votre compte" -msgstr "Laat leeg om het primaire e-mailadres van uw account te gebruiken" +msgstr "Leeg laten om het primaire e-mailadres van uw account te gebruiken" -#: notifications/templates/notifications/notification_settings.html:60 +#: .\notifications\templates\notifications\notification_settings.html:76 msgid "Pour plusieurs destinataires, séparez les adresses par des virgules." -msgstr "Voor meervoudige ontvangers scheidt u de adressen met komma's." +msgstr "Voor meerdere ontvangers, scheid de adressen met komma's." -#: notifications/templates/notifications/notification_settings.html:67 +#: .\notifications\templates\notifications\notification_settings.html:83 msgid "Délai avant l'envoi du rappel (en heures)" -msgstr "Wachttijd vóór verzending van herinnering (in uren)" +msgstr "Vertraging voor verzending herinnering (in uren)" -#: notifications/templates/notifications/notification_settings.html:71 +#: .\notifications\templates\notifications\notification_settings.html:87 msgid "heures" -msgstr "uren" +msgstr "uur" -#: notifications/templates/notifications/notification_settings.html:77 +#: .\notifications\templates\notifications\notification_settings.html:93 msgid "" "Exemple: 24h = un rappel sera envoyé si une notification n'a pas été lue au " "bout de 24 heures." -msgstr "" +msgstr "Voorbeeld: 24u = er wordt een herinnering gestuurd als een melding na 24 uur niet is gelezen." -#: notifications/templates/notifications/notification_settings.html:86 +#: .\notifications\templates\notifications\notification_settings.html:102 msgid "Enregistrer mes préférences" msgstr "Mijn voorkeuren opslaan" -#: notifications/templates/notifications/team_form.html:11 +#: .\notifications\templates\notifications\team_form.html:11 msgid "une équipe" -msgstr "" +msgstr "een team" -#: notifications/templates/notifications/team_form.html:34 +#: .\notifications\templates\notifications\team_form.html:34 msgid "Ctrl+clic pour sélectionner plusieurs membres" -msgstr "" +msgstr "Ctrl+klik om meerdere leden te selecteren" -#: notifications/templates/notifications/team_form.html:42 +#: .\notifications\templates\notifications\team_form.html:42 msgid "Enregistrer" -msgstr "" +msgstr "Opslaan" -#: notifications/templates/notifications/team_list.html:14 +#: .\notifications\templates\notifications\team_list.html:14 msgid "Nouvelle équipe" -msgstr "" +msgstr "Nieuw team" -#: notifications/templates/notifications/team_list.html:18 +#: .\notifications\templates\notifications\team_list.html:18 msgid "Retour aux notifications" -msgstr "" +msgstr "Terug naar meldingen" -#: notifications/templates/notifications/team_list.html:46 -#: notifications/views.py:456 +#: .\notifications\templates\notifications\team_list.html:46 +#: .\notifications\views.py:498 msgid "Modifier" -msgstr "" +msgstr "Bewerken" -#: notifications/templates/notifications/team_list.html:51 +#: .\notifications\templates\notifications\team_list.html:51 msgid "Supprimer cette équipe ?" -msgstr "" +msgstr "Dit team verwijderen?" -#: notifications/templates/notifications/team_list.html:54 +#: .\notifications\templates\notifications\team_list.html:54 msgid "Supprimer" -msgstr "" +msgstr "Verwijderen" -#: notifications/templates/notifications/team_list.html:68 +#: .\notifications\templates\notifications\team_list.html:68 msgid "Aucun membre" -msgstr "" +msgstr "Geen leden" -#: notifications/templates/notifications/team_list.html:73 +#: .\notifications\templates\notifications\team_list.html:73 msgid "membre(s)" -msgstr "" +msgstr "lid/leden" -#: notifications/templates/notifications/team_list.html:75 +#: .\notifications\templates\notifications\team_list.html:75 msgid "Créée par" -msgstr "" +msgstr "Aangemaakt door" -#: notifications/templates/notifications/team_list.html:85 +#: .\notifications\templates\notifications\team_list.html:85 msgid "Aucune équipe définie." -msgstr "" +msgstr "Geen teams gedefinieerd." -#: notifications/templates/notifications/team_list.html:88 +#: .\notifications\templates\notifications\team_list.html:88 msgid "Créer une équipe" -msgstr "" +msgstr "Team aanmaken" -#: notifications/views.py:348 +#: .\notifications\views.py:390 msgid "Vous n'avez pas les droits pour créer une notification." -msgstr "" +msgstr "U heeft geen rechten om een melding aan te maken." -#: notifications/views.py:381 +#: .\notifications\views.py:423 msgid "Notification envoyée avec succès." -msgstr "" +msgstr "Melding succesvol verzonden." -#: notifications/views.py:418 +#: .\notifications\views.py:460 msgid "Vous n'avez pas les droits pour créer une équipe." -msgstr "" +msgstr "U heeft geen rechten om een team aan te maken." -#: notifications/views.py:428 +#: .\notifications\views.py:470 msgid "Équipe créée avec succès." -msgstr "" +msgstr "Team succesvol aangemaakt." -#: notifications/views.py:433 +#: .\notifications\views.py:475 msgid "Créer" -msgstr "" +msgstr "Aanmaken" -#: notifications/views.py:444 +#: .\notifications\views.py:486 msgid "Vous n'avez pas les droits pour modifier une équipe." -msgstr "" +msgstr "U heeft geen rechten om een team te bewerken." -#: notifications/views.py:451 +#: .\notifications\views.py:493 msgid "Équipe mise à jour." -msgstr "" +msgstr "Team bijgewerkt." -#: notifications/views.py:466 +#: .\notifications\views.py:508 msgid "Vous n'avez pas les droits pour supprimer une équipe." -msgstr "" +msgstr "U heeft geen rechten om een team te verwijderen." -#: notifications/views.py:469 +#: .\notifications\views.py:511 msgid "Équipe supprimée." -msgstr "" +msgstr "Team verwijderd." -#: notifications/views.py:531 +#: .\notifications\views.py:561 msgid "Vous n'êtes pas participant de cette discussion." -msgstr "" +msgstr "U bent geen deelnemer aan dit gesprek." -#: notifications/views.py:544 +#: .\notifications\views.py:574 msgid "Message envoyé." -msgstr "" +msgstr "Bericht verzonden." -#: notifications/views.py:582 +#: .\notifications\views.py:602 +#, python-format +msgid "Discussion de %(name)s" +msgstr "Gesprek van %(name)s" + +#: .\notifications\views.py:613 msgid "Discussion créée avec succès." msgstr "Gesprek succesvol aangemaakt." -#: notifications/views.py:585 +#: .\notifications\views.py:616 msgid "Le contenu du message ne peut pas être vide." msgstr "De inhoud van het bericht mag niet leeg zijn." -#: notifications/views.py:602 +#: .\notifications\views.py:633 msgid "Vos préférences de rappel par e-mail ont été enregistrées." msgstr "Uw e-mailherinneringsvoorkeuren zijn opgeslagen." diff --git a/streetup/notifications/management/commands/send_unread_notification_reminders.py b/streetup/notifications/management/commands/send_unread_notification_reminders.py index c05b50a..6ed22b5 100644 --- a/streetup/notifications/management/commands/send_unread_notification_reminders.py +++ b/streetup/notifications/management/commands/send_unread_notification_reminders.py @@ -5,11 +5,12 @@ from datetime import timedelta from django.conf import settings from django.core.mail import EmailMultiAlternatives from django.core.management.base import BaseCommand -from django.utils import timezone +from django.utils import timezone, translation from django.utils.translation import gettext as _ from common.models import UserConfig from notifications.models import NotificationRecipient +from notifications.views import _translate_notification_data logger = logging.getLogger(__name__) @@ -87,81 +88,96 @@ class Command(BaseCommand): logger.warning("Aucune adresse e-mail trouvée pour l'utilisateur %s.", user.username) continue - # Construire l'e-mail - count = len(valid_recipients) - subject = f"[StreetUp] Rappel : {count} notification(s) non lue(s)" + user_lang = getattr(config, 'preferred_language', 'fr') or 'fr' + with translation.override(user_lang): + # Construire l'e-mail dans la langue de l'utilisateur + count = len(valid_recipients) + subject = _("[StreetUp] Rappel : %(count)d notification(s) non lue(s)") % {'count': count} - # Host URL pour les liens - domain = (getattr(settings, 'ROOT_URL', '') or getattr(settings, 'SITE_URL', '') or 'http://localhost:8000').rstrip('/') + # Host URL pour les liens + domain = (getattr(settings, 'ROOT_URL', '') or getattr(settings, 'SITE_URL', '') or 'http://localhost:8000').rstrip('/') - lines_text = [ - f"Bonjour {user.get_full_name() or user.username},\n", - f"Vous avez {count} notification(s) non lue(s) reçue(s) il y a plus de {delay_hours} heure(s) :\n", - ] + user_display_name = user.get_full_name() or user.username + greeting = _("Bonjour %(name)s,") % {'name': user_display_name} + intro_text = _("Vous avez %(count)d notification(s) non lue(s) reçue(s) il y a plus de %(delay)d heure(s) :") % { + 'count': count, + 'delay': delay_hours, + } - html_items = [] - for r in valid_recipients: - n = r.notification - created_str = n.created_at.strftime('%d/%m/%Y à %H:%M') - sender_str = n.sender.get_full_name() if n.sender else _("Système") - if n.action_url: - action_path = n.action_url if n.action_url.startswith('/') else f"/{n.action_url}" - link = f"{domain}{action_path}" + lines_text = [ + f"{greeting}\n", + f"{intro_text}\n", + ] + + html_items = [] + for r in valid_recipients: + n = r.notification + _translate_notification_data(n) + created_str = n.created_at.strftime('%d/%m/%Y %H:%M') + sender_str = n.sender.get_full_name() if n.sender else _("Système") + if n.action_url: + action_path = n.action_url if n.action_url.startswith('/') else f"/{n.action_url}" + link = f"{domain}{action_path}" + else: + link = f"{domain}/notifications/" + + type_label = n.get_notification_type_display() + lines_text.append(f"- [{type_label}] {n.title} ({_('reçue le')} {created_str} {_('par')} {sender_str})") + lines_text.append(f" {_('Lien')}: {link}\n") + + html_items.append( + f"
  • " + f"{n.title} ({type_label})
    " + f"{_('Reçue le')} {created_str} • {sender_str}
    " + f"{_('Consulter')}" + f"
  • " + ) + + lines_text.append(f"\n{_('Accédez à votre boîte de réception :')} {domain}/notifications/") + text_body = "\n".join(lines_text) + + html_title = _("Notifications non lues") + html_intro = _("Vous avez %(count)d notification(s) non lue(s) qui attendent votre attention :") % {'count': count} + btn_label = _("Voir mes notifications") + + html_body = f""" +
    +

    {html_title}

    +

    {greeting}

    +

    {html_intro}

    +
      + {"".join(html_items)} +
    +

    + + {btn_label} + +

    +
    + """ + + if dry_run: + self.stdout.write(f"[DRY-RUN] E-mail simulé [{user_lang}] pour {user.username} ({recipient_emails}) - {count} notification(s).") else: - link = f"{domain}/notifications/" + try: + msg = EmailMultiAlternatives( + subject=subject, + body=text_body, + from_email=getattr(settings, 'DEFAULT_FROM_EMAIL', 'StreetUp no-reply '), + to=recipient_emails, + ) + msg.attach_alternative(html_body, "text/html") + msg.send() - lines_text.append(f"- [{n.get_notification_type_display()}] {n.title} (reçue le {created_str} par {sender_str})") - lines_text.append(f" Lien: {link}\n") - - html_items.append( - f"
  • " - f"{n.title} ({n.get_notification_type_display()})
    " - f"Reçue le {created_str} • {sender_str}
    " - f"Consulter" - f"
  • " - ) - - lines_text.append(f"\nAccédez à votre boîte de réception : {domain}/notifications/") - text_body = "\n".join(lines_text) - - html_body = f""" -
    -

    Notifications non lues

    -

    Bonjour {user.get_full_name() or user.username},

    -

    Vous avez {count} notification(s) non lue(s) qui attendent votre attention :

    -
      - {"".join(html_items)} -
    -

    - - Voir mes notifications - -

    -
    - """ - - if dry_run: - self.stdout.write(f"[DRY-RUN] E-mail simulé pour {user.username} ({recipient_emails}) - {count} notification(s).") - else: - try: - msg = EmailMultiAlternatives( - subject=subject, - body=text_body, - from_email=getattr(settings, 'DEFAULT_FROM_EMAIL', 'StreetUp no-reply '), - to=recipient_emails, - ) - msg.attach_alternative(html_body, "text/html") - msg.send() - - # Marquer le rappel envoyé - NotificationRecipient.objects.filter(pk__in=[r.pk for r in valid_recipients]).update( - reminder_sent_at=now - ) - sent_count += 1 - user_count += 1 - self.stdout.write(self.style.SUCCESS(f"Rappel envoyé avec succès à {user.username} ({recipient_emails}).")) - except Exception as exc: - logger.exception("Erreur d'envoi du rappel pour %s: %s", user.username, exc) - self.stderr.write(self.style.ERROR(f"Erreur d'envoi pour {user.username}: {exc}")) + # Marquer le rappel envoyé + NotificationRecipient.objects.filter(pk__in=[r.pk for r in valid_recipients]).update( + reminder_sent_at=now + ) + sent_count += 1 + user_count += 1 + self.stdout.write(self.style.SUCCESS(f"Rappel envoyé avec succès à {user.username} ({recipient_emails}) en [{user_lang}].")) + except Exception as exc: + logger.exception("Erreur d'envoi du rappel pour %s: %s", user.username, exc) + self.stderr.write(self.style.ERROR(f"Erreur d'envoi pour {user.username}: {exc}")) self.stdout.write(self.style.SUCCESS(f"Traitement terminé : {sent_count} e-mail(s) envoyé(s) pour {user_count} utilisateur(s).")) diff --git a/streetup/notifications/templates/notifications/notification_settings.html b/streetup/notifications/templates/notifications/notification_settings.html index 0c2c0df..b0e5be7 100644 --- a/streetup/notifications/templates/notifications/notification_settings.html +++ b/streetup/notifications/templates/notifications/notification_settings.html @@ -30,6 +30,22 @@
    {% csrf_token %} + +
    + +
    + {{ form.preferred_language }} +
    + {% if form.preferred_language.errors %} +
    {{ form.preferred_language.errors|join:", " }}
    + {% endif %} +
    + {% translate "Les e-mails de rappel et les notifications automatiques vous seront envoyés dans cette langue." %} +
    +
    +
    diff --git a/streetup/notifications/tests.py b/streetup/notifications/tests.py index 6f1aa27..4db9cc1 100644 --- a/streetup/notifications/tests.py +++ b/streetup/notifications/tests.py @@ -123,6 +123,7 @@ class NotificationReminderTests(TestCase): # POST updated settings response = self.client.post(reverse('notifications:settings'), { + 'preferred_language': 'nl', 'notification_reminder_enabled': 'on', 'notification_reminder_emails': 'custom@example.com, other@example.com', 'notification_reminder_delay_hours': 12, @@ -130,6 +131,7 @@ class NotificationReminderTests(TestCase): self.assertEqual(response.status_code, 302) self.config.refresh_from_db() + self.assertEqual(self.config.preferred_language, 'nl') self.assertTrue(self.config.notification_reminder_enabled) self.assertEqual(self.config.notification_reminder_emails, 'custom@example.com, other@example.com') self.assertEqual(self.config.notification_reminder_delay_hours, 12) @@ -175,3 +177,37 @@ class NotificationReminderTests(TestCase): # Verify reminder_sent_at is set recipient.refresh_from_db() self.assertIsNotNone(recipient.reminder_sent_at) + + @override_settings(EMAIL_OVERRIDE=None) + def test_send_unread_notification_reminders_multilingual(self): + from datetime import timedelta + from django.utils import timezone + from django.core import mail + from django.core.management import call_command + from notifications.models import Notification, NotificationRecipient + + self.config.notification_reminder_enabled = True + self.config.notification_reminder_delay_hours = 1 + self.config.preferred_language = 'nl' + self.config.save() + + past_time = timezone.now() - timedelta(hours=2) + notif = Notification.objects.create( + title="Dringende melding", + content="Details", + notification_type=Notification.TYPE_ALERT, + ) + recipient = NotificationRecipient.objects.create( + notification=notif, + user=self.user, + ) + Notification.objects.filter(pk=notif.pk).update(created_at=past_time) + + mail.outbox.clear() + call_command('send_unread_notification_reminders') + + self.assertEqual(len(mail.outbox), 1) + sent_email = mail.outbox[0] + # In Dutch, subject contains 'Herinnering' + self.assertIn("Herinnering", sent_email.subject) + diff --git a/streetup/notifications/views.py b/streetup/notifications/views.py index d93ddb0..19c2076 100644 --- a/streetup/notifications/views.py +++ b/streetup/notifications/views.py @@ -597,8 +597,9 @@ def discussion_create(request): files = request.FILES.getlist('attachments') if content: + user_name = request.user.get_full_name() or request.user.username discussion = Discussion.objects.create( - title=title or f"Discussion de {request.user.get_full_name() or request.user.username}", + title=title or (_("Discussion de %(name)s") % {'name': user_name}), created_by=request.user, ) discussion.participants.add(request.user) diff --git a/streetup/streetup/urls.py b/streetup/streetup/urls.py index 57fd86b..e27ca33 100644 --- a/streetup/streetup/urls.py +++ b/streetup/streetup/urls.py @@ -21,8 +21,9 @@ from django.conf import settings from django.conf.urls.static import static from django.conf.urls import handler403 from django.shortcuts import render -from django.views.i18n import JavaScriptCatalog, set_language +from django.views.i18n import JavaScriptCatalog from django.contrib.auth.decorators import login_not_required +from common import views as common_views from common.private_files import views as private_files_views @@ -55,7 +56,7 @@ urlpatterns = [ path("password/change/", auth_views.PasswordChangeView.as_view(success_url=reverse_lazy("common:account_info")), name="password_change",), path('accounts/password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'), path("private/download/", private_files_views.private_file_download, name="private_file_download"), - path("i18n/setlang/", login_not_required(set_language), name="set_language"), + path("i18n/setlang/", login_not_required(common_views.set_language), name="set_language"), path("jsi18n/", login_not_required(JavaScriptCatalog.as_view()), name="javascript-catalog"), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)