+
+
+
+
+
+
+
+ <%= if length(@activities) > 1 do %>
+ <%= gettext("There has been some activity!") %>
+ <% else %>
+ <%= gettext("There has been an activity!") %>
+ <% end %>
+
+ |
+
+
+
+
+
+
+
+ <%= for activity <- @activities do %>
+ -
+
+ <%= case activity.type do %>
+ <% :discussion -> %>
+ <%= render("activity/_discussion_activity_item.html", activity: activity) %>
+ <% :event -> %>
+ <%= render("activity/_event_activity_item.html", activity: activity) %>
+ <% :group -> %>
+ <%= render("activity/_group_activity_item.html", activity: activity) %>
+ <% :member -> %>
+ <%= render("activity/_member_activity_item.html", activity: activity) %>
+ <% :post -> %>
+ <%= render("activity/_post_activity_item.html", activity: activity) %>
+ <% :resource -> %>
+ <%= render("activity/_resource_activity_item.html", activity: activity) %>
+ <% :comment -> %>
+ <%= render("activity/_comment_activity_item.html", activity: activity) %>
+ <% end %>
+
+ <%= datetime_relative(activity.inserted_at, @locale) %>
+
+ <% end %>
+
+ |
+
+
+ |
+
+
+
+
+ <%= gettext "Don't want to receive activity notifications? You may change frequency or disable them in your settings." %>
+
+ |
+
+
+
+ |
+
diff --git a/lib/web/templates/email/email_direct_activity.text.eex b/lib/web/templates/email/email_direct_activity.text.eex
new file mode 100644
index 000000000..7dc2791e7
--- /dev/null
+++ b/lib/web/templates/email/email_direct_activity.text.eex
@@ -0,0 +1,7 @@
+<%= @subject %>
+==
+<%= gettext("There has been an activity!") %>
+<%= for activity <- @activities do %>
+ * <%= activity.type %>
+<% end %>
+<%= gettext "Don't want to receive activity notifications? You may change frequency or disable them in your settings." %>
\ No newline at end of file
diff --git a/lib/web/views/email_view.ex b/lib/web/views/email_view.ex
index fb3d6141c..ed3a15dc7 100644
--- a/lib/web/views/email_view.ex
+++ b/lib/web/views/email_view.ex
@@ -1,6 +1,7 @@
defmodule Mobilizon.Web.EmailView do
use Mobilizon.Web, :view
+ alias Cldr.DateTime.Relative
import Mobilizon.Web.Gettext
def datetime_to_string(%DateTime{} = datetime, locale \\ "en", format \\ :medium) do
@@ -27,4 +28,12 @@ defmodule Mobilizon.Web.EmailView do
datetime
end
end
+
+ @spec datetime_relative(DateTime.t(), String.t()) :: String.t()
+ def datetime_relative(%DateTime{} = datetime, locale \\ "en") do
+ Relative.to_string!(datetime, Mobilizon.Cldr,
+ relative_to: DateTime.utc_now(),
+ locale: locale
+ )
+ end
end
diff --git a/mix.exs b/mix.exs
index 45f23f100..bb6b9f1a9 100644
--- a/mix.exs
+++ b/mix.exs
@@ -163,6 +163,7 @@ defmodule Mobilizon.Mixfile do
{:sentry, "~> 8.0"},
{:html_entities, "~> 0.5"},
{:sweet_xml, "~> 0.6.6"},
+ {:web_push_encryption, "~> 0.3"},
# Dev and test dependencies
{:phoenix_live_reload, "~> 1.2", only: [:dev, :e2e]},
{:ex_machina, "~> 2.3", only: [:dev, :test]},
diff --git a/mix.lock b/mix.lock
index 23c72fb10..5b862aaa8 100644
--- a/mix.lock
+++ b/mix.lock
@@ -138,5 +138,6 @@
"ueberauth_twitter": {:hex, :ueberauth_twitter, "0.4.0", "4b98620341bc91bac90459093bba093c650823b6e2df35b70255c493c17e9227", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:oauther, "~> 1.1", [hex: :oauther, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.6", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "fb29c9047ca263038c0c61f5a0ec8597e8564aba3f2b4cb02704b60205fd4468"},
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
"unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"},
+ "web_push_encryption": {:hex, :web_push_encryption, "0.3.0", "598b5135e696fd1404dc8d0d7c0fa2c027244a4e5d5e5a98ba267f14fdeaabc8", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "f10bdd1afe527ede694749fb77a2f22f146a51b054c7fa541c9fd920fba7c875"},
"xml_builder": {:hex, :xml_builder, "2.1.4", "e60e21c0a39b9dd8dec1db5a2525c713f7fe4e85ed247caedf22a9bcdd2d5069", [:mix], [], "hexpm", "48188a4df8b9168ceb8318d128299bce064d272e18967349b2592347c434e677"},
}
diff --git a/priv/gettext/activity.pot b/priv/gettext/activity.pot
new file mode 100644
index 000000000..45ce73c44
--- /dev/null
+++ b/priv/gettext/activity.pot
@@ -0,0 +1,176 @@
+## This file is a PO Template file.
+##
+## "msgid"s here are often extracted from source code.
+## Add new translations manually only if they're dynamic
+## translations that can't be statically extracted.
+##
+## Run "mix gettext.extract" to bring this file up to
+## date. Leave "msgstr"s empty as changing them here as no
+## effect: edit them in PO (.po) files instead.
+msgid ""
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:19
+msgid "%{member} accepted the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:26
+msgid "%{member} rejected the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:4
+msgid "%{member} requested to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:11
+msgid "%{member} was invited by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:40
+msgid "%{profile} added the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46
+msgid "%{profile} archived the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4
+msgid "%{profile} created the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5
+msgid "%{profile} created the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:4
+msgid "%{profile} created the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20
+msgid "%{profile} created the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60
+msgid "%{profile} deleted the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103
+msgid "%{profile} deleted the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111
+msgid "%{profile} deleted the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:56
+msgid "%{profile} excluded member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71
+msgid "%{profile} moved the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86
+msgid "%{profile} moved the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:64
+msgid "%{profile} quit the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32
+msgid "%{profile} renamed the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37
+msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53
+msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18
+msgid "%{profile} replied to the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:19
+msgid "%{profile} updated the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:48
+msgid "%{profile} updated the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:4
+msgid "The event %{event} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:34
+msgid "The event %{event} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:19
+msgid "The event %{event} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:4
+msgid "The post %{post} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:34
+msgid "The post %{post} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:19
+msgid "The post %{post} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:33
+msgid "%{member} joined the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:58
+msgid "%{profile} posted a comment on the event %{event}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:43
+msgid "%{profile} replied to a comment on the event %{event}."
+msgstr ""
diff --git a/priv/gettext/ar/LC_MESSAGES/activity.po b/priv/gettext/ar/LC_MESSAGES/activity.po
new file mode 100644
index 000000000..25f7bbf79
--- /dev/null
+++ b/priv/gettext/ar/LC_MESSAGES/activity.po
@@ -0,0 +1,177 @@
+## "msgid"s in this file come from POT (.pot) files.
+##
+## Do not add, change, or remove "msgid"s manually here as
+## they're tied to the ones in the corresponding POT file
+## (with the same domain).
+##
+## Use "mix gettext.extract --merge" or "mix gettext.merge"
+## to merge POT files into PO files.
+msgid ""
+msgstr ""
+"Language: ar\n"
+"Plural-Forms: nplurals=6\n"
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:19
+msgid "%{member} accepted the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:26
+msgid "%{member} rejected the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:4
+msgid "%{member} requested to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:11
+msgid "%{member} was invited by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:40
+msgid "%{profile} added the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46
+msgid "%{profile} archived the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4
+msgid "%{profile} created the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5
+msgid "%{profile} created the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:4
+msgid "%{profile} created the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20
+msgid "%{profile} created the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60
+msgid "%{profile} deleted the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103
+msgid "%{profile} deleted the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111
+msgid "%{profile} deleted the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:56
+msgid "%{profile} excluded member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71
+msgid "%{profile} moved the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86
+msgid "%{profile} moved the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:64
+msgid "%{profile} quit the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32
+msgid "%{profile} renamed the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37
+msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53
+msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18
+msgid "%{profile} replied to the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:19
+msgid "%{profile} updated the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:48
+msgid "%{profile} updated the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:4
+msgid "The event %{event} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:34
+msgid "The event %{event} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:19
+msgid "The event %{event} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:4
+msgid "The post %{post} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:34
+msgid "The post %{post} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:19
+msgid "The post %{post} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:33
+msgid "%{member} joined the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:58
+msgid "%{profile} posted a comment on the event %{event}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:43
+msgid "%{profile} replied to a comment on the event %{event}."
+msgstr ""
diff --git a/priv/gettext/ar/LC_MESSAGES/default.po b/priv/gettext/ar/LC_MESSAGES/default.po
index 276f18628..012c8a7d8 100644
--- a/priv/gettext/ar/LC_MESSAGES/default.po
+++ b/priv/gettext/ar/LC_MESSAGES/default.po
@@ -1435,3 +1435,25 @@ msgstr ""
#: lib/service/export/feed.ex:73
msgid "Public feed for %{instance}"
msgstr ""
+
+#, elixir-format
+#: lib/web/email/activity.ex:23
+msgid "Activity notification for %{instance}"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:84
+#: lib/web/templates/email/email_direct_activity.text.eex:7
+msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:41
+#: lib/web/templates/email/email_direct_activity.text.eex:3
+msgid "There has been an activity!"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:39
+msgid "There has been some activity!"
+msgstr ""
diff --git a/priv/gettext/be/LC_MESSAGES/activity.po b/priv/gettext/be/LC_MESSAGES/activity.po
new file mode 100644
index 000000000..39b12f5b3
--- /dev/null
+++ b/priv/gettext/be/LC_MESSAGES/activity.po
@@ -0,0 +1,177 @@
+## "msgid"s in this file come from POT (.pot) files.
+##
+## Do not add, change, or remove "msgid"s manually here as
+## they're tied to the ones in the corresponding POT file
+## (with the same domain).
+##
+## Use "mix gettext.extract --merge" or "mix gettext.merge"
+## to merge POT files into PO files.
+msgid ""
+msgstr ""
+"Language: be\n"
+"Plural-Forms: nplurals=3\n"
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:19
+msgid "%{member} accepted the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:26
+msgid "%{member} rejected the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:4
+msgid "%{member} requested to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:11
+msgid "%{member} was invited by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:40
+msgid "%{profile} added the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46
+msgid "%{profile} archived the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4
+msgid "%{profile} created the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5
+msgid "%{profile} created the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:4
+msgid "%{profile} created the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20
+msgid "%{profile} created the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60
+msgid "%{profile} deleted the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103
+msgid "%{profile} deleted the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111
+msgid "%{profile} deleted the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:56
+msgid "%{profile} excluded member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71
+msgid "%{profile} moved the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86
+msgid "%{profile} moved the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:64
+msgid "%{profile} quit the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32
+msgid "%{profile} renamed the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37
+msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53
+msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18
+msgid "%{profile} replied to the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:19
+msgid "%{profile} updated the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:48
+msgid "%{profile} updated the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:4
+msgid "The event %{event} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:34
+msgid "The event %{event} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:19
+msgid "The event %{event} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:4
+msgid "The post %{post} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:34
+msgid "The post %{post} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:19
+msgid "The post %{post} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:33
+msgid "%{member} joined the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:58
+msgid "%{profile} posted a comment on the event %{event}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:43
+msgid "%{profile} replied to a comment on the event %{event}."
+msgstr ""
diff --git a/priv/gettext/be/LC_MESSAGES/default.po b/priv/gettext/be/LC_MESSAGES/default.po
index 32160bf85..7a1723d5e 100644
--- a/priv/gettext/be/LC_MESSAGES/default.po
+++ b/priv/gettext/be/LC_MESSAGES/default.po
@@ -1411,3 +1411,25 @@ msgstr ""
#: lib/service/export/feed.ex:73
msgid "Public feed for %{instance}"
msgstr ""
+
+#, elixir-format
+#: lib/web/email/activity.ex:23
+msgid "Activity notification for %{instance}"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:84
+#: lib/web/templates/email/email_direct_activity.text.eex:7
+msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:41
+#: lib/web/templates/email/email_direct_activity.text.eex:3
+msgid "There has been an activity!"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:39
+msgid "There has been some activity!"
+msgstr ""
diff --git a/priv/gettext/ca/LC_MESSAGES/activity.po b/priv/gettext/ca/LC_MESSAGES/activity.po
new file mode 100644
index 000000000..96dede5d5
--- /dev/null
+++ b/priv/gettext/ca/LC_MESSAGES/activity.po
@@ -0,0 +1,177 @@
+## "msgid"s in this file come from POT (.pot) files.
+##
+## Do not add, change, or remove "msgid"s manually here as
+## they're tied to the ones in the corresponding POT file
+## (with the same domain).
+##
+## Use "mix gettext.extract --merge" or "mix gettext.merge"
+## to merge POT files into PO files.
+msgid ""
+msgstr ""
+"Language: ca\n"
+"Plural-Forms: nplurals=2\n"
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:19
+msgid "%{member} accepted the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:26
+msgid "%{member} rejected the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:4
+msgid "%{member} requested to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:11
+msgid "%{member} was invited by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:40
+msgid "%{profile} added the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46
+msgid "%{profile} archived the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4
+msgid "%{profile} created the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5
+msgid "%{profile} created the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:4
+msgid "%{profile} created the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20
+msgid "%{profile} created the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60
+msgid "%{profile} deleted the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103
+msgid "%{profile} deleted the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111
+msgid "%{profile} deleted the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:56
+msgid "%{profile} excluded member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71
+msgid "%{profile} moved the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86
+msgid "%{profile} moved the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:64
+msgid "%{profile} quit the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32
+msgid "%{profile} renamed the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37
+msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53
+msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18
+msgid "%{profile} replied to the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:19
+msgid "%{profile} updated the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:48
+msgid "%{profile} updated the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:4
+msgid "The event %{event} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:34
+msgid "The event %{event} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:19
+msgid "The event %{event} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:4
+msgid "The post %{post} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:34
+msgid "The post %{post} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:19
+msgid "The post %{post} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:33
+msgid "%{member} joined the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:58
+msgid "%{profile} posted a comment on the event %{event}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:43
+msgid "%{profile} replied to a comment on the event %{event}."
+msgstr ""
diff --git a/priv/gettext/ca/LC_MESSAGES/default.po b/priv/gettext/ca/LC_MESSAGES/default.po
index bc7947db6..37d8ae050 100644
--- a/priv/gettext/ca/LC_MESSAGES/default.po
+++ b/priv/gettext/ca/LC_MESSAGES/default.po
@@ -1660,3 +1660,25 @@ msgstr "Sembla ser que el servidor de Mobilizon està temporalment inaccessible.
#: lib/service/export/feed.ex:73
msgid "Public feed for %{instance}"
msgstr ""
+
+#, elixir-format
+#: lib/web/email/activity.ex:23
+msgid "Activity notification for %{instance}"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:84
+#: lib/web/templates/email/email_direct_activity.text.eex:7
+msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:41
+#: lib/web/templates/email/email_direct_activity.text.eex:3
+msgid "There has been an activity!"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:39
+msgid "There has been some activity!"
+msgstr ""
diff --git a/priv/gettext/cs/LC_MESSAGES/activity.po b/priv/gettext/cs/LC_MESSAGES/activity.po
new file mode 100644
index 000000000..979a77341
--- /dev/null
+++ b/priv/gettext/cs/LC_MESSAGES/activity.po
@@ -0,0 +1,177 @@
+## "msgid"s in this file come from POT (.pot) files.
+##
+## Do not add, change, or remove "msgid"s manually here as
+## they're tied to the ones in the corresponding POT file
+## (with the same domain).
+##
+## Use "mix gettext.extract --merge" or "mix gettext.merge"
+## to merge POT files into PO files.
+msgid ""
+msgstr ""
+"Language: cs\n"
+"Plural-Forms: nplurals=3\n"
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:19
+msgid "%{member} accepted the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:26
+msgid "%{member} rejected the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:4
+msgid "%{member} requested to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:11
+msgid "%{member} was invited by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:40
+msgid "%{profile} added the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46
+msgid "%{profile} archived the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4
+msgid "%{profile} created the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5
+msgid "%{profile} created the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:4
+msgid "%{profile} created the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20
+msgid "%{profile} created the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60
+msgid "%{profile} deleted the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103
+msgid "%{profile} deleted the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111
+msgid "%{profile} deleted the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:56
+msgid "%{profile} excluded member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71
+msgid "%{profile} moved the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86
+msgid "%{profile} moved the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:64
+msgid "%{profile} quit the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32
+msgid "%{profile} renamed the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37
+msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53
+msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18
+msgid "%{profile} replied to the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:19
+msgid "%{profile} updated the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:48
+msgid "%{profile} updated the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:4
+msgid "The event %{event} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:34
+msgid "The event %{event} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:19
+msgid "The event %{event} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:4
+msgid "The post %{post} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:34
+msgid "The post %{post} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:19
+msgid "The post %{post} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:33
+msgid "%{member} joined the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:58
+msgid "%{profile} posted a comment on the event %{event}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:43
+msgid "%{profile} replied to a comment on the event %{event}."
+msgstr ""
diff --git a/priv/gettext/cs/LC_MESSAGES/default.po b/priv/gettext/cs/LC_MESSAGES/default.po
index a6d7d033e..068ec6170 100644
--- a/priv/gettext/cs/LC_MESSAGES/default.po
+++ b/priv/gettext/cs/LC_MESSAGES/default.po
@@ -1411,3 +1411,25 @@ msgstr ""
#: lib/service/export/feed.ex:73
msgid "Public feed for %{instance}"
msgstr ""
+
+#, elixir-format
+#: lib/web/email/activity.ex:23
+msgid "Activity notification for %{instance}"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:84
+#: lib/web/templates/email/email_direct_activity.text.eex:7
+msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:41
+#: lib/web/templates/email/email_direct_activity.text.eex:3
+msgid "There has been an activity!"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:39
+msgid "There has been some activity!"
+msgstr ""
diff --git a/priv/gettext/de/LC_MESSAGES/activity.po b/priv/gettext/de/LC_MESSAGES/activity.po
new file mode 100644
index 000000000..879cb010c
--- /dev/null
+++ b/priv/gettext/de/LC_MESSAGES/activity.po
@@ -0,0 +1,177 @@
+## "msgid"s in this file come from POT (.pot) files.
+##
+## Do not add, change, or remove "msgid"s manually here as
+## they're tied to the ones in the corresponding POT file
+## (with the same domain).
+##
+## Use "mix gettext.extract --merge" or "mix gettext.merge"
+## to merge POT files into PO files.
+msgid ""
+msgstr ""
+"Language: de\n"
+"Plural-Forms: nplurals=2\n"
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:19
+msgid "%{member} accepted the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:26
+msgid "%{member} rejected the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:4
+msgid "%{member} requested to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:11
+msgid "%{member} was invited by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:40
+msgid "%{profile} added the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46
+msgid "%{profile} archived the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4
+msgid "%{profile} created the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5
+msgid "%{profile} created the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:4
+msgid "%{profile} created the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20
+msgid "%{profile} created the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60
+msgid "%{profile} deleted the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103
+msgid "%{profile} deleted the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111
+msgid "%{profile} deleted the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:56
+msgid "%{profile} excluded member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71
+msgid "%{profile} moved the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86
+msgid "%{profile} moved the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:64
+msgid "%{profile} quit the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32
+msgid "%{profile} renamed the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37
+msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53
+msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18
+msgid "%{profile} replied to the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:19
+msgid "%{profile} updated the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:48
+msgid "%{profile} updated the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:4
+msgid "The event %{event} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:34
+msgid "The event %{event} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:19
+msgid "The event %{event} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:4
+msgid "The post %{post} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:34
+msgid "The post %{post} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:19
+msgid "The post %{post} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:33
+msgid "%{member} joined the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:58
+msgid "%{profile} posted a comment on the event %{event}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:43
+msgid "%{profile} replied to a comment on the event %{event}."
+msgstr ""
diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po
index f16635ce8..a6b6cb26b 100644
--- a/priv/gettext/de/LC_MESSAGES/default.po
+++ b/priv/gettext/de/LC_MESSAGES/default.po
@@ -1775,3 +1775,25 @@ msgstr ""
#: lib/service/export/feed.ex:73
msgid "Public feed for %{instance}"
msgstr ""
+
+#, elixir-format
+#: lib/web/email/activity.ex:23
+msgid "Activity notification for %{instance}"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:84
+#: lib/web/templates/email/email_direct_activity.text.eex:7
+msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:41
+#: lib/web/templates/email/email_direct_activity.text.eex:3
+msgid "There has been an activity!"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:39
+msgid "There has been some activity!"
+msgstr ""
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot
index 25056224f..a77c8f9ba 100644
--- a/priv/gettext/default.pot
+++ b/priv/gettext/default.pot
@@ -1390,3 +1390,25 @@ msgstr ""
#: lib/service/export/feed.ex:73
msgid "Public feed for %{instance}"
msgstr ""
+
+#, elixir-format
+#: lib/web/email/activity.ex:23
+msgid "Activity notification for %{instance}"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:84
+#: lib/web/templates/email/email_direct_activity.text.eex:7
+msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:41
+#: lib/web/templates/email/email_direct_activity.text.eex:3
+msgid "There has been an activity!"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:39
+msgid "There has been some activity!"
+msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/activity.po b/priv/gettext/en/LC_MESSAGES/activity.po
new file mode 100644
index 000000000..61a8e231b
--- /dev/null
+++ b/priv/gettext/en/LC_MESSAGES/activity.po
@@ -0,0 +1,177 @@
+## "msgid"s in this file come from POT (.pot) files.
+##
+## Do not add, change, or remove "msgid"s manually here as
+## they're tied to the ones in the corresponding POT file
+## (with the same domain).
+##
+## Use "mix gettext.extract --merge" or "mix gettext.merge"
+## to merge POT files into PO files.
+msgid ""
+msgstr ""
+"Language: en\n"
+"Plural-Forms: nplurals=2\n"
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:19
+msgid "%{member} accepted the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:26
+msgid "%{member} rejected the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:4
+msgid "%{member} requested to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:11
+msgid "%{member} was invited by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:40
+msgid "%{profile} added the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46
+msgid "%{profile} archived the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4
+msgid "%{profile} created the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5
+msgid "%{profile} created the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:4
+msgid "%{profile} created the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20
+msgid "%{profile} created the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60
+msgid "%{profile} deleted the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103
+msgid "%{profile} deleted the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111
+msgid "%{profile} deleted the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:56
+msgid "%{profile} excluded member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71
+msgid "%{profile} moved the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86
+msgid "%{profile} moved the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:64
+msgid "%{profile} quit the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32
+msgid "%{profile} renamed the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37
+msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53
+msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18
+msgid "%{profile} replied to the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:19
+msgid "%{profile} updated the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:48
+msgid "%{profile} updated the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:4
+msgid "The event %{event} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:34
+msgid "The event %{event} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:19
+msgid "The event %{event} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:4
+msgid "The post %{post} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:34
+msgid "The post %{post} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:19
+msgid "The post %{post} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:33
+msgid "%{member} joined the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:58
+msgid "%{profile} posted a comment on the event %{event}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:43
+msgid "%{profile} replied to a comment on the event %{event}."
+msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po
index 1f9fda354..540ce1df4 100644
--- a/priv/gettext/en/LC_MESSAGES/default.po
+++ b/priv/gettext/en/LC_MESSAGES/default.po
@@ -1443,3 +1443,25 @@ msgstr ""
#: lib/service/export/feed.ex:73
msgid "Public feed for %{instance}"
msgstr ""
+
+#, elixir-format
+#: lib/web/email/activity.ex:23
+msgid "Activity notification for %{instance}"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:84
+#: lib/web/templates/email/email_direct_activity.text.eex:7
+msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:41
+#: lib/web/templates/email/email_direct_activity.text.eex:3
+msgid "There has been an activity!"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:39
+msgid "There has been some activity!"
+msgstr ""
diff --git a/priv/gettext/es/LC_MESSAGES/activity.po b/priv/gettext/es/LC_MESSAGES/activity.po
new file mode 100644
index 000000000..15f921531
--- /dev/null
+++ b/priv/gettext/es/LC_MESSAGES/activity.po
@@ -0,0 +1,177 @@
+## "msgid"s in this file come from POT (.pot) files.
+##
+## Do not add, change, or remove "msgid"s manually here as
+## they're tied to the ones in the corresponding POT file
+## (with the same domain).
+##
+## Use "mix gettext.extract --merge" or "mix gettext.merge"
+## to merge POT files into PO files.
+msgid ""
+msgstr ""
+"Language: es\n"
+"Plural-Forms: nplurals=2\n"
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:19
+msgid "%{member} accepted the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:26
+msgid "%{member} rejected the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:4
+msgid "%{member} requested to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:11
+msgid "%{member} was invited by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:40
+msgid "%{profile} added the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46
+msgid "%{profile} archived the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4
+msgid "%{profile} created the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5
+msgid "%{profile} created the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:4
+msgid "%{profile} created the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20
+msgid "%{profile} created the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60
+msgid "%{profile} deleted the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103
+msgid "%{profile} deleted the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111
+msgid "%{profile} deleted the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:56
+msgid "%{profile} excluded member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71
+msgid "%{profile} moved the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86
+msgid "%{profile} moved the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:64
+msgid "%{profile} quit the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32
+msgid "%{profile} renamed the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37
+msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53
+msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18
+msgid "%{profile} replied to the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:19
+msgid "%{profile} updated the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:48
+msgid "%{profile} updated the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:4
+msgid "The event %{event} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:34
+msgid "The event %{event} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:19
+msgid "The event %{event} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:4
+msgid "The post %{post} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:34
+msgid "The post %{post} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:19
+msgid "The post %{post} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:33
+msgid "%{member} joined the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:58
+msgid "%{profile} posted a comment on the event %{event}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:43
+msgid "%{profile} replied to a comment on the event %{event}."
+msgstr ""
diff --git a/priv/gettext/es/LC_MESSAGES/default.po b/priv/gettext/es/LC_MESSAGES/default.po
index 58210c716..9fc22279a 100644
--- a/priv/gettext/es/LC_MESSAGES/default.po
+++ b/priv/gettext/es/LC_MESSAGES/default.po
@@ -1731,3 +1731,25 @@ msgstr ""
#, elixir-format
msgid "Public feed for %{instance}"
msgstr "Flujo público para %{instance}"
+
+#, elixir-format
+#: lib/web/email/activity.ex:23
+msgid "Activity notification for %{instance}"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:84
+#: lib/web/templates/email/email_direct_activity.text.eex:7
+msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:41
+#: lib/web/templates/email/email_direct_activity.text.eex:3
+msgid "There has been an activity!"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:39
+msgid "There has been some activity!"
+msgstr ""
diff --git a/priv/gettext/fi/LC_MESSAGES/activity.po b/priv/gettext/fi/LC_MESSAGES/activity.po
new file mode 100644
index 000000000..695675f86
--- /dev/null
+++ b/priv/gettext/fi/LC_MESSAGES/activity.po
@@ -0,0 +1,177 @@
+## "msgid"s in this file come from POT (.pot) files.
+##
+## Do not add, change, or remove "msgid"s manually here as
+## they're tied to the ones in the corresponding POT file
+## (with the same domain).
+##
+## Use "mix gettext.extract --merge" or "mix gettext.merge"
+## to merge POT files into PO files.
+msgid ""
+msgstr ""
+"Language: fi\n"
+"Plural-Forms: nplurals=2\n"
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:19
+msgid "%{member} accepted the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:26
+msgid "%{member} rejected the invitation to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:4
+msgid "%{member} requested to join the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:11
+msgid "%{member} was invited by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:40
+msgid "%{profile} added the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46
+msgid "%{profile} archived the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4
+msgid "%{profile} created the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5
+msgid "%{profile} created the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:4
+msgid "%{profile} created the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20
+msgid "%{profile} created the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60
+msgid "%{profile} deleted the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103
+msgid "%{profile} deleted the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111
+msgid "%{profile} deleted the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:56
+msgid "%{profile} excluded member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71
+msgid "%{profile} moved the folder %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86
+msgid "%{profile} moved the resource %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:64
+msgid "%{profile} quit the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32
+msgid "%{profile} renamed the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37
+msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53
+msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18
+msgid "%{profile} replied to the discussion %{discussion}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:19
+msgid "%{profile} updated the group %{group}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:48
+msgid "%{profile} updated the member %{member}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:4
+msgid "The event %{event} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:34
+msgid "The event %{event} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:19
+msgid "The event %{event} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:4
+msgid "The post %{post} was created by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:34
+msgid "The post %{post} was deleted by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:19
+msgid "The post %{post} was updated by %{profile}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:33
+msgid "%{member} joined the group."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:58
+msgid "%{profile} posted a comment on the event %{event}."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:43
+msgid "%{profile} replied to a comment on the event %{event}."
+msgstr ""
diff --git a/priv/gettext/fi/LC_MESSAGES/default.po b/priv/gettext/fi/LC_MESSAGES/default.po
index 0746805ec..94bd637cc 100644
--- a/priv/gettext/fi/LC_MESSAGES/default.po
+++ b/priv/gettext/fi/LC_MESSAGES/default.po
@@ -1701,3 +1701,25 @@ msgstr "Mobilizon-palvelin näyttää olevan väliakaisesti alhaalla."
#: lib/service/export/feed.ex:73
msgid "Public feed for %{instance}"
msgstr ""
+
+#, elixir-format
+#: lib/web/email/activity.ex:23
+msgid "Activity notification for %{instance}"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:84
+#: lib/web/templates/email/email_direct_activity.text.eex:7
+msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings."
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:41
+#: lib/web/templates/email/email_direct_activity.text.eex:3
+msgid "There has been an activity!"
+msgstr ""
+
+#, elixir-format
+#: lib/web/templates/email/email_direct_activity.html.eex:39
+msgid "There has been some activity!"
+msgstr ""
diff --git a/priv/gettext/fr/LC_MESSAGES/activity.po b/priv/gettext/fr/LC_MESSAGES/activity.po
new file mode 100644
index 000000000..f9e4efc85
--- /dev/null
+++ b/priv/gettext/fr/LC_MESSAGES/activity.po
@@ -0,0 +1,186 @@
+# # "msgid"s in this file come from POT (.pot) files.
+# #
+# # Do not add, change, or remove "msgid"s manually here as
+# # they're tied to the ones in the corresponding POT file
+# # (with the same domain).
+# #
+# # Use "mix gettext.extract --merge" or "mix gettext.merge"
+# # to merge POT files into PO files.
+msgid ""
+msgstr ""
+"Language: fr\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.4.2\n"
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:19
+msgid "%{member} accepted the invitation to join the group."
+msgstr "%{member} a accepté l'invitation à rejoindre le groupe."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:26
+msgid "%{member} rejected the invitation to join the group."
+msgstr "%{member} a refusé l'invitation à rejoindre le groupe."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:4
+msgid "%{member} requested to join the group."
+msgstr "%{member} a demandé à rejoindre le groupe."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:11
+msgid "%{member} was invited by %{profile}."
+msgstr "%{member} a été invité⋅e par %{profile}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:40
+msgid "%{profile} added the member %{member}."
+msgstr "%{profile} a ajouté le ou la membre %{membre}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46
+msgid "%{profile} archived the discussion %{discussion}."
+msgstr "%{profile} a archivé la discussion %{discussion}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4
+msgid "%{profile} created the discussion %{discussion}."
+msgstr "%{profile} a créé la discussion %{discussion}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5
+msgid "%{profile} created the folder %{resource}."
+msgstr "%{profile} a créé le dossier %{resource}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:4
+msgid "%{profile} created the group %{group}."
+msgstr "%{profile} a créé le groupe %{group}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20
+msgid "%{profile} created the resource %{resource}."
+msgstr "%{profile} a créé la resource %{resource}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60
+msgid "%{profile} deleted the discussion %{discussion}."
+msgstr "%{profile} a créé la discussion %{discussion}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103
+msgid "%{profile} deleted the folder %{resource}."
+msgstr "%{profile} a supprimé le dossier %{resource}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111
+msgid "%{profile} deleted the resource %{resource}."
+msgstr "%{profile} a supprimé la resource %{resource}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:56
+msgid "%{profile} excluded member %{member}."
+msgstr "%{profile} a exclu le ou la membre %{membre}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71
+msgid "%{profile} moved the folder %{resource}."
+msgstr "%{profile} a déplacé le dossier %{resource}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86
+msgid "%{profile} moved the resource %{resource}."
+msgstr "%{profile} a déplacé la ressource %{resource}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:64
+msgid "%{profile} quit the group."
+msgstr "%{profile} a quitté le groupe."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32
+msgid "%{profile} renamed the discussion %{discussion}."
+msgstr "%{profile} a renommé la discussion %{discussion}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37
+msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}."
+msgstr "%{profile} a renommé le dossier %{old_resource_title} en %{resource}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53
+msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}."
+msgstr "%{profile} a renommé la resource %{old_resource_title} en %{resource}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19
+#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18
+msgid "%{profile} replied to the discussion %{discussion}."
+msgstr "%{profile} a répondu à la discussion %{discussion}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_group_activity_item.html.eex:19
+msgid "%{profile} updated the group %{group}."
+msgstr "%{profile} a mis à jour le groupe %{group}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:48
+msgid "%{profile} updated the member %{member}."
+msgstr "%{profile} a mis à jour le membre %{member}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:4
+msgid "The event %{event} was created by %{profile}."
+msgstr "L'événement %{event} a été créé par %{profile}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:34
+msgid "The event %{event} was deleted by %{profile}."
+msgstr "L'événement %{event} a été supprimé par %{profile}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:19
+msgid "The event %{event} was updated by %{profile}."
+msgstr "L'événement %{event} a été mis à jour par %{profile}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:4
+msgid "The post %{post} was created by %{profile}."
+msgstr "Le billet %{post} a été créé par %{profile}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:34
+msgid "The post %{post} was deleted by %{profile}."
+msgstr "Le billet %{post} a été supprimé par %{profile}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_post_activity_item.html.eex:19
+msgid "The post %{post} was updated by %{profile}."
+msgstr "Le billet %{post} a été mis à jour par %{profile}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_member_activity_item.html.eex:33
+msgid "%{member} joined the group."
+msgstr "%{member} a rejoint le groupe."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:58
+msgid "%{profile} posted a comment on the event %{event}."
+msgstr "%{profile} a posté un commentaire sur l'événement %{event}."
+
+#, elixir-format
+#: lib/web/templates/email/activity/_event_activity_item.html.eex:43
+msgid "%{profile} replied to a comment on the event %{event}."
+msgstr "%{profile} a répondu à un commentaire sur l'événement %{event}."
diff --git a/priv/gettext/fr/LC_MESSAGES/default.po b/priv/gettext/fr/LC_MESSAGES/default.po
index 513b808b0..05b0272fb 100644
--- a/priv/gettext/fr/LC_MESSAGES/default.po
+++ b/priv/gettext/fr/LC_MESSAGES/default.po
@@ -12,8 +12,7 @@ msgstr ""
"POT-Creation-Date: \n"
"PO-Revision-Date: 2021-05-01 10:59+0000\n"
"Last-Translator: Thomas Citharel