diff --git a/pkg/models/notifications.go b/pkg/models/notifications.go index 6851bd3cc..27a88a4c5 100644 --- a/pkg/models/notifications.go +++ b/pkg/models/notifications.go @@ -39,11 +39,11 @@ type ReminderDueNotification struct { func (n *ReminderDueNotification) ToMail() *notifications.Mail { return notifications.NewMail(). To(n.User.Email). - Subject(`Reminder for "`+n.Task.Title+`" (`+n.Project.Title+`)`). - Greeting("Hi "+n.User.GetName()+","). - Line(`This is a friendly reminder of the task "`+n.Task.Title+`" (`+n.Project.Title+`).`). - Action("Open Task", config.ServicePublicURL.GetString()+"tasks/"+strconv.FormatInt(n.Task.ID, 10)). - Line("Have a nice day!") + Subject(`Recordatorio para "`+n.Task.Title+`" (`+n.Project.Title+`)`). + Greeting("Hola "+n.User.GetName()+","). + Line(`Este es un amigable recordatorio de la tarea "`+n.Task.Title+`" (`+n.Project.Title+`).`). + Action("Abrir Tarea", config.ServicePublicURL.GetString()+"tasks/"+strconv.FormatInt(n.Task.ID, 10)). + Line("¡Qué tengas un buen día!") } // ToDB returns the ReminderDueNotification notification in a format which can be saved in the db @@ -80,14 +80,14 @@ func (n *TaskCommentNotification) ToMail() *notifications.Mail { if n.Mentioned { mail. - Line("**" + n.Doer.GetName() + "** mentioned you in a comment:"). - Subject(n.Doer.GetName() + ` mentioned you in a comment in "` + n.Task.Title + `"`) + Line("**" + n.Doer.GetName() + "** te mencionó en un comentario:"). + Subject(n.Doer.GetName() + ` the mencionó en un comentario de la tarea "` + n.Task.Title + `"`) } mail.HTML(n.Comment.Comment) return mail. - Action("View Task", n.Task.GetFrontendURL()) + Action("Ver Tarea", n.Task.GetFrontendURL()) } // ToDB returns the TaskCommentNotification notification in a format which can be saved in the db @@ -112,15 +112,15 @@ type TaskAssignedNotification struct { func (n *TaskAssignedNotification) ToMail() *notifications.Mail { if n.Target.ID == n.Assignee.ID { return notifications.NewMail(). - Subject("You have been assigned to "+n.Task.Title+"("+n.Task.GetFullIdentifier()+")"). - Line(n.Doer.GetName()+" has assigned you to "+n.Task.Title+"."). - Action("View Task", n.Task.GetFrontendURL()) + Subject("Has sido asignado a "+n.Task.Title+"("+n.Task.GetFullIdentifier()+")"). + Line(n.Doer.GetName()+" te ha asignado a la tarea "+n.Task.Title+"."). + Action("Ver Tarea", n.Task.GetFrontendURL()) } return notifications.NewMail(). - Subject(n.Task.Title+"("+n.Task.GetFullIdentifier()+")"+" has been assigned to "+n.Assignee.GetName()). - Line(n.Doer.GetName()+" has assigned this task to "+n.Assignee.GetName()+"."). - Action("View Task", n.Task.GetFrontendURL()) + Subject(n.Task.Title+"("+n.Task.GetFullIdentifier()+")"+" ha sido asignado a "+n.Assignee.GetName()). + Line(n.Doer.GetName()+" ha asignado esta tarea a "+n.Assignee.GetName()+"."). + Action("Ver Tarea", n.Task.GetFrontendURL()) } // ToDB returns the TaskAssignedNotification notification in a format which can be saved in the db @@ -142,8 +142,8 @@ type TaskDeletedNotification struct { // ToMail returns the mail notification for TaskDeletedNotification func (n *TaskDeletedNotification) ToMail() *notifications.Mail { return notifications.NewMail(). - Subject(n.Task.Title + " (" + n.Task.GetFullIdentifier() + ")" + " has been deleted"). - Line(n.Doer.GetName() + " has deleted the task " + n.Task.Title + " (" + n.Task.GetFullIdentifier() + ")") + Subject(n.Task.Title + " (" + n.Task.GetFullIdentifier() + ")" + " ha sido borrado"). + Line(n.Doer.GetName() + " ha borrado la tarea " + n.Task.Title + " (" + n.Task.GetFullIdentifier() + ")") } // ToDB returns the TaskDeletedNotification notification in a format which can be saved in the db @@ -165,9 +165,9 @@ type ProjectCreatedNotification struct { // ToMail returns the mail notification for ProjectCreatedNotification func (n *ProjectCreatedNotification) ToMail() *notifications.Mail { return notifications.NewMail(). - Subject(n.Doer.GetName()+` created the project "`+n.Project.Title+`"`). - Line(n.Doer.GetName()+` created the project "`+n.Project.Title+`"`). - Action("View Project", config.ServicePublicURL.GetString()+"projects/") + Subject(n.Doer.GetName()+` creó el proyecto "`+n.Project.Title+`"`). + Line(n.Doer.GetName()+` creó el proyecto "`+n.Project.Title+`"`). + Action("Ver Proyecto", config.ServicePublicURL.GetString()+"projects/") } // ToDB returns the ProjectCreatedNotification notification in a format which can be saved in the db @@ -190,11 +190,11 @@ type TeamMemberAddedNotification struct { // ToMail returns the mail notification for TeamMemberAddedNotification func (n *TeamMemberAddedNotification) ToMail() *notifications.Mail { return notifications.NewMail(). - Subject(n.Doer.GetName()+" added you to the "+n.Team.Name+" team in Vikunja"). + Subject(n.Doer.GetName()+" te añadió al equipo "+n.Team.Name). From(n.Doer.GetNameAndFromEmail()). Greeting("Hi "+n.Member.GetName()+","). - Line(n.Doer.GetName()+" has just added you to the "+n.Team.Name+" team in Vikunja."). - Action("View Team", config.ServicePublicURL.GetString()+"teams/"+strconv.FormatInt(n.Team.ID, 10)+"/edit") + Line(n.Doer.GetName()+" te acaba de añadir al equipo "+n.Team.Name+"."). + Action("Ver Equipo", config.ServicePublicURL.GetString()+"teams/"+strconv.FormatInt(n.Team.ID, 10)+"/edit") } // ToDB returns the TeamMemberAddedNotification notification in a format which can be saved in the db @@ -218,11 +218,11 @@ type UndoneTaskOverdueNotification struct { func (n *UndoneTaskOverdueNotification) ToMail() *notifications.Mail { until := time.Until(n.Task.DueDate).Round(1*time.Hour) * -1 return notifications.NewMail(). - Subject(`Task "`+n.Task.Title+`" (`+n.Project.Title+`) is overdue`). - Greeting("Hi "+n.User.GetName()+","). - Line(`This is a friendly reminder of the task "`+n.Task.Title+`" (`+n.Project.Title+`) which is overdue since `+utils.HumanizeDuration(until)+` and not yet done.`). - Action("Open Task", config.ServicePublicURL.GetString()+"tasks/"+strconv.FormatInt(n.Task.ID, 10)). - Line("Have a nice day!") + Subject(`La tarea "`+n.Task.Title+`" (`+n.Project.Title+`) está vencida`). + Greeting("Hola "+n.User.GetName()+","). + Line(`Este es un recordatorio amigable de que la tarea "`+n.Task.Title+`" (`+n.Project.Title+`) está vencida desde `+utils.HumanizeDuration(until)+` y aún no está completada.`). + Action("Abrir Tarea", config.ServicePublicURL.GetString()+"tasks/"+strconv.FormatInt(n.Task.ID, 10)). + Line("¡Qué tengas un buen día!") } // ToDB returns the UndoneTaskOverdueNotification notification in a format which can be saved in the db @@ -257,16 +257,16 @@ func (n *UndoneTasksOverdueNotification) ToMail() *notifications.Mail { overdueLine := "" for _, task := range sortedTasks { until := time.Until(task.DueDate).Round(1*time.Hour) * -1 - overdueLine += `* [` + task.Title + `](` + config.ServicePublicURL.GetString() + "tasks/" + strconv.FormatInt(task.ID, 10) + `) (` + n.Projects[task.ProjectID].Title + `), overdue since ` + utils.HumanizeDuration(until) + "\n" + overdueLine += `* [` + task.Title + `](` + config.ServicePublicURL.GetString() + "tasks/" + strconv.FormatInt(task.ID, 10) + `) (` + n.Projects[task.ProjectID].Title + `), vencida desde ` + utils.HumanizeDuration(until) + "\n" } return notifications.NewMail(). - Subject(`Your overdue tasks`). - Greeting("Hi "+n.User.GetName()+","). - Line("You have the following overdue tasks:"). + Subject(`Tus tareas vencidas`). + Greeting("Hola "+n.User.GetName()+","). + Line("Tienes las siguientes tareas vencidas:"). Line(overdueLine). - Action("Open Vikunja", config.ServicePublicURL.GetString()). - Line("Have a nice day!") + Action("Abrir Tareas", config.ServicePublicURL.GetString()). + Line("¡Qué tengas un buen día!") } // ToDB returns the UndoneTasksOverdueNotification notification in a format which can be saved in the db @@ -292,19 +292,19 @@ func (n *UserMentionedInTaskNotification) SubjectID() int64 { // ToMail returns the mail notification for UserMentionedInTaskNotification func (n *UserMentionedInTaskNotification) ToMail() *notifications.Mail { - subject := n.Doer.GetName() + ` mentioned you in a new task "` + n.Task.Title + `"` + subject := n.Doer.GetName() + ` te mencionó en la nueva tarea "` + n.Task.Title + `"` if n.IsNew { - subject = n.Doer.GetName() + ` mentioned you in a task "` + n.Task.Title + `"` + subject = n.Doer.GetName() + ` te mencionó en la tarea "` + n.Task.Title + `"` } mail := notifications.NewMail(). From(n.Doer.GetNameAndFromEmail()). Subject(subject). - Line("**" + n.Doer.GetName() + "** mentioned you in a task:"). + Line("**" + n.Doer.GetName() + "** te mencionó en la tarea:"). HTML(n.Task.Description) return mail. - Action("View Task", n.Task.GetFrontendURL()) + Action("Ver Tarea", n.Task.GetFrontendURL()) } // ToDB returns the UserMentionedInTaskNotification notification in a format which can be saved in the db @@ -325,12 +325,12 @@ type DataExportReadyNotification struct { // ToMail returns the mail notification for DataExportReadyNotification func (n *DataExportReadyNotification) ToMail() *notifications.Mail { return notifications.NewMail(). - Subject("Your Vikunja Data Export is ready"). - Greeting("Hi "+n.User.GetName()+","). - Line("Your Vikunja Data Export is ready for you to download. Click the button below to download it:"). - Action("Download", config.ServicePublicURL.GetString()+"user/export/download"). - Line("The download will be available for the next 7 days."). - Line("Have a nice day!") + Subject("Tus datos exportados están listos"). + Greeting("Hola "+n.User.GetName()+","). + Line("Tus datos exportados están listos para descargar. Oprime el siguiente botón para descargarlos:"). + Action("Descargar", config.ServicePublicURL.GetString()+"user/export/download"). + Line("La descarga estará disponible por los siguientes 7 días."). + Line("¡Qué tengas un buen día!") } // ToDB returns the DataExportReadyNotification notification in a format which can be saved in the db diff --git a/pkg/notifications/mail_render.go b/pkg/notifications/mail_render.go index 062bd9236..f2e043efc 100644 --- a/pkg/notifications/mail_render.go +++ b/pkg/notifications/mail_render.go @@ -77,7 +77,7 @@ const mailTemplateHTML = ` {{ if .ActionURL }}
- If the button above doesn't work, copy the url below and paste it in your browser's address bar:
+ Si el botón de arriba no funciona, copia el enlace de abajo y pégalo en la barra de búsqueda de tu navegador:
{{ .ActionURL }}