Merge branch 'bug/fix-instance-host-in-emails' into 'master'

🎨 Add fancy html emails

See merge request framasoft/mobilizon!192
This commit is contained in:
Thomas Citharel 2019-09-23 19:52:32 +02:00
commit b721a19464
17 changed files with 797 additions and 307 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@ -6,9 +6,6 @@ defmodule Mobilizon.Config do
@spec instance_config :: keyword @spec instance_config :: keyword
def instance_config, do: Application.get_env(:mobilizon, :instance) def instance_config, do: Application.get_env(:mobilizon, :instance)
@spec instance_url :: String.t()
def instance_url, do: instance_config()[:instance]
@spec instance_name :: String.t() @spec instance_name :: String.t()
def instance_name, do: instance_config()[:name] def instance_name, do: instance_config()[:name]

View File

@ -5,7 +5,7 @@ defmodule MobilizonWeb.Email.Admin do
use Bamboo.Phoenix, view: MobilizonWeb.EmailView use Bamboo.Phoenix, view: MobilizonWeb.EmailView
import Bamboo.{Email, Phoenix} import Bamboo.Phoenix
import MobilizonWeb.Gettext import MobilizonWeb.Gettext
@ -19,20 +19,17 @@ defmodule MobilizonWeb.Email.Admin do
def report(%User{email: email}, %Report{} = report, locale \\ "en") do def report(%User{email: email}, %Report{} = report, locale \\ "en") do
Gettext.put_locale(locale) Gettext.put_locale(locale)
instance_url = Config.instance_url()
subject = subject =
gettext( gettext(
"Mobilizon: New report on instance %{instance}", "New report on Mobilizon instance %{instance}",
instance: instance_url instance: Config.instance_name()
) )
Email.base_email() Email.base_email(to: email, subject: subject)
|> to(email) |> assign(:locale, locale)
|> subject(subject) |> assign(:subject, subject)
|> put_header("Reply-To", Config.instance_email_reply_to())
|> assign(:report, report) |> assign(:report, report)
|> assign(:instance, instance_url) |> render("report.html")
|> render(:report) |> Email.premail()
end end
end end

View File

@ -7,11 +7,24 @@ defmodule MobilizonWeb.Email do
alias Mobilizon.Config alias Mobilizon.Config
@spec base_email :: Bamboo.Email.t() @spec base_email(keyword()) :: Bamboo.Email.t()
def base_email do def base_email(args) do
new_email() instance = Config.instance_config()
new_email(args)
|> from(Config.instance_email_from()) |> from(Config.instance_email_from())
|> put_header("Reply-To", Config.instance_email_reply_to())
|> assign(:instance, instance)
|> put_html_layout({MobilizonWeb.EmailView, "email.html"}) |> put_html_layout({MobilizonWeb.EmailView, "email.html"})
|> put_text_layout({MobilizonWeb.EmailView, "email.text"}) |> put_text_layout(false)
end
def premail(email) do
html = Premailex.to_inline_css(email.html_body)
text = Premailex.to_text(email.html_body)
email
|> html_body(html)
|> text_body(text)
end end
end end

View File

@ -5,7 +5,7 @@ defmodule MobilizonWeb.Email.User do
use Bamboo.Phoenix, view: MobilizonWeb.EmailView use Bamboo.Phoenix, view: MobilizonWeb.EmailView
import Bamboo.{Email, Phoenix} import Bamboo.Phoenix
import MobilizonWeb.Gettext import MobilizonWeb.Gettext
@ -21,21 +21,18 @@ defmodule MobilizonWeb.Email.User do
) do ) do
Gettext.put_locale(locale) Gettext.put_locale(locale)
instance_url = Config.instance_url()
subject = subject =
gettext( gettext(
"Mobilizon: Confirmation instructions for %{instance}", "Instructions to confirm your Mobilizon account on %{instance}",
instance: instance_url instance: Config.instance_name()
) )
Email.base_email() Email.base_email(to: email, subject: subject)
|> to(email) |> assign(:locale, locale)
|> subject(subject)
|> put_header("Reply-To", Config.instance_email_reply_to())
|> assign(:token, confirmation_token) |> assign(:token, confirmation_token)
|> assign(:instance, instance_url) |> assign(:subject, subject)
|> render(:registration_confirmation) |> render("registration_confirmation.html")
|> Email.premail()
end end
@spec reset_password_email(User.t(), String.t()) :: Bamboo.Email.t() @spec reset_password_email(User.t(), String.t()) :: Bamboo.Email.t()
@ -45,20 +42,17 @@ defmodule MobilizonWeb.Email.User do
) do ) do
Gettext.put_locale(locale) Gettext.put_locale(locale)
instance_url = Config.instance_url()
subject = subject =
gettext( gettext(
"Mobilizon: Reset your password on %{instance} instructions", "Instructions to reset your password on %{instance}",
instance: instance_url instance: Config.instance_name()
) )
Email.base_email() Email.base_email(to: email, subject: subject)
|> to(email) |> assign(:locale, locale)
|> subject(subject)
|> put_header("Reply-To", Config.instance_email_reply_to())
|> assign(:token, reset_password_token) |> assign(:token, reset_password_token)
|> assign(:instance, instance_url) |> assign(:subject, subject)
|> render(:password_reset) |> render("password_reset.html")
|> Email.premail()
end end
end end

View File

