diff --git a/js/src/App.vue b/js/src/App.vue index d54e63dfe..3d48b8939 100644 --- a/js/src/App.vue +++ b/js/src/App.vue @@ -128,7 +128,7 @@ $mdi-font-path: "~@mdi/font/fonts"; body { // background: #f7f8fa; background: $body-background-color; - font-family: BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", + font-family: BlinkMacSystemFont, Roboto, Oxygen, Ubuntu, Cantarell, "Segoe UI", "Fira Sans", "Droid Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; /*main {*/ diff --git a/js/src/graphql/user.ts b/js/src/graphql/user.ts index 00f7fd5cb..af86686da 100644 --- a/js/src/graphql/user.ts +++ b/js/src/graphql/user.ts @@ -99,6 +99,7 @@ export const USER_SETTINGS_FRAGMENT = gql` notificationOnDay notificationEachWeek notificationBeforeEvent + notificationPendingParticipation } `; @@ -119,12 +120,14 @@ export const SET_USER_SETTINGS = gql` $notificationOnDay: Boolean $notificationEachWeek: Boolean $notificationBeforeEvent: Boolean + $notificationPendingParticipation: NotificationPendingParticipationEnum ) { setUserSettings( timezone: $timezone notificationOnDay: $notificationOnDay notificationEachWeek: $notificationEachWeek notificationBeforeEvent: $notificationBeforeEvent + notificationPendingParticipation: $notificationPendingParticipation ) { ...UserSettingFragment } diff --git a/js/src/i18n/en_US.json b/js/src/i18n/en_US.json index 419bb52d2..7995776ca 100644 --- a/js/src/i18n/en_US.json +++ b/js/src/i18n/en_US.json @@ -584,5 +584,15 @@ "Timezone": "Timezone", "Select a timezone": "Select a timezone", "Other": "Other", - "No moderation logs yet": "No moderation logs yet" + "No moderation logs yet": "No moderation logs yet", + "Participation notifications": "Participation notifications", + "We'll always send you emails to notify about important event updates": "We'll always send you emails to notify about important event updates", + "Like title or physical address update, start or end date change or event being confirmed or cancelled.": "Like title or physical address update, start or end date change or event being confirmed or cancelled.", + "Organizer notifications": "Organizer notifications", + "Notifications for manually approved participations to an event": "Notifications for manually approved participations to an event", + "We'll send you an email when there new participations requests.": "We'll send you an email when there new participations requests.", + "No notifications": "No notifications", + "Direct": "Direct", + "Every hour": "Every hour", + "Every day": "Every day" } diff --git a/js/src/i18n/fr_FR.json b/js/src/i18n/fr_FR.json index 55a446feb..fcfa743b3 100644 --- a/js/src/i18n/fr_FR.json +++ b/js/src/i18n/fr_FR.json @@ -1,596 +1,606 @@ { - "(Masked)": "(Masqué)", - "<b>Please do not use it in any real way.</b>": "<b>Merci de ne pas en faire une utilisation réelle.</b>", - "@{group}": "@{group}", - "@{username}": "@{username}", - "@{username} ({role})": "@{username} ({role})", - "A user-friendly, emancipatory and ethical tool for gathering, organising, and mobilising.": "Un outil convivial, émancipateur et éthique pour se rassembler, s'organiser et se mobiliser.", - "A validation email was sent to {email}": "Un email de validation a été envoyé à {email}", - "Abandon edition": "Abandonner la modification", - "About": "À propos", - "About Mobilizon": "À propos de Mobilizon", - "About this event": "À propos de cet évènement", - "About this instance": "À propos de cette instance", - "Accept": "Accepter", - "Accepted": "Accepté", - "Account": "Compte", - "Actor": "Acteur", - "Add": "Ajouter", - "Add a group": "Ajouter un groupe", - "Add a note": "Ajouter une note", - "Add a todo": "Ajouter un todo", - "Add an address": "Ajouter une adresse", - "Add an instance": "Ajouter une instance", - "Add some tags": "Ajouter des tags", - "Add to my calendar": "Ajouter à mon agenda", - "Additional comments": "Commentaires additionnels", - "Admin": "Admin", - "Admin settings": "Paramètres administrateur", - "Admin settings successfully saved.": "Les paramètres administrateur ont bien été sauvegardés.", - "Administration": "Administration", - "All group members and other eventual server admins will still be able to view this information.": "Tous les membres du groupes et les administrateur·ices d'éventuels autres serveurs seront toujours en capacité de voir cette information.", - "All the places have already been taken": "Toutes les places ont été prises|Une place est encore disponible|{places} places sont encore disponibles", - "Allow all comments": "Autoriser tous les commentaires", - "Allow registrations": "Autoriser les inscriptions", - "An error has occurred.": "Une erreur est survenue.", - "Anonymous participant": "Participant⋅e anonyme", - "Anonymous participants will be asked to confirm their participation through e-mail.": "Les participants anonymes devront confirmer leur participation par email.", - "Anonymous participations": "Participations anonymes", - "Approve": "Approuver", - "Are you really sure you want to delete your whole account? You'll lose everything. Identities, settings, events created, messages and participations will be gone forever.": "Êtes-vous vraiment certain⋅e de vouloir supprimer votre compte ? Vous allez tout perdre. Identités, paramètres, événements créés, messages et participations disparaîtront pour toujours.", - "Are you sure you want to <b>delete</b> this comment? This action cannot be undone.": "Êtes-vous certain⋅e de vouloir <b>supprimer</b> ce commentaire ? Cette action ne peut pas être annulée.", - "Are you sure you want to <b>delete</b> this event? This action cannot be undone. You may want to engage the conversation with the event creator or edit its event instead.": "Êtes-vous certain⋅e de vouloir <b>supprimer</b> cet évènement ? Cette action n'est pas réversible. Vous voulez peut-être engager la conversation avec le créateur de l'évènement ou bien modifier son évènement à la place.", - "Are you sure you want to cancel the event creation? You'll lose all modifications.": "Étes-vous certain⋅e de vouloir annuler la création de l'évènement ? Vous allez perdre toutes vos modifications.", - "Are you sure you want to cancel the event edition? You'll lose all modifications.": "Êtes-vous certain⋅e de vouloir annuler la modification de l'évènement ? Vous allez perdre toutes vos modifications.", - "Are you sure you want to cancel your participation at event \"{title}\"?": "Êtes-vous certain⋅e de vouloir annuler votre participation à l'évènement « {title} » ?", - "Are you sure you want to delete this event? This action cannot be reverted.": "Êtes-vous certain⋅e de vouloir supprimer cet évènement ? Cette action ne peut être annulée.", - "Assigned to": "Assigné à", - "Avatar": "Avatar", - "Back to previous page": "Retour à la page précédente", - "Before you can login, you need to click on the link inside it to validate your account": "Avant que vous puissiez vous enregistrer, vous devez cliquer sur le lien à l'intérieur pour valider votre compte", - "Bold": "Gras", - "By @{group}": "Par @{group}", - "By @{username}": "Par @{username}", - "By @{username} and @{group}": "Par @{username} et @{group}", - "By {username} and {group}": "Par {username} et {group}", - "Cancel": "Annuler", - "Cancel anonymous participation": "Annuler ma participation anonyme", - "Cancel creation": "Annuler la création", - "Cancel edition": "Annuler la modification", - "Cancel my participation request…": "Annuler ma demande de participation…", - "Cancel my participation…": "Annuler ma participation…", - "Cancelled: Won't happen": "Annulé : N'aura pas lieu", - "Category": "Catégorie", - "Change": "Modifier", - "Change my email": "Changer mon adresse e-mail", - "Change my identity…": "Changer mon identité…", - "Change my password": "Modifier mon mot de passe", - "Change password": "Modifier mot de passe", - "Clear": "Effacer", - "Click to select": "Cliquez pour sélectionner", - "Click to upload": "Cliquez pour uploader", - "Close": "Fermé", - "Close comments for all (except for admins)": "Fermer les commentaires à tout le monde (excepté les administrateur⋅ices)", - "Closed": "Fermé", - "Collections": "Collections", - "Comment deleted": "Commentaire supprimé", - "Comment from @{username} reported": "Commentaire de @{username} signalé", - "Comments": "Commentaires", - "Comments have been closed.": "Les commentaires sont fermés.", - "Comments on the event page": "Commentaires sur la page de l'événement", - "Confirm my participation": "Confirmer ma participation", - "Confirm my particpation": "Confirmer ma participation", - "Confirmed: Will happen": "Confirmé : aura lieu", - "Contact": "Contact", - "Continue editing": "Continuer la modification", - "Conversations": "Conversations", - "Country": "Pays", - "Create": "Créer", - "Create a calc": "Créer un calc", - "Create a new conversation": "Créer une nouvelle conversation", - "Create a new event": "Créer un nouvel évènement", - "Create a new group": "Créer un nouveau groupe", - "Create a new identity": "Créer une nouvelle identité", - "Create a new list": "Créer une nouvelle liste", - "Create a new task list": "Créer une nouvelle liste de tâches", - "Create a pad": "Créer un pad", - "Create a visioconference": "Créer une visio-conférence", - "Create and manage several identities from the same account": "Créer et gérer plusieurs identités sur un même compte", - "Create folder": "Créer un dossier", - "Create group": "Créer un groupe", - "Create my event": "Créer mon évènement", - "Create my group": "Créer mon groupe", - "Create my profile": "Créer mon profil", - "Create resource": "Créer une resource", - "Create token": "Créer un jeton", - "Create, edit or delete events": "Créer, modifier ou supprimer des évènements", - "Creator": "Créateur⋅ice", - "Current identity has been changed to {identityName} in order to manage this event.": "L'identité actuelle a été changée à {identityName} pour pouvoir gérer cet évènement.", - "Current page": "Page courante", - "Custom": "Personnel", - "Custom URL": "URL personnalisée", - "Custom text": "Texte personnalisé", - "Dashboard": "Tableau de bord", - "Date": "Date", - "Date and time": "Date et heure", - "Date and time settings": "Paramètres de date et d'heure", - "Date parameters": "Paramètres de date", - "Decline": "Refuser", - "Default": "Default", - "Default Mobilizon.org terms": "Conditions d'utilisation par défaut de Mobilizon.org", - "Delete": "Supprimer", - "Delete Comment": "Supprimer le commentaire", - "Delete Event": "Supprimer l'évènement", - "Delete account": "Suppression du compte", - "Delete event": "Supprimer un évènement", - "Delete everything": "Tout supprimer", - "Delete my account": "Supprimer mon compte", - "Delete this identity": "Supprimer cette identité", - "Delete your identity": "Supprimer votre identité", - "Delete {eventTitle}": "Supprimer {eventTitle}", - "Delete {preferredUsername}": "Supprimer {preferredUsername}", - "Deleting comment": "Suppression du commentaire en cours", - "Deleting event": "Suppression de l'évènement", - "Deleting my account will delete all of my identities.": "Supprimer mon compte supprimera toutes mes identités.", - "Deleting your Mobilizon account": "Supprimer votre compte Mobilizon", - "Description": "Description", - "Didn't receive the instructions ?": "Vous n'avez pas reçu les instructions ?", - "Discussions": "Discussions", - "Display name": "Nom affiché", - "Display participation price": "Afficher un prix de participation", - "Domain": "Domaine", - "Don't show @{organizer} as event host alongside @{group}": "Ne pas afficher @{organizer} comme organisateur⋅ice de l'événement avec @{group}", - "Draft": "Brouillon", - "Drafts": "Brouillons", - "Due on": "Prévu pour le", - "Duplicate": "Dupliquer", - "Edit": "Modifier", - "Edit biography": "Éditer la biographie", - "Eg: Stockholm, Dance, Chess…": "Par exemple : Lyon, Danse, Bridge…", - "Either on the {instance} instance or on another instance.": "Sur l'instance {instance} ou bien sur une autre instance.", - "Either the account is already validated, either the validation token is incorrect.": "Soit le compte est déjà validé, soit le jeton de validation est incorrect.", - "Either the email has already been changed, either the validation token is incorrect.": "Soit l'adresse email a déjà été modifiée, soit le jeton de validation est incorrect.", - "Either the participation has already been validated, either the validation token is incorrect.": "Soit la participation a déjà été validée, soit le jeton de validation est incorrect.", - "Email": "Email", - "Ends on…": "Se termine le…", - "Enjoy discovering Mobilizon!": "Amusez-vous bien en découvrant Mobilizon !", - "Enter the link URL": "Entrez l'URL du lien", - "Enter your own terms. HTML tags allowed. Mobilizon.org's terms are provided as template.": "Entrez vos propres conditions d'utilisations. Les balises HTML sont autorisées. Les conditions d'utilisation par défaut de Mobilizon.org sont fournies comme modèle.", - "Error while changing email": "Erreur lors de la modification de l'adresse email", - "Error while communicating with the server.": "Erreur de communication avec le serveur.", - "Error while saving report.": "Erreur lors de l'enregistrement du signalement.", - "Error while validating account": "Erreur lors de la validation du compte", - "Error while validating participation": "Erreur lors de la validation de la participation", - "Event": "Événement", - "Event already passed": "Événement déjà passé", - "Event cancelled": "Événement annulé", - "Event creation": "Création d'évènement", - "Event edition": "Modification d'évènement", - "Event list": "Liste d'évènements", - "Event not found.": "Événement non trouvé.", - "Event page settings": "Paramètres de la page de l'évènement", - "Event to be confirmed": "Événement à confirmer", - "Event {eventTitle} deleted": "Événement {eventTitle} supprimé", - "Event {eventTitle} reported": "Événement {eventTitle} signalé", - "Events": "Événements", - "Ex: someone@mobilizon.org": "Ex : une_personne@mobilizon.org", - "Ex: test.mobilizon.org": "Ex : test.mobilizon.org", - "Exclude": "Exclure", - "Explore": "Explorer", - "Failed to save admin settings": "Échec de la sauvegarde des paramètres administrateur", - "Featured events": "Événements à la une", - "Features": "Fonctionnalités", - "Federation": "Fédération", - "Find an address": "Trouver une adresse", - "Find an instance": "Trouver une instance", - "Followed by {count} persons": "Suivi par {count} personnes", - "Followers": "Abonnés", - "Followings": "Abonnements", - "For instance: London, Taekwondo, Architecture…": "Par exemple : Lyon, Taekwondo, Architecture…", - "Forgot your password ?": "Mot de passe oublié ?", - "From a birthday party with friends and family to a march for climate change, right now, our gatherings are <b>trapped inside the tech giants’ platforms</b>. How can we organize, how can we click “Attend,” without <b>providing private data</b> to Facebook or <b>locking ourselves up</b> inside MeetUp?": "De l’anniversaire entre ami·e·s à une marche pour le climat, aujourd’hui, les bonnes raisons de se rassembler sont <b>captées par les géants du web</b>. Comment s’organiser, comment cliquer sur « je participe » sans <b>livrer des données intimes</b> à Facebook ou<b> s’enfermer</b> dans MeetUp ?", - "From the {startDate} at {startTime} to the {endDate}": "Du {startDate} à {startTime} jusqu'au {endDate}", - "From the {startDate} at {startTime} to the {endDate} at {endTime}": "Du {startDate} à {startTime} au {endDate} à {endTime}", - "From the {startDate} to the {endDate}": "Du {startDate} au {endDate}", - "Gather ⋅ Organize ⋅ Mobilize": "Rassembler ⋅ Organiser ⋅ Mobiliser", - "General": "Général", - "General information": "Informations générales", - "Getting location": "Récupération de la position", - "Go": "Allons-y", - "Going as {name}": "En tant que {name}", - "Group": "Groupe", - "Group List": "Liste de groupes", - "Group Members": "Membres du groupe", - "Group full name": "Nom complet du groupe", - "Group name": "Nom du groupe", - "Group {displayName} created": "Groupe {displayName} créé", - "Groups": "Groupes", - "Headline picture": "Image à la une", - "Hide replies": "Masquer les réponses", - "Hide the organizer": "Masquer l'organisateur⋅ice", - "Home": "Accueil", - "I create an identity": "Je crée une identité", - "I don't have a Mobilizon account": "Je n'ai pas de compte Mobilizon", - "I have a Mobilizon account": "J'ai un compte Mobilizon", - "I have an account on another Mobilizon instance.": "J'ai un compte sur une autre instance Mobilizon.", - "I participate": "Je participe", - "I want to allow people to participate without an account.": "Je veux permettre aux gens de participer sans avoir un compte.", - "I want to approve every participation request": "Je veux approuver chaque demande de participation", - "Identity {displayName} created": "Identité {displayName} créée", - "Identity {displayName} deleted": "Identité {displayName} supprimée", - "Identity {displayName} updated": "Identité {displayName} mise à jour", - "If an account with this email exists, we just sent another confirmation email to {email}": "Si un compte avec un tel email existe, nous venons juste d'envoyer un nouvel email de confirmation à {email}", - "If this identity is the only administrator of some groups, you need to delete them before being able to delete this identity.": "Si cette identité est la seule administratrice de certains groupes, vous devez les supprimer avant de pouvoir supprimer cette identité.", - "If you want, you may send a message to the event organizer here.": "Si vous le désirez, vous pouvez laisser un message pour l'organisateur⋅ice de l'événement ci-dessous.", - "Important event updates": "Mises à jour importantes des événements", - "Impossible to login, your email or password seems incorrect.": "Impossible de se connecter, votre email ou bien votre mot de passe semble incorrect.", - "In the meantime, please consider that the software is not (yet) finished. More information {onBlog}.": "D'ici là, veuillez considérer que le logiciel n'est pas (encore) fini. Plus d'informations {onBlog}.", - "Installing Mobilizon will allow communities to free themselves from the services of tech giants by creating <b>their own event platform</b>.": "Installer Mobilizon permettra à des collectifs de s’émanciper des outils des géants du web en créant <b>leur propre plateforme d’évènements</b>.", - "Instance Description": "Description de l'instance", - "Instance Name": "Nom de l'instance", - "Instance Terms": "Conditions générales de l'instance", - "Instance Terms Source": "Source des conditions d'utilisation de l'instance", - "Instance Terms URL": "URL des conditions générales de l'instance", - "Instance settings": "Paramètres de l'instance", - "Instances": "Instances", - "Invite a new member": "Inviter un nouveau membre", - "Invite member": "Inviter un·e membre", - "Italic": "Italique", - "Join {instance}, a Mobilizon instance": "Rejoignez {instance}, une instance Mobilizon", - "Last published event": "Dernier évènement publié", - "Last week": "La semaine dernière", - "Latest posts": "Derniers messages publics", - "Learn more": "En apprendre plus", - "Learn more about Mobilizon": "En apprendre plus à propos de Mobilizon", - "Leave event": "Annuler ma participation à l'évènement", - "Leaving event \"{title}\"": "Annuler ma participation à l'évènement", - "Let's create a new common": "Créons un nouveau Common", - "License": "Licence", - "Like title update, start or end date change, event being confirmed or cancelled.": "Comme le changement du titre de l'événement, de sa date de début ou de fin, ou bien qu'il soit confirmé ou bien annulé.", - "Limited number of places": "Nombre de places limité", - "List title": "Titre de la liste", - "Load more": "Voir plus", - "Locality": "Commune", - "Location": "Lieu", - "Log in": "Se connecter", - "Log out": "Se déconnecter", - "Login": "Se connecter", - "Login on Mobilizon!": "Se connecter sur Mobilizon !", - "Login on {instance}": "Se connecter sur {instance}", - "Manage participations": "Gérer les participations", - "Mark as resolved": "Marquer comme résolu", - "Members": "Membres", - "Message": "Message", - "Mobilizon is a federated network. You can interact with this event from a different server.": "Mobilizon est un réseau fédéré. Vous pouvez interagir avec cet événement depuis un serveur différent.", - "Mobilizon is a free/libre software that will allow communities to create <b>their own spaces</b> to publish events in order to better emancipate themselves from tech giants.": "Mobilizon est un logiciel libre qui permettra à des communautés de <b>créer leurs propres espaces</b> de publication d’évènements, afin de mieux s’émanciper des géants du web.", - "Mobilizon is under development, we will add new features to this site during regular updates, until the release of <b>version 1 of the software in the first half of 2020</b>.": "Mobilizon est en cours de développement, nous ajouterons de nouvelles fonctionnalités à ce site lors de mises à jour régulières, jusqu'à la publication de <b>la version 1 du logiciel au premier semestre 2020</b>.", - "Mobilizon’s licence": "La licence de Mobilizon", - "Moderated comments (shown after approval)": "Commentaires modérés (affichés après validation)", - "Moderation": "Modération", - "Moderation log": "Journaux de modération", - "Move": "Déplacer", - "My account": "Mon compte", - "My events": "Mes évènements", - "My groups": "Mes groupes", - "My identities": "Mes identités", - "Name": "Nom", - "New conversation": "Nouvelle conversation", - "New email": "Nouvelle adresse e-mail", - "New folder": "Nouveau dossier", - "New link": "Nouveau lien", - "New note": "Nouvelle note", - "New password": "Nouveau mot de passe", - "New profile": "Nouveau profil", - "Next page": "Page suivante", - "No actors found": "Aucun acteur trouvé", - "No address defined": "Aucune adresse définie", - "No closed reports yet": "Aucun signalement fermé pour le moment", - "No comment": "Pas de commentaire", - "No comments yet": "Pas encore de commentaires", - "No end date": "Pas de date de fin", - "No events found": "Aucun évènement trouvé", - "No group found": "Aucun groupe trouvé", - "No groups found": "Aucun groupe trouvé", - "No instance follows your instance yet.": "Aucune instance ne suit votre instance pour le moment.", - "No instance to approve|Approve instance|Approve {number} instances": "Aucune instance à approuver|Approuver une instance|Approuver {number} instances", - "No instance to reject|Reject instance|Reject {number} instances": "Aucune instance à rejeter|Rejeter une instance|Rejeter {number} instances", - "No instance to remove|Remove instance|Remove {number} instances": "Pas d'instances à supprimer|Supprimer une instance|Supprimer {number} instances", - "No message": "Pas de message", - "No moderation logs yet": "Pas encore de journaux de modération", - "No notification settings yet": "Pas encore de paramètres de notification", - "No one is going to this event": "Personne n'a va encore|Une personne y va|{going} personnes y vont", - "No open reports yet": "Aucun signalement ouvert pour le moment", - "No participant to approve|Approve participant|Approve {number} participants": "Aucun⋅e participant⋅e à valider|Valider le ou la participant⋅e|Valider {number} participant⋅es", - "No participant to reject|Reject participant|Reject {number} participants": "Aucun⋅e participant⋅e à refuser|Refuser le ou la participant⋅e|Refuser {number} participant⋅es", - "No preferences yet": "Pas encore de préférences", - "No public upcoming events": "Aucun événement public à venir", - "No resolved reports yet": "Aucun signalement résolu pour le moment", - "No resources selected": "Aucune ressource sélectionnée|Une ressource sélectionnée|{count} ressources sélectionnées", - "No results for \"{queryText}\"": "Pas de résultats pour « {queryText} »", - "No user account with this email was found. Maybe you made a typo?": "Aucun compte utilisateur trouvé pour cet email. Peut-être avez-vous fait une faute de frappe ?", - "Notes": "Notes", - "Notification before the event": "Notification avant l'événement", - "Notification on the day of the event": "Notification le jour de l'événement", - "Notifications": "Notifications", - "Number of places": "Nombre de places", - "OK": "OK", - "Old password": "Ancien mot de passe", - "On {date}": "Le {date}", - "On {date} ending at {endTime}": "Le {date}, se terminant à {endTime}", - "On {date} from {startTime} to {endTime}": "Le {date} de {startTime} à {endTime}", - "On {date} starting at {startTime}": "Le {date} à partir de {startTime}", - "One person is going": "Personne n'y va | Une personne y va | {approved} personnes y vont", - "Ongoing tasks": "Tâches en cours", - "Only accessible through link and search (private)": "Uniquement accessibles par lien et la recherche (privé)", - "Only alphanumeric characters and underscores are supported.": "Seuls les caractères alphanumériques et les tirets bas sont acceptés.", - "Open": "Ouvert", - "Opened reports": "Signalements ouverts", - "Or": "Ou", - "Organized": "Organisés", - "Organized by {name}": "Organisé par {name}", - "Organizer": "Organisateur⋅ice", - "Organizers": "Organisateur⋅ices", - "Other": "Autre", - "Other software may also support this.": "D'autres logiciels peuvent également supporter cette fonctionnalité.", - "Otherwise this identity will just be removed from the group administrators.": "Sinon cette identité sera juste supprimée des administrateur⋅ices du groupe.", - "Page": "Page", - "Page limited to my group (asks for auth)": "Accès limité à mon groupe (demande authentification)", - "Page not found": "Page non trouvée", - "Participant": "Participant⋅e", - "Participant already was rejected.": "Le ou la participant⋅e a déjà été refusé⋅e.", - "Participant has already been approved as participant.": "Le ou la participant⋅e a déjà été approuvé⋅e en tant que participant⋅e.", - "Participants": "Participant⋅e⋅s", - "Participate": "Participer", - "Participate using your email address": "Participer en utilisant votre adresse email", - "Participation approval": "Validation des participations", - "Participation confirmation": "Confirmation de votre participation", - "Participation requested!": "Participation demandée !", - "Password": "Mot de passe", - "Password (confirmation)": "Mot de passe (confirmation)", - "Password change": "Changement de mot de passe", - "Password reset": "Réinitialisation du mot de passe", - "Past events": "Événements passés", - "Pending": "En attente", - "Pick a group": "Choisissez un groupe", - "Pick an identity": "Choisissez une identité", - "Please check your spam folder if you didn't receive the email.": "Merci de vérifier votre dossier des indésirables si vous n'avez pas reçu l'email.", - "Please contact this instance's Mobilizon admin if you think this is a mistake.": "Veuillez contacter l'administrateur⋅ice de cette instance Mobilizon si vous pensez qu’il s’agit d’une erreur.", - "Please enter your password to confirm this action.": "Merci d'entrer votre mot de passe pour confirmer cette action.", - "Please make sure the address is correct and that the page hasn't been moved.": "Assurez‐vous que l’adresse est correcte et que la page n’a pas été déplacée.", - "Please read the full rules": "Merci de lire les règles complètes", - "Please refresh the page and retry.": "Merci de rafraîchir la page puis réessayer.", - "Please type at least 5 characters": "Merci d'entrer au moins 5 caractères", - "Post a comment": "Ajouter un commentaire", - "Post a public message": "Poster un message public", - "Post a reply": "Envoyer une réponse", - "Postal Code": "Code postal", - "Preferences": "Préférences", - "Previous page": "Page précédente", - "Privacy Policy": "Politique de confidentialité", - "Private event": "Événement privé", - "Private feeds": "Flux privés", - "Profiles": "Profils", - "Public": "Public", - "Public RSS/Atom Feed": "Flux RSS/Atom public", - "Public comment moderation": "Modération des commentaires publics", - "Public event": "Événement public", - "Public feeds": "Flux publics", - "Public iCal Feed": "Flux iCal public", - "Public page": "Page publique", - "Publish": "Publier", - "Published events": "Événements publiés", - "RSS/Atom Feed": "Flux RSS/Atom", - "Read Framasoft’s statement of intent on the Framablog": "Lire la note d’intention de Framasoft sur le Framablog", - "Recap every week": "Récapitulatif hebdomadaire", - "Redirecting to event…": "Redirection vers l'événement…", - "Region": "Région", - "Register": "S'inscrire", - "Register an account on Mobilizon!": "S'inscrire sur Mobilizon !", - "Register for an event by choosing one of your identities": "S'inscrire à un évènement en choisissant une de vos identités", - "Registration is allowed, anyone can register.": "Les inscriptions sont autorisées, n'importe qui peut s'inscrire.", - "Registration is closed.": "Les inscriptions sont fermées.", - "Registration is currently closed.": "Les inscriptions sont actuellement fermées.", - "Registrations are restricted by whitelisting.": "Les inscriptions sont restreintes par liste blanche.", - "Reject": "Rejeter", - "Rejected": "Rejetés", - "Rejected participations": "Participations rejetées", - "Rename": "Renommer", - "Rename resource": "Renommer la resource", - "Reopen": "Réouvrir", - "Reply": "Répondre", - "Report": "Signalement", - "Report this comment": "Signaler ce commentaire", - "Report this event": "Signaler cet évènement", - "Reported": "Signalée", - "Reported by": "Signalée par", - "Reported by someone on {domain}": "Signalé par quelqu'un depuis {domain}", - "Reported by {reporter}": "Signalé par {reporter}", - "Reported identity": "Identité signalée", - "Reports": "Signalements", - "Requests": "Requêtes", - "Resend confirmation email": "Envoyer à nouveau l'email de confirmation", - "Reset my password": "Réinitialiser mon mot de passe", - "Resolved": "Résolu", - "Resource provided is not an URL": "La ressource fournie n'est pas une URL", - "Resources": "Ressources", - "Role": "Rôle", - "Save": "Enregistrer", - "Save draft": "Enregistrer le brouillon", - "Search": "Rechercher", - "Search events, groups, etc.": "Rechercher des évènements, des groupes, etc.", - "Search results: \"{search}\"": "Résultats de recherche : « {search} »", - "Searching…": "Recherche en cours…", - "Select a timezone": "Selectionnez un fuseau horaire", - "Send email": "Envoyer un email", - "Send me an email to reset my password": "Envoyez-moi un email pour réinitialiser mon mot de passe", - "Send me the confirmation email once again": "Envoyez-moi l'email de confirmation encore une fois", - "Send the report": "Envoyer le signalement", - "Set an URL to a page with your own terms.": "Entrez une URL vers une page web avec vos propres conditions d'utilisation.", - "Settings": "Paramètres", - "Share this event": "Partager l'évènement", - "Show map": "Afficher la carte", - "Show remaining number of places": "Afficher le nombre de places restantes", - "Show the time when the event begins": "Afficher l'heure de début de l'évènement", - "Show the time when the event ends": "Afficher l'heure de fin de l'évènement", - "Sign up": "S'enregistrer", - "Software to the people": "Des logiciels pour les gens", - "Starts on…": "Débute le…", - "Status": "Statut", - "Statut": "Statut", - "Street": "Rue", - "Task lists": "Listes de tâches", - "Tentative: Will be confirmed later": "Provisoire : sera confirmé plus tard", - "Terms": "Conditions d'utilisation", - "Text": "Texte", - "The account's email address was changed. Check your emails to verify it.": "L'adresse email du compte a été modifiée. Vérifiez vos emails pour confirmer le changement.", - "The actual number of participants may differ, as this event is hosted on another instance.": "Le nombre réel de participant⋅e⋅s peut être différent, car cet événement provient d'une autre instance.", - "The content came from another server. Transfer an anonymous copy of the report?": "Le contenu provient d'une autre instance. Transférer une copie anonyme du signalement ?", - "The current identity doesn't have any permission on this event. You should probably change it.": "L'identité actuelle n'a pas de permissions sur cet évènement. Vous devriez probablement en changer.", - "The current password is invalid": "Le mot de passe actuel est invalide", - "The draft event has been updated": "L'évènement brouillon a été mis à jour", - "The event has been created as a draft": "L'évènement a été créé en tant que brouillon", - "The event has been published": "L'évènement a été publié", - "The event has been updated": "L'évènement a été mis à jour", - "The event has been updated and published": "L'évènement a été mis à jour et publié", - "The event organiser has chosen to validate manually participations. Do you want to add a little note to explain why you want to participate to this event?": "L'organisateur⋅ice de l'événement a choisi de valider manuellement les demandes de participation. Voulez-vous ajouter un petit message pour expliquer pourquoi vous souhaitez participer à cet événement ?", - "The event organizer didn't add any description.": "L'organisateur⋅ice de l'évènement n'a pas ajouté de description.", - "The event organizer manually approves participations. Since you've chosen to participate without an account, please explain why you want to participate to this event.": "L'organisateur⋅ice de l'événement valide les participations manuellement. Comme vous avez choisi de participer sans compte, merci d'expliquer pourquoi vous voulez participer à cet événement.", - "The event title will be ellipsed.": "Le titre de l'évènement sera ellipsé.", - "The event will show the group as organizer.": "L'événement affichera le groupe en tant qu'organisateur⋅ice.", - "The new email doesn't seem to be valid": "La nouvelle adresse email ne semble pas être valide", - "The new email must be different": "La nouvelle adresse email doit être différente", - "The new password must be different": "Le nouveau mot de passe doit être différent", - "The page you're looking for doesn't exist.": "La page que vous recherchez n'existe pas.", - "The password provided is invalid": "Le mot de passe fourni est invalide", - "The password was successfully changed": "Le mot de passe a été changé avec succès", - "The report will be sent to the moderators of your instance. You can explain why you report this content below.": "Le signalement sera envoyé aux modérateur⋅ices de votre instance. Vous pouvez expliquer pourquoi vous signalez ce contenu ci-dessous.", - "The user account you're trying to login as has not been confirmed yet. Check your email inbox and eventually your spam folder.": "Le compte utilisateur avec lequel vous essayez de vous connectez n'a pas été confirmé. Vérifiez la boite de réception de votre adresse email et éventuellement le dossier des messages indésirables.", - "The {default_terms} will be used. They will be translated in the user's language.": "Les {default_terms} seront utilisées. Elles seront traduites dans la langue de l'utilisateur⋅ice.", - "There are {participants} participants.": "Il n'y a qu'un⋅e participant⋅e. | Il y a {participants} participant⋅es.", - "There will be no way to recover your data.": "Il n'y aura aucun moyen de récupérer vos données.", - "These events may interest you": "Ces évènements peuvent vous intéresser", - "This Mobilizon instance and this event organizer allows anonymous participations, but requires validation through email confirmation.": "Cette instance Mobilizon et l'organisateur⋅ice de l'événement autorise les participations anonymes, mais requiert une validation à travers une confirmation par email.", - "This email is already registered as participant for this event": "Cet email est déjà enregistré comme participant⋅e pour cet événement", - "This identity is not a member of any group.": "Cette identité n'est membre d'aucun groupe.", - "This information is saved only on your computer. Click for details": "Cette information est sauvegardée uniquement sur votre appareil. Cliquez pour plus de details", - "This installation (called “instance“) can easily {interconnect}, thanks to {protocol}.": "Cette installation (appelée “instance“) peut facilement {interconnect}, grâce à {protocol}.", - "This instance isn't opened to registrations, but you can register on other instances.": "Cette instance n'autorise pas les inscriptions, mais vous pouvez vous enregistrer sur d'autres instances.", - "This is a demonstration site to test the beta version of Mobilizon.": "Ceci est un site de démonstration permettant de tester la version bêta de Mobilizon.", - "This will delete / anonymize all content (events, comments, messages, participations…) created from this identity.": "Cela supprimera / anonymisera tout le contenu (évènements, commentaires, messages, participations…) créés avec cette identité.", - "Timezone": "Fuseau horaire", - "Timezone detected as {timezone}.": "Fuseau horaire détecté en tant que {timezone}.", - "Title": "Titre", - "To achieve your registration, please create a first identity profile.": "Pour finir votre inscription, veuillez créer un premier profil.", - "To change the world, change the software": "Changer de logiciel pour changer le monde", - "To confirm, type your event title \"{eventTitle}\"": "Pour confirmer, entrez le titre de l'évènement « {eventTitle} »", - "To confirm, type your identity username \"{preferredUsername}\"": "Pour confirmer, entrez le nom de l’identité « {preferredUsername} »", - "Transfer to {outsideDomain}": "Transférer à {outsideDomain}", - "Type": "Type", - "URL": "URL", - "Unfortunately, this instance isn't opened to registrations": "Malheureusement, cette instance n'est pas ouverte aux inscriptions", - "Unfortunately, your participation request was rejected by the organizers.": "Malheureusement, votre demande de participation a été refusée par les organisateur⋅ices.", - "Unknown": "Inconnu", - "Unknown actor": "Acteur inconnu", - "Unknown error.": "Erreur inconnue.", - "Unsaved changes": "Modifications non enregistrées", - "Unset group": "Déselectionner le groupe", - "Upcoming": "À venir", - "Upcoming events": "Événements à venir", - "Update event {name}": "Mettre à jour l'évènement {name}", - "Update my event": "Mettre à jour mon évènement", - "Updated": "Mis à jour", - "Username": "Pseudo", - "Users": "Utilisateur⋅ice⋅s", - "View a reply": "Aucune réponse | Voir une réponse | Voir {totalReplies} réponses", - "View all conversations": "Voir toutes les conversations", - "View all resources": "Voir toutes les resources", - "View all todos": "Voir tous les todos", - "View all upcoming events": "Voir tous les événements à venir", - "View event page": "Voir la page de l'évènement", - "View everything": "Voir tout", - "View page on {hostname} (in a new window)": "Voir la page sur {hostname} (dans une nouvelle fenêtre)", - "Visible everywhere on the web (public)": "Visible partout sur le web (public)", - "Waiting for organization team approval.": "En attente d'approbation par l'organisation.", - "Waiting list": "Liste d'attente", - "Warning": "Attention", - "We just sent an email to {email}": "Nous venons d'envoyer un email à {email}", - "We want to develop a <b>digital common</b>, that everyone can make their own, which respects <b>privacy and activism by design</b>.": "Nous voulons développer un <b>commun numérique</b>, que tout le monde pourra s’approprier, conçu dans <b>le respect de la vie privée et de l’action militante</b>.", - "We will redirect you to your instance in order to interact with this event": "Nous vous redirigerons vers votre instance pour interagir avec cet événement", - "We won’t change the world from Facebook. The tool we dream of, surveillance capitalism corporations won’t develop it, as they couldn’t profit from it. This is an opportunity to build something better, by taking another approach.": "On ne changera pas le monde depuis Facebook. L’outil dont nous rêvons, les entreprises du capitalisme de surveillance sont incapables de le produire, car elles ne sauraient pas en tirer profit. C’est l’occasion de faire mieux qu’elles, en faisant autrement.", - "We'll send you an email one hour before the event begins, to be sure you won't forget about it.": "Nous vous enverrons un email une heure avant que l'événement débute, pour être sûr que vous ne l'oubliez pas.", - "We'll use your timezone settings to send a recap of the morning of the event.": "Nous prendrons en compte votre fuseau horaire pour vous envoyer un récapitulatif de vos événements le matin.", - "Website": "Site web", - "Website / URL": "Site web / URL", - "Welcome back {username}!": "Bon retour {username} !", - "Welcome back!": "Bon retour !", - "Welcome on your administration panel": "Bienvenue sur votre espace d'administration", - "Welcome to Mobilizon, {username}!": "Bienvenue sur Mobilizon, {username} !", - "Who can view this event and participate": "Qui peut voir cet évènement et y participer", - "World map": "Carte mondiale", - "Write something…": "Écrivez quelque chose…", - "You and one other person are going to this event": "Vous êtes le ou la seul⋅e à vous rendre à cet évènement | Vous et une autre personne vous rendez à cet évènement | Vous et {approved} autres personnes vous rendez à cet évènement.", - "You are already a participant of this event.": "Vous participez déjà à cet évènement.", - "You are already logged-in.": "Vous êtes déjà connecté.", - "You are participating in this event anonymously": "Vous participez à cet événement anonymement", - "You are participating in this event anonymously but didn't confirm participation": "Vous participez à cet événement anonymement mais vous n'avez pas confirmé votre participation", - "You can add tags by hitting the Enter key or by adding a comma": "Vous pouvez ajouter des tags en appuyant sur la touche Entrée ou bien en ajoutant une virgule", - "You can pick your timezone into your preferences.": "Vous pouvez choisir votre fuseau horaire dans vos préférences.", - "You can try another search term or drag and drop the marker on the map": "Vous pouvez essayer avec d'autres termes de recherche ou bien glisser et déposer le marqueur sur la carte", - "You can't remove your last identity.": "Vous ne pouvez pas supprimer votre dernière identité.", - "You don't follow any instances yet.": "Vous ne suivez aucune instance pour le moment.", - "You have been disconnected": "Vous avez été déconnecté⋅e", - "You have been invited by {invitedBy} to the following group:": "Vous avez été invité par {invitedBy} à rejoindre le groupe suivant :", - "You have cancelled your participation": "Vous avez annulé votre participation", - "You have one event in {days} days.": "Vous n'avez pas d'évènements dans {days} jours | Vous avez un évènement dans {days} jours. | Vous avez {count} évènements dans {days} jours", - "You have one event today.": "Vous n'avez pas d'évenement aujourd'hui | Vous avez un évènement aujourd'hui. | Vous avez {count} évènements aujourd'hui", - "You have one event tomorrow.": "Vous n'avez pas d'évènement demain | Vous avez un évènement demain. | Vous avez {count} évènements demain", - "You may also ask to {resend_confirmation_email}.": "Vous pouvez aussi demander à {resend_confirmation_email}.", - "You need to create the group before you create an event.": "Vous devez créer le groupe avant de créer l'événement.", - "You need to login.": "Vous devez vous connecter.", - "You will be redirected to the original instance": "Vous allez être redirigé⋅e vers l'instance d'origine", - "You wish to participate to the following event": "Vous souhaitez participer à l'événement suivant", - "You'll get a weekly recap every Monday for upcoming events, if you have any.": "Vous recevrez un récapitulatif hebdomadaire chaque lundi pour les événements de la semaine, si vous en avez.", - "You'll receive a confirmation email.": "Vous recevrez un email de confirmation.", - "Your account has been successfully deleted": "Votre compte a été supprimé avec succès", - "Your account has been validated": "Votre compte a été validé", - "Your account is being validated": "Votre compte est en cours de validation", - "Your account is nearly ready, {username}": "Votre compte est presque prêt, {username}", - "Your current email is {email}. You use it to log in.": "Votre adresse e-mail actuelle est {email}. Vous l'utilisez pour vous connecter.", - "Your email has been changed": "Votre adresse email a bien été modifiée", - "Your email is being changed": "Votre adresse email est en train d'être modifiée", - "Your email is not whitelisted, you can't register.": "Votre email n'est pas sur la liste blanche, vous ne pouvez pas vous inscrire.", - "Your email will only be used to confirm that you're a real person and send you eventual updates for this event. It will NOT be transmitted to other instances or to the event organizer.": "Votre email sera uniquement utilisé pour confirmer que vous êtes bien une personne réelle et vous envoyer des éventuelles mises à jour pour cet événement. Il ne sera PAS transmis à d'autres instances ou à l'organisateur de l'événement.", - "Your federated identity": "Votre identité fédérée", - "Your federated identity profile@instance": "Votre identité fédérée profil@instance", - "Your local administrator resumed its policy:": "Votre administrateur⋅ice local a résumé sa politique ainsi :", - "Your participation has been confirmed": "Votre participation a été confirmée", - "Your participation has been rejected": "Votre participation a été rejettée", - "Your participation has been requested": "Votre participation a été demandée", - "Your participation has been validated": "Votre participation a été validée", - "Your participation is being validated": "Votre participation est en cours de validation", - "Your participation status has been changed": "Le statut de votre participation a été mis à jour", - "Your timezone is currently set to {timezone}.": "Votre fuseau horaire est actuellement défini à {timezone}.", - "[This comment has been deleted]": "[Ce commentaire a été supprimé]", - "[deleted]": "[supprimé]", - "a decentralised federation protocol": "un protocole de fédération décentralisée", - "as {identity}": "en tant que {identity}", - "default Mobilizon terms": "conditions d'utilisation par défaut de Mobilizon.org", - "e.g. 10 Rue Jangot": "par exemple : 10 Rue Jangot", - "firstDayOfWeek": "1", - "iCal Feed": "Flux iCal", - "interconnect with others like it": "s’interconnecter simplement avec d’autres", - "its source code is public": "son code source est public", - "on our blog": "sur notre blog", - "profile@instance": "profil@instance", - "resend confirmation email": "réenvoyer l'email de confirmation", - "respect of the fundamental freedoms": "le respect des libertés fondamentales", - "with another identity…": "avec une autre identité…", - "{approved} / {total} seats": "{approved} / {total} places", - "{count} participants": "Aucun⋅e participant⋅e | Un⋅e participant⋅e | {count} participant⋅e⋅s", - "{count} requests waiting": "Une demande en attente|{count} demandes en attente", - "{going}/{capacity} available places": "Pas de places restantes|{going}/{capacity} places restantes", - "{license} guarantees {respect} of the people who will use it. Since {source}, anyone can audit it, which guarantees its transparency.": "{license} garantit {respect} des personnes qui l'utiliseront. Puisque {source}, il est publiquement auditable, ce qui garantit sa transparence.", - "{title} ({count} todos)": "{title} ({count} todos)", - "© The Mobilizon Contributors {date} - Made with Elixir, Phoenix, VueJS & with some love and some weeks": "© Les contributeurs de Mobilizon {date} - Fait avec Elixir, Phoenix, VueJS & et de l'amour et des semaines", - "© The OpenStreetMap Contributors": "© Les Contributeur⋅ices OpenStreetMap" + "(Masked)": "(Masqué)", + "<b>Please do not use it in any real way.</b>": "<b>Merci de ne pas en faire une utilisation réelle.</b>", + "@{group}": "@{group}", + "@{username}": "@{username}", + "@{username} ({role})": "@{username} ({role})", + "A user-friendly, emancipatory and ethical tool for gathering, organising, and mobilising.": "Un outil convivial, émancipateur et éthique pour se rassembler, s'organiser et se mobiliser.", + "A validation email was sent to {email}": "Un email de validation a été envoyé à {email}", + "Abandon edition": "Abandonner la modification", + "About": "À propos", + "About Mobilizon": "À propos de Mobilizon", + "About this event": "À propos de cet évènement", + "About this instance": "À propos de cette instance", + "Accept": "Accepter", + "Accepted": "Accepté", + "Account": "Compte", + "Actor": "Acteur", + "Add": "Ajouter", + "Add a group": "Ajouter un groupe", + "Add a note": "Ajouter une note", + "Add a todo": "Ajouter un todo", + "Add an address": "Ajouter une adresse", + "Add an instance": "Ajouter une instance", + "Add some tags": "Ajouter des tags", + "Add to my calendar": "Ajouter à mon agenda", + "Additional comments": "Commentaires additionnels", + "Admin": "Admin", + "Admin settings": "Paramètres administrateur", + "Admin settings successfully saved.": "Les paramètres administrateur ont bien été sauvegardés.", + "Administration": "Administration", + "All group members and other eventual server admins will still be able to view this information.": "Tous les membres du groupes et les administrateur·ices d'éventuels autres serveurs seront toujours en capacité de voir cette information.", + "All the places have already been taken": "Toutes les places ont été prises|Une place est encore disponible|{places} places sont encore disponibles", + "Allow all comments": "Autoriser tous les commentaires", + "Allow registrations": "Autoriser les inscriptions", + "An error has occurred.": "Une erreur est survenue.", + "Anonymous participant": "Participant⋅e anonyme", + "Anonymous participants will be asked to confirm their participation through e-mail.": "Les participants anonymes devront confirmer leur participation par email.", + "Anonymous participations": "Participations anonymes", + "Approve": "Approuver", + "Are you really sure you want to delete your whole account? You'll lose everything. Identities, settings, events created, messages and participations will be gone forever.": "Êtes-vous vraiment certain⋅e de vouloir supprimer votre compte ? Vous allez tout perdre. Identités, paramètres, événements créés, messages et participations disparaîtront pour toujours.", + "Are you sure you want to <b>delete</b> this comment? This action cannot be undone.": "Êtes-vous certain⋅e de vouloir <b>supprimer</b> ce commentaire ? Cette action ne peut pas être annulée.", + "Are you sure you want to <b>delete</b> this event? This action cannot be undone. You may want to engage the conversation with the event creator or edit its event instead.": "Êtes-vous certain⋅e de vouloir <b>supprimer</b> cet évènement ? Cette action n'est pas réversible. Vous voulez peut-être engager la conversation avec le créateur de l'évènement ou bien modifier son évènement à la place.", + "Are you sure you want to cancel the event creation? You'll lose all modifications.": "Étes-vous certain⋅e de vouloir annuler la création de l'évènement ? Vous allez perdre toutes vos modifications.", + "Are you sure you want to cancel the event edition? You'll lose all modifications.": "Êtes-vous certain⋅e de vouloir annuler la modification de l'évènement ? Vous allez perdre toutes vos modifications.", + "Are you sure you want to cancel your participation at event \"{title}\"?": "Êtes-vous certain⋅e de vouloir annuler votre participation à l'évènement « {title} » ?", + "Are you sure you want to delete this event? This action cannot be reverted.": "Êtes-vous certain⋅e de vouloir supprimer cet évènement ? Cette action ne peut être annulée.", + "Assigned to": "Assigné à", + "Avatar": "Avatar", + "Back to previous page": "Retour à la page précédente", + "Before you can login, you need to click on the link inside it to validate your account": "Avant que vous puissiez vous enregistrer, vous devez cliquer sur le lien à l'intérieur pour valider votre compte", + "Bold": "Gras", + "By @{group}": "Par @{group}", + "By @{username}": "Par @{username}", + "By @{username} and @{group}": "Par @{username} et @{group}", + "By {username} and {group}": "Par {username} et {group}", + "Cancel": "Annuler", + "Cancel anonymous participation": "Annuler ma participation anonyme", + "Cancel creation": "Annuler la création", + "Cancel edition": "Annuler la modification", + "Cancel my participation request…": "Annuler ma demande de participation…", + "Cancel my participation…": "Annuler ma participation…", + "Cancelled: Won't happen": "Annulé : N'aura pas lieu", + "Category": "Catégorie", + "Change": "Modifier", + "Change my email": "Changer mon adresse e-mail", + "Change my identity…": "Changer mon identité…", + "Change my password": "Modifier mon mot de passe", + "Change password": "Modifier mot de passe", + "Clear": "Effacer", + "Click to select": "Cliquez pour sélectionner", + "Click to upload": "Cliquez pour uploader", + "Close": "Fermé", + "Close comments for all (except for admins)": "Fermer les commentaires à tout le monde (excepté les administrateur⋅ices)", + "Closed": "Fermé", + "Collections": "Collections", + "Comment deleted": "Commentaire supprimé", + "Comment from @{username} reported": "Commentaire de @{username} signalé", + "Comments": "Commentaires", + "Comments have been closed.": "Les commentaires sont fermés.", + "Comments on the event page": "Commentaires sur la page de l'événement", + "Confirm my participation": "Confirmer ma participation", + "Confirm my particpation": "Confirmer ma participation", + "Confirmed: Will happen": "Confirmé : aura lieu", + "Contact": "Contact", + "Continue editing": "Continuer la modification", + "Conversations": "Conversations", + "Country": "Pays", + "Create": "Créer", + "Create a calc": "Créer un calc", + "Create a new conversation": "Créer une nouvelle conversation", + "Create a new event": "Créer un nouvel évènement", + "Create a new group": "Créer un nouveau groupe", + "Create a new identity": "Créer une nouvelle identité", + "Create a new list": "Créer une nouvelle liste", + "Create a new task list": "Créer une nouvelle liste de tâches", + "Create a pad": "Créer un pad", + "Create a visioconference": "Créer une visio-conférence", + "Create and manage several identities from the same account": "Créer et gérer plusieurs identités sur un même compte", + "Create folder": "Créer un dossier", + "Create group": "Créer un groupe", + "Create my event": "Créer mon évènement", + "Create my group": "Créer mon groupe", + "Create my profile": "Créer mon profil", + "Create resource": "Créer une resource", + "Create token": "Créer un jeton", + "Create, edit or delete events": "Créer, modifier ou supprimer des évènements", + "Creator": "Créateur⋅ice", + "Current identity has been changed to {identityName} in order to manage this event.": "L'identité actuelle a été changée à {identityName} pour pouvoir gérer cet évènement.", + "Current page": "Page courante", + "Custom": "Personnel", + "Custom URL": "URL personnalisée", + "Custom text": "Texte personnalisé", + "Dashboard": "Tableau de bord", + "Date": "Date", + "Date and time": "Date et heure", + "Date and time settings": "Paramètres de date et d'heure", + "Date parameters": "Paramètres de date", + "Decline": "Refuser", + "Default": "Default", + "Default Mobilizon.org terms": "Conditions d'utilisation par défaut de Mobilizon.org", + "Delete": "Supprimer", + "Delete Comment": "Supprimer le commentaire", + "Delete Event": "Supprimer l'évènement", + "Delete account": "Suppression du compte", + "Delete event": "Supprimer un évènement", + "Delete everything": "Tout supprimer", + "Delete my account": "Supprimer mon compte", + "Delete this identity": "Supprimer cette identité", + "Delete your identity": "Supprimer votre identité", + "Delete {eventTitle}": "Supprimer {eventTitle}", + "Delete {preferredUsername}": "Supprimer {preferredUsername}", + "Deleting comment": "Suppression du commentaire en cours", + "Deleting event": "Suppression de l'évènement", + "Deleting my account will delete all of my identities.": "Supprimer mon compte supprimera toutes mes identités.", + "Deleting your Mobilizon account": "Supprimer votre compte Mobilizon", + "Description": "Description", + "Didn't receive the instructions ?": "Vous n'avez pas reçu les instructions ?", + "Discussions": "Discussions", + "Display name": "Nom affiché", + "Display participation price": "Afficher un prix de participation", + "Domain": "Domaine", + "Don't show @{organizer} as event host alongside @{group}": "Ne pas afficher @{organizer} comme organisateur⋅ice de l'événement avec @{group}", + "Draft": "Brouillon", + "Drafts": "Brouillons", + "Due on": "Prévu pour le", + "Duplicate": "Dupliquer", + "Edit": "Modifier", + "Edit biography": "Éditer la biographie", + "Eg: Stockholm, Dance, Chess…": "Par exemple : Lyon, Danse, Bridge…", + "Either on the {instance} instance or on another instance.": "Sur l'instance {instance} ou bien sur une autre instance.", + "Either the account is already validated, either the validation token is incorrect.": "Soit le compte est déjà validé, soit le jeton de validation est incorrect.", + "Either the email has already been changed, either the validation token is incorrect.": "Soit l'adresse email a déjà été modifiée, soit le jeton de validation est incorrect.", + "Either the participation has already been validated, either the validation token is incorrect.": "Soit la participation a déjà été validée, soit le jeton de validation est incorrect.", + "Email": "Email", + "Ends on…": "Se termine le…", + "Enjoy discovering Mobilizon!": "Amusez-vous bien en découvrant Mobilizon !", + "Enter the link URL": "Entrez l'URL du lien", + "Enter your own terms. HTML tags allowed. Mobilizon.org's terms are provided as template.": "Entrez vos propres conditions d'utilisations. Les balises HTML sont autorisées. Les conditions d'utilisation par défaut de Mobilizon.org sont fournies comme modèle.", + "Error while changing email": "Erreur lors de la modification de l'adresse email", + "Error while communicating with the server.": "Erreur de communication avec le serveur.", + "Error while saving report.": "Erreur lors de l'enregistrement du signalement.", + "Error while validating account": "Erreur lors de la validation du compte", + "Error while validating participation": "Erreur lors de la validation de la participation", + "Event": "Événement", + "Event already passed": "Événement déjà passé", + "Event cancelled": "Événement annulé", + "Event creation": "Création d'évènement", + "Event edition": "Modification d'évènement", + "Event list": "Liste d'évènements", + "Event not found.": "Événement non trouvé.", + "Event page settings": "Paramètres de la page de l'évènement", + "Event to be confirmed": "Événement à confirmer", + "Event {eventTitle} deleted": "Événement {eventTitle} supprimé", + "Event {eventTitle} reported": "Événement {eventTitle} signalé", + "Events": "Événements", + "Ex: someone@mobilizon.org": "Ex : une_personne@mobilizon.org", + "Ex: test.mobilizon.org": "Ex : test.mobilizon.org", + "Exclude": "Exclure", + "Explore": "Explorer", + "Failed to save admin settings": "Échec de la sauvegarde des paramètres administrateur", + "Featured events": "Événements à la une", + "Features": "Fonctionnalités", + "Federation": "Fédération", + "Find an address": "Trouver une adresse", + "Find an instance": "Trouver une instance", + "Followed by {count} persons": "Suivi par {count} personnes", + "Followers": "Abonnés", + "Followings": "Abonnements", + "For instance: London, Taekwondo, Architecture…": "Par exemple : Lyon, Taekwondo, Architecture…", + "Forgot your password ?": "Mot de passe oublié ?", + "From a birthday party with friends and family to a march for climate change, right now, our gatherings are <b>trapped inside the tech giants’ platforms</b>. How can we organize, how can we click “Attend,” without <b>providing private data</b> to Facebook or <b>locking ourselves up</b> inside MeetUp?": "De l’anniversaire entre ami·e·s à une marche pour le climat, aujourd’hui, les bonnes raisons de se rassembler sont <b>captées par les géants du web</b>. Comment s’organiser, comment cliquer sur « je participe » sans <b>livrer des données intimes</b> à Facebook ou<b> s’enfermer</b> dans MeetUp ?", + "From the {startDate} at {startTime} to the {endDate}": "Du {startDate} à {startTime} jusqu'au {endDate}", + "From the {startDate} at {startTime} to the {endDate} at {endTime}": "Du {startDate} à {startTime} au {endDate} à {endTime}", + "From the {startDate} to the {endDate}": "Du {startDate} au {endDate}", + "Gather ⋅ Organize ⋅ Mobilize": "Rassembler ⋅ Organiser ⋅ Mobiliser", + "General": "Général", + "General information": "Informations générales", + "Getting location": "Récupération de la position", + "Go": "Allons-y", + "Going as {name}": "En tant que {name}", + "Group": "Groupe", + "Group List": "Liste de groupes", + "Group Members": "Membres du groupe", + "Group full name": "Nom complet du groupe", + "Group name": "Nom du groupe", + "Group {displayName} created": "Groupe {displayName} créé", + "Groups": "Groupes", + "Headline picture": "Image à la une", + "Hide replies": "Masquer les réponses", + "Hide the organizer": "Masquer l'organisateur⋅ice", + "Home": "Accueil", + "I create an identity": "Je crée une identité", + "I don't have a Mobilizon account": "Je n'ai pas de compte Mobilizon", + "I have a Mobilizon account": "J'ai un compte Mobilizon", + "I have an account on another Mobilizon instance.": "J'ai un compte sur une autre instance Mobilizon.", + "I participate": "Je participe", + "I want to allow people to participate without an account.": "Je veux permettre aux gens de participer sans avoir un compte.", + "I want to approve every participation request": "Je veux approuver chaque demande de participation", + "Identity {displayName} created": "Identité {displayName} créée", + "Identity {displayName} deleted": "Identité {displayName} supprimée", + "Identity {displayName} updated": "Identité {displayName} mise à jour", + "If an account with this email exists, we just sent another confirmation email to {email}": "Si un compte avec un tel email existe, nous venons juste d'envoyer un nouvel email de confirmation à {email}", + "If this identity is the only administrator of some groups, you need to delete them before being able to delete this identity.": "Si cette identité est la seule administratrice de certains groupes, vous devez les supprimer avant de pouvoir supprimer cette identité.", + "If you want, you may send a message to the event organizer here.": "Si vous le désirez, vous pouvez laisser un message pour l'organisateur⋅ice de l'événement ci-dessous.", + "Important event updates": "Mises à jour importantes des événements", + "Impossible to login, your email or password seems incorrect.": "Impossible de se connecter, votre email ou bien votre mot de passe semble incorrect.", + "In the meantime, please consider that the software is not (yet) finished. More information {onBlog}.": "D'ici là, veuillez considérer que le logiciel n'est pas (encore) fini. Plus d'informations {onBlog}.", + "Installing Mobilizon will allow communities to free themselves from the services of tech giants by creating <b>their own event platform</b>.": "Installer Mobilizon permettra à des collectifs de s’émanciper des outils des géants du web en créant <b>leur propre plateforme d’évènements</b>.", + "Instance Description": "Description de l'instance", + "Instance Name": "Nom de l'instance", + "Instance Terms": "Conditions générales de l'instance", + "Instance Terms Source": "Source des conditions d'utilisation de l'instance", + "Instance Terms URL": "URL des conditions générales de l'instance", + "Instance settings": "Paramètres de l'instance", + "Instances": "Instances", + "Invite a new member": "Inviter un nouveau membre", + "Invite member": "Inviter un·e membre", + "Italic": "Italique", + "Join {instance}, a Mobilizon instance": "Rejoignez {instance}, une instance Mobilizon", + "Last published event": "Dernier évènement publié", + "Last week": "La semaine dernière", + "Latest posts": "Derniers messages publics", + "Learn more": "En apprendre plus", + "Learn more about Mobilizon": "En apprendre plus à propos de Mobilizon", + "Leave event": "Annuler ma participation à l'évènement", + "Leaving event \"{title}\"": "Annuler ma participation à l'évènement", + "Let's create a new common": "Créons un nouveau Common", + "License": "Licence", + "Like title update, start or end date change, event being confirmed or cancelled.": "Comme le changement du titre de l'événement, de sa date de début ou de fin, ou bien qu'il soit confirmé ou bien annulé.", + "Limited number of places": "Nombre de places limité", + "List title": "Titre de la liste", + "Load more": "Voir plus", + "Locality": "Commune", + "Location": "Lieu", + "Log in": "Se connecter", + "Log out": "Se déconnecter", + "Login": "Se connecter", + "Login on Mobilizon!": "Se connecter sur Mobilizon !", + "Login on {instance}": "Se connecter sur {instance}", + "Manage participations": "Gérer les participations", + "Mark as resolved": "Marquer comme résolu", + "Members": "Membres", + "Message": "Message", + "Mobilizon is a federated network. You can interact with this event from a different server.": "Mobilizon est un réseau fédéré. Vous pouvez interagir avec cet événement depuis un serveur différent.", + "Mobilizon is a free/libre software that will allow communities to create <b>their own spaces</b> to publish events in order to better emancipate themselves from tech giants.": "Mobilizon est un logiciel libre qui permettra à des communautés de <b>créer leurs propres espaces</b> de publication d’évènements, afin de mieux s’émanciper des géants du web.", + "Mobilizon is under development, we will add new features to this site during regular updates, until the release of <b>version 1 of the software in the first half of 2020</b>.": "Mobilizon est en cours de développement, nous ajouterons de nouvelles fonctionnalités à ce site lors de mises à jour régulières, jusqu'à la publication de <b>la version 1 du logiciel au premier semestre 2020</b>.", + "Mobilizon’s licence": "La licence de Mobilizon", + "Moderated comments (shown after approval)": "Commentaires modérés (affichés après validation)", + "Moderation": "Modération", + "Moderation log": "Journaux de modération", + "Move": "Déplacer", + "My account": "Mon compte", + "My events": "Mes évènements", + "My groups": "Mes groupes", + "My identities": "Mes identités", + "Name": "Nom", + "New conversation": "Nouvelle conversation", + "New email": "Nouvelle adresse e-mail", + "New folder": "Nouveau dossier", + "New link": "Nouveau lien", + "New note": "Nouvelle note", + "New password": "Nouveau mot de passe", + "New profile": "Nouveau profil", + "Next page": "Page suivante", + "No actors found": "Aucun acteur trouvé", + "No address defined": "Aucune adresse définie", + "No closed reports yet": "Aucun signalement fermé pour le moment", + "No comment": "Pas de commentaire", + "No comments yet": "Pas encore de commentaires", + "No end date": "Pas de date de fin", + "No events found": "Aucun évènement trouvé", + "No group found": "Aucun groupe trouvé", + "No groups found": "Aucun groupe trouvé", + "No instance follows your instance yet.": "Aucune instance ne suit votre instance pour le moment.", + "No instance to approve|Approve instance|Approve {number} instances": "Aucune instance à approuver|Approuver une instance|Approuver {number} instances", + "No instance to reject|Reject instance|Reject {number} instances": "Aucune instance à rejeter|Rejeter une instance|Rejeter {number} instances", + "No instance to remove|Remove instance|Remove {number} instances": "Pas d'instances à supprimer|Supprimer une instance|Supprimer {number} instances", + "No message": "Pas de message", + "No moderation logs yet": "Pas encore de journaux de modération", + "No notification settings yet": "Pas encore de paramètres de notification", + "No one is going to this event": "Personne n'a va encore|Une personne y va|{going} personnes y vont", + "No open reports yet": "Aucun signalement ouvert pour le moment", + "No participant to approve|Approve participant|Approve {number} participants": "Aucun⋅e participant⋅e à valider|Valider le ou la participant⋅e|Valider {number} participant⋅es", + "No participant to reject|Reject participant|Reject {number} participants": "Aucun⋅e participant⋅e à refuser|Refuser le ou la participant⋅e|Refuser {number} participant⋅es", + "No preferences yet": "Pas encore de préférences", + "No public upcoming events": "Aucun événement public à venir", + "No resolved reports yet": "Aucun signalement résolu pour le moment", + "No resources selected": "Aucune ressource sélectionnée|Une ressource sélectionnée|{count} ressources sélectionnées", + "No results for \"{queryText}\"": "Pas de résultats pour « {queryText} »", + "No user account with this email was found. Maybe you made a typo?": "Aucun compte utilisateur trouvé pour cet email. Peut-être avez-vous fait une faute de frappe ?", + "Notes": "Notes", + "Notification before the event": "Notification avant l'événement", + "Notification on the day of the event": "Notification le jour de l'événement", + "Notifications": "Notifications", + "Number of places": "Nombre de places", + "OK": "OK", + "Old password": "Ancien mot de passe", + "On {date}": "Le {date}", + "On {date} ending at {endTime}": "Le {date}, se terminant à {endTime}", + "On {date} from {startTime} to {endTime}": "Le {date} de {startTime} à {endTime}", + "On {date} starting at {startTime}": "Le {date} à partir de {startTime}", + "One person is going": "Personne n'y va | Une personne y va | {approved} personnes y vont", + "Ongoing tasks": "Tâches en cours", + "Only accessible through link and search (private)": "Uniquement accessibles par lien et la recherche (privé)", + "Only alphanumeric characters and underscores are supported.": "Seuls les caractères alphanumériques et les tirets bas sont acceptés.", + "Open": "Ouvert", + "Opened reports": "Signalements ouverts", + "Or": "Ou", + "Organized": "Organisés", + "Organized by {name}": "Organisé par {name}", + "Organizer": "Organisateur⋅ice", + "Organizers": "Organisateur⋅ices", + "Other": "Autre", + "Other software may also support this.": "D'autres logiciels peuvent également supporter cette fonctionnalité.", + "Otherwise this identity will just be removed from the group administrators.": "Sinon cette identité sera juste supprimée des administrateur⋅ices du groupe.", + "Page": "Page", + "Page limited to my group (asks for auth)": "Accès limité à mon groupe (demande authentification)", + "Page not found": "Page non trouvée", + "Participant": "Participant⋅e", + "Participant already was rejected.": "Le ou la participant⋅e a déjà été refusé⋅e.", + "Participant has already been approved as participant.": "Le ou la participant⋅e a déjà été approuvé⋅e en tant que participant⋅e.", + "Participants": "Participant⋅e⋅s", + "Participate": "Participer", + "Participate using your email address": "Participer en utilisant votre adresse email", + "Participation approval": "Validation des participations", + "Participation confirmation": "Confirmation de votre participation", + "Participation requested!": "Participation demandée !", + "Password": "Mot de passe", + "Password (confirmation)": "Mot de passe (confirmation)", + "Password change": "Changement de mot de passe", + "Password reset": "Réinitialisation du mot de passe", + "Past events": "Événements passés", + "Pending": "En attente", + "Pick a group": "Choisissez un groupe", + "Pick an identity": "Choisissez une identité", + "Please check your spam folder if you didn't receive the email.": "Merci de vérifier votre dossier des indésirables si vous n'avez pas reçu l'email.", + "Please contact this instance's Mobilizon admin if you think this is a mistake.": "Veuillez contacter l'administrateur⋅ice de cette instance Mobilizon si vous pensez qu’il s’agit d’une erreur.", + "Please enter your password to confirm this action.": "Merci d'entrer votre mot de passe pour confirmer cette action.", + "Please make sure the address is correct and that the page hasn't been moved.": "Assurez‐vous que l’adresse est correcte et que la page n’a pas été déplacée.", + "Please read the full rules": "Merci de lire les règles complètes", + "Please refresh the page and retry.": "Merci de rafraîchir la page puis réessayer.", + "Please type at least 5 characters": "Merci d'entrer au moins 5 caractères", + "Post a comment": "Ajouter un commentaire", + "Post a public message": "Poster un message public", + "Post a reply": "Envoyer une réponse", + "Postal Code": "Code postal", + "Preferences": "Préférences", + "Previous page": "Page précédente", + "Privacy Policy": "Politique de confidentialité", + "Private event": "Événement privé", + "Private feeds": "Flux privés", + "Profiles": "Profils", + "Public": "Public", + "Public RSS/Atom Feed": "Flux RSS/Atom public", + "Public comment moderation": "Modération des commentaires publics", + "Public event": "Événement public", + "Public feeds": "Flux publics", + "Public iCal Feed": "Flux iCal public", + "Public page": "Page publique", + "Publish": "Publier", + "Published events": "Événements publiés", + "RSS/Atom Feed": "Flux RSS/Atom", + "Read Framasoft’s statement of intent on the Framablog": "Lire la note d’intention de Framasoft sur le Framablog", + "Recap every week": "Récapitulatif hebdomadaire", + "Redirecting to event…": "Redirection vers l'événement…", + "Region": "Région", + "Register": "S'inscrire", + "Register an account on Mobilizon!": "S'inscrire sur Mobilizon !", + "Register for an event by choosing one of your identities": "S'inscrire à un évènement en choisissant une de vos identités", + "Registration is allowed, anyone can register.": "Les inscriptions sont autorisées, n'importe qui peut s'inscrire.", + "Registration is closed.": "Les inscriptions sont fermées.", + "Registration is currently closed.": "Les inscriptions sont actuellement fermées.", + "Registrations are restricted by whitelisting.": "Les inscriptions sont restreintes par liste blanche.", + "Reject": "Rejeter", + "Rejected": "Rejetés", + "Rejected participations": "Participations rejetées", + "Rename": "Renommer", + "Rename resource": "Renommer la resource", + "Reopen": "Réouvrir", + "Reply": "Répondre", + "Report": "Signalement", + "Report this comment": "Signaler ce commentaire", + "Report this event": "Signaler cet évènement", + "Reported": "Signalée", + "Reported by": "Signalée par", + "Reported by someone on {domain}": "Signalé par quelqu'un depuis {domain}", + "Reported by {reporter}": "Signalé par {reporter}", + "Reported identity": "Identité signalée", + "Reports": "Signalements", + "Requests": "Requêtes", + "Resend confirmation email": "Envoyer à nouveau l'email de confirmation", + "Reset my password": "Réinitialiser mon mot de passe", + "Resolved": "Résolu", + "Resource provided is not an URL": "La ressource fournie n'est pas une URL", + "Resources": "Ressources", + "Role": "Rôle", + "Save": "Enregistrer", + "Save draft": "Enregistrer le brouillon", + "Search": "Rechercher", + "Search events, groups, etc.": "Rechercher des évènements, des groupes, etc.", + "Search results: \"{search}\"": "Résultats de recherche : « {search} »", + "Searching…": "Recherche en cours…", + "Select a timezone": "Selectionnez un fuseau horaire", + "Send email": "Envoyer un email", + "Send me an email to reset my password": "Envoyez-moi un email pour réinitialiser mon mot de passe", + "Send me the confirmation email once again": "Envoyez-moi l'email de confirmation encore une fois", + "Send the report": "Envoyer le signalement", + "Set an URL to a page with your own terms.": "Entrez une URL vers une page web avec vos propres conditions d'utilisation.", + "Settings": "Paramètres", + "Share this event": "Partager l'évènement", + "Show map": "Afficher la carte", + "Show remaining number of places": "Afficher le nombre de places restantes", + "Show the time when the event begins": "Afficher l'heure de début de l'évènement", + "Show the time when the event ends": "Afficher l'heure de fin de l'évènement", + "Sign up": "S'enregistrer", + "Software to the people": "Des logiciels pour les gens", + "Starts on…": "Débute le…", + "Status": "Statut", + "Statut": "Statut", + "Street": "Rue", + "Task lists": "Listes de tâches", + "Tentative: Will be confirmed later": "Provisoire : sera confirmé plus tard", + "Terms": "Conditions d'utilisation", + "Text": "Texte", + "The account's email address was changed. Check your emails to verify it.": "L'adresse email du compte a été modifiée. Vérifiez vos emails pour confirmer le changement.", + "The actual number of participants may differ, as this event is hosted on another instance.": "Le nombre réel de participant⋅e⋅s peut être différent, car cet événement provient d'une autre instance.", + "The content came from another server. Transfer an anonymous copy of the report?": "Le contenu provient d'une autre instance. Transférer une copie anonyme du signalement ?", + "The current identity doesn't have any permission on this event. You should probably change it.": "L'identité actuelle n'a pas de permissions sur cet évènement. Vous devriez probablement en changer.", + "The current password is invalid": "Le mot de passe actuel est invalide", + "The draft event has been updated": "L'évènement brouillon a été mis à jour", + "The event has been created as a draft": "L'évènement a été créé en tant que brouillon", + "The event has been published": "L'évènement a été publié", + "The event has been updated": "L'évènement a été mis à jour", + "The event has been updated and published": "L'évènement a été mis à jour et publié", + "The event organiser has chosen to validate manually participations. Do you want to add a little note to explain why you want to participate to this event?": "L'organisateur⋅ice de l'événement a choisi de valider manuellement les demandes de participation. Voulez-vous ajouter un petit message pour expliquer pourquoi vous souhaitez participer à cet événement ?", + "The event organizer didn't add any description.": "L'organisateur⋅ice de l'évènement n'a pas ajouté de description.", + "The event organizer manually approves participations. Since you've chosen to participate without an account, please explain why you want to participate to this event.": "L'organisateur⋅ice de l'événement valide les participations manuellement. Comme vous avez choisi de participer sans compte, merci d'expliquer pourquoi vous voulez participer à cet événement.", + "The event title will be ellipsed.": "Le titre de l'évènement sera ellipsé.", + "The event will show the group as organizer.": "L'événement affichera le groupe en tant qu'organisateur⋅ice.", + "The new email doesn't seem to be valid": "La nouvelle adresse email ne semble pas être valide", + "The new email must be different": "La nouvelle adresse email doit être différente", + "The new password must be different": "Le nouveau mot de passe doit être différent", + "The page you're looking for doesn't exist.": "La page que vous recherchez n'existe pas.", + "The password provided is invalid": "Le mot de passe fourni est invalide", + "The password was successfully changed": "Le mot de passe a été changé avec succès", + "The report will be sent to the moderators of your instance. You can explain why you report this content below.": "Le signalement sera envoyé aux modérateur⋅ices de votre instance. Vous pouvez expliquer pourquoi vous signalez ce contenu ci-dessous.", + "The user account you're trying to login as has not been confirmed yet. Check your email inbox and eventually your spam folder.": "Le compte utilisateur avec lequel vous essayez de vous connectez n'a pas été confirmé. Vérifiez la boite de réception de votre adresse email et éventuellement le dossier des messages indésirables.", + "The {default_terms} will be used. They will be translated in the user's language.": "Les {default_terms} seront utilisées. Elles seront traduites dans la langue de l'utilisateur⋅ice.", + "There are {participants} participants.": "Il n'y a qu'un⋅e participant⋅e. | Il y a {participants} participant⋅es.", + "There will be no way to recover your data.": "Il n'y aura aucun moyen de récupérer vos données.", + "These events may interest you": "Ces évènements peuvent vous intéresser", + "This Mobilizon instance and this event organizer allows anonymous participations, but requires validation through email confirmation.": "Cette instance Mobilizon et l'organisateur⋅ice de l'événement autorise les participations anonymes, mais requiert une validation à travers une confirmation par email.", + "This email is already registered as participant for this event": "Cet email est déjà enregistré comme participant⋅e pour cet événement", + "This identity is not a member of any group.": "Cette identité n'est membre d'aucun groupe.", + "This information is saved only on your computer. Click for details": "Cette information est sauvegardée uniquement sur votre appareil. Cliquez pour plus de details", + "This installation (called “instance“) can easily {interconnect}, thanks to {protocol}.": "Cette installation (appelée “instance“) peut facilement {interconnect}, grâce à {protocol}.", + "This instance isn't opened to registrations, but you can register on other instances.": "Cette instance n'autorise pas les inscriptions, mais vous pouvez vous enregistrer sur d'autres instances.", + "This is a demonstration site to test the beta version of Mobilizon.": "Ceci est un site de démonstration permettant de tester la version bêta de Mobilizon.", + "This will delete / anonymize all content (events, comments, messages, participations…) created from this identity.": "Cela supprimera / anonymisera tout le contenu (évènements, commentaires, messages, participations…) créés avec cette identité.", + "Timezone": "Fuseau horaire", + "Timezone detected as {timezone}.": "Fuseau horaire détecté en tant que {timezone}.", + "Title": "Titre", + "To achieve your registration, please create a first identity profile.": "Pour finir votre inscription, veuillez créer un premier profil.", + "To change the world, change the software": "Changer de logiciel pour changer le monde", + "To confirm, type your event title \"{eventTitle}\"": "Pour confirmer, entrez le titre de l'évènement « {eventTitle} »", + "To confirm, type your identity username \"{preferredUsername}\"": "Pour confirmer, entrez le nom de l’identité « {preferredUsername} »", + "Transfer to {outsideDomain}": "Transférer à {outsideDomain}", + "Type": "Type", + "URL": "URL", + "Unfortunately, this instance isn't opened to registrations": "Malheureusement, cette instance n'est pas ouverte aux inscriptions", + "Unfortunately, your participation request was rejected by the organizers.": "Malheureusement, votre demande de participation a été refusée par les organisateur⋅ices.", + "Unknown": "Inconnu", + "Unknown actor": "Acteur inconnu", + "Unknown error.": "Erreur inconnue.", + "Unsaved changes": "Modifications non enregistrées", + "Unset group": "Déselectionner le groupe", + "Upcoming": "À venir", + "Upcoming events": "Événements à venir", + "Update event {name}": "Mettre à jour l'évènement {name}", + "Update my event": "Mettre à jour mon évènement", + "Updated": "Mis à jour", + "Username": "Pseudo", + "Users": "Utilisateur⋅ice⋅s", + "View a reply": "Aucune réponse | Voir une réponse | Voir {totalReplies} réponses", + "View all conversations": "Voir toutes les conversations", + "View all resources": "Voir toutes les resources", + "View all todos": "Voir tous les todos", + "View all upcoming events": "Voir tous les événements à venir", + "View event page": "Voir la page de l'évènement", + "View everything": "Voir tout", + "View page on {hostname} (in a new window)": "Voir la page sur {hostname} (dans une nouvelle fenêtre)", + "Visible everywhere on the web (public)": "Visible partout sur le web (public)", + "Waiting for organization team approval.": "En attente d'approbation par l'organisation.", + "Waiting list": "Liste d'attente", + "Warning": "Attention", + "We just sent an email to {email}": "Nous venons d'envoyer un email à {email}", + "We want to develop a <b>digital common</b>, that everyone can make their own, which respects <b>privacy and activism by design</b>.": "Nous voulons développer un <b>commun numérique</b>, que tout le monde pourra s’approprier, conçu dans <b>le respect de la vie privée et de l’action militante</b>.", + "We will redirect you to your instance in order to interact with this event": "Nous vous redirigerons vers votre instance pour interagir avec cet événement", + "We won’t change the world from Facebook. The tool we dream of, surveillance capitalism corporations won’t develop it, as they couldn’t profit from it. This is an opportunity to build something better, by taking another approach.": "On ne changera pas le monde depuis Facebook. L’outil dont nous rêvons, les entreprises du capitalisme de surveillance sont incapables de le produire, car elles ne sauraient pas en tirer profit. C’est l’occasion de faire mieux qu’elles, en faisant autrement.", + "We'll send you an email one hour before the event begins, to be sure you won't forget about it.": "Nous vous enverrons un email une heure avant que l'événement débute, pour être sûr que vous ne l'oubliez pas.", + "We'll use your timezone settings to send a recap of the morning of the event.": "Nous prendrons en compte votre fuseau horaire pour vous envoyer un récapitulatif de vos événements le matin.", + "Website": "Site web", + "Website / URL": "Site web / URL", + "Welcome back {username}!": "Bon retour {username} !", + "Welcome back!": "Bon retour !", + "Welcome on your administration panel": "Bienvenue sur votre espace d'administration", + "Welcome to Mobilizon, {username}!": "Bienvenue sur Mobilizon, {username} !", + "Who can view this event and participate": "Qui peut voir cet évènement et y participer", + "World map": "Carte mondiale", + "Write something…": "Écrivez quelque chose…", + "You and one other person are going to this event": "Vous êtes le ou la seul⋅e à vous rendre à cet évènement | Vous et une autre personne vous rendez à cet évènement | Vous et {approved} autres personnes vous rendez à cet évènement.", + "You are already a participant of this event.": "Vous participez déjà à cet évènement.", + "You are already logged-in.": "Vous êtes déjà connecté.", + "You are participating in this event anonymously": "Vous participez à cet événement anonymement", + "You are participating in this event anonymously but didn't confirm participation": "Vous participez à cet événement anonymement mais vous n'avez pas confirmé votre participation", + "You can add tags by hitting the Enter key or by adding a comma": "Vous pouvez ajouter des tags en appuyant sur la touche Entrée ou bien en ajoutant une virgule", + "You can pick your timezone into your preferences.": "Vous pouvez choisir votre fuseau horaire dans vos préférences.", + "You can try another search term or drag and drop the marker on the map": "Vous pouvez essayer avec d'autres termes de recherche ou bien glisser et déposer le marqueur sur la carte", + "You can't remove your last identity.": "Vous ne pouvez pas supprimer votre dernière identité.", + "You don't follow any instances yet.": "Vous ne suivez aucune instance pour le moment.", + "You have been disconnected": "Vous avez été déconnecté⋅e", + "You have been invited by {invitedBy} to the following group:": "Vous avez été invité par {invitedBy} à rejoindre le groupe suivant :", + "You have cancelled your participation": "Vous avez annulé votre participation", + "You have one event in {days} days.": "Vous n'avez pas d'évènements dans {days} jours | Vous avez un évènement dans {days} jours. | Vous avez {count} évènements dans {days} jours", + "You have one event today.": "Vous n'avez pas d'évenement aujourd'hui | Vous avez un évènement aujourd'hui. | Vous avez {count} évènements aujourd'hui", + "You have one event tomorrow.": "Vous n'avez pas d'évènement demain | Vous avez un évènement demain. | Vous avez {count} évènements demain", + "You may also ask to {resend_confirmation_email}.": "Vous pouvez aussi demander à {resend_confirmation_email}.", + "You need to create the group before you create an event.": "Vous devez créer le groupe avant de créer l'événement.", + "You need to login.": "Vous devez vous connecter.", + "You will be redirected to the original instance": "Vous allez être redirigé⋅e vers l'instance d'origine", + "You wish to participate to the following event": "Vous souhaitez participer à l'événement suivant", + "You'll get a weekly recap every Monday for upcoming events, if you have any.": "Vous recevrez un récapitulatif hebdomadaire chaque lundi pour les événements de la semaine, si vous en avez.", + "You'll receive a confirmation email.": "Vous recevrez un email de confirmation.", + "Your account has been successfully deleted": "Votre compte a été supprimé avec succès", + "Your account has been validated": "Votre compte a été validé", + "Your account is being validated": "Votre compte est en cours de validation", + "Your account is nearly ready, {username}": "Votre compte est presque prêt, {username}", + "Your current email is {email}. You use it to log in.": "Votre adresse e-mail actuelle est {email}. Vous l'utilisez pour vous connecter.", + "Your email has been changed": "Votre adresse email a bien été modifiée", + "Your email is being changed": "Votre adresse email est en train d'être modifiée", + "Your email is not whitelisted, you can't register.": "Votre email n'est pas sur la liste blanche, vous ne pouvez pas vous inscrire.", + "Your email will only be used to confirm that you're a real person and send you eventual updates for this event. It will NOT be transmitted to other instances or to the event organizer.": "Votre email sera uniquement utilisé pour confirmer que vous êtes bien une personne réelle et vous envoyer des éventuelles mises à jour pour cet événement. Il ne sera PAS transmis à d'autres instances ou à l'organisateur de l'événement.", + "Your federated identity": "Votre identité fédérée", + "Your federated identity profile@instance": "Votre identité fédérée profil@instance", + "Your local administrator resumed its policy:": "Votre administrateur⋅ice local a résumé sa politique ainsi :", + "Your participation has been confirmed": "Votre participation a été confirmée", + "Your participation has been rejected": "Votre participation a été rejettée", + "Your participation has been requested": "Votre participation a été demandée", + "Your participation has been validated": "Votre participation a été validée", + "Your participation is being validated": "Votre participation est en cours de validation", + "Your participation status has been changed": "Le statut de votre participation a été mis à jour", + "Your timezone is currently set to {timezone}.": "Votre fuseau horaire est actuellement défini à {timezone}.", + "[This comment has been deleted]": "[Ce commentaire a été supprimé]", + "[deleted]": "[supprimé]", + "a decentralised federation protocol": "un protocole de fédération décentralisée", + "as {identity}": "en tant que {identity}", + "default Mobilizon terms": "conditions d'utilisation par défaut de Mobilizon.org", + "e.g. 10 Rue Jangot": "par exemple : 10 Rue Jangot", + "firstDayOfWeek": "1", + "iCal Feed": "Flux iCal", + "interconnect with others like it": "s’interconnecter simplement avec d’autres", + "its source code is public": "son code source est public", + "on our blog": "sur notre blog", + "profile@instance": "profil@instance", + "resend confirmation email": "réenvoyer l'email de confirmation", + "respect of the fundamental freedoms": "le respect des libertés fondamentales", + "with another identity…": "avec une autre identité…", + "{approved} / {total} seats": "{approved} / {total} places", + "{count} participants": "Aucun⋅e participant⋅e | Un⋅e participant⋅e | {count} participant⋅e⋅s", + "{count} requests waiting": "Une demande en attente|{count} demandes en attente", + "{going}/{capacity} available places": "Pas de places restantes|{going}/{capacity} places restantes", + "{license} guarantees {respect} of the people who will use it. Since {source}, anyone can audit it, which guarantees its transparency.": "{license} garantit {respect} des personnes qui l'utiliseront. Puisque {source}, il est publiquement auditable, ce qui garantit sa transparence.", + "{title} ({count} todos)": "{title} ({count} todos)", + "© The Mobilizon Contributors {date} - Made with Elixir, Phoenix, VueJS & with some love and some weeks": "© Les contributeurs de Mobilizon {date} - Fait avec Elixir, Phoenix, VueJS & et de l'amour et des semaines", + "© The OpenStreetMap Contributors": "© Les Contributeur⋅ices OpenStreetMap", + "Participation notifications": "Notifications de participation", + "We'll always send you emails to notify about important event updates": "Nous vous enverrons toujours des emails pour vous notifier à propos des mises à jour importantes des événements", + "Like title or physical address update, start or end date change or event being confirmed or cancelled.": "Comme la mise à jour du titre ou de l'addresse de l'événement, un changement de date de début ou de fin, ou bien l'événement devenant confirmé ou bien annulé.", + "Organizer notifications": "Notifications pour organisateur·ice", + "Notifications for manually approved participations to an event": "Notifications pour l'approbabtion manuelle des participations à un événement", + "We'll send you an email when there new participations requests.": "Nous vous enverrons un email lorsqu'il y aura de nouvelles demandes de participation.", + "No notifications": "Pas de notifications", + "Direct": "Direct", + "Every hour": "À chaque heure", + "Every day": "Chaque jour" } diff --git a/js/src/types/current-user.model.ts b/js/src/types/current-user.model.ts index 9a8f6dee5..d8e3473e6 100644 --- a/js/src/types/current-user.model.ts +++ b/js/src/types/current-user.model.ts @@ -19,9 +19,17 @@ export interface ICurrentUser { settings: IUserSettings; } +export enum INotificationPendingParticipationEnum { + NONE = "NONE", + DIRECT = "DIRECT", + ONE_DAY = "ONE_DAY", + ONE_HOUR = "ONE_HOUR", +} + export interface IUserSettings { timezone: string; notificationOnDay: string; notificationEachWeek: string; notificationBeforeEvent: string; + notificationPendingParticipation: INotificationPendingParticipationEnum; } diff --git a/js/src/views/Settings/Notifications.vue b/js/src/views/Settings/Notifications.vue index efd256f2e..13710c0d2 100644 --- a/js/src/views/Settings/Notifications.vue +++ b/js/src/views/Settings/Notifications.vue @@ -1,63 +1,92 @@ <template> <div v-if="loggedUser"> - <div class="setting-title"> - <h2>{{ $t("Participation notifications") }}</h2> - </div> - <div class="field"> - <strong>{{ - $t("We'll always send you emails to notifiy about important event updates") - }}</strong> - <p> - {{ - $t( - "Like title or physical address update, start or end date change or event being confirmed or cancelled." - ) - }} - </p> - </div> - <div class="field"> - <b-checkbox v-model="notificationOnDay" @input="updateSetting({ notificationOnDay })"> - <strong>{{ $t("Notification on the day of the event") }}</strong> - <p> - {{ $t("We'll use your timezone settings to send a recap of the morning of the event.") }} - </p> - <span v-if="loggedUser.settings.timezone">{{ - $t("Your timezone is currently set to {timezone}.", { - timezone: loggedUser.settings.timezone, - }) - }}</span> - <span v-else>{{ $t("You can pick your timezone into your preferences.") }}</span> - </b-checkbox> - </div> - <div class="field"> - <b-checkbox v-model="notificationEachWeek" @input="updateSetting({ notificationEachWeek })"> - <strong>{{ $t("Recap every week") }}</strong> - <p> - {{ $t("You'll get a weekly recap every Monday for upcoming events, if you have any.") }} - </p> - </b-checkbox> - </div> - <div class="field"> - <b-checkbox - v-model="notificationBeforeEvent" - @input="updateSetting({ notificationBeforeEvent })" - > - <strong>{{ $t("Notification before the event") }}</strong> + <section> + <div class="setting-title"> + <h2>{{ $t("Participation notifications") }}</h2> + </div> + <div class="field"> + <strong>{{ + $t("We'll always send you emails to notify about important event updates") + }}</strong> <p> {{ $t( - "We'll send you an email one hour before the event begins, to be sure you won't forget about it." + "Like title or physical address update, start or end date change or event being confirmed or cancelled." ) }} </p> - </b-checkbox> - </div> + </div> + <div class="field"> + <b-checkbox v-model="notificationOnDay" @input="updateSetting({ notificationOnDay })"> + <strong>{{ $t("Notification on the day of the event") }}</strong> + <p> + {{ + $t("We'll use your timezone settings to send a recap of the morning of the event.") + }} + </p> + <span v-if="loggedUser.settings.timezone">{{ + $t("Your timezone is currently set to {timezone}.", { + timezone: loggedUser.settings.timezone, + }) + }}</span> + <span v-else>{{ $t("You can pick your timezone into your preferences.") }}</span> + </b-checkbox> + </div> + <div class="field"> + <b-checkbox v-model="notificationEachWeek" @input="updateSetting({ notificationEachWeek })"> + <strong>{{ $t("Recap every week") }}</strong> + <p> + {{ $t("You'll get a weekly recap every Monday for upcoming events, if you have any.") }} + </p> + </b-checkbox> + </div> + <div class="field"> + <b-checkbox + v-model="notificationBeforeEvent" + @input="updateSetting({ notificationBeforeEvent })" + > + <strong>{{ $t("Notification before the event") }}</strong> + <p> + {{ + $t( + "We'll send you an email one hour before the event begins, to be sure you won't forget about it." + ) + }} + </p> + </b-checkbox> + </div> + </section> + <section> + <div class="setting-title"> + <h2>{{ $t("Organizer notifications") }}</h2> + </div> + <div class="field"> + <strong>{{ $t("Notifications for manually approved participations to an event") }}</strong> + <b-select + v-model="notificationPendingParticipation" + @input="updateSetting({ notificationPendingParticipation })" + > + <option + v-for="(value, key) in notificationPendingParticipationValues" + :value="key" + :key="key" + >{{ value }}</option + > + </b-select> + <p> + {{ $t("We'll send you an email when there new participations requests.") }} + </p> + </div> + </section> </div> </template> <script lang="ts"> import { Component, Vue, Watch } from "vue-property-decorator"; import { USER_SETTINGS, SET_USER_SETTINGS } from "../../graphql/user"; -import { ICurrentUser } from "../../types/current-user.model"; +import { + ICurrentUser, + INotificationPendingParticipationEnum, +} from "../../types/current-user.model"; @Component({ apollo: { @@ -73,6 +102,19 @@ export default class Notifications extends Vue { notificationBeforeEvent = false; + notificationPendingParticipation = INotificationPendingParticipationEnum.NONE; + + notificationPendingParticipationValues: object = {}; + + mounted() { + this.notificationPendingParticipationValues = { + [INotificationPendingParticipationEnum.NONE]: this.$t("No notifications"), + [INotificationPendingParticipationEnum.DIRECT]: this.$t("Direct"), + [INotificationPendingParticipationEnum.ONE_HOUR]: this.$t("Every hour"), + [INotificationPendingParticipationEnum.ONE_DAY]: this.$t("Every day"), + }; + } + async updateSetting(variables: object) { await this.$apollo.mutate<{ setUserSettings: string }>({ mutation: SET_USER_SETTINGS, diff --git a/lib/federation/activity_pub/activity_pub.ex b/lib/federation/activity_pub/activity_pub.ex index 8884ae2f0..f20d8da29 100644 --- a/lib/federation/activity_pub/activity_pub.ex +++ b/lib/federation/activity_pub/activity_pub.ex @@ -504,14 +504,25 @@ defmodule Mobilizon.Federation.ActivityPub do Audience.calculate_to_and_cc_from_mentions(participant), {:ok, activity} <- create_activity(Map.merge(join_data, audience), local), :ok <- maybe_federate(activity) do - if event.local && Mobilizon.Events.get_default_participant_role(event) === :participant && - role == :participant do - accept( - :join, - participant, - true, - %{"actor" => event.organizer_actor.url} - ) + if event.local do + cond do + Mobilizon.Events.get_default_participant_role(event) === :participant && + role == :participant -> + accept( + :join, + participant, + true, + %{"actor" => event.organizer_actor.url} + ) + + Mobilizon.Events.get_default_participant_role(event) === :not_approved && + role == :not_approved -> + Scheduler.pending_participation_notification(event) + {:ok, activity, participant} + + true -> + {:ok, activity, participant} + end else {:ok, activity, participant} end diff --git a/lib/graphql/schema/user.ex b/lib/graphql/schema/user.ex index ec1ecfc90..92e894865 100644 --- a/lib/graphql/schema/user.ex +++ b/lib/graphql/schema/user.ex @@ -117,6 +117,17 @@ defmodule Mobilizon.GraphQL.Schema.UserType do field(:notification_before_event, :boolean, description: "Whether this user will receive a notification right before event" ) + + field(:notification_pending_participation, :notification_pending_participation_enum, + description: "When does the user receives a notification about new pending participations" + ) + end + + enum :notification_pending_participation_enum do + value(:none, as: :none) + value(:direct, as: :direct) + value(:one_hour, as: :one_hour) + value(:one_day, as: :one_day) end object :user_queries do @@ -231,6 +242,7 @@ defmodule Mobilizon.GraphQL.Schema.UserType do arg(:notification_on_day, :boolean) arg(:notification_each_week, :boolean) arg(:notification_before_event, :boolean) + arg(:notification_pending_participation, :notification_pending_participation_enum) resolve(&User.set_user_setting/3) end end diff --git a/lib/mobilizon/users/setting.ex b/lib/mobilizon/users/setting.ex index 1d204a7c3..1534ce214 100644 --- a/lib/mobilizon/users/setting.ex +++ b/lib/mobilizon/users/setting.ex @@ -5,7 +5,7 @@ defmodule Mobilizon.Users.Setting do use Ecto.Schema import Ecto.Changeset - alias Mobilizon.Users.User + alias Mobilizon.Users.{NotificationPendingNotificationDelay, User} @required_attrs [:user_id] @@ -13,7 +13,8 @@ defmodule Mobilizon.Users.Setting do :timezone, :notification_on_day, :notification_each_week, - :notification_before_event + :notification_before_event, + :notification_pending_participation ] @attrs @required_attrs ++ @optional_attrs @@ -24,6 +25,11 @@ defmodule Mobilizon.Users.Setting do field(:notification_on_day, :boolean) field(:notification_each_week, :boolean) field(:notification_before_event, :boolean) + + field(:notification_pending_participation, NotificationPendingNotificationDelay, + default: :none + ) + belongs_to(:user, User, primary_key: true, type: :id, foreign_key: :id, define_field: false) timestamps() diff --git a/lib/mobilizon/users/users.ex b/lib/mobilizon/users/users.ex index ee9b28d89..3b1508ad6 100644 --- a/lib/mobilizon/users/users.ex +++ b/lib/mobilizon/users/users.ex @@ -22,6 +22,8 @@ defmodule Mobilizon.Users do defenum(UserRole, :user_role, [:administrator, :moderator, :user]) + defenum(NotificationPendingNotificationDelay, none: 0, direct: 1, one_hour: 5, one_day: 10) + @doc """ Registers an user. """ diff --git a/lib/service/notifications/scheduler.ex b/lib/service/notifications/scheduler.ex index c288fcdcf..2bdf2928e 100644 --- a/lib/service/notifications/scheduler.ex +++ b/lib/service/notifications/scheduler.ex @@ -3,10 +3,10 @@ defmodule Mobilizon.Service.Notifications.Scheduler do Allows to insert jobs """ + alias Mobilizon.{Actors, Users} alias Mobilizon.Actors.Actor alias Mobilizon.Events.{Event, Participant} alias Mobilizon.Service.Workers.Notification - alias Mobilizon.Users alias Mobilizon.Users.{Setting, User} require Logger @@ -129,6 +129,61 @@ defmodule Mobilizon.Service.Notifications.Scheduler do def weekly_notification(_), do: {:ok, nil} + def pending_participation_notification(%Event{ + id: event_id, + organizer_actor_id: organizer_actor_id, + local: true + }) do + with %Actor{user_id: user_id} when not is_nil(user_id) <- + Actors.get_actor(organizer_actor_id), + %User{ + settings: %Setting{ + notification_pending_participation: notification_pending_participation, + timezone: timezone + } + } <- Users.get_user_with_settings!(user_id) do + send_at = + case notification_pending_participation do + :none -> + nil + + :direct -> + :direct + + :one_day -> + calculate_next_day_notification(Date.utc_today(), timezone) + + :one_hour -> + DateTime.utc_now() + |> DateTime.shift_zone!(timezone) + |> (&%{&1 | minute: 0, second: 0, microsecond: {0, 0}}).() + end + + params = %{ + user_id: user_id, + event_id: event_id + } + + cond do + # Sending directly + send_at == :direct -> + Notification.enqueue(:pending_participation_notification, params) + + # Not sending + is_nil(send_at) -> + {:ok, nil} + + # Sending to calculated time + true -> + Notification.enqueue(:pending_participation_notification, params, scheduled_at: send_at) + end + else + _ -> {:ok, nil} + end + end + + def pending_participation_notification(_), do: {:ok, nil} + defp shift_zone(datetime, timezone) do case DateTime.shift_zone(datetime, timezone) do {:ok, shift_datetime} -> shift_datetime @@ -144,4 +199,15 @@ defmodule Mobilizon.Service.Notifications.Scheduler do do: date, else: calculate_first_day_of_week(Date.add(date, -1), locale) end + + defp calculate_next_day_notification(%Date{} = day, timezone) do + {:ok, send_at} = NaiveDateTime.new(day, ~T[18:00:00]) + {:ok, send_at} = DateTime.from_naive(send_at, timezone) + + if send_at < DateTime.utc_now() do + calculate_first_day_of_week(Date.add(day, 1), timezone) + else + send_at + end + end end diff --git a/lib/service/workers/notification.ex b/lib/service/workers/notification.ex index 099bf3245..3cb0346b1 100644 --- a/lib/service/workers/notification.ex +++ b/lib/service/workers/notification.ex @@ -80,6 +80,28 @@ defmodule Mobilizon.Service.Workers.Notification do end end + def perform( + %{ + "op" => "pending_participation_notification", + "user_id" => user_id, + "event_id" => event_id + }, + _job + ) do + with %User{} = user <- Users.get_user(user_id), + {:ok, %Event{} = event} <- Events.get_event(event_id), + %Page{total: total} when total > 0 <- + Events.list_participants_for_event(event_id, [:not_approved]) do + user + |> Notification.pending_participation_notification(event, total) + |> Mailer.deliver_later() + else + err -> + require Logger + Logger.error(inspect(err)) + end + end + defp shift_zone(datetime, timezone) do case DateTime.shift_zone(datetime, timezone) do {:ok, shift_datetime} -> shift_datetime diff --git a/lib/web/email/notification.ex b/lib/web/email/notification.ex index 0684f271a..76fd83ff0 100644 --- a/lib/web/email/notification.ex +++ b/lib/web/email/notification.ex @@ -7,7 +7,7 @@ defmodule Mobilizon.Web.Email.Notification do import Bamboo.Phoenix import Mobilizon.Web.Gettext - alias Mobilizon.Events.Participant + alias Mobilizon.Events.{Event, Participant} alias Mobilizon.Users.{Setting, User} alias Mobilizon.Web.{Email, Gettext} @@ -80,4 +80,28 @@ defmodule Mobilizon.Web.Email.Notification do |> assign(:subject, subject) |> render(:notification_each_week) end + + def pending_participation_notification( + %User{locale: locale, email: email}, + %Event{} = event, + total + ) do + Gettext.put_locale(locale) + + subject = + ngettext( + "One participation request for event %{title} to process", + "%{number_participation_requests} participation requests for event %{title} to process", + total, + number_participation_requests: total, + title: event.title + ) + + Email.base_email(to: email, subject: subject) + |> assign(:locale, locale) + |> assign(:event, event) + |> assign(:total, total) + |> assign(:subject, subject) + |> render(:pending_participation_notification) + end end diff --git a/lib/web/templates/email/pending_participation_notification.html.eex b/lib/web/templates/email/pending_participation_notification.html.eex new file mode 100644 index 000000000..3bbf8e9a1 --- /dev/null +++ b/lib/web/templates/email/pending_participation_notification.html.eex @@ -0,0 +1,75 @@ +<!-- HERO --> +<tr> + <td bgcolor="#424056" align="center" style="padding: 0px 10px 0px 10px;"> + <!--[if (gte mso 9)|(IE)]> + <table align="center" border="0" cellspacing="0" cellpadding="0" width="600"> + <tr> + <td align="center" valign="top" width="600"> + <![endif]--> + <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;" > + <tr> + <td bgcolor="#ffffff" align="center" valign="top" style="padding: 40px 20px 20px 20px; border-radius: 4px 4px 0px 0px; color: #111111; font-family: 'Lato', Helvetica, Arial, sans-serif; font-size: 48px; font-weight: 400; line-height: 48px;"> + <h1 style="font-size: 48px; font-weight: 400; margin: 0;"> + <%= gettext "Pending participations to process" %> + </h1> + </td> + </tr> + </table> + <!--[if (gte mso 9)|(IE)]> + </td> + </tr> +</table> + <![endif]--> + </td> +</tr> +<!-- COPY BLOCK --> +<tr> + <td bgcolor="#f4f4f4" align="center" style="padding: 0px 10px 0px 10px;"> + <!--[if (gte mso 9)|(IE)]> + <table align="center" border="0" cellspacing="0" cellpadding="0" width="600"> + <tr> + <td align="center" valign="top" width="600"> + <![endif]--> + <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;" > + <!-- COPY --> + <tr> + <td bgcolor="#ffffff" align="left" style="padding: 20px 30px 0px 30px; color: #666666; font-family: 'Lato', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" > + <p style="margin: 0;"> + <%= ngettext "You have one pending participation to process:", "You have %{number_participation_requests} participation requests to process:", @total, number_participation_requests: @total %> + </p> + </td> + </tr> + <tr> + <td bgcolor="#ffffff" align="left" style="padding: 20px 30px 0px 30px; color: #666666; font-family: 'Lato', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" > + <table width="100%" border="0" cellspacing="0" cellpadding="0"> + <tr> + <td bgcolor="#ffffff" align="center" style="padding: 20px 30px 60px 30px;"> + <table border="0" cellspacing="0" cellpadding="0"> + <tr> + <td align="center" style="border-radius: 3px;" bgcolor="#424056"> + <a href="<%= page_url(Mobilizon.Web.Endpoint, :event, @event.uuid) <> "/participations" %>" target="_blank" style="font-size: 20px; font-family: Helvetica, Arial, sans-serif; color: #ffffff; text-decoration: none; color: #ffffff; text-decoration: none; padding: 15px 25px; border-radius: 2px; border: 1px solid #424056; display: inline-block;"> + <%= gettext "Manage pending participation requests" %> + </a> + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td bgcolor="#ffffff" align="left" style="padding: 20px 30px 40px 30px; color: #777777; font-family: 'Lato', Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 400; line-height: 20px;" > + <p style="margin: 0"> + <%= gettext "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." %> + </p> + </td> + </tr> + </table> + <!--[if (gte mso 9)|(IE)]> + </td> + </tr> +</table> + <![endif]--> + </td> +</tr> diff --git a/lib/web/templates/email/pending_participation_notification.text.eex b/lib/web/templates/email/pending_participation_notification.text.eex new file mode 100644 index 000000000..860ef4363 --- /dev/null +++ b/lib/web/templates/email/pending_participation_notification.text.eex @@ -0,0 +1,8 @@ +<%= gettext "Pending participations to process" %> +== + +<%= ngettext "You have one pending participation to process:", "You have %{number_participation_requests} participation requests to process:", @total, number_participation_requests: @total %> + +<%= gettext "Manage pending participation requests" %> <%= page_url(Mobilizon.Web.Endpoint, :event, @event.uuid) <> "/participations" %> + +<%= gettext "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." %> diff --git a/priv/gettext/ar/LC_MESSAGES/default.po b/priv/gettext/ar/LC_MESSAGES/default.po index 3b5ae1ba9..c2d85516d 100644 --- a/priv/gettext/ar/LC_MESSAGES/default.po +++ b/priv/gettext/ar/LC_MESSAGES/default.po @@ -27,7 +27,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} هو خادم موبيليزون Mobilizon." @@ -48,7 +48,7 @@ msgid "Activate my account" msgstr "تنشيط حسابي" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "أطلب مِن المجتمَع على Framacolibri" @@ -76,7 +76,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "تعلّم المزيد عن Mobilizon." @@ -86,7 +86,7 @@ msgid "Nearly here!" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "" @@ -305,23 +305,23 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "تنبيه" @@ -344,7 +344,7 @@ msgid "Event status has been set as tentative" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "" @@ -677,7 +677,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -776,3 +777,73 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/be/LC_MESSAGES/default.po b/priv/gettext/be/LC_MESSAGES/default.po index f80aea782..3c6507f1e 100644 --- a/priv/gettext/be/LC_MESSAGES/default.po +++ b/priv/gettext/be/LC_MESSAGES/default.po @@ -24,7 +24,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "" @@ -45,7 +45,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "" @@ -73,7 +73,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "" @@ -83,7 +83,7 @@ msgid "Nearly here!" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "" @@ -302,23 +302,23 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "" @@ -341,7 +341,7 @@ msgid "Event status has been set as tentative" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "" @@ -674,7 +674,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -764,3 +765,61 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/default.po b/priv/gettext/ca/LC_MESSAGES/default.po index 416eba59a..80c262c8f 100644 --- a/priv/gettext/ca/LC_MESSAGES/default.po +++ b/priv/gettext/ca/LC_MESSAGES/default.po @@ -28,7 +28,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "Flux per %{email} a Mobilizon" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} és un servidor de Mobilizon." @@ -49,7 +49,7 @@ msgid "Activate my account" msgstr "Activa el meu compte" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Pregunta a la comunitat a Framacolibri" @@ -77,7 +77,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "Instruccions per canviar la contrasenya a %{instance}" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "Per aprendre més de Mobilizon." @@ -87,7 +87,7 @@ msgid "Nearly here!" msgstr "Hi ets a prop!" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "Necessites ajuda? Alguna cosa no funciona?" @@ -319,14 +319,14 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Algú ha soŀlicitat a %{instance} una contrasenya nova." #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" "Mentrestant, tingues en compte que eaquest software encara no està acabat. " "Pots trobar més info al %{a_start}nostre blog%{a_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" "Mobilizon està en desenvolupament. Hi anirem afegint funcionalitats dins de " @@ -334,13 +334,13 @@ msgstr "" "meitat del 2020%{b_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "Aquesta és una web de proves per provar la beta de Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Alerta" @@ -363,7 +363,7 @@ msgid "Event status has been set as tentative" msgstr "S'ha posat l'estat a \"provisional\"" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "%{b_start}No ho facis servir més que proves, sisplau%{b_end}" @@ -701,7 +701,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -792,3 +793,57 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/cs/LC_MESSAGES/default.po b/priv/gettext/cs/LC_MESSAGES/default.po index d2dffb588..315a185f3 100644 --- a/priv/gettext/cs/LC_MESSAGES/default.po +++ b/priv/gettext/cs/LC_MESSAGES/default.po @@ -24,7 +24,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "" @@ -45,7 +45,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "" @@ -73,7 +73,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "" @@ -83,7 +83,7 @@ msgid "Nearly here!" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "" @@ -302,23 +302,23 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "" @@ -341,7 +341,7 @@ msgid "Event status has been set as tentative" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "" @@ -674,7 +674,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -764,3 +765,61 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index fce762884..5523d2746 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -29,7 +29,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "Feed für %{email} auf Mobilizon" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} ist ein Mobilizon-Server." @@ -51,7 +51,7 @@ msgid "Activate my account" msgstr "Aktiviere meinen Account" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Frag die Gemeinschaft auf Framacolibri" @@ -79,7 +79,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "Anweisungen um dein Passwort auf %{instance} zurückzusetzen" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "Lerne mehr über Mobilizon." @@ -89,7 +89,7 @@ msgid "Nearly here!" msgstr "Fast hier!" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "Brauchst Du Hilfe? Funktioniert etwas nicht richtig?" @@ -324,14 +324,14 @@ msgstr "" "Du hast ein neues Passwort für deinen Account auf %{instance} angefragt." #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" "Bitte beachte in der Zwischenzeit, dass diese Software (noch) fertiggestellt " "ist. Weitere Informationen %{a_start}in unserem Blog%{a_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" "Mobilizon befindet sich in der Entwicklung, wir werden neue Funktionen " @@ -339,13 +339,13 @@ msgstr "" "in der ersten Hälfte von 2020 veröffentlicht wird%{b_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "Dies ist eine Demo-Seite, um die Beta-Version von Mobilizon zu testen." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Warnung" @@ -368,7 +368,7 @@ msgid "Event status has been set as tentative" msgstr "Veranstaltung wurde als vorläufig markiert" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "" @@ -708,7 +708,8 @@ msgid "Verify email address" msgstr "Bestätig E-Mail Adresse" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -799,3 +800,57 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 7707e733e..8405b34c6 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -10,7 +10,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "" @@ -31,7 +31,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "" @@ -59,7 +59,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "" @@ -69,7 +69,7 @@ msgid "Nearly here!" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "" @@ -288,23 +288,23 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "" @@ -327,7 +327,7 @@ msgid "Event status has been set as tentative" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "" @@ -660,7 +660,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -747,3 +748,57 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index 71303c6b2..c44344bd0 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -33,7 +33,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "Feed for %{email} on Mobilizon" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} is a Mobilizon server." @@ -54,7 +54,7 @@ msgid "Activate my account" msgstr "Activate my account" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Ask the community on Framacolibri" @@ -82,7 +82,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "Instructions to reset your password on %{instance}" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "Learn more about Mobilizon." @@ -92,7 +92,7 @@ msgid "Nearly here!" msgstr "Nearly there!" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "Need some help? Something not working properly?" @@ -311,23 +311,23 @@ msgid "You requested a new password for your account on %{instance}." msgstr "You requested a new password for your account on %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "This is a demonstration site to test the beta version of Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Warning" @@ -350,7 +350,7 @@ msgid "Event status has been set as tentative" msgstr "Event status has been set as tentative" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "%{b_start}Please do not use it in any real way%{b_end}" @@ -683,7 +683,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -770,3 +771,57 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/default.po b/priv/gettext/es/LC_MESSAGES/default.po index 1ec237294..3bb5c8adb 100644 --- a/priv/gettext/es/LC_MESSAGES/default.po +++ b/priv/gettext/es/LC_MESSAGES/default.po @@ -14,474 +14,473 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.11.2\n" +#, elixir-format #: lib/web/templates/email/password_reset.html.eex:48 #: lib/web/templates/email/password_reset.text.eex:12 -#, elixir-format msgid "If you didn't request this, please ignore this email. Your password won't change until you access the link below and create a new one." msgstr "" "Si no solicitaste este correo, simplemente ignóralo. Su contraseña no " "cambiará al menos que use el siguiente enlace para crear una nueva." -#: lib/service/export/feed.ex:169 #, elixir-format +#: lib/service/export/feed.ex:169 msgid "Feed for %{email} on Mobilizon" msgstr "Feed para% {email} en Mobilizon" -#: lib/web/templates/email/email.html.eex:155 -#: lib/web/templates/email/email.text.eex:16 #, elixir-format +#: lib/web/templates/email/email.html.eex:151 +#: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} es un servidor de Mobilizon." -#: lib/web/templates/email/report.html.eex:41 #, elixir-format +#: lib/web/templates/email/report.html.eex:41 msgid "%{reporter_name} (%{reporter_username}) reported the following content." msgstr "" "%{reporter_name} (% {reporter_username}) informó el siguiente contenido." -#: lib/web/templates/email/report.html.eex:52 #, elixir-format +#: lib/web/templates/email/report.html.eex:52 msgid "%{title} by %{creator}" msgstr "%{title} por %{creator}" -#: lib/web/templates/email/registration_confirmation.html.eex:58 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:58 msgid "Activate my account" msgstr "Activar mi cuenta" -#: lib/web/templates/email/email.html.eex:124 -#: lib/web/templates/email/email.text.eex:14 #, elixir-format +#: lib/web/templates/email/email.html.eex:120 +#: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Preguntar a la comunidad en framacolibri" +#, elixir-format #: lib/web/templates/email/report.html.eex:66 #: lib/web/templates/email/report.text.eex:13 -#, elixir-format msgid "Comments" msgstr "Comentarios" +#, elixir-format #: lib/web/templates/email/report.html.eex:50 #: lib/web/templates/email/report.text.eex:6 -#, elixir-format msgid "Event" msgstr "Evento" -#: lib/web/templates/email/registration_confirmation.html.eex:45 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:45 msgid "If you didn't request this, please ignore this email." msgstr "Si no solicitaste este correo, por favor ignóralo." -#: lib/web/email/user.ex:48 #, elixir-format +#: lib/web/email/user.ex:48 msgid "Instructions to reset your password on %{instance}" msgstr "Instrucciones para restablecer su contraseña en %{instance}" -#: lib/web/templates/email/email.html.eex:156 #, elixir-format +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "Aprenda más sobre Mobilizon." -#: lib/web/templates/email/registration_confirmation.html.eex:13 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:13 msgid "Nearly here!" msgstr "¡Ya casi estas!" -#: lib/web/templates/email/email.html.eex:121 -#: lib/web/templates/email/email.text.eex:12 #, elixir-format +#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "¿Necesita ayuda? ¿Algo no está funcionando correctamente?" -#: lib/web/templates/email/report.html.eex:13 #, elixir-format +#: lib/web/templates/email/report.html.eex:13 msgid "New report on %{instance}" msgstr "Nuevo informe sobre %{instance}" +#, elixir-format #: lib/web/templates/email/report.html.eex:84 #: lib/web/templates/email/report.text.eex:22 -#, elixir-format msgid "Reason" msgstr "Razón" -#: lib/web/templates/email/password_reset.html.eex:61 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:61 msgid "Reset Password" msgstr "Reinicializar la contraseña" -#: lib/web/templates/email/password_reset.html.eex:41 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:41 msgid "Resetting your password is easy. Just press the button below and follow the instructions. We'll have you up and running in no time." msgstr "" "Restablecer tu contraseña es fácil. Simplemente presione el botón y siga las " "instrucciones. Te tendremos en funcionamiento en poco tiempo." -#: lib/web/templates/email/password_reset.html.eex:13 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:13 msgid "Trouble signing in?" msgstr "¿Problemas para entrar?" -#: lib/web/templates/email/report.html.eex:104 #, elixir-format +#: lib/web/templates/email/report.html.eex:104 msgid "View the report" msgstr "Ver el informe" -#: lib/web/templates/email/registration_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:38 msgid "You created an account on %{host} with this email address. You are one click away from activating it." msgstr "" "Creaste una cuenta en %{host} con este correo. Estás a un click de activarlo." -#: lib/web/email/user.ex:28 #, elixir-format +#: lib/web/email/user.ex:28 msgid "Instructions to confirm your Mobilizon account on %{instance}" msgstr "Instrucciones para confirmar su cuenta Mobilizon en %{instance}" -#: lib/web/email/admin.ex:23 #, elixir-format +#: lib/web/email/admin.ex:23 msgid "New report on Mobilizon instance %{instance}" msgstr "Nuevo informe sobre la instancia Mobilizon %{instance}" -#: lib/web/templates/email/registration_confirmation.text.eex:1 #, elixir-format +#: lib/web/templates/email/registration_confirmation.text.eex:1 msgid "Activate your account" msgstr "Activa tu cuenta" -#: lib/web/templates/email/event_participation_approved.html.eex:13 #, elixir-format +#: lib/web/templates/email/event_participation_approved.html.eex:13 msgid "All good!" msgstr "¡Todo está bien!" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:45 #: lib/web/templates/email/event_participation_approved.text.eex:7 -#, elixir-format msgid "An organizer just approved your participation. You're now going to this event!" msgstr "" "Un organizador ha aprobado su participación. ¡Ahora puedes ir a este evento!" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:51 #: lib/web/templates/email/event_participation_approved.html.eex:58 lib/web/templates/email/event_updated.html.eex:119 -#: lib/web/templates/email/event_participation_approved.html.eex:58 lib/web/templates/email/event_updated.html.eex:101 -#, elixir-format msgid "Go to event page" msgstr "Ir a la página del evento" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:70 #: lib/web/templates/email/before_event_notification.html.eex:63 lib/web/templates/email/before_event_notification.text.eex:5 #: lib/web/templates/email/event_participation_approved.html.eex:70 lib/web/templates/email/event_updated.html.eex:131 #: lib/web/templates/email/event_updated.text.eex:32 -#, elixir-format msgid "If you need to cancel your participation, just access the event page through link above and click on the participation button." msgstr "" "Si necesitas cancelar su participación, sólo accede a la página del evento " "mediante el enlace debajo y presiona el botón." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:11 #: lib/web/templates/email/event_participation_approved.text.eex:11 -#, elixir-format msgid "If you need to cancel your participation, just access the previous link and click on the participation button." msgstr "" "Si necesita cancelar su participación, solo acceda al enlace anterior y haga " "clic en el botón de participación." -#: lib/web/templates/email/email.text.eex:16 #, elixir-format +#: lib/web/templates/email/email.text.eex:16 msgid "Learn more about Mobilizon:" msgstr "Aprende más de Mobilizon:" -#: lib/web/templates/email/report.text.eex:1 #, elixir-format +#: lib/web/templates/email/report.text.eex:1 msgid "New report from %{reporter} on %{instance}" msgstr "Nuevo informe de %{reporter} en %{instance}" -#: lib/web/templates/email/event_participation_approved.text.eex:1 #, elixir-format +#: lib/web/templates/email/event_participation_approved.text.eex:1 msgid "Participation approved" msgstr "Participación aprobada" -#: lib/web/templates/email/event_participation_rejected.text.eex:1 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.text.eex:1 msgid "Participation rejected" msgstr "Participación rechazada" -#: lib/web/templates/email/password_reset.text.eex:1 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:1 msgid "Password reset" msgstr "Restablecer contraseña" -#: lib/web/templates/email/password_reset.text.eex:7 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:7 msgid "Resetting your password is easy. Just click the link below and follow the instructions. We'll have you up and running in no time." msgstr "" "Restablecer tu contraseña es fácil. Simplemente haga clic en el enlace a " "continuación y siga las instrucciones. Estarás operacional en muy poco " "tiempo." -#: lib/web/templates/email/event_participation_rejected.html.eex:13 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.html.eex:13 msgid "Sorry!" msgstr "¡Lo siento!" +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:45 #: lib/web/templates/email/event_participation_rejected.text.eex:7 -#, elixir-format msgid "Unfortunately, the organizers rejected your participation." msgstr "" "Lamentablemente, los organizadores rechazaron tu solicitud de participación." -#: lib/web/templates/email/registration_confirmation.text.eex:5 #, elixir-format +#: lib/web/templates/email/registration_confirmation.text.eex:5 msgid "You created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email." msgstr "" "Has creado una cuenta en %{host} con esta dirección de correo electrónico. " "Estás a un clic de activarlo. Si no eras tú, ignora este correo electrónico." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 #: lib/web/templates/email/event_participation_approved.html.eex:38 -#, elixir-format msgid "You requested to participate in event %{title}" msgstr "Solicitaste participar en el evento %{title}" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:5 #: lib/web/templates/email/event_participation_approved.text.eex:5 lib/web/templates/email/event_participation_rejected.html.eex:38 #: lib/web/templates/email/event_participation_rejected.text.eex:5 -#, elixir-format msgid "You requested to participate in event %{title}." msgstr "Solicitaste participar en el evento %{title}." -#: lib/web/email/participation.ex:91 #, elixir-format +#: lib/web/email/participation.ex:91 msgid "Your participation to event %{title} has been approved" msgstr "Su participación en el evento %{title} ha sido aprobada" -#: lib/web/email/participation.ex:70 #, elixir-format +#: lib/web/email/participation.ex:70 msgid "Your participation to event %{title} has been rejected" msgstr "Su participación en el evento %{title} ha sido rechazada" -#: lib/web/templates/email/event_updated.html.eex:82 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:82 msgid "Ending of event" msgstr "Fin del evento" -#: lib/web/email/event.ex:35 #, elixir-format +#: lib/web/email/event.ex:35 msgid "Event %{title} has been updated" msgstr "El evento %{title} ha sido actualizado" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:13 #: lib/web/templates/email/event_updated.text.eex:1 -#, elixir-format msgid "Event updated!" msgstr "¡Evento actualizado!" -#: lib/web/templates/email/event_updated.text.eex:27 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:27 msgid "New date and time for ending of event: %{ends_on}" msgstr "Nueva fecha y hora para finalizar el evento: %{ends_on}" -#: lib/web/templates/email/event_updated.text.eex:23 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:23 msgid "New date and time for start of event: %{begins_on}" msgstr "Nueva fecha y hora para el inicio del evento: %{begin_on}" -#: lib/web/templates/email/event_updated.text.eex:19 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:19 msgid "New title: %{title}" msgstr "Nuevo título: %{title}" -#: lib/web/templates/email/event_updated.html.eex:72 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:72 msgid "Start of event" msgstr "Inicio del evento" -#: lib/web/templates/email/event_updated.text.eex:5 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:5 msgid "The event %{title} was just updated" msgstr "El evento %{title} se acaba de actualizar" -#: lib/web/templates/email/event_updated.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:38 msgid "The event %{title} was updated" msgstr "El evento %{title} se actualizó" -#: lib/web/templates/email/event_updated.html.eex:62 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:62 msgid "Title" msgstr "Título" -#: lib/web/templates/email/event_updated.text.eex:30 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:30 msgid "View the updated event on: %{link}" msgstr "Ver el evento actualizado en: %{link}" +#, elixir-format #: lib/web/templates/email/password_reset.html.eex:38 #: lib/web/templates/email/password_reset.text.eex:5 -#, elixir-format msgid "You requested a new password for your account on %{instance}." msgstr "Solicitó una nueva contraseña para su cuenta en %{instancia}." -#: lib/web/templates/email/email.html.eex:95 #, elixir-format +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" "Mientras tanto, tenga en cuenta que el software no está (todavía) terminado. " "Más información %{a_start} en nuestro blog %{a_end}." -#: lib/web/templates/email/email.html.eex:94 #, elixir-format +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" "Mobilizon está en desarrollo, agregaremos nuevas funciones a este sitio " "durante las actualizaciones periódicas, hasta el lanzamiento de %{b_start} " "versión 1 del software en la primera mitad de 2020 %{b_end}." -#: lib/web/templates/email/email.html.eex:91 -#: lib/web/templates/email/email.text.eex:6 #, elixir-format +#: lib/web/templates/email/email.html.eex:87 +#: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "" "Este es un sitio de demostración para probar la versión beta de Mobilizon." -#: lib/web/templates/email/email.html.eex:89 #, elixir-format +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Advertencia" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:54 #: lib/web/templates/email/event_updated.text.eex:14 -#, elixir-format msgid "Event has been cancelled" msgstr "El evento ha sido cancelado" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:50 #: lib/web/templates/email/event_updated.text.eex:10 -#, elixir-format msgid "Event has been confirmed" msgstr "El evento ha sido confirmado" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:52 #: lib/web/templates/email/event_updated.text.eex:12 -#, elixir-format msgid "Event status has been set as tentative" msgstr "El estado del evento se ha establecido como provisional" -#: lib/web/templates/email/email.html.eex:92 #, elixir-format +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "%{b_start}No lo uses de ninguna manera real %{b_end}" -#: lib/web/templates/email/report.html.eex:39 #, elixir-format +#: lib/web/templates/email/report.html.eex:39 msgid "Someone on %{instance} reported the following content." msgstr "Alguien en %{instancia} informó el siguiente contenido." -#: lib/web/templates/email/email.text.eex:10 #, elixir-format +#: lib/web/templates/email/email.text.eex:10 msgid "In the meantime, please consider that the software is not (yet) finished. More information on our blog:" msgstr "" "Mientras tanto, tenga en cuenta que el software no está (todavía) terminado. " "Más información en nuestro blog." -#: lib/web/templates/email/email.text.eex:9 #, elixir-format +#: lib/web/templates/email/email.text.eex:9 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of version 1 of the software in the first half of 2020." msgstr "" "Mobilizon está en desarrollo, agregaremos nuevas funciones a este sitio " "durante las actualizaciones periódicas, hasta el lanzamiento de la versión 1 " "del software en la primera mitad de 2020." -#: lib/web/templates/email/email.text.eex:7 #, elixir-format +#: lib/web/templates/email/email.text.eex:7 msgid "Please do not use it in any real way" msgstr "Por favor no lo use de ninguna manera real" -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:58 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:58 msgid "Confirm my participation" msgstr "Confirma mi participación" -#: lib/web/email/participation.ex:113 #, elixir-format +#: lib/web/email/participation.ex:113 msgid "Confirm your participation to event %{title}" msgstr "Confirme su participación en el evento %{title}" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:45 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:7 -#, elixir-format msgid "If you didn't request this email, you can simply ignore it." msgstr "Si no solicitó este correo electrónico, simplemente puede ignorarlo." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:13 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:1 -#, elixir-format msgid "Participation confirmation" msgstr "Confirmación de participación" -#: lib/web/templates/api/terms.html.eex:108 #, elixir-format +#: lib/web/templates/api/terms.html.eex:108 msgctxt "terms" msgid "An internal ID for your current selected identity" msgstr "Un ID interno para su identidad seleccionada actualmente" -#: lib/web/templates/api/terms.html.eex:107 #, elixir-format +#: lib/web/templates/api/terms.html.eex:107 msgctxt "terms" msgid "An internal user ID" msgstr "Un ID de usuario interna" -#: lib/web/templates/api/terms.html.eex:45 #, elixir-format +#: lib/web/templates/api/terms.html.eex:45 msgctxt "terms" msgid "Any of the information we collect from you may be used in the following ways:" msgstr "" "Cualquier información que recopilemos sobre usted puede usarse de las " "siguientes maneras:" -#: lib/web/templates/api/terms.html.eex:4 #, elixir-format +#: lib/web/templates/api/terms.html.eex:4 msgctxt "terms" msgid "Basic account information" msgstr "Información básica de la cuenta" -#: lib/web/templates/api/terms.html.eex:28 #, elixir-format +#: lib/web/templates/api/terms.html.eex:28 msgctxt "terms" msgid "Do not share any dangerous information over Mobilizon." msgstr "No comparta ninguna información peligrosa a través de Mobilizon." -#: lib/web/templates/api/terms.html.eex:126 #, elixir-format +#: lib/web/templates/api/terms.html.eex:126 msgctxt "terms" msgid "Do we disclose any information to outside parties?" msgstr "¿Divulgamos alguna información a terceros?" -#: lib/web/templates/api/terms.html.eex:101 #, elixir-format +#: lib/web/templates/api/terms.html.eex:101 msgctxt "terms" msgid "Do we use cookies?" msgstr "¿Usamos cookies?" -#: lib/web/templates/api/terms.html.eex:59 #, elixir-format +#: lib/web/templates/api/terms.html.eex:59 msgctxt "terms" msgid "How do we protect your information?" msgstr "¿Cómo protegemos tu información?" -#: lib/web/templates/api/terms.html.eex:32 #, elixir-format +#: lib/web/templates/api/terms.html.eex:32 msgctxt "terms" msgid "IPs and other metadata" msgstr "dirección IP y otros metadatos" -#: lib/web/templates/api/terms.html.eex:111 #, elixir-format +#: lib/web/templates/api/terms.html.eex:111 msgctxt "terms" msgid "If you delete these informations, you need to login again." msgstr "Si eliminas esta información, deberás iniciar sesión nuevamente." -#: lib/web/templates/api/terms.html.eex:113 #, elixir-format +#: lib/web/templates/api/terms.html.eex:113 msgctxt "terms" msgid "If you're not connected, we don't store any information on your device, unless you participate in an event\n anonymously. In that case we store the hash of the UUID and participation status in your browser so that we may\n display participation status. Deleting these informations will only stop displaying participation status in your\n browser." msgstr "" @@ -493,44 +492,44 @@ msgstr "" "de mostrar el estado de participación en tu\n" " navegador." -#: lib/web/templates/api/terms.html.eex:123 #, elixir-format +#: lib/web/templates/api/terms.html.eex:123 msgctxt "terms" msgid "Note: These informations are stored in your localStorage and not your cookies." msgstr "" "Nota: Estas informaciones se almacenan en tu almacenamiento local y no en " "tus cookies." -#: lib/web/templates/api/terms.html.eex:18 #, elixir-format +#: lib/web/templates/api/terms.html.eex:18 msgctxt "terms" msgid "Published events and comments" msgstr "Eventos publicados y comentarios" -#: lib/web/templates/api/terms.html.eex:83 #, elixir-format +#: lib/web/templates/api/terms.html.eex:83 msgctxt "terms" msgid "Retain the IP addresses associated with registered users no more than 12 months." msgstr "" "Conserva las direcciones IP asociadas con usuarios registrados no más de 12 " "meses." -#: lib/web/templates/api/terms.html.eex:109 #, elixir-format +#: lib/web/templates/api/terms.html.eex:109 msgctxt "terms" msgid "Tokens to authenticate you" msgstr "Fichas para \"autenticarte\"" -#: lib/web/templates/api/terms.html.eex:35 #, elixir-format +#: lib/web/templates/api/terms.html.eex:35 msgctxt "terms" msgid "We also may retain server logs which include the IP address of every request to our server." msgstr "" "También podemos conservar los registros del servidor que incluyen la " "dirección IP de cada solicitud a nuestro servidor." -#: lib/web/templates/api/terms.html.eex:5 #, elixir-format +#: lib/web/templates/api/terms.html.eex:5 msgctxt "terms" msgid "We collect information from you when you register on this server and gather data when you participate in the\n platform by reading, writing, and interacting with content shared here. If you register on this server, you will\n be asked to enter an e-mail address, a password and at least an username. Your e-mail address will be verified by\n an email containing a unique link. If that link is visited, we know that you control the e-mail address. You may\n also enter additional profile information such as a display name and biography, and upload a profile picture and\n header image. The username, display name, biography, profile picture and header image are always listed publicly.\n You may, however, visit this server without registering." msgstr "" @@ -550,8 +549,8 @@ msgstr "" "públicamente.\n" " Sin embargo, también puedes visitar este servidor sin registrarse." -#: lib/web/templates/api/terms.html.eex:130 #, elixir-format +#: lib/web/templates/api/terms.html.eex:130 msgctxt "terms" msgid "We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This\n does not include trusted third parties who assist us in operating our site, conducting our business, or servicing\n you, so long as those parties agree to keep this information confidential. We may also release your information\n when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or\n others rights, property, or safety." msgstr "" @@ -566,8 +565,8 @@ msgstr "" "nuestros o\n" " de otros , propiedades o seguridad." -#: lib/web/templates/api/terms.html.eex:62 #, elixir-format +#: lib/web/templates/api/terms.html.eex:62 msgctxt "terms" msgid "We implement a variety of security measures to maintain the safety of your personal information when you enter,\n submit, or access your personal information. Among other things, your browser session, as well as the traffic between\n your applications and the API, are secured with SSL/TLS, and your password is hashed using a strong one-way\n algorithm." msgstr "" @@ -579,33 +578,33 @@ msgstr "" "se codifica con un fuerte algoritmo \n" " unidireccional." -#: lib/web/templates/api/terms.html.eex:103 #, elixir-format +#: lib/web/templates/api/terms.html.eex:103 msgctxt "terms" msgid "We store the following information on your device when you connect:" msgstr "" "Almacenamos la siguiente información en tu dispositivo cuando te conectas:" -#: lib/web/templates/api/terms.html.eex:72 #, elixir-format +#: lib/web/templates/api/terms.html.eex:72 msgctxt "terms" msgid "We will make a good faith effort to:" msgstr "Haremos un esfuerzo de buena fe para:" -#: lib/web/templates/api/terms.html.eex:43 #, elixir-format +#: lib/web/templates/api/terms.html.eex:43 msgctxt "terms" msgid "What do we use your information for?" msgstr "¿Para qué utilizamos tu información?" -#: lib/web/templates/api/terms.html.eex:71 #, elixir-format +#: lib/web/templates/api/terms.html.eex:71 msgctxt "terms" msgid "What is our data retention policy?" msgstr "¿Cuál es nuestra política de retención de datos?" -#: lib/web/templates/api/terms.html.eex:92 #, elixir-format +#: lib/web/templates/api/terms.html.eex:92 msgctxt "terms" msgid "You can request and download an archive of your content, including your posts, media attachments, profile picture,\n and header image." msgstr "" @@ -613,14 +612,14 @@ msgstr "" "publicaciones, archivos adjuntos de medios, foto de perfil,\n" " y la imagen del encabezado." -#: lib/web/templates/api/terms.html.eex:100 #, elixir-format +#: lib/web/templates/api/terms.html.eex:100 msgctxt "terms" msgid "You may irreversibly delete your account at any time." msgstr "Puede eliminar irreversiblemente su cuenta en cualquier momento." -#: lib/web/templates/api/terms.html.eex:142 #, elixir-format +#: lib/web/templates/api/terms.html.eex:142 msgctxt "terms" msgid "Your content may be downloaded by other servers in the network. Your content is delivered to the servers\n following your instance, and direct messages are delivered to the servers of the recipients, in so far as these\n recipients reside on a different server than this one." msgstr "" @@ -630,8 +629,8 @@ msgstr "" "servidores de los destinatarios, en la medida en que estos\n" " destinatarios residen en un servidor diferente a este." -#: lib/web/templates/api/terms.html.eex:20 #, elixir-format +#: lib/web/templates/api/terms.html.eex:20 msgctxt "terms" msgid "Your events and comments are delivered to other instances that follow your own, meaning they are delivered to\n different servers and copies are stored there. When you delete events or comments, this is likewise delivered to\n these other instances. The action of joining an event is federated as well. Please keep in mind that the operators\n of the server and any receiving server may view such messages, and that recipients may screenshot, copy or\n otherwise re-share them." msgstr "" @@ -645,14 +644,14 @@ msgstr "" "y los destinatarios pueden capturar, copiar o\n" " de incluso volver a compartirlos." -#: lib/web/templates/api/terms.html.eex:159 #, elixir-format +#: lib/web/templates/api/terms.html.eex:159 msgctxt "terms" msgid "Changes to our Privacy Policy" msgstr "Cambios a nuestra política de privacidad" -#: lib/web/templates/api/terms.html.eex:154 #, elixir-format +#: lib/web/templates/api/terms.html.eex:154 msgctxt "terms" msgid "If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (<a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">General Data Protection Regulation</a>) do not use this site." msgstr "" @@ -662,8 +661,8 @@ msgstr "" "https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\"> " "Reglamento general de protección de datos </a>) no utilice este sitio ." -#: lib/web/templates/api/terms.html.eex:155 #, elixir-format +#: lib/web/templates/api/terms.html.eex:155 msgctxt "terms" msgid "If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (<a href=\"https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\">Children's Online Privacy Protection Act</a>) do not use this site." msgstr "" @@ -674,24 +673,24 @@ msgstr "" "Ley de protección de la privacidad en línea para niños </a>) no utilice este " "sitio." -#: lib/web/templates/api/terms.html.eex:161 #, elixir-format +#: lib/web/templates/api/terms.html.eex:161 msgctxt "terms" msgid "If we decide to change our privacy policy, we will post those changes on this page." msgstr "" "Si decidimos cambiar nuestra política de privacidad, publicaremos esos " "cambios en esta página." -#: lib/web/templates/api/terms.html.eex:156 #, elixir-format +#: lib/web/templates/api/terms.html.eex:156 msgctxt "terms" msgid "Law requirements can be different if this server is in another jurisdiction." msgstr "" "Los requisitos legales pueden ser diferentes si este servidor se encuentra " "en otra jurisdicción." -#: lib/web/templates/api/terms.html.eex:163 #, elixir-format +#: lib/web/templates/api/terms.html.eex:163 msgctxt "terms" msgid "Originally adapted from the <a href=\"https://mastodon.social/terms\">Mastodon</a> and <a href=\"https://github.com/discourse/discourse\">Discourse</a> privacy policies." msgstr "" @@ -699,8 +698,8 @@ msgstr "" "Mastodon </a> y <a href=\"https://github.com/discourse/discourse\"> Discurso " "</a> de políticas de privacidad." -#: lib/web/templates/api/terms.html.eex:75 #, elixir-format +#: lib/web/templates/api/terms.html.eex:75 msgctxt "terms" msgid "Retain server logs containing the IP address of all requests to this server, in so far as such logs are kept, no more\n than 90 days." msgstr "" @@ -709,14 +708,14 @@ msgstr "" "mantengan, no más\n" " de 90 días." -#: lib/web/templates/api/terms.html.eex:152 #, elixir-format +#: lib/web/templates/api/terms.html.eex:152 msgctxt "terms" msgid "Site usage by children" msgstr "Uso del sitio por niños" -#: lib/web/templates/api/terms.html.eex:55 #, elixir-format +#: lib/web/templates/api/terms.html.eex:55 msgctxt "terms" msgid "The email address you provide may be used to send you information, updates and notifications about other people\n interacting with your content or sending you messages and to respond to inquiries, and/or other requests or\n questions." msgstr "" @@ -727,16 +726,16 @@ msgstr "" "consultas y / u otras solicitudes o\n" " preguntas." -#: lib/web/templates/api/terms.html.eex:162 #, elixir-format +#: lib/web/templates/api/terms.html.eex:162 msgctxt "terms" msgid "This document is CC-BY-SA. It was last updated January 16, 2020." msgstr "" "Este documento es CC-BY-SA. Se actualizó por última vez el 16 de enero de " "2020." -#: lib/web/templates/api/terms.html.eex:53 #, elixir-format +#: lib/web/templates/api/terms.html.eex:53 msgctxt "terms" msgid "To aid moderation of the community, for example comparing your IP address with other known ones to determine ban\n evasion or other violations." msgstr "" @@ -744,8 +743,8 @@ msgstr "" "dirección IP con otras conocidas para determinar la prohibición,\n" " evasión u otras violaciones." -#: lib/web/templates/api/terms.html.eex:51 #, elixir-format +#: lib/web/templates/api/terms.html.eex:51 msgctxt "terms" msgid "To provide the core functionality of Mobilizon. Depending on this instance's policy you may only be able to\n interact with other people's content and post your own content if you are logged in." msgstr "" @@ -754,30 +753,30 @@ msgstr "" " interactuar con el contenido de otras personas y publicar tu propio " "contenido si ha iniciado sesión." -#: lib/web/templates/api/terms.html.eex:1 #, elixir-format +#: lib/web/templates/api/terms.html.eex:1 msgctxt "terms" msgid "What information do we collect?" msgstr "¿Qué información recopilamos?" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:38 #: lib/web/templates/email/email_changed_new.text.eex:5 -#, elixir-format msgid "Confirm the new address to change your email." msgstr "Confirma la nueva dirección para cambiar tu correo electrónico." +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:64 #: lib/web/templates/email/email_changed_new.text.eex:10 -#, elixir-format msgid "If this change wasn't initiated by you, please ignore this email. The email address for the Mobilizon account won't change until you access the link above." msgstr "" "Si este cambio no fue iniciado por ti, ignora este correo electrónico. La " "dirección de correo electrónico de la cuenta de Mobilizon no cambiará hasta " "que accedas al enlace de arriba." +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:62 #: lib/web/templates/email/email_changed_old.text.eex:9 -#, elixir-format msgid "If you did not ask to change your email, it is likely that someone has gained access to your account. Please change your password immediately or contact the server admin if you're locked out of your account." msgstr "" "Si no solicitaste cambiar tu correo electrónico, es probable que alguien " @@ -785,39 +784,40 @@ msgstr "" "comunícate con el administrador del servidor si no puedes acceder a tu " "cuenta." -#: lib/web/email/user.ex:175 #, elixir-format +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon en %{instance}: confirma tu dirección de correo electrónico" -#: lib/web/email/user.ex:152 #, elixir-format +#: lib/web/email/user.ex:152 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon en %{instance}: correo electrónico modificado" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:13 #: lib/web/templates/email/email_changed_old.text.eex:1 -#, elixir-format msgid "New email address" msgstr "Nueva dirección de correo electrónico" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:38 #: lib/web/templates/email/email_changed_old.text.eex:5 -#, elixir-format msgid "The email address for your account on %{host} is being changed to:" msgstr "" "La dirección de correo electrónico de su cuenta en %{host} se está cambiando " "a:" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:13 #: lib/web/templates/email/email_changed_new.html.eex:51 lib/web/templates/email/email_changed_new.text.eex:1 -#, elixir-format msgid "Verify email address" msgstr "Verifica tu dirección de correo electrónico" -#: lib/web/templates/email/on_day_notification.html.eex:70 -#: lib/web/templates/email/on_day_notification.text.eex:14 #, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." msgstr[0] "" @@ -827,74 +827,74 @@ msgstr[1] "" "Si necesitas cancelar su participación, sólo accede a la página del evento " "mediante el enlace debajo y presiona el botón." -#: lib/web/email/notification.ex:46 #, elixir-format +#: lib/web/email/notification.ex:46 msgid "One event planned today" msgid_plural "%{nb_events} events planned today" msgstr[0] "Un evento programado para hoy" msgstr[1] "%{nb_events} eventos planeados hoy" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:38 #: lib/web/templates/email/on_day_notification.text.eex:4 -#, elixir-format msgid "You have one event today:" msgid_plural "You have %{total} events today:" msgstr[0] "Tienes un evento hoy:" msgstr[1] "Tienes %{total} eventos hoy:" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:38 #: lib/web/templates/email/group_invite.text.eex:5 -#, elixir-format msgid "%{inviter} just invited you to join their group %{group}" msgstr "%{inviter} te acaba de invitar a unirte a su grupo %{group}" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:13 #: lib/web/templates/email/group_invite.text.eex:1 -#, elixir-format msgid "Come along!" msgstr "¡ Únete a nosotros !" -#: lib/web/email/notification.ex:24 #, elixir-format +#: lib/web/email/notification.ex:24 msgid "Don't forget to go to %{title}" msgstr "No olvides ir a %{title}" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:13 #: lib/web/templates/email/on_day_notification.text.eex:1 -#, elixir-format msgid "Events today" msgstr "Evento" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:38 #: lib/web/templates/email/before_event_notification.text.eex:3 -#, elixir-format msgid "Get ready for %{title}" msgstr "Prepárate para %{title}" -#: lib/web/templates/email/group_invite.html.eex:59 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:59 msgid "See my groups" msgstr "Ver mis grupos" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:45 #: lib/web/templates/email/group_invite.text.eex:7 -#, elixir-format msgid "To accept this invitation, head over to your groups." msgstr "Para aceptar esta invitación, dirígete a tus grupos." +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:13 #: lib/web/templates/email/before_event_notification.text.eex:1 -#, elixir-format msgid "Upcoming event" msgstr "Evento proximo" -#: lib/web/templates/email/before_event_notification.text.eex:4 #, elixir-format +#: lib/web/templates/email/before_event_notification.text.eex:4 msgid "View the event on: %{link}" msgstr "Ver el evento actualizado en: %{link}" -#: lib/web/email/group.ex:28 #, elixir-format +#: lib/web/email/group.ex:28 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{Inviter} te ha invitado a unirte al grupo %{group}" @@ -907,3 +907,57 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "Un evento programado para hoy" +msgstr[1] "%{nb_events} eventos planeados hoy" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "Tienes un evento hoy:" +msgstr[1] "Tienes %{total} eventos hoy:" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/fi/LC_MESSAGES/default.po b/priv/gettext/fi/LC_MESSAGES/default.po index 623da31e1..f86d3ab18 100644 --- a/priv/gettext/fi/LC_MESSAGES/default.po +++ b/priv/gettext/fi/LC_MESSAGES/default.po @@ -28,7 +28,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "Mobilizon-syöte osoitteeseen %{email}" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} on Mobilizon-palvelin." @@ -49,7 +49,7 @@ msgid "Activate my account" msgstr "Aktivoi tilini" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Kysy yhteisöltä Framacolibrissa" @@ -77,7 +77,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "Ohjeet salasanan palauttamiseen palvelimella %{instance}" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "Lue lisää Mobilizonista." @@ -87,7 +87,7 @@ msgid "Nearly here!" msgstr "Melkein valmista!" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "Tarvitsetko apua? Eikö kaikki toimi niin kuin pitäisi?" @@ -320,14 +320,14 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Pyysit uutta salasanaa tilillesi palvelimella %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" "Huomaathan, että ohjelma ei ole (vielä) täysin valmis. Lisätietoja " "%{a_start}blogissamme%{a_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" "Mobilizonin kehitystyö on vielä käynnissä, ja tälle sivulle lisätään " @@ -335,13 +335,13 @@ msgstr "" "julkaistaan vuoden 2020 alkupuoliskolla%{b_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "Tällä esittelysivulla voit koekäyttää Mobilizonin beetaversiota." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Varoitus" @@ -364,7 +364,7 @@ msgid "Event status has been set as tentative" msgstr "Tapahtuma on merkitty alustavaksi" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "%{b_start}Älä käytä todellisiin tarkoituksiin%{b_end}" @@ -795,7 +795,8 @@ msgid "Verify email address" msgstr "Vahvista sähköpostiosoite" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -886,3 +887,57 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/fr/LC_MESSAGES/default.po b/priv/gettext/fr/LC_MESSAGES/default.po index dc2984d86..9c9e9a1e3 100644 --- a/priv/gettext/fr/LC_MESSAGES/default.po +++ b/priv/gettext/fr/LC_MESSAGES/default.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-06-04 15:41+0200\n" +"PO-Revision-Date: 2020-06-08 11:21+0200\n" "Last-Translator: matograine <tom.ngr@zaclys.net>\n" "Language-Team: French <https://weblate.framasoft.org/projects/mobilizon/backend/fr/>\n" "Language: fr\n" @@ -32,7 +32,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "Flux pour %{email} sur Mobilizon" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} est une instance Mobilizon." @@ -53,7 +53,7 @@ msgid "Activate my account" msgstr "Activer mon compte" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Demander à la communauté sur Framacolibri" @@ -81,7 +81,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "Instructions pour réinitialiser votre mot de passe sur %{instance}" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "En apprendre plus à propos de Mobilizon." @@ -91,7 +91,7 @@ msgid "Nearly here!" msgstr "Vous y êtes presque !" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "Besoin d'aide ? Quelque chose ne fonctionne pas correctement ?" @@ -310,23 +310,23 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Vous avez demandé un nouveau mot de passe pour votre compte sur %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "D'ici là, veuillez considérer que le logiciel n'est pas (encore) fini. Plus d'informations %{a_start}sur notre blog%{a_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "Mobilizon est en cours de développement, nous ajouterons de nouvelles fonctionnalités à ce site lors de mises à jour régulières, jusqu'à la publication de %{b_start}la version 1 du logiciel au premier semestre 2020%{b_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "Ceci est un site de démonstration permettant de tester la version bêta de Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Attention" @@ -349,7 +349,7 @@ msgid "Event status has been set as tentative" msgstr "Le statut de l'événement a été défini comme « à confirmer »" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "%{b_start}Veuillez ne pas l'utiliser pour aucun évènement réel%{b_end}" @@ -684,7 +684,8 @@ msgid "Verify email address" msgstr "Vérifier l'adresse email" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -771,3 +772,57 @@ msgstr "Adresse de l'événement" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "L'adresse physique a été enlevée" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "Un événement prévu aujourd'hui" +msgstr[1] "%{nb_events} événements prévus aujourd'hui" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "Une demande de participation à l'événement %{title} à traiter" +msgstr[1] "%{number_participation_requests} demandes de participation à l'événement %{title} à traiter" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "Vous avez un événement aujourd'hui :" +msgstr[1] "Vous avez %{total} événements aujourd'hui :" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "Vous avez une demande de participation en attente à traiter :" +msgstr[1] "Vous avez %{number_participation_requests} demandes de participation en attente à traiter :" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "Événements cette semaine" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "Gérer les demandes de participation en attente" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "Demandes de participation en attente" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "Vous recevez ce courriel parce que vous avez choisi de recevoir des notifications pour les participations en attente à vos événements. Vous pouvez désactiver ou modifier la configuration de ces notifications dans vos paramètres d'utilisateur·ice Mobilizon." diff --git a/priv/gettext/it/LC_MESSAGES/default.po b/priv/gettext/it/LC_MESSAGES/default.po index 42a7cf923..b97783ec5 100644 --- a/priv/gettext/it/LC_MESSAGES/default.po +++ b/priv/gettext/it/LC_MESSAGES/default.po @@ -26,7 +26,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "" @@ -47,7 +47,7 @@ msgid "Activate my account" msgstr "Attiva il mio account" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Chiedi alla comunità su Framacolibri" @@ -75,7 +75,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "" @@ -85,7 +85,7 @@ msgid "Nearly here!" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "Bisogno di aiuto? Qualcosa non funziona correttamente?" @@ -305,23 +305,23 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Attenzione" @@ -344,7 +344,7 @@ msgid "Event status has been set as tentative" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "" @@ -677,7 +677,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -764,3 +765,57 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/ja/LC_MESSAGES/default.po b/priv/gettext/ja/LC_MESSAGES/default.po index c1bec4b0e..6300b02b1 100644 --- a/priv/gettext/ja/LC_MESSAGES/default.po +++ b/priv/gettext/ja/LC_MESSAGES/default.po @@ -24,7 +24,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "" @@ -45,7 +45,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "" @@ -73,7 +73,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "" @@ -83,7 +83,7 @@ msgid "Nearly here!" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "" @@ -302,23 +302,23 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "" @@ -341,7 +341,7 @@ msgid "Event status has been set as tentative" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "" @@ -674,7 +674,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -758,3 +759,53 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/nl/LC_MESSAGES/default.po b/priv/gettext/nl/LC_MESSAGES/default.po index 88d18d329..0babcfd3c 100644 --- a/priv/gettext/nl/LC_MESSAGES/default.po +++ b/priv/gettext/nl/LC_MESSAGES/default.po @@ -29,7 +29,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "Feed voor %{email} op Mobilizon" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} is een Mobilizonserver." @@ -51,7 +51,7 @@ msgid "Activate my account" msgstr "Activeer mijn account" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Vragen aan de gemeenschap op Framacolibri" @@ -79,7 +79,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "Instructies om uw wachtwoord opnieuw in te stellen op %{instance}" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "Leer meer over Mobilizon." @@ -89,7 +89,7 @@ msgid "Nearly here!" msgstr "Bijna klaar!" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "Hulp nodig? Werkt iets niet juist?" @@ -322,14 +322,14 @@ msgid "You requested a new password for your account on %{instance}." msgstr "U hebt een nieuw wachtwoord aangevraagd voor uw account op %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" "Gelieve er in tussentijd rekening mee te houden dat deze software (nog) niet " "klaar is voor gebruik. Meer informatie %{a_start}op onze blog%{a_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" "Mobilizon is in ontwikkeling, we zullen regelmatig nieuwe functies toevoegen " @@ -337,13 +337,13 @@ msgstr "" "beschikbaar is in de eerste helft van 2020%{b_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "Dit is een demosite om de bètaversie van Mobilizon te testen." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Waarschuwing" @@ -366,7 +366,7 @@ msgid "Event status has been set as tentative" msgstr "Het evenement is als \"te bevestigen\" aangeduid" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "" @@ -704,7 +704,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -795,3 +796,57 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/oc/LC_MESSAGES/default.po b/priv/gettext/oc/LC_MESSAGES/default.po index 072c9f7e7..8fccdcfd7 100644 --- a/priv/gettext/oc/LC_MESSAGES/default.po +++ b/priv/gettext/oc/LC_MESSAGES/default.po @@ -27,7 +27,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "Flux per %{email} sus Mobilizon" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} es una instància Mobilizon." @@ -48,7 +48,7 @@ msgid "Activate my account" msgstr "Activar mon compte" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Demandatz a la comunautat sus Framacolibri" @@ -76,7 +76,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "Consignas per reïnincializar vòstre senhal sus %{instance}" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "Ne saber mai tocant Mobilizon." @@ -86,7 +86,7 @@ msgid "Nearly here!" msgstr "I sètz gaireben !" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "Besonh d’ajuda ? Quicòm truca ?" @@ -310,14 +310,14 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Avètz demandat un nòu senhal per vòstre compte sus %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" "D’aquel temps, consideratz que lo logicial es pas (encara) acabat. Mai d’" "informacion %{a_start}sus nòstre blòg%{a_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" "Mobilizon es en desvolopament, ajustarem de nòvas foncionalitats a aqueste " @@ -325,14 +325,14 @@ msgstr "" "la version 1 del logicial al primièr semèstre 2020%{b_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "" "Aquò es un site de demostracion per ensajar la version beta de Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Avertiment" @@ -355,7 +355,7 @@ msgid "Event status has been set as tentative" msgstr "L’estatut de l’eveniment es estat definit coma « de confirmar »" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "%{b_start}Mercés de l’utilizar pas d’un biais real%{b_end}" @@ -701,7 +701,8 @@ msgid "Verify email address" msgstr "Verificar l’adreça electronica" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -792,3 +793,57 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/pl/LC_MESSAGES/default.po b/priv/gettext/pl/LC_MESSAGES/default.po index b822844ae..dee83abf1 100644 --- a/priv/gettext/pl/LC_MESSAGES/default.po +++ b/priv/gettext/pl/LC_MESSAGES/default.po @@ -30,7 +30,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "Strumień dla %{email} na Mobilizon" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} jest serwerem Mobilizon." @@ -52,7 +52,7 @@ msgid "Activate my account" msgstr "Aktywuj moje konto" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Zapytaj społeczność na Framacolibri" @@ -80,7 +80,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "Instrukcje resetowania hasła na %{instance}" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "Dowiedz się więcej o Mobilizon." @@ -90,7 +90,7 @@ msgid "Nearly here!" msgstr "Już prawie!" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "Potrzebujesz pomocy? Coś nie działa prawidłowo?" @@ -323,14 +323,14 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Poprosiłeś(-aś) o nowe hasło do swojego konta na %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" "W międzyczasie, pamiętaj o tym że to oprogramowanie nie jest (jeszcze) " "ukończone. Więcej informacji %{a_start}na naszym blogu%{a_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" "Mobilizon jest w fazie rozwoju. Nowe funkcje będą regularnie dodawane, do " @@ -338,7 +338,7 @@ msgstr "" "roku%{b_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "" @@ -346,7 +346,7 @@ msgstr "" "Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Ostrzeżenie" @@ -369,7 +369,7 @@ msgid "Event status has been set as tentative" msgstr "Stan wydarzenia został ustawiony jako niepewny" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "%{b_start}Prosimy nie używać go do rzeczywistych celów!%{b_end}" @@ -707,7 +707,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -803,3 +804,61 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/pt/LC_MESSAGES/default.po b/priv/gettext/pt/LC_MESSAGES/default.po index c5922dcd8..dddbff46b 100644 --- a/priv/gettext/pt/LC_MESSAGES/default.po +++ b/priv/gettext/pt/LC_MESSAGES/default.po @@ -24,7 +24,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "" @@ -45,7 +45,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "" @@ -73,7 +73,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "" @@ -83,7 +83,7 @@ msgid "Nearly here!" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "" @@ -302,23 +302,23 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "" @@ -341,7 +341,7 @@ msgid "Event status has been set as tentative" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "" @@ -674,7 +674,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -761,3 +762,57 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/pt_BR/LC_MESSAGES/default.po b/priv/gettext/pt_BR/LC_MESSAGES/default.po index 4ca31b70c..100e6f632 100644 --- a/priv/gettext/pt_BR/LC_MESSAGES/default.po +++ b/priv/gettext/pt_BR/LC_MESSAGES/default.po @@ -28,7 +28,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "Feed para %{email} sobre o Mobilizon" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} é um servidor Mobilizon." @@ -49,7 +49,7 @@ msgid "Activate my account" msgstr "Ativar a minha conta" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Perguntar à comunidade Framacolibri" @@ -77,7 +77,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "Instruções para reiniciar a senha de %{instance}" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "Aprenda mais sobre Mobilizon." @@ -87,7 +87,7 @@ msgid "Nearly here!" msgstr "Você está quase lá!" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "Precisa de ajuda? Algo não está funcionando bem?" @@ -321,14 +321,14 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Você solicitou uma nova senha para sua conta em %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" "Enquanto isso, favor considerar que o aplicativo não está (ainda) terminado. " "Saiba mais %{a_start}no nosso blog%{a_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" "Mobilizon está em desenvolvimento, Iremos adicionar novos recursos neste " @@ -336,13 +336,13 @@ msgstr "" "1 do aplicativo no primeiro semestre de 2020%{b_end}." #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "Este é um site de demonstração para testar a versão beta do Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Atenção" @@ -365,7 +365,7 @@ msgid "Event status has been set as tentative" msgstr "O status do evento foi definido como tentativa" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "%{b_start}Por favor não use este serviço para nenhum caso real%{b_end}" @@ -810,7 +810,8 @@ msgid "Verify email address" msgstr "Verificar endereço de email" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -901,3 +902,57 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/ru/LC_MESSAGES/default.po b/priv/gettext/ru/LC_MESSAGES/default.po index 040eb84c8..8ed295907 100644 --- a/priv/gettext/ru/LC_MESSAGES/default.po +++ b/priv/gettext/ru/LC_MESSAGES/default.po @@ -29,7 +29,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "Лента для %{email} в Mobilizon" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} — это сервер Mobilizon." @@ -52,7 +52,7 @@ msgid "Activate my account" msgstr "Активировать мою учётную запись" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Обратиться к сообществу на Framacolibri" @@ -80,7 +80,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "Инструкции по сбросу пароля на %{instance}" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "Узнать больше о Mobilizon." @@ -90,7 +90,7 @@ msgid "Nearly here!" msgstr "Почти готово!" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "Нужна помощь? Что-то не работает?" @@ -313,23 +313,23 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "" @@ -352,7 +352,7 @@ msgid "Event status has been set as tentative" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "" @@ -685,7 +685,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -775,3 +776,61 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/gettext/sv/LC_MESSAGES/default.po b/priv/gettext/sv/LC_MESSAGES/default.po index bcf5374e8..4a815191c 100644 --- a/priv/gettext/sv/LC_MESSAGES/default.po +++ b/priv/gettext/sv/LC_MESSAGES/default.po @@ -29,7 +29,7 @@ msgid "Feed for %{email} on Mobilizon" msgstr "Flöde för %{email} på Mobilizon" #, elixir-format -#: lib/web/templates/email/email.html.eex:155 +#: lib/web/templates/email/email.html.eex:151 #: lib/web/templates/email/email.text.eex:16 msgid "%{instance} is a Mobilizon server." msgstr "%{instance} är en Mobilizon-server." @@ -50,7 +50,7 @@ msgid "Activate my account" msgstr "Aktivera mitt konto" #, elixir-format -#: lib/web/templates/email/email.html.eex:124 +#: lib/web/templates/email/email.html.eex:120 #: lib/web/templates/email/email.text.eex:14 msgid "Ask the community on Framacolibri" msgstr "Fråga människorna på Framacolibri" @@ -79,7 +79,7 @@ msgid "Instructions to reset your password on %{instance}" msgstr "Instruktioner för att återställa ditt lösenord på %{instance}" #, elixir-format -#: lib/web/templates/email/email.html.eex:156 +#: lib/web/templates/email/email.html.eex:152 msgid "Learn more about Mobilizon." msgstr "Läs mer om Mobilizon." @@ -89,7 +89,7 @@ msgid "Nearly here!" msgstr "Snart framme!" #, elixir-format -#: lib/web/templates/email/email.html.eex:121 +#: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:12 msgid "Need some help? Something not working properly?" msgstr "Behöver du hjälp? Är det något som krånglar?" @@ -323,23 +323,23 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Du har bett om ett nytt lösenord för ditt konto på %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:95 +#: lib/web/templates/email/email.html.eex:91 msgid "In the meantime, please consider that the software is not (yet) finished. More information %{a_start}on our blog%{a_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:94 +#: lib/web/templates/email/email.html.eex:90 msgid "Mobilizon is under development, we will add new features to this site during regular updates, until the release of %{b_start}version 1 of the software in the first half of 2020%{b_end}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:91 +#: lib/web/templates/email/email.html.eex:87 #: lib/web/templates/email/email.text.eex:6 msgid "This is a demonstration site to test the beta version of Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "" @@ -362,7 +362,7 @@ msgid "Event status has been set as tentative" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:92 +#: lib/web/templates/email/email.html.eex:88 msgid "%{b_start}Please do not use it in any real way%{b_end}" msgstr "" @@ -696,7 +696,8 @@ msgid "Verify email address" msgstr "" #, elixir-format -#: lib/web/templates/email/on_day_notification.html.eex:70 +#: lib/web/templates/email/notification_each_week.html.eex:70 +#: lib/web/templates/email/notification_each_week.text.eex:14 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 msgid "If you need to cancel your participation, just access the event page through the link above and click on the participation button." msgid_plural "If you need to cancel your participation, just access the event page through the links above and click on the participation button." @@ -787,3 +788,57 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:102 msgid "Physical address was removed" msgstr "" + +#, elixir-format +#: lib/web/email/notification.ex:70 +msgid "One event planned this week" +msgid_plural "%{nb_events} events planned this week" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/email/notification.ex:92 +msgid "One participation request for event %{title} to process" +msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:38 +#: lib/web/templates/email/notification_each_week.text.eex:4 +msgid "You have one event this week:" +msgid_plural "You have %{total} events this week:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:38 +#: lib/web/templates/email/pending_participation_notification.text.eex:4 +msgid "You have one pending participation to process:" +msgid_plural "You have %{number_participation_requests} participation requests to process:" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/notification_each_week.html.eex:13 +#: lib/web/templates/email/notification_each_week.text.eex:1 +msgid "Events this week" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:51 +#: lib/web/templates/email/pending_participation_notification.text.eex:6 +msgid "Manage pending participation requests" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:13 +#: lib/web/templates/email/pending_participation_notification.text.eex:1 +msgid "Pending participations to process" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/pending_participation_notification.html.eex:64 +#: lib/web/templates/email/pending_participation_notification.text.eex:8 +msgid "You receive this email because you chose to get notifications for pending participations to your events. You may disable or change the configuration for these notification in your Mobilizon user settings." +msgstr "" diff --git a/priv/repo/migrations/20200605154921_add_notification_pending_participation_to_settings.exs b/priv/repo/migrations/20200605154921_add_notification_pending_participation_to_settings.exs new file mode 100644 index 000000000..f41976906 --- /dev/null +++ b/priv/repo/migrations/20200605154921_add_notification_pending_participation_to_settings.exs @@ -0,0 +1,9 @@ +defmodule Mobilizon.Storage.Repo.Migrations.AddNotificationPendingParticipationToSettings do + use Ecto.Migration + + def change do + alter table(:user_settings) do + add(:notification_pending_participation, :integer, default: 5) + end + end +end diff --git a/test/service/notifications/scheduler_test.exs b/test/service/notifications/scheduler_test.exs index 966a07e55..3f0d9ce7c 100644 --- a/test/service/notifications/scheduler_test.exs +++ b/test/service/notifications/scheduler_test.exs @@ -224,6 +224,124 @@ defmodule Mobilizon.Service.Notifications.SchedulerTest do end end + describe "Asking to participate registers a job for notification" do + test "if the user has allowed it" do + %User{id: user_id} = user = insert(:user, locale: "fr") + + settings = + insert(:settings, + user_id: user_id, + notification_pending_participation: :one_day, + timezone: "Europe/Paris" + ) + + user = Map.put(user, :settings, settings) + actor = insert(:actor, user: user) + + # Make sure event happens next week + %Date{} = event_day = Date.utc_today() |> Date.add(3) + {:ok, %NaiveDateTime{} = event_date} = event_day |> NaiveDateTime.new(~T[16:00:00]) + {:ok, begins_on} = DateTime.from_naive(event_date, "Etc/UTC") + + %Event{} = event = insert(:event, begins_on: begins_on, local: true, organizer_actor: actor) + + %Participant{} = _participant = insert(:participant, event: event, role: :not_approved) + + Scheduler.pending_participation_notification(event) + + {:ok, scheduled_at} = NaiveDateTime.new(Date.utc_today(), ~T[18:00:00]) + {:ok, scheduled_at} = DateTime.from_naive(scheduled_at, "Europe/Paris") + + assert_enqueued( + worker: Notification, + args: %{user_id: user_id, event_id: event.id, op: :pending_participation_notification}, + scheduled_at: scheduled_at + ) + end + + test "not if the user hasn't allowed it" do + %User{id: user_id} = user = insert(:user) + actor = insert(:actor, user: user) + + %Participant{} = insert(:participant) + + %Event{} = event = insert(:event, local: true, organizer_actor: actor) + + Scheduler.pending_participation_notification(event) + + refute_enqueued( + worker: Notification, + args: %{user_id: user_id, event_id: event.id, op: :pending_participation_notification} + ) + end + + test "right away if the user has allowed it" do + %User{id: user_id} = user = insert(:user, locale: "fr") + + settings = + insert(:settings, + user_id: user_id, + notification_pending_participation: :direct, + timezone: "Europe/Paris" + ) + + user = Map.put(user, :settings, settings) + actor = insert(:actor, user: user) + + # Make sure event happens next week + %Date{} = event_day = Date.utc_today() |> Date.add(3) + {:ok, %NaiveDateTime{} = event_date} = event_day |> NaiveDateTime.new(~T[16:00:00]) + {:ok, begins_on} = DateTime.from_naive(event_date, "Etc/UTC") + + %Event{} = event = insert(:event, begins_on: begins_on, local: true, organizer_actor: actor) + + %Participant{} = _participant = insert(:participant, event: event, role: :not_approved) + + Scheduler.pending_participation_notification(event) + + assert_enqueued( + worker: Notification, + args: %{user_id: user_id, event_id: event.id, op: :pending_participation_notification} + ) + end + + test "every hour" do + %User{id: user_id} = user = insert(:user, locale: "fr") + + settings = + insert(:settings, + user_id: user_id, + notification_pending_participation: :one_hour, + timezone: "Europe/Paris" + ) + + user = Map.put(user, :settings, settings) + actor = insert(:actor, user: user) + + # Make sure event happens next week + %Date{} = event_day = Date.utc_today() |> Date.add(3) + {:ok, %NaiveDateTime{} = event_date} = event_day |> NaiveDateTime.new(~T[16:00:00]) + {:ok, begins_on} = DateTime.from_naive(event_date, "Etc/UTC") + + %Event{} = event = insert(:event, begins_on: begins_on, local: true, organizer_actor: actor) + + %Participant{} = _participant = insert(:participant, event: event, role: :not_approved) + + Scheduler.pending_participation_notification(event) + + scheduled_at = + DateTime.utc_now() + |> DateTime.shift_zone!("Europe/Paris") + |> (&%{&1 | minute: 0, second: 0, microsecond: {0, 0}}).() + + assert_enqueued( + worker: Notification, + args: %{user_id: user_id, event_id: event.id, op: :pending_participation_notification}, + scheduled_at: scheduled_at + ) + end + end + defp calculate_first_day_of_week(%Date{} = date, locale) do day_number = Date.day_of_week(date) first_day_number = Cldr.Calendar.first_day_for_locale(locale) diff --git a/test/service/workers/notification_test.exs b/test/service/workers/notification_test.exs index a09211912..469e95b0d 100644 --- a/test/service/workers/notification_test.exs +++ b/test/service/workers/notification_test.exs @@ -323,4 +323,32 @@ defmodule Mobilizon.Service.Workers.NotificationTest do ) end end + + describe "A pending_participation_notification job sends an email" do + test "if there are participants to approve" do + %User{id: user_id} = user = insert(:user) + + %Event{id: event_id} = event = insert(:event) + + %Participant{} = insert(:participant, event: event, role: :not_approved) + %Participant{} = insert(:participant, event: event, role: :not_approved) + + Notification.perform( + %{ + "op" => "pending_participation_notification", + "user_id" => user_id, + "event_id" => event_id + }, + nil + ) + + assert_delivered_email( + NotificationMailer.pending_participation_notification( + user, + event, + 2 + ) + ) + end + end end diff --git a/test/support/factory.ex b/test/support/factory.ex index ee0575fc2..184b78813 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -28,6 +28,7 @@ defmodule Mobilizon.Factory do notification_on_day: false, notification_each_week: false, notification_before_event: false, + notification_pending_participation: :one_day, user_id: nil } end