@ -1,10 +1,138 @@
<html> <!-- THIS EMAIL WAS BUILT AND TESTED WITH LITMUS http://litmus.com -->
<head> <!-- IT WAS RELEASED UNDER THE MIT LICENSE https://opensource.org/licenses/MIT -->
<link rel="stylesheet" href="<%= static_url(MobilizonWeb.Endpoint, "/css/email.css") %>"> <!-- QUESTIONS? TWEET US @LITMUSAPP -->
</head> <!DOCTYPE html>
<body> <html lang="<%= @locale %>">
<%= render @view_module, @view_template, assigns %> <head>
<title><%= @subject %></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<style type="text/css">
/* CLIENT-SPECIFIC STYLES */
body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; }
img { -ms-interpolation-mode: bicubic; }
<p><%= gettext "An email sent by Mobilizon on %{instance}.", instance: @instance %></p> /* RESET STYLES */
</body> img { border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; }
table { border-collapse: collapse !important; }
body { height: 100% !important; margin: 0 !important; padding: 0 !important; width: 100% !important; }
/* iOS BLUE LINKS */
a[x-apple-data-detectors] {
color: inherit !important;
text-decoration: none !important;
font-size: inherit !important;
font-family: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
}
/* MOBILE STYLES */
@media screen and (max-width:600px){
h1 {
font-size: 32px !important;
line-height: 32px !important;
}
}
/* ANDROID CENTER FIX */
div[style*="margin: 16px 0;"] { margin: 0 !important; }
</style>
</head>
<body style="background-color: #f4f4f4; margin: 0 !important; padding: 0 !important;">
<!-- HIDDEN PREHEADER TEXT -->
<!--<div style="display: none; font-size: 1px; color: #fefefe; line-height: 1px; font-family: 'Lato', Helvetica, Arial, sans-serif; max-height: 0px; max-width: 0px; opacity: 0; overflow: hidden;">
Looks like you tried signing in a few too many times. Let's see if we can get you back into your account.
</div>-->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<!-- LOGO -->
<tr>
<td bgcolor="#424056" align="center">
<!--[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 align="center" valign="top" style="padding: 40px 10px 40px 10px;">
<a href="<%= MobilizonWeb.Endpoint.url() %>" target="_blank">
<img alt="Logo" src="<%= "#{MobilizonWeb.Endpoint.url()}/img/mobilizon_logo.png" %>" width="366" height="108" style="display: block; width: 366px; max-width: 366px; min-width: 366px; font-family: 'Lato', Helvetica, Arial, sans-serif; color: #ffffff; font-size: 18px;" border="0">
</a>
</td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<%= render @view_module, @view_template, assigns %>
<!-- SUPPORT CALLOUT -->
<tr>
<td bgcolor="#f4f4f4" align="center" style="padding: 30px 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;" >
<!-- HEADLINE -->
<tr>
<td bgcolor="#C6C2ED" align="center" style="padding: 30px 30px 30px 30px; border-radius: 4px 4px 4px 4px; color: #666666; font-family: 'Lato', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" >
<h2 style="font-size: 20px; font-weight: 400; color: #111111; margin: 0;">
<%= gettext "Need some help? Something not working properly?" %>
</h2>
<p style="margin: 0;"><a href="https://framacolibri.org/c/mobilizon" target="_blank" style="color: #424056;">
<%= gettext "Ask the community on Framacolibri" %>
</a></p>
</td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<!-- FOOTER -->
<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;" >
<!-- UNSUBSCRIBE -->
<!--<tr>
<td bgcolor="#f4f4f4" align="left" style="padding: 30px 30px 30px 30px; color: #666666; font-family: 'Lato', Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 400; line-height: 18px;" >
<p style="margin: 0;">If these emails get annoying, please feel free to <a href="http://litmus.com" target="_blank" style="color: #111111; font-weight: 700;">unsubscribe</a>.</p>
</td>
</tr>-->
<!-- ADDRESS -->
<tr>
<td bgcolor="#f4f4f4" align="center" style="padding: 0px 30px 30px 30px; color: #666666; font-family: 'Lato', Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 400; line-height: 18px;" >
<p style="margin: 0;">
<%= gettext "%{instance} is a Mobilizon server.", instance: @instance[:name] %>
<a href="https://joinmobilizon.org"><%= gettext "Learn more about Mobilizon." %></a>
</p>
</td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
</table>
</body>
</html> </html>

View File

@ -1,5 +1,105 @@
<h1><%= gettext "Password reset" %></h1> <!-- HERO -->
<p><%= gettext "You requested a new password for your account on %{host}.", host: @instance %></p> <tr>
<p><%= gettext "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." %></p> <td bgcolor="#424056" align="center" style="padding: 0px 10px 0px 10px;">
<!--[if (gte mso 9)|(IE)]>
<p><%= link "Change password", to: MobilizonWeb.Endpoint.url() <> "/password-reset/#{@token}", target: "_blank" %></p> <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; letter-spacing: 4px; line-height: 48px;">
<h1 style="font-size: 48px; font-weight: 400; margin: 0;">
<%= gettext "Trouble signing in?" %>
</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;">
<%= gettext "You requested a new password for your account on %{server}.", server: @instance[:name] %>
</p>
<p style="margin: 0">
<%= gettext "Resetting your password is easy. Just press the button below and follow the instructions. We'll have you up and running in no time." %>
</p>
</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 "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." %>
</p>
</td>
</tr>
<!-- BULLETPROOF BUTTON -->
<tr>
<td bgcolor="#ffffff" align="left">
<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="<%= "#{MobilizonWeb.Endpoint.url()}/password-reset/#{@token}" %>" 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 "Reset Password" %>
</a></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<!-- SUPPORT CALLOUT -->
<tr>
<td bgcolor="#f4f4f4" align="center" style="padding: 30px 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;" >
<!-- HEADLINE -->
<tr>
<td bgcolor="#C6C2ED" align="center" style="padding: 30px 30px 30px 30px; border-radius: 4px 4px 4px 4px; color: #666666; font-family: 'Lato', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" >
<h2 style="font-size: 20px; font-weight: 400; color: #111111; margin: 0;">
<%= gettext "Need some help? Something not working properly?" %>
</h2>
<p style="margin: 0;"><a href="https://framacolibri.org/c/mobilizon" target="_blank" style="color: #424056;">
<%= gettext "Ask the community on Framacolibri" %>
</a></p>
</td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>

View File

@ -1,11 +0,0 @@
<%= gettext "Password reset" %>
==
<%= gettext "You requested a new password for your account on %{host}.", host: @instance %>
<%= gettext "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." %>
<%= MobilizonWeb.Endpoint.url() <> "/password-reset/#{@token}" %>

View File

@ -1,4 +1,74 @@
<h1><%= gettext "Confirm the email address" %></h1> <!-- HERO -->
<p><%= gettext "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.", host: @instance %></p> <tr>
<td bgcolor="#424056" align="center" style="padding: 0px 10px 0px 10px;">
<p><%= link "Confirm your email address", to: MobilizonWeb.Endpoint.url() <> "/validate/#{@token}", target: "_blank" %></p> <!--[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; letter-spacing: 4px; line-height: 48px;">
<h1 style="font-size: 48px; font-weight: 400; margin: 0;">
<%= gettext "Nearly here!" %>
</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;">
<%= gettext "You created an account on %{host} with this email address. You are one click away from activating it.", host: @instance[:name] %>
</p>
</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 "If you didn't request this, please ignore this email." %>
</p>
</td>
</tr>
<!-- BULLETPROOF BUTTON -->
<tr>
<td bgcolor="#ffffff" align="left">
<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="<%= "#{MobilizonWeb.Endpoint.url()}/validate/#{@token}" %>" 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 "Activate my account" %>
</a></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>

View File

@ -1,9 +0,0 @@
<%= gettext "Confirm the email address" %>
==
<%= gettext "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.", host: @instance %>
<%= MobilizonWeb.Endpoint.url() <> "/validate/#{@token}" %>

View File

@ -1,15 +1,116 @@
<h1><%= gettext "New report from %{reporter} on %{instance}", reporter: @report.reporter.preferred_username, instance: @instance %></h1> <!-- HERO -->
<tr>
<% if @report.event do %> <td bgcolor="#424056" align="center" style="padding: 0px 10px 0px 10px;">
<p><%= gettext "Event: %{event}", event: @report.event.title %></p> <!--[if (gte mso 9)|(IE)]>
<% end %> <table align="center" border="0" cellspacing="0" cellpadding="0" width="600">
<tr>
<%= for comment <- @report.comments do %> <td align="center" valign="top" width="600">
<p><%= gettext "Comment: %{comment}", comment: comment %></p> <![endif]-->
<% end %> <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;" >
<tr>
<% if @report.content do %> <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; letter-spacing: 4px; line-height: 48px;">
<p><%= gettext "Reason: %{content}", event: @report.content %></p> <h1 style="font-size: 48px; font-weight: 400; margin: 0;">
<% end %> <%= gettext "New report on %{instance}", instance: @instance[:name] %>
</h1>
<p><%= link "View the report", to: moderation_report_url(MobilizonWeb.Endpoint, :index, @report.id), target: "_blank" %></p> </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;">
<%= gettext "%{reporter_name} (%{reporter_username}) reported the following content.", reporter_name: @report.reporter.name, reporter_username: Mobilizon.Actors.Actor.preferred_username_and_domain(@report.reporter) %>
</p>
</td>
</tr>
<%= if Map.has_key?(@report, :event) do %>
<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;">
<h3><%= gettext "Event" %></h3>
<a href="<%= "#{MobilizonWeb.Endpoint.url()}/events/#{@report.event.uuid}" %>" target="_blank">
<%= gettext "%{title} by %{creator}", title: @report.event.title, creator: Mobilizon.Actors.Actor.preferred_username_and_domain(@report.reported) %>
</a>
</p>
<table cellspacing="0" cellpadding="0" border="0" width="100%" style="width: 100% !important;">
<tr>
<td align="left" valign="top" width="600px" height="1" style="background-color: #f0f0f0; border-collapse:collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; mso-line-height-rule: exactly; line-height: 1px;"><!--[if gte mso 15]>&nbsp;<![endif]--></td>
</tr>
</table>
</td>
</tr>
<% end %>
<%= if Map.has_key?(@report, :comments) && length(@report.comments) > 0 do %>
<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><%= gettext "Comments" %></p>
<%= for comment <- @report.comments do %>
<p style="margin: 0;">
<%= comment.text %>
</p>
<% end %>
<table cellspacing="0" cellpadding="0" border="0" width="100%" style="width: 100% !important;">
<tr>
<td align="left" valign="top" width="600px" height="1" style="background-color: #f0f0f0; border-collapse:collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; mso-line-height-rule: exactly; line-height: 1px;"><!--[if gte mso 15]>&nbsp;<![endif]--></td>
</tr>
</table>
</td>
</tr>
<% end %>
<%= if Map.has_key?(@report, :content) do %>
<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">
<h3><%= gettext "Reason" %></h3>
<%= @report.content %>
</p>
<table cellspacing="0" cellpadding="0" border="0" width="100%" style="width: 100% !important;">
<tr>
<td align="left" valign="top" width="600px" height="1" style="background-color: #f0f0f0; border-collapse:collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; mso-line-height-rule: exactly; line-height: 1px;"><!--[if gte mso 15]>&nbsp;<![endif]--></td>
</tr>
</table>
</td>
</tr>
<% end %>
<!-- BULLETPROOF BUTTON -->
<tr>
<td bgcolor="#ffffff" align="left">
<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="<%= moderation_report_url(MobilizonWeb.Endpoint, :index, @report.id) %>" 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 "View the report" %>
</a></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>

View File

@ -1,19 +0,0 @@
<%= gettext "New report from %{reporter} on %{instance}", reporter: @report.reporter.preferred_username, instance: @instance %>
--
<% if @report.event do %>
<%= gettext "Event: %{event}", event: @report.event.title %>
<% end %>
<%= for comment <- @report.comments do %>
<%= gettext "Comment: %{comment}", comment: comment.text %>
<% end %>
<% if @report.content do %>
<%= gettext "Reason: %{content}", event: @report.content %>
<% end %>
View the report: <%= moderation_report_url(MobilizonWeb.Endpoint, :index, @report.id) %>

View File

@ -90,6 +90,7 @@ defmodule Mobilizon.Mixfile do
{:earmark, "~> 1.3.1"}, {:earmark, "~> 1.3.1"},
{:geohax, "~> 0.3.0"}, {:geohax, "~> 0.3.0"},
{:mogrify, "~> 0.7.2"}, {:mogrify, "~> 0.7.2"},
{:premailex, "~> 0.3.0"},
{:auto_linker, {:auto_linker,
git: "https://git.pleroma.social/pleroma/auto_linker.git", git: "https://git.pleroma.social/pleroma/auto_linker.git",
ref: "95e8188490e97505c56636c1379ffdf036c1fdde"}, ref: "95e8188490e97505c56636c1379ffdf036c1fdde"},

View File

@ -47,6 +47,7 @@
"exvcr": {:hex, :exvcr, "0.10.3", "1ae3b97560430acfa88ebc737c85b2b7a9dbacd8a2b26789a19718b51ae3522c", [:mix], [{:exactor, "~> 2.2", [hex: :exactor, repo: "hexpm", optional: false]}, {:exjsx, "~> 4.0", [hex: :exjsx, repo: "hexpm", optional: false]}, {:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: true]}, {:httpotion, "~> 3.1", [hex: :httpotion, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:meck, "~> 0.8", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm"}, "exvcr": {:hex, :exvcr, "0.10.3", "1ae3b97560430acfa88ebc737c85b2b7a9dbacd8a2b26789a19718b51ae3522c", [:mix], [{:exactor, "~> 2.2", [hex: :exactor, repo: "hexpm", optional: false]}, {:exjsx, "~> 4.0", [hex: :exjsx, repo: "hexpm", optional: false]}, {:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: true]}, {:httpotion, "~> 3.1", [hex: :httpotion, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:meck, "~> 0.8", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm"},
"feeder": {:hex, :feeder, "2.2.4", "56ec535cf2f79719bc53b5c2abe5f6cf481fc01e5ae6229ab7cc829644f039ec", [:make], [], "hexpm"}, "feeder": {:hex, :feeder, "2.2.4", "56ec535cf2f79719bc53b5c2abe5f6cf481fc01e5ae6229ab7cc829644f039ec", [:make], [], "hexpm"},
"file_system": {:hex, :file_system, "0.2.7", "e6f7f155970975789f26e77b8b8d8ab084c59844d8ecfaf58cbda31c494d14aa", [:mix], [], "hexpm"}, "file_system": {:hex, :file_system, "0.2.7", "e6f7f155970975789f26e77b8b8d8ab084c59844d8ecfaf58cbda31c494d14aa", [:mix], [], "hexpm"},
"floki": {:hex, :floki, "0.23.0", "956ab6dba828c96e732454809fb0bd8d43ce0979b75f34de6322e73d4c917829", [:mix], [{:html_entities, "~> 0.4.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm"},
"gen_smtp": {:hex, :gen_smtp, "0.14.0", "39846a03522456077c6429b4badfd1d55e5e7d0fdfb65e935b7c5e38549d9202", [:rebar3], [], "hexpm"}, "gen_smtp": {:hex, :gen_smtp, "0.14.0", "39846a03522456077c6429b4badfd1d55e5e7d0fdfb65e935b7c5e38549d9202", [:rebar3], [], "hexpm"},
"geo": {:hex, :geo, "3.1.0", "727e005262430d037e870ff364e65d80ca5ca21d5ac8eddd57a1ada72c3f83b0", [:mix], [], "hexpm"}, "geo": {:hex, :geo, "3.1.0", "727e005262430d037e870ff364e65d80ca5ca21d5ac8eddd57a1ada72c3f83b0", [:mix], [], "hexpm"},
"geo_postgis": {:hex, :geo_postgis, "3.1.0", "d06c8fa5fd140a52a5c9dab4ad6623a696dd7d99dd791bb361d3f94942442ff9", [:mix], [{:geo, "~> 3.1", [hex: :geo, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0 or ~> 4.0", [hex: :poison, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}], "hexpm"}, "geo_postgis": {:hex, :geo_postgis, "3.1.0", "d06c8fa5fd140a52a5c9dab4ad6623a696dd7d99dd791bb361d3f94942442ff9", [:mix], [{:geo, "~> 3.1", [hex: :geo, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0 or ~> 4.0", [hex: :poison, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}], "hexpm"},
@ -56,6 +57,7 @@
"guardian": {:hex, :guardian, "1.2.1", "bdc8dd3dbf0fb7216cb6f91c11831faa1a64d39cdaed9a611e37f2413e584983", [:mix], [{:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.3", [hex: :phoenix, repo: "hexpm", optional: true]}, {:plug, "~> 1.3.3 or ~> 1.4", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm"}, "guardian": {:hex, :guardian, "1.2.1", "bdc8dd3dbf0fb7216cb6f91c11831faa1a64d39cdaed9a611e37f2413e584983", [:mix], [{:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.3", [hex: :phoenix, repo: "hexpm", optional: true]}, {:plug, "~> 1.3.3 or ~> 1.4", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm"},
"guardian_db": {:hex, :guardian_db, "2.0.1", "e62e383197e957cb9c6683926d45056ab814eb0362e3de7f65d4619ae19544e8", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "~> 3.1.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:guardian, "~> 1.0", [hex: :guardian, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.13", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm"}, "guardian_db": {:hex, :guardian_db, "2.0.1", "e62e383197e957cb9c6683926d45056ab814eb0362e3de7f65d4619ae19544e8", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "~> 3.1.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:guardian, "~> 1.0", [hex: :guardian, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.13", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm"},
"hackney": {:hex, :hackney, "1.15.1", "9f8f471c844b8ce395f7b6d8398139e26ddca9ebc171a8b91342ee15a19963f4", [:rebar3], [{:certifi, "2.5.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.4", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"}, "hackney": {:hex, :hackney, "1.15.1", "9f8f471c844b8ce395f7b6d8398139e26ddca9ebc171a8b91342ee15a19963f4", [:rebar3], [{:certifi, "2.5.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.4", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},
"html_entities": {:hex, :html_entities, "0.4.0", "f2fee876858cf6aaa9db608820a3209e45a087c5177332799592142b50e89a6b", [:mix], [], "hexpm"},
"html_sanitize_ex": {:hex, :html_sanitize_ex, "1.3.0", "f005ad692b717691203f940c686208aa3d8ffd9dd4bb3699240096a51fa9564e", [:mix], [{:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm"}, "html_sanitize_ex": {:hex, :html_sanitize_ex, "1.3.0", "f005ad692b717691203f940c686208aa3d8ffd9dd4bb3699240096a51fa9564e", [:mix], [{:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm"},
"http_sign": {:hex, :http_sign, "0.1.1", "b16edb83aa282892f3271f9a048c155e772bf36e15700ab93901484c55f8dd10", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, "http_sign": {:hex, :http_sign, "0.1.1", "b16edb83aa282892f3271f9a048c155e772bf36e15700ab93901484c55f8dd10", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"},
"http_signatures": {:git, "https://git.pleroma.social/pleroma/http_signatures.git", "293d77bb6f4a67ac8bde1428735c3b42f22cbb30", [ref: "293d77bb6f4a67ac8bde1428735c3b42f22cbb30"]}, "http_signatures": {:git, "https://git.pleroma.social/pleroma/http_signatures.git", "293d77bb6f4a67ac8bde1428735c3b42f22cbb30", [ref: "293d77bb6f4a67ac8bde1428735c3b42f22cbb30"]},
@ -91,6 +93,7 @@
"poison": {:hex, :poison, "4.0.1", "bcb755a16fac91cad79bfe9fc3585bb07b9331e50cfe3420a24bcc2d735709ae", [:mix], [], "hexpm"}, "poison": {:hex, :poison, "4.0.1", "bcb755a16fac91cad79bfe9fc3585bb07b9331e50cfe3420a24bcc2d735709ae", [:mix], [], "hexpm"},
"poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm"},
"postgrex": {:hex, :postgrex, "0.15.0", "dd5349161019caeea93efa42f9b22f9d79995c3a86bdffb796427b4c9863b0f0", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm"}, "postgrex": {:hex, :postgrex, "0.15.0", "dd5349161019caeea93efa42f9b22f9d79995c3a86bdffb796427b4c9863b0f0", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm"},
"premailex": {:hex, :premailex, "0.3.8", "708f7e56d4753d0cbd3fce32e475fc5a00e6da44bf41b630684dbd35beb5263b", [:mix], [{:certifi, ">= 0.0.0", [hex: :certifi, repo: "hexpm", optional: true]}, {:floki, ">= 0.19.0 or < 0.21.0", [hex: :floki, repo: "hexpm", optional: false]}, {:meeseeks, ">= 0.9.0 or < 0.11.0", [hex: :meeseeks, repo: "hexpm", optional: true]}, {:ssl_verify_fun, ">= 0.0.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: true]}], "hexpm"},
"ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm"}, "ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm"},
"rdf": {:hex, :rdf, "0.6.1", "e5464a7c0d91719bef6870eafe7efb3786c5622e4de592c84b8a32308de66c89", [:mix], [{:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm"}, "rdf": {:hex, :rdf, "0.6.1", "e5464a7c0d91719bef6870eafe7efb3786c5622e4de592c84b8a32308de66c89", [:mix], [{:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm"},
"rsa_ex": {:hex, :rsa_ex, "0.4.0", "e28dd7dc5236e156df434af0e4aa822384c8866c928e17b785d4edb7c253b558", [:mix], [], "hexpm"}, "rsa_ex": {:hex, :rsa_ex, "0.4.0", "e28dd7dc5236e156df434af0e4aa822384c8866c928e17b785d4edb7c253b558", [:mix], [], "hexpm"},

View File

@ -1,79 +1,126 @@
#, elixir-format #, elixir-format
#: lib/mobilizon_web/templates/email/email.html.eex:8
#: lib/mobilizon_web/templates/email/email.text.eex:3 #: lib/mobilizon_web/templates/email/email.text.eex:3
msgid "An email sent by Mobilizon on %{instance}." msgid "An email sent by Mobilizon on %{instance}."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:1 #: lib/mobilizon_web/templates/email/password_reset.html.eex:48
#: lib/mobilizon_web/templates/email/registration_confirmation.text.eex:1
msgid "Confirm the email address"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:3
#: lib/mobilizon_web/templates/email/password_reset.text.eex:7
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." 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 "" msgstr ""
#, elixir-format
#: lib/mobilizon/email/user.ex:19
msgid "Mobilizon: Confirmation instructions for %{instance}"
msgstr ""
#, elixir-format
#: lib/mobilizon/email/user.ex:34
msgid "Mobilizon: Reset your password on %{instance} instructions"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:1
#: lib/mobilizon_web/templates/email/password_reset.text.eex:1
msgid "Password reset"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:2
#: lib/mobilizon_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 ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:2
#: lib/mobilizon_web/templates/email/password_reset.text.eex:5
msgid "You requested a new password for your account on %{host}."
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:8
#: lib/mobilizon_web/templates/email/report.text.eex:10
msgid "Comment: %{comment}"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:4
#: lib/mobilizon_web/templates/email/report.text.eex:6
msgid "Event: %{event}"
msgstr ""
#, elixir-format #, elixir-format
#: lib/service/export/feed.ex:161 #: lib/service/export/feed.ex:161
msgid "Feed for %{email} on Mobilizon" msgid "Feed for %{email} on Mobilizon"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/mobilizon/email/admin.ex:19 #: lib/mobilizon_web/templates/email/email.html.eex:122
msgid "Mobilizon: New report on instance %{instance}" msgid "%{instance} is a Mobilizon server."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:1 #: lib/mobilizon_web/templates/email/report.html.eex:38
#: lib/mobilizon_web/templates/email/report.text.eex:1 msgid "%{reporter_name} (%{reporter_username}) reported the following content."
msgid "New report from %{reporter} on %{instance}"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:12 #: lib/mobilizon_web/templates/email/report.html.eex:48
#: lib/mobilizon_web/templates/email/report.text.eex:14 msgid "%{title} by %{creator}"
msgid "Reason: %{content}" msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:58
msgid "Activate my account"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/email.html.eex:91
#: lib/mobilizon_web/templates/email/password_reset.html.eex:94
msgid "Ask the community on Framacolibri"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:62
msgid "Comments"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:46
msgid "Event"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:45
msgid "If you didn't request this, please ignore this email."
msgstr ""
#, elixir-format
#: lib/mobilizon_web/email/user.ex:46
msgid "Instructions to reset your password on %{instance}"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/email.html.eex:123
msgid "Learn more about Mobilizon."
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:13
msgid "Nearly here!"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/email.html.eex:88
#: lib/mobilizon_web/templates/email/password_reset.html.eex:91
msgid "Need some help? Something not working properly?"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:13
msgid "New report on %{instance}"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:80
msgid "Reason"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:61
msgid "Reset Password"
msgstr ""
#, elixir-format
#: lib/mobilizon_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 ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:13
msgid "Trouble signing in?"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:100
msgid "View the report"
msgstr ""
#, elixir-format
#: lib/mobilizon_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 ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:38
msgid "You requested a new password for your account on %{server}."
msgstr ""
#, elixir-format
#: lib/mobilizon_web/email/user.ex:25
msgid "Instructions to confirm your Mobilizon account on %{instance}"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/email/admin.ex:23
msgid "New report on Mobilizon instance %{instance}"
msgstr "" msgstr ""

View File

@ -12,81 +12,128 @@ msgstr ""
"Plural-Forms: nplurals=2\n" "Plural-Forms: nplurals=2\n"
#, elixir-format #, elixir-format
#: lib/mobilizon_web/templates/email/email.html.eex:8
#: lib/mobilizon_web/templates/email/email.text.eex:3 #: lib/mobilizon_web/templates/email/email.text.eex:3
msgid "An email sent by Mobilizon on %{instance}." msgid "An email sent by Mobilizon on %{instance}."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:1 #: lib/mobilizon_web/templates/email/password_reset.html.eex:48
#: lib/mobilizon_web/templates/email/registration_confirmation.text.eex:1
msgid "Confirm the email address"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:3
#: lib/mobilizon_web/templates/email/password_reset.text.eex:7
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." 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 "" msgstr ""
#, elixir-format
#: lib/mobilizon/email/user.ex:19
msgid "Mobilizon: Confirmation instructions for %{instance}"
msgstr ""
#, elixir-format
#: lib/mobilizon/email/user.ex:34
msgid "Mobilizon: Reset your password on %{instance} instructions"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:1
#: lib/mobilizon_web/templates/email/password_reset.text.eex:1
msgid "Password reset"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:2
#: lib/mobilizon_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 ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:2
#: lib/mobilizon_web/templates/email/password_reset.text.eex:5
msgid "You requested a new password for your account on %{host}."
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:8
#: lib/mobilizon_web/templates/email/report.text.eex:10
msgid "Comment: %{comment}"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:4
#: lib/mobilizon_web/templates/email/report.text.eex:6
msgid "Event: %{event}"
msgstr ""
#, elixir-format #, elixir-format
#: lib/service/export/feed.ex:161 #: lib/service/export/feed.ex:161
msgid "Feed for %{email} on Mobilizon" msgid "Feed for %{email} on Mobilizon"
msgstr "" msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/email.html.eex:122
msgid "%{instance} is a Mobilizon server."
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:38
msgid "%{reporter_name} (%{reporter_username}) reported the following content."
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:48
msgid "%{title} by %{creator}"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:58
msgid "Activate my account"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/email.html.eex:91
#: lib/mobilizon_web/templates/email/password_reset.html.eex:94
msgid "Ask the community on Framacolibri"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:62
msgid "Comments"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:46
msgid "Event"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:45
msgid "If you didn't request this, please ignore this email."
msgstr ""
#, elixir-format
#: lib/mobilizon_web/email/user.ex:46
msgid "Instructions to reset your password on %{instance}"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/email.html.eex:123
msgid "Learn more about Mobilizon."
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:13
msgid "Nearly here!"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/email.html.eex:88
#: lib/mobilizon_web/templates/email/password_reset.html.eex:91
msgid "Need some help? Something not working properly?"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:13
msgid "New report on %{instance}"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:80
msgid "Reason"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:61
msgid "Reset Password"
msgstr ""
#, elixir-format
#: lib/mobilizon_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 ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:13
msgid "Trouble signing in?"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:100
msgid "View the report"
msgstr ""
#, elixir-format
#: lib/mobilizon_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 ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:38
msgid "You requested a new password for your account on %{server}."
msgstr ""
#, elixir-format
#: lib/mobilizon_web/email/user.ex:25
msgid "Instructions to confirm your Mobilizon account on %{instance}"
msgstr ""
#, elixir-format, fuzzy #, elixir-format, fuzzy
#: lib/mobilizon/email/admin.ex:19 #: lib/mobilizon_web/email/admin.ex:23
msgid "Mobilizon: New report on instance %{instance}" msgid "New report on Mobilizon instance %{instance}"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:1
#: lib/mobilizon_web/templates/email/report.text.eex:1
msgid "New report from %{reporter} on %{instance}"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:12
#: lib/mobilizon_web/templates/email/report.text.eex:14
msgid "Reason: %{content}"
msgstr "" msgstr ""

View File

@ -1,92 +1,123 @@
## `msgid`s in this file come from POT (.pot) files. # # `msgid`s in this file come from POT (.pot) files.
## # #
## Do not add, change, or remove `msgid`s manually here as # # Do not add, change, or remove `msgid`s manually here as
## they're tied to the ones in the corresponding POT file # # they're tied to the ones in the corresponding POT file
## (with the same domain). # # (with the same domain).
## # #
## Use `mix gettext.extract --merge` or `mix gettext.merge` # # Use `mix gettext.extract --merge` or `mix gettext.merge`
## to merge POT files into PO files. # # to merge POT files into PO files.
msgid "" msgid ""
msgstr "" msgstr ""
"Language: fr_FR\n" "Language: fr_FR\n"
"Plural-Forms: nplurals=2\n" "Plural-Forms: nplurals=2;\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.3\n"
#, elixir-format
#: lib/mobilizon_web/templates/email/email.html.eex:8
#: lib/mobilizon_web/templates/email/email.text.eex:3 #: lib/mobilizon_web/templates/email/email.text.eex:3
msgid "An email sent by Mobilizon on %{instance}." msgid "An email sent by Mobilizon on %{instance}."
msgstr "" msgstr ""
#, elixir-format #: lib/mobilizon_web/templates/email/password_reset.html.eex:48
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:1
#: lib/mobilizon_web/templates/email/registration_confirmation.text.eex:1
msgid "Confirm the email address"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:3
#: lib/mobilizon_web/templates/email/password_reset.text.eex:7
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." 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 "" msgstr "Si vous n'avez pas demandé ceci, vous pouvez ignorer cet email. Votre mot de passe ne changera pas tant que vous n'accédez pas au lien ci-dessous et que vous en définissiez un nouveau."
#, elixir-format
#: lib/mobilizon/email/user.ex:19
msgid "Mobilizon: Confirmation instructions for %{instance}"
msgstr ""
#, elixir-format
#: lib/mobilizon/email/user.ex:34
msgid "Mobilizon: Reset your password on %{instance} instructions"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:1
#: lib/mobilizon_web/templates/email/password_reset.text.eex:1
msgid "Password reset"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:2
#: lib/mobilizon_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 ""
#, elixir-format
#: lib/mobilizon_web/templates/email/password_reset.html.eex:2
#: lib/mobilizon_web/templates/email/password_reset.text.eex:5
msgid "You requested a new password for your account on %{host}."
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:8
#: lib/mobilizon_web/templates/email/report.text.eex:10
msgid "Comment: %{comment}"
msgstr ""
#, elixir-format
#: lib/mobilizon_web/templates/email/report.html.eex:4
#: lib/mobilizon_web/templates/email/report.text.eex:6
msgid "Event: %{event}"
msgstr ""
#, elixir-format
#: lib/service/export/feed.ex:161 #: lib/service/export/feed.ex:161
msgid "Feed for %{email} on Mobilizon" msgid "Feed for %{email} on Mobilizon"
msgstr "" msgstr "Flux pour %{email} sur Mobilizon"
#, elixir-format, fuzzy #: lib/mobilizon_web/templates/email/email.html.eex:122
#: lib/mobilizon/email/admin.ex:19 msgid "%{instance} is a Mobilizon server."
msgid "Mobilizon: New report on instance %{instance}" msgstr "%{instance} est une instance Mobilizon."
msgstr ""
#, elixir-format #: lib/mobilizon_web/templates/email/report.html.eex:38
#: lib/mobilizon_web/templates/email/report.html.eex:1 msgid "%{reporter_name} (%{reporter_username}) reported the following content."
#: lib/mobilizon_web/templates/email/report.text.eex:1 msgstr "%{reporter_name} (%{reporter_username}) a signalé le contenu suivant."
msgid "New report from %{reporter} on %{instance}"
msgstr ""
#, elixir-format #: lib/mobilizon_web/templates/email/report.html.eex:48
#: lib/mobilizon_web/templates/email/report.html.eex:12 msgid "%{title} by %{creator}"
#: lib/mobilizon_web/templates/email/report.text.eex:14 msgstr "%{title} par %{creator}"
msgid "Reason: %{content}"
msgstr "" #: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:58
msgid "Activate my account"
msgstr "Activer mon compte"
#: lib/mobilizon_web/templates/email/email.html.eex:91
#: lib/mobilizon_web/templates/email/password_reset.html.eex:94
msgid "Ask the community on Framacolibri"
msgstr "Demander à la communauté sur Framacolibri"
#: lib/mobilizon_web/templates/email/report.html.eex:62
msgid "Comments"
msgstr "Commentaires"
#: lib/mobilizon_web/templates/email/report.html.eex:46
msgid "Event"
msgstr "Événement"
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:45
msgid "If you didn't request this, please ignore this email."
msgstr "Si vous n'avez pas demandé ceci, merci d'ignorer cet email."
#: lib/mobilizon_web/email/user.ex:46
msgid "Instructions to reset your password on %{instance}"
msgstr "Instructions pour réinitialiser votre mot de passe sur %{instance}"
#: lib/mobilizon_web/templates/email/email.html.eex:123
msgid "Learn more about Mobilizon."
msgstr "En apprendre plus à propos de Mobilizon."
#: lib/mobilizon_web/templates/email/registration_confirmation.html.eex:13
msgid "Nearly here!"
msgstr "Vous y êtes presque !"
#: lib/mobilizon_web/templates/email/email.html.eex:88
#: lib/mobilizon_web/templates/email/password_reset.html.eex:91
msgid "Need some help? Something not working properly?"
msgstr "Besoin d'aide ? Quelque chose ne fonctionne pas correctement ?"
#: lib/mobilizon_web/templates/email/report.html.eex:13
msgid "New report on %{instance}"
msgstr "Nouveau signalement sur %{instance}"
#: lib/mobilizon_web/templates/email/report.html.eex:80
msgid "Reason"
msgstr "Raison"
#: lib/mobilizon_web/templates/email/password_reset.html.eex:61
msgid "Reset Password"
msgstr "Réinitialiser mon mot de passe"
#: lib/mobilizon_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 "Réinitialiser votre mot de passe est facile. Cliquez simplement sur le bouton et suivez les inscriptions. Vous serez opérationnel en un rien de temps."
#: lib/mobilizon_web/templates/email/password_reset.html.eex:13
msgid "Trouble signing in?"
msgstr "Des problèmes à vous connecter ?"
#: lib/mobilizon_web/templates/email/report.html.eex:100
msgid "View the report"
msgstr "Voir le signalement"
#: lib/mobilizon_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 "Vous avez créé un compte sur %{host} avec cette adresse email. Vous êtes à un clic de l'activer."
#: lib/mobilizon_web/templates/email/password_reset.html.eex:38
msgid "You requested a new password for your account on %{server}."
msgstr "Vous avez demandé un nouveau mot de passe pour votre compte sur %{server}"
#: lib/mobilizon_web/email/user.ex:25
msgid "Instructions to confirm your Mobilizon account on %{instance}"
msgstr "Instructions pour confirmer votre compte Mobilizon sur %{instance}"
#: lib/mobilizon_web/email/admin.ex:23
msgid "New report on Mobilizon instance %{instance}"
msgstr "Nouveau signalement sur l'instance Mobilizon %{instance}"