')
def lookup(community, domain):
if domain == current_app.config['SERVER_NAME']:
diff --git a/app/post/routes.py b/app/post/routes.py
index b54b4457..a03fccb8 100644
--- a/app/post/routes.py
+++ b/app/post/routes.py
@@ -888,7 +888,12 @@ def post_delete(post_id: int):
def post_report(post_id: int):
post = Post.query.get_or_404(post_id)
form = ReportPostForm()
+ if post.reports == -1: # When a mod decides to ignore future reports, post.reports is set to -1
+ flash(_('Moderators have already assessed reports regarding this post, no further reports are necessary.'), 'warning')
if form.validate_on_submit():
+ if post.reports == -1:
+ flash(_('Post has already been reported, thank you!'))
+ return redirect(post.community.local_url())
report = Report(reasons=form.reasons_to_string(form.reasons.data), description=form.description.data,
type=1, reporter_id=current_user.id, suspect_user_id=post.author.id, suspect_post_id=post.id,
suspect_community_id=post.community.id, in_community_id=post.community.id, source_instance_id=1)
@@ -992,7 +997,16 @@ def post_reply_report(post_id: int, comment_id: int):
post = Post.query.get_or_404(post_id)
post_reply = PostReply.query.get_or_404(comment_id)
form = ReportPostForm()
+
+ if post_reply.reports == -1: # When a mod decides to ignore future reports, post_reply.reports is set to -1
+ flash(_('Moderators have already assessed reports regarding this comment, no further reports are necessary.'), 'warning')
+
if form.validate_on_submit():
+
+ if post_reply.reports == -1:
+ flash(_('Comment has already been reported, thank you!'))
+ return redirect(post.community.local_url())
+
report = Report(reasons=form.reasons_to_string(form.reasons.data), description=form.description.data,
type=2, reporter_id=current_user.id, suspect_post_id=post.id, suspect_community_id=post.community.id,
suspect_user_id=post_reply.author.id, suspect_post_reply_id=post_reply.id, in_community_id=post.community.id,
diff --git a/app/templates/community/community_moderate.html b/app/templates/community/community_moderate.html
index 0e2db665..6c1805b0 100644
--- a/app/templates/community/community_moderate.html
+++ b/app/templates/community/community_moderate.html
@@ -66,6 +66,8 @@
{{ _('Escalate') }}
{{ _('Resolve') }}
+
+ {{ _('Ignore') }}
diff --git a/app/templates/post/_post_full.html b/app/templates/post/_post_full.html
index a24cb457..ebbdb807 100644
--- a/app/templates/post/_post_full.html
+++ b/app/templates/post/_post_full.html
@@ -24,7 +24,7 @@
{{ post.url|shorten_url }}
{% endif %}
- {% if post.reports and current_user.is_authenticated and post.community.is_moderator(current_user) %}
+
{% if post.reports > 0 and current_user.is_authenticated and post.community.is_moderator(current_user) %}
{% endif %}submitted {{ moment(post.posted_at).fromNow() }} by {{ render_username(post.author) }}
{% if post.edited_at %} edited {{ moment(post.edited_at).fromNow() }}{% endif %}
@@ -72,7 +72,7 @@
width="{{ post.image.thumbnail_width }}" height="{{ post.image.thumbnail_height }}" loading="lazy" />
{% endif %}
-
{% if post.reports and current_user.is_authenticated and post.community.is_moderator(current_user) %}
+
{% if post.reports > 0 and current_user.is_authenticated and post.community.is_moderator(current_user) %}
{% endif %}submitted {{ moment(post.posted_at).fromNow() }} by
{{ render_username(post.author) }}
diff --git a/app/templates/post/_post_teaser.html b/app/templates/post/_post_teaser.html
index 7f3ddd37..cfaf9c98 100644
--- a/app/templates/post/_post_teaser.html
+++ b/app/templates/post/_post_teaser.html
@@ -2,7 +2,7 @@
{% if content_blocked and content_blocked == '-1' %}
{# do nothing - blocked by keyword filter #}
{% else %}
-
@@ -55,7 +55,7 @@
{% endif %}
{% if post.nsfw %}
nsfw{% endif %}
{% if post.nsfl %}
nsfl{% endif %}
- {% if post.reports and current_user.is_authenticated and post.community.is_moderator(current_user) %}
+ {% if post.reports > 0 and current_user.is_authenticated and post.community.is_moderator(current_user) %}
{% endif %}
{% if post.sticky %}
{% endif %}
diff --git a/app/templates/post/_post_teaser_masonry.html b/app/templates/post/_post_teaser_masonry.html
index 021c9c10..b84f6ded 100644
--- a/app/templates/post/_post_teaser_masonry.html
+++ b/app/templates/post/_post_teaser_masonry.html
@@ -2,7 +2,7 @@
{% if content_blocked and content_blocked == '-1' %}
{# do nothing - blocked by keyword filter #}
{% else %}
-
{% if post.image_id %}
{% if post_layout == 'masonry' or low_bandwidth %}
diff --git a/app/user/routes.py b/app/user/routes.py
index 8852b0c4..fde0773c 100644
--- a/app/user/routes.py
+++ b/app/user/routes.py
@@ -335,8 +335,18 @@ def report_profile(actor):
else:
user: User = User.query.filter_by(user_name=actor, deleted=False, ap_id=None).first()
form = ReportUserForm()
+
+ if user and user.reports == -1: # When a mod decides to ignore future reports, user.reports is set to -1
+ flash(_('Moderators have already assessed reports regarding this person, no further reports are necessary.'), 'warning')
+
if user and not user.banned:
if form.validate_on_submit():
+
+ if user.reports == -1:
+ flash(_('%(user_name)s has already been reported, thank you!', user_name=actor))
+ goto = request.args.get('redirect') if 'redirect' in request.args else f'/u/{actor}'
+ return redirect(goto)
+
report = Report(reasons=form.reasons_to_string(form.reasons.data), description=form.description.data,
type=0, reporter_id=current_user.id, suspect_user_id=user.id, source_instance_id=1)
db.session.add(report)
From a5212762f94bb8533155415f36422f7c9e68fddf Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Sat, 6 Apr 2024 15:24:59 +1300
Subject: [PATCH 03/50] federate report to remote instance #21
---
app/post/routes.py | 51 +++++++++++++++++++++++++++++++++++++----
app/templates/base.html | 4 ++--
2 files changed, 48 insertions(+), 7 deletions(-)
diff --git a/app/post/routes.py b/app/post/routes.py
index a03fccb8..d92ba4c9 100644
--- a/app/post/routes.py
+++ b/app/post/routes.py
@@ -18,7 +18,7 @@ from app.post.util import post_replies, get_comment_branch, post_reply_count
from app.constants import SUBSCRIPTION_MEMBER, POST_TYPE_LINK, POST_TYPE_IMAGE
from app.models import Post, PostReply, \
PostReplyVote, PostVote, Notification, utcnow, UserBlock, DomainBlock, InstanceBlock, Report, Site, Community, \
- Topic, User
+ Topic, User, Instance
from app.post import bp
from app.utils import get_setting, render_template, allowlist_html, markdown_to_html, validation_required, \
shorten_string, markdown_to_text, gibberish, ap_datetime, return_304, \
@@ -916,9 +916,29 @@ def post_report(post_id: int):
admin.unread_notifications += 1
db.session.commit()
- # todo: federate report to originating instance
+ # federate report to community instance
if not post.community.is_local() and form.report_remote.data:
- ...
+ summary = form.reasons_to_string(form.reasons.data)
+ if form.description.data:
+ summary += ' - ' + form.description.data
+ report_json = {
+ "actor": current_user.profile_id(),
+ "audience": post.community.profile_id(),
+ "content": None,
+ "id": f"https://{current_app.config['SERVER_NAME']}/activities/flag/{gibberish(15)}",
+ "object": post.ap_id,
+ "summary": summary,
+ "to": [
+ post.community.profile_id()
+ ],
+ "type": "Flag"
+ }
+ instance = Instance.query.get(post.community.instance_id)
+ if post.community.ap_inbox_url and not current_user.has_blocked_instance(instance.id) and not instance_banned(instance.domain):
+ success = post_request(post.community.ap_inbox_url, report_json, current_user.private_key,
+ current_user.ap_profile_id + '#main-key')
+ if not success:
+ flash('Failed to send report to remote server', 'error')
flash(_('Post has been reported, thank you!'))
return redirect(post.community.local_url())
@@ -1030,9 +1050,30 @@ def post_reply_report(post_id: int, comment_id: int):
admin.unread_notifications += 1
db.session.commit()
- # todo: federate report to originating instance
+ # federate report to originating instance
if not post.community.is_local() and form.report_remote.data:
- ...
+ summary = form.reasons_to_string(form.reasons.data)
+ if form.description.data:
+ summary += ' - ' + form.description.data
+ report_json = {
+ "actor": current_user.profile_id(),
+ "audience": post.community.profile_id(),
+ "content": None,
+ "id": f"https://{current_app.config['SERVER_NAME']}/activities/flag/{gibberish(15)}",
+ "object": post_reply.ap_id,
+ "summary": summary,
+ "to": [
+ post.community.profile_id()
+ ],
+ "type": "Flag"
+ }
+ instance = Instance.query.get(post.community.instance_id)
+ if post.community.ap_inbox_url and not current_user.has_blocked_instance(
+ instance.id) and not instance_banned(instance.domain):
+ success = post_request(post.community.ap_inbox_url, report_json, current_user.private_key,
+ current_user.ap_profile_id + '#main-key')
+ if not success:
+ flash('Failed to send report to remote server', 'error')
flash(_('Comment has been reported, thank you!'))
return redirect(post.community.local_url())
diff --git a/app/templates/base.html b/app/templates/base.html
index f12bf97f..775322a2 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -136,8 +136,8 @@
{{ _('Topics') }}
{{ _('Log in') }}
From 66d05ea860b26ab65d977bc7e25fbc91867ac4e0 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Sat, 6 Apr 2024 16:29:47 +1300
Subject: [PATCH 04/50] receive federated reports from remote instances #21
---
app/activitypub/routes.py | 17 +++-
app/activitypub/util.py | 88 ++++++++++++++++++-
app/models.py | 4 +-
app/post/routes.py | 2 +-
.../community/community_mod_list.html | 2 +-
.../community/community_moderate.html | 2 +-
6 files changed, 107 insertions(+), 8 deletions(-)
diff --git a/app/activitypub/routes.py b/app/activitypub/routes.py
index 7cad58e7..247cf109 100644
--- a/app/activitypub/routes.py
+++ b/app/activitypub/routes.py
@@ -20,7 +20,8 @@ from app.activitypub.util import public_key, users_total, active_half_year, acti
lemmy_site_data, instance_weight, is_activitypub_request, downvote_post_reply, downvote_post, upvote_post_reply, \
upvote_post, delete_post_or_comment, community_members, \
user_removed_from_remote_server, create_post, create_post_reply, update_post_reply_from_activity, \
- update_post_from_activity, undo_vote, undo_downvote, post_to_page, get_redis_connection
+ update_post_from_activity, undo_vote, undo_downvote, post_to_page, get_redis_connection, find_reported_object, \
+ process_report
from app.utils import gibberish, get_setting, is_image_url, allowlist_html, render_template, \
domain_from_url, markdown_to_html, community_membership, ap_datetime, ip_address, can_downvote, \
can_upvote, can_create_post, awaken_dormant_instance, shorten_string, can_create_post_reply, sha256_digest, \
@@ -990,7 +991,19 @@ def process_inbox_request(request_json, activitypublog_id, ip_address):
else:
activity_log.exception_message = 'Cannot downvote this'
activity_log.result = 'ignored'
- # Flush the caches of any major object that was created. To be sure.
+ elif request_json['type'] == 'Flag': # Reported content
+ activity_log.activity_type = 'Report'
+ user_ap_id = request_json['actor']
+ user = find_actor_or_create(user_ap_id)
+ target_ap_id = request_json['object']
+ reported = find_reported_object(target_ap_id)
+ if user and reported:
+ process_report(user, reported, request_json, activity_log)
+ activity_log.result = 'success'
+ else:
+ activity_log.exception_message = 'Report ignored due to missing user or content'
+
+ # Flush the caches of any major object that was created. To be sure.
if 'user' in vars() and user is not None:
user.flush_cache()
if user.instance_id and user.instance_id != 1:
diff --git a/app/activitypub/util.py b/app/activitypub/util.py
index 72820ba0..881f0ea5 100644
--- a/app/activitypub/util.py
+++ b/app/activitypub/util.py
@@ -12,7 +12,7 @@ from flask_babel import _
from sqlalchemy import text, func
from app import db, cache, constants, celery
from app.models import User, Post, Community, BannedInstances, File, PostReply, AllowedInstances, Instance, utcnow, \
- PostVote, PostReplyVote, ActivityPubLog, Notification, Site, CommunityMember, InstanceRole
+ PostVote, PostReplyVote, ActivityPubLog, Notification, Site, CommunityMember, InstanceRole, Report, Conversation
import time
import base64
import requests
@@ -895,6 +895,21 @@ def find_liked_object(ap_id) -> Union[Post, PostReply, None]:
return None
+def find_reported_object(ap_id) -> Union[User, Post, PostReply, None]:
+ post = Post.get_by_ap_id(ap_id)
+ if post:
+ return post
+ else:
+ post_reply = PostReply.get_by_ap_id(ap_id)
+ if post_reply:
+ return post_reply
+ else:
+ user = find_actor_or_create(ap_id, create_if_not_found=False)
+ if user:
+ return user
+ return None
+
+
def find_instance_id(server):
server = server.strip()
instance = Instance.query.filter_by(domain=server).first()
@@ -1623,6 +1638,77 @@ def undo_vote(activity_log, comment, post, target_ap_id, user):
return post
+def process_report(user, reported, request_json, activity_log):
+ if len(request_json['summary']) < 15:
+ reasons = request_json['summary']
+ description = ''
+ else:
+ reasons = request_json['summary'][:15]
+ description = request_json['summary'][15:]
+ if isinstance(reported, User):
+ if reported.reports == -1:
+ return
+ type = 0
+ report = Report(reasons=reasons, description=description,
+ type=type, reporter_id=user.id, suspect_user_id=reported.id, source_instance_id=user.instance_id)
+ db.session.add(report)
+
+ # Notify site admin
+ already_notified = set()
+ for admin in Site.admins():
+ if admin.id not in already_notified:
+ notify = Notification(title='Reported user', url='/admin/reports', user_id=admin.id,
+ author_id=user.id)
+ db.session.add(notify)
+ admin.unread_notifications += 1
+ reported.reports += 1
+ db.session.commit()
+ elif isinstance(reported, Post):
+ if reported.reports == -1:
+ return
+ type = 1
+ report = Report(reasons=reasons, description=description, type=type, reporter_id=user.id,
+ suspect_user_id=reported.author.id, suspect_post_id=reported.id,
+ suspect_community_id=reported.community.id, in_community_id=reported.community.id,
+ source_instance_id=user.instance_id)
+ db.session.add(report)
+
+ already_notified = set()
+ for mod in reported.community.moderators():
+ notification = Notification(user_id=mod.user_id, title=_('A post has been reported'),
+ url=f"https://{current_app.config['SERVER_NAME']}/post/{reported.id}",
+ author_id=user.id)
+ db.session.add(notification)
+ already_notified.add(mod.user_id)
+ reported.reports += 1
+ db.session.commit()
+ elif isinstance(reported, PostReply):
+ if reported.reports == -1:
+ return
+ type = 2
+ post = Post.query.get(reported.post_id)
+ report = Report(reasons=reasons, description=description, type=type, reporter_id=user.id, suspect_post_id=post.id,
+ suspect_community_id=post.community.id,
+ suspect_user_id=reported.author.id, suspect_post_reply_id=reported.id,
+ in_community_id=post.community.id,
+ source_instance_id=user.instance_id)
+ db.session.add(report)
+ # Notify moderators
+ already_notified = set()
+ for mod in post.community.moderators():
+ notification = Notification(user_id=mod.user_id, title=_('A comment has been reported'),
+ url=f"https://{current_app.config['SERVER_NAME']}/comment/{reported.id}",
+ author_id=user.id)
+ db.session.add(notification)
+ already_notified.add(mod.user_id)
+ reported.reports += 1
+ db.session.commit()
+ elif isinstance(reported, Community):
+ ...
+ elif isinstance(reported, Conversation):
+ ...
+
+
def get_redis_connection() -> redis.Redis:
connection_string = current_app.config['CACHE_REDIS_URL']
if connection_string.startswith('unix://'):
diff --git a/app/models.py b/app/models.py
index f2e610ab..fac1e213 100644
--- a/app/models.py
+++ b/app/models.py
@@ -405,8 +405,8 @@ class Community(db.Model):
(or_(
CommunityMember.is_owner,
CommunityMember.is_moderator
- )) & CommunityMember.is_banned == False
- ).all()
+ ))
+ ).filter(CommunityMember.is_banned == False).all()
def is_moderator(self, user=None):
if user is None:
diff --git a/app/post/routes.py b/app/post/routes.py
index d92ba4c9..9aae27b9 100644
--- a/app/post/routes.py
+++ b/app/post/routes.py
@@ -1040,7 +1040,7 @@ def post_reply_report(post_id: int, comment_id: int):
url=f"https://{current_app.config['SERVER_NAME']}/comment/{post_reply.id}",
author_id=current_user.id)
db.session.add(notification)
- already_notified.add(mod.id)
+ already_notified.add(mod.user_id)
post_reply.reports += 1
# todo: only notify admins for certain types of report
for admin in Site.admins():
diff --git a/app/templates/community/community_mod_list.html b/app/templates/community/community_mod_list.html
index 16e306a6..b767f0ef 100644
--- a/app/templates/community/community_mod_list.html
+++ b/app/templates/community/community_mod_list.html
@@ -22,7 +22,7 @@
{{ _('Moderators for %(community)s', community=community.display_name()) }}
{{ _('See and change who moderates this community') }}
-
diff --git a/app/templates/community/community_moderate.html b/app/templates/community/community_moderate.html
index 6c1805b0..279cb50c 100644
--- a/app/templates/community/community_moderate.html
+++ b/app/templates/community/community_moderate.html
@@ -30,7 +30,7 @@
-
+
From a1a4464304700c6ee38ee299d72c6d65fdab99d0 Mon Sep 17 00:00:00 2001
From: freamon
Date: Sat, 6 Apr 2024 10:43:06 +0100
Subject: [PATCH 05/50] Avoid returning empty anchors in html
---
app/utils.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/utils.py b/app/utils.py
index 44d62329..d100c842 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -211,7 +211,9 @@ def allowlist_html(html: str) -> str:
if tag.name == 'table':
tag.attrs['class'] = 'table'
- return str(soup)
+ # avoid returning empty anchors
+ re_empty_anchor = re.compile(r'<\/a>')
+ return re_empty_anchor.sub(r'\1', str(soup))
def markdown_to_html(markdown_text) -> str:
From 1cce2d82b8893404eb785dd1f94693ad19937c0d Mon Sep 17 00:00:00 2001
From: freamon
Date: Sat, 6 Apr 2024 10:44:03 +0100
Subject: [PATCH 06/50] Add horizontal rule to allowed html tags
---
app/utils.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/utils.py b/app/utils.py
index d100c842..61957687 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -169,7 +169,7 @@ def allowlist_html(html: str) -> str:
if html is None or html == '':
return ''
allowed_tags = ['p', 'strong', 'a', 'ul', 'ol', 'li', 'em', 'blockquote', 'cite', 'br', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'pre',
- 'code', 'img', 'details', 'summary', 'table', 'tr', 'td', 'th', 'tbody', 'thead']
+ 'code', 'img', 'details', 'summary', 'table', 'tr', 'td', 'th', 'tbody', 'thead', 'hr']
# Parse the HTML using BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
From cbae43e37e8099e41565224930e800880b28de68 Mon Sep 17 00:00:00 2001
From: freamon
Date: Sat, 6 Apr 2024 10:50:53 +0100
Subject: [PATCH 07/50] Replace lemmy spoiler markdown with appropriate html
---
app/utils.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/utils.py b/app/utils.py
index 61957687..a88cda93 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -219,7 +219,9 @@ def allowlist_html(html: str) -> str:
def markdown_to_html(markdown_text) -> str:
if markdown_text:
raw_html = markdown2.markdown(markdown_text, safe_mode=True, extras={'middle-word-em': False, 'tables': True, 'fenced-code-blocks': True, 'strike': True})
- # todo: in raw_html, replace lemmy spoiler tokens with appropriate html tags instead.
+ # replace lemmy spoiler tokens with appropriate html tags instead. (until possibly added as extra to markdown2)
+ re_spoiler = re.compile(r':{3} spoiler\s+?(\S.+?\n)(.+?)\n:{3}', re.S)
+ raw_html = re_spoiler.sub(r'\1
\2 ', raw_html)
return allowlist_html(raw_html)
else:
return ''
From 31db4ecb002858b37ce765428aae3b0ed0c4b28b Mon Sep 17 00:00:00 2001
From: freamon
Date: Sat, 6 Apr 2024 15:47:43 +0100
Subject: [PATCH 08/50] Underline links in High Contrast theme #132
---
app/templates/themes/high_contrast/styles.css | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/templates/themes/high_contrast/styles.css b/app/templates/themes/high_contrast/styles.css
index 3f3c553a..3389740b 100644
--- a/app/templates/themes/high_contrast/styles.css
+++ b/app/templates/themes/high_contrast/styles.css
@@ -36,6 +36,10 @@
--bs-btn-color: white;
}
+.post_body a, .comment_body a {
+ text-decoration: underline;
+}
+
.post_list .post_teaser {
border-bottom: solid 1px black;
}
@@ -83,4 +87,4 @@ div.navbar {
}
[data-bs-theme="dark"] .coolfieldset.collapsed legend, [data-bs-theme="dark"] .coolfieldset legend, [data-bs-theme="dark"] .coolfieldset.expanded legend {
background-color: black;
-}
\ No newline at end of file
+}
From db99ea33e9f79672150408c306d2cccb7d4e3796 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Sun, 7 Apr 2024 09:39:50 +1200
Subject: [PATCH 09/50] handle missing files
---
app/models.py | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/app/models.py b/app/models.py
index fac1e213..4981498e 100644
--- a/app/models.py
+++ b/app/models.py
@@ -208,14 +208,23 @@ class File(db.Model):
def delete_from_disk(self):
purge_from_cache = []
if self.file_path and os.path.isfile(self.file_path):
- os.unlink(self.file_path)
+ try:
+ os.unlink(self.file_path)
+ except FileNotFoundError as e:
+ ...
purge_from_cache.append(self.file_path.replace('app/', f"https://{current_app.config['SERVER_NAME']}/"))
if self.thumbnail_path and os.path.isfile(self.thumbnail_path):
- os.unlink(self.thumbnail_path)
+ try:
+ os.unlink(self.thumbnail_path)
+ except FileNotFoundError as e:
+ ...
purge_from_cache.append(self.thumbnail_path.replace('app/', f"https://{current_app.config['SERVER_NAME']}/"))
if self.source_url and self.source_url.startswith('http') and current_app.config['SERVER_NAME'] in self.source_url:
# self.source_url is always a url rather than a file path, which makes deleting the file a bit fiddly
- os.unlink(self.source_url.replace(f"https://{current_app.config['SERVER_NAME']}/", 'app/'))
+ try:
+ os.unlink(self.source_url.replace(f"https://{current_app.config['SERVER_NAME']}/", 'app/'))
+ except FileNotFoundError as e:
+ ...
purge_from_cache.append(self.source_url) # otoh it makes purging the cdn cache super easy.
if purge_from_cache:
From dd0646f1aa9410450b6f8b813ff397c141b5f09c Mon Sep 17 00:00:00 2001
From: freamon
Date: Sat, 6 Apr 2024 22:42:25 +0100
Subject: [PATCH 10/50] Remove @context from inner Announce object before
sending out
---
app/activitypub/routes.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/activitypub/routes.py b/app/activitypub/routes.py
index 247cf109..310e6107 100644
--- a/app/activitypub/routes.py
+++ b/app/activitypub/routes.py
@@ -1066,6 +1066,9 @@ def process_delete_request(request_json, activitypublog_id, ip_address):
def announce_activity_to_followers(community, creator, activity):
+ # remove context from what will be inner object
+ del activity["@context"]
+
announce_activity = {
'@context': default_context(),
"actor": community.profile_id(),
From b8ddf0c481d76e0de097e19e30ed0ebc3b1cb148 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Sun, 7 Apr 2024 11:15:04 +1200
Subject: [PATCH 11/50] split post creation and editing up into different forms
for each type of content #78
---
app/community/forms.py | 110 +++---
app/community/routes.py | 318 +++++++++++-----
app/community/util.py | 10 +-
app/post/routes.py | 338 +++++++++++++-----
app/static/structure.css | 8 +
app/static/structure.scss | 13 +
.../community/add_discussion_post.html | 95 +++++
app/templates/community/add_image_post.html | 97 +++++
app/templates/community/add_link_post.html | 96 +++++
app/templates/community/add_post.html | 145 --------
app/templates/post/post_edit.html | 164 ---------
app/templates/post/post_edit_discussion.html | 75 ++++
app/templates/post/post_edit_image.html | 78 ++++
app/templates/post/post_edit_link.html | 75 ++++
14 files changed, 1064 insertions(+), 558 deletions(-)
create mode 100644 app/templates/community/add_discussion_post.html
create mode 100644 app/templates/community/add_image_post.html
create mode 100644 app/templates/community/add_link_post.html
delete mode 100644 app/templates/community/add_post.html
delete mode 100644 app/templates/post/post_edit.html
create mode 100644 app/templates/post/post_edit_discussion.html
create mode 100644 app/templates/post/post_edit_image.html
create mode 100644 app/templates/post/post_edit_link.html
diff --git a/app/community/forms.py b/app/community/forms.py
index e843aa41..99bb0ffd 100644
--- a/app/community/forms.py
+++ b/app/community/forms.py
@@ -85,21 +85,23 @@ class BanUserCommunityForm(FlaskForm):
submit = SubmitField(_l('Ban'))
-class CreatePostForm(FlaskForm):
+class CreateDiscussionForm(FlaskForm):
communities = SelectField(_l('Community'), validators=[DataRequired()], coerce=int)
- post_type = HiddenField() # https://getbootstrap.com/docs/4.6/components/navs/#tabs
- discussion_title = StringField(_l('Title'), validators=[Optional(), Length(min=3, max=255)])
- discussion_body = TextAreaField(_l('Body'), validators=[Optional(), Length(min=3, max=5000)], render_kw={'placeholder': 'Text (optional)'})
- link_title = StringField(_l('Title'), validators=[Optional(), Length(min=3, max=255)])
- link_body = TextAreaField(_l('Body'), validators=[Optional(), Length(min=3, max=5000)],
- render_kw={'placeholder': 'Text (optional)'})
- link_url = StringField(_l('URL'), validators=[Optional(), Regexp(r'^https?://', message='Submitted links need to start with "http://"" or "https://"')], render_kw={'placeholder': 'https://...'})
- image_title = StringField(_l('Title'), validators=[Optional(), Length(min=3, max=255)])
- image_alt_text = StringField(_l('Alt text'), validators=[Optional(), Length(min=3, max=255)])
- image_body = TextAreaField(_l('Body'), validators=[Optional(), Length(min=3, max=5000)],
- render_kw={'placeholder': 'Text (optional)'})
- image_file = FileField(_('Image'))
- # flair = SelectField(_l('Flair'), coerce=int)
+ discussion_title = StringField(_l('Title'), validators=[DataRequired(), Length(min=3, max=255)])
+ discussion_body = TextAreaField(_l('Body'), validators=[Optional(), Length(min=3, max=5000)])
+ sticky = BooleanField(_l('Sticky'))
+ nsfw = BooleanField(_l('NSFW'))
+ nsfl = BooleanField(_l('Gore/gross'))
+ notify_author = BooleanField(_l('Notify about replies'))
+ submit = SubmitField(_l('Save'))
+
+
+class CreateLinkForm(FlaskForm):
+ communities = SelectField(_l('Community'), validators=[DataRequired()], coerce=int)
+ link_title = StringField(_l('Title'), validators=[DataRequired(), Length(min=3, max=255)])
+ link_body = TextAreaField(_l('Body'), validators=[Optional(), Length(min=3, max=5000)])
+ link_url = StringField(_l('URL'), validators=[DataRequired(), Regexp(r'^https?://', message='Submitted links need to start with "http://"" or "https://"')],
+ render_kw={'placeholder': 'https://...'})
sticky = BooleanField(_l('Sticky'))
nsfw = BooleanField(_l('NSFW'))
nsfl = BooleanField(_l('Gore/gross'))
@@ -107,53 +109,45 @@ class CreatePostForm(FlaskForm):
submit = SubmitField(_l('Save'))
def validate(self, extra_validators=None) -> bool:
- if not super().validate():
+ domain = domain_from_url(self.link_url.data, create=False)
+ if domain and domain.banned:
+ self.link_url.errors.append(_("Links to %(domain)s are not allowed.", domain=domain.name))
return False
- if self.post_type.data is None or self.post_type.data == '':
- self.post_type.data = 'discussion'
+ return True
- if self.post_type.data == 'discussion':
- if self.discussion_title.data == '':
- self.discussion_title.errors.append(_('Title is required.'))
+
+class CreateImageForm(FlaskForm):
+ communities = SelectField(_l('Community'), validators=[DataRequired()], coerce=int)
+ image_title = StringField(_l('Title'), validators=[DataRequired(), Length(min=3, max=255)])
+ image_alt_text = StringField(_l('Alt text'), validators=[Optional(), Length(min=3, max=255)])
+ image_body = TextAreaField(_l('Body'), validators=[Optional(), Length(min=3, max=5000)])
+ image_file = FileField(_('Image'), validators=[DataRequired()])
+ sticky = BooleanField(_l('Sticky'))
+ nsfw = BooleanField(_l('NSFW'))
+ nsfl = BooleanField(_l('Gore/gross'))
+ notify_author = BooleanField(_l('Notify about replies'))
+ submit = SubmitField(_l('Save'))
+
+ def validate(self, extra_validators=None) -> bool:
+ uploaded_file = request.files['image_file']
+ if uploaded_file and uploaded_file.filename != '':
+ Image.MAX_IMAGE_PIXELS = 89478485
+ # Do not allow fascist meme content
+ try:
+ image_text = pytesseract.image_to_string(Image.open(BytesIO(uploaded_file.read())).convert('L'))
+ except FileNotFoundError as e:
+ image_text = ''
+ if 'Anonymous' in image_text and (
+ 'No.' in image_text or ' N0' in image_text): # chan posts usually contain the text 'Anonymous' and ' No.12345'
+ self.image_file.errors.append(
+ f"This image is an invalid file type.") # deliberately misleading error message
+ current_user.reputation -= 1
+ db.session.commit()
return False
- elif self.post_type.data == 'link':
- if self.link_title.data == '':
- self.link_title.errors.append(_('Title is required.'))
- return False
- if self.link_url.data == '':
- self.link_url.errors.append(_('URL is required.'))
- return False
- domain = domain_from_url(self.link_url.data, create=False)
- if domain and domain.banned:
- self.link_url.errors.append(_("Links to %(domain)s are not allowed.", domain=domain.name))
- return False
- elif self.post_type.data == 'image':
- if self.image_title.data == '':
- self.image_title.errors.append(_('Title is required.'))
- return False
- if self.image_file.data == '':
- self.image_file.errors.append(_('File is required.'))
- return False
- uploaded_file = request.files['image_file']
- if uploaded_file and uploaded_file.filename != '':
- Image.MAX_IMAGE_PIXELS = 89478485
- # Do not allow fascist meme content
- try:
- image_text = pytesseract.image_to_string(Image.open(BytesIO(uploaded_file.read())).convert('L'))
- except FileNotFoundError as e:
- image_text = ''
- if 'Anonymous' in image_text and ('No.' in image_text or ' N0' in image_text): # chan posts usually contain the text 'Anonymous' and ' No.12345'
- self.image_file.errors.append(f"This image is an invalid file type.") # deliberately misleading error message
- current_user.reputation -= 1
- db.session.commit()
- return False
- if self.communities:
- community = Community.query.get(self.communities.data)
- if community.is_local() and g.site.allow_local_image_posts is False:
- self.communities.errors.append(_('Images cannot be posted to local communities.'))
- elif self.post_type.data == 'poll':
- self.discussion_title.errors.append(_('Poll not implemented yet.'))
- return False
+ if self.communities:
+ community = Community.query.get(self.communities.data)
+ if community.is_local() and g.site.allow_local_image_posts is False:
+ self.communities.errors.append(_('Images cannot be posted to local communities.'))
return True
diff --git a/app/community/routes.py b/app/community/routes.py
index de5e842b..cb96ebea 100644
--- a/app/community/routes.py
+++ b/app/community/routes.py
@@ -12,7 +12,7 @@ from app import db, constants, cache
from app.activitypub.signature import RsaKeys, post_request
from app.activitypub.util import default_context, notify_about_post, find_actor_or_create, make_image_sizes
from app.chat.util import send_message
-from app.community.forms import SearchRemoteCommunity, CreatePostForm, ReportCommunityForm, \
+from app.community.forms import SearchRemoteCommunity, CreateDiscussionForm, CreateImageForm, CreateLinkForm, ReportCommunityForm, \
DeleteCommunityForm, AddCommunityForm, EditCommunityForm, AddModeratorForm, BanUserCommunityForm, \
EscalateReportForm, ResolveReportForm
from app.community.util import search_for_community, community_url_exists, actor_to_community, \
@@ -444,11 +444,13 @@ def join_then_add(actor):
@bp.route('//submit', methods=['GET', 'POST'])
@login_required
@validation_required
-def add_post(actor):
+def add_discussion_post(actor):
if current_user.banned:
return show_ban_message()
community = actor_to_community(actor)
- form = CreatePostForm()
+
+ form = CreateDiscussionForm()
+
if g.site.enable_nsfl is False:
form.nsfl.render_kw = {'disabled': True}
if community.nsfw:
@@ -470,7 +472,63 @@ def add_post(actor):
if not can_create_post(current_user, community):
abort(401)
post = Post(user_id=current_user.id, community_id=form.communities.data, instance_id=1)
- save_post(form, post)
+ save_post(form, post, 'discussion')
+ community.post_count += 1
+ community.last_active = g.site.last_active = utcnow()
+ db.session.commit()
+ post.ap_id = f"https://{current_app.config['SERVER_NAME']}/post/{post.id}"
+ db.session.commit()
+
+ notify_about_post(post)
+
+ if not community.local_only:
+ federate_post(community, post)
+
+ return redirect(f"/c/{community.link()}")
+ else:
+ form.communities.data = community.id
+ form.notify_author.data = True
+
+ return render_template('community/add_discussion_post.html', title=_('Add post to community'), form=form, community=community,
+ markdown_editor=current_user.markdown_editor, low_bandwidth=False, actor=actor,
+ moderating_communities=moderating_communities(current_user.get_id()),
+ joined_communities=joined_communities(current_user.id),
+ inoculation=inoculation[randint(0, len(inoculation) - 1)]
+ )
+
+
+@bp.route('//submit_image', methods=['GET', 'POST'])
+@login_required
+@validation_required
+def add_image_post(actor):
+ if current_user.banned:
+ return show_ban_message()
+ community = actor_to_community(actor)
+
+ form = CreateImageForm()
+
+ if g.site.enable_nsfl is False:
+ form.nsfl.render_kw = {'disabled': True}
+ if community.nsfw:
+ form.nsfw.data = True
+ form.nsfw.render_kw = {'disabled': True}
+ if community.nsfl:
+ form.nsfl.data = True
+ form.nsfw.render_kw = {'disabled': True}
+ if not(community.is_moderator() or community.is_owner() or current_user.is_admin()):
+ form.sticky.render_kw = {'disabled': True}
+
+ form.communities.choices = [(c.id, c.display_name()) for c in current_user.communities()]
+
+ if not can_create_post(current_user, community):
+ abort(401)
+
+ if form.validate_on_submit():
+ community = Community.query.get_or_404(form.communities.data)
+ if not can_create_post(current_user, community):
+ abort(401)
+ post = Post(user_id=current_user.id, community_id=form.communities.data, instance_id=1)
+ save_post(form, post, 'image')
community.post_count += 1
community.last_active = g.site.last_active = utcnow()
db.session.commit()
@@ -497,105 +555,183 @@ def add_post(actor):
notify_about_post(post)
if not community.local_only:
- page = {
- 'type': 'Page',
- 'id': post.ap_id,
- 'attributedTo': current_user.ap_profile_id,
- 'to': [
- community.ap_profile_id,
- 'https://www.w3.org/ns/activitystreams#Public'
- ],
- 'name': post.title,
- 'cc': [],
- 'content': post.body_html if post.body_html else '',
- 'mediaType': 'text/html',
- 'source': {
- 'content': post.body if post.body else '',
- 'mediaType': 'text/markdown'
- },
- 'attachment': [],
- 'commentsEnabled': post.comments_enabled,
- 'sensitive': post.nsfw,
- 'nsfl': post.nsfl,
- 'stickied': post.sticky,
- 'published': ap_datetime(utcnow()),
- 'audience': community.ap_profile_id
- }
- create = {
- "id": f"https://{current_app.config['SERVER_NAME']}/activities/create/{gibberish(15)}",
- "actor": current_user.ap_profile_id,
- "to": [
- "https://www.w3.org/ns/activitystreams#Public"
- ],
- "cc": [
- community.ap_profile_id
- ],
- "type": "Create",
- "audience": community.ap_profile_id,
- "object": page,
- '@context': default_context()
- }
- if post.type == POST_TYPE_LINK:
- page['attachment'] = [{'href': post.url, 'type': 'Link'}]
- elif post.image_id:
- if post.image.file_path:
- image_url = post.image.file_path.replace('app/static/', f"https://{current_app.config['SERVER_NAME']}/static/")
- elif post.image.thumbnail_path:
- image_url = post.image.thumbnail_path.replace('app/static/', f"https://{current_app.config['SERVER_NAME']}/static/")
- else:
- image_url = post.image.source_url
- # NB image is a dict while attachment is a list of dicts (usually just one dict in the list)
- page['image'] = {'type': 'Image', 'url': image_url}
- if post.type == POST_TYPE_IMAGE:
- page['attachment'] = [{'type': 'Link', 'href': post.image.source_url}] # source_url is always a https link, no need for .replace() as done above
- if not community.is_local(): # this is a remote community - send the post to the instance that hosts it
- success = post_request(community.ap_inbox_url, create, current_user.private_key,
- current_user.ap_profile_id + '#main-key')
- if success:
- flash(_('Your post to %(name)s has been made.', name=community.title))
- else:
- flash('There was a problem making your post to ' + community.title)
- else: # local community - send (announce) post out to followers
- announce = {
- "id": f"https://{current_app.config['SERVER_NAME']}/activities/announce/{gibberish(15)}",
- "type": 'Announce',
- "to": [
- "https://www.w3.org/ns/activitystreams#Public"
- ],
- "actor": community.ap_profile_id,
- "cc": [
- community.ap_followers_url
- ],
- '@context': default_context(),
- 'object': create
- }
-
- sent_to = 0
- for instance in community.following_instances():
- if instance.inbox and not current_user.has_blocked_instance(instance.id) and not instance_banned(instance.domain):
- send_to_remote_instance(instance.id, community.id, announce)
- sent_to += 1
- if sent_to:
- flash(_('Your post to %(name)s has been made.', name=community.title))
- else:
- flash(_('Your post to %(name)s has been made.', name=community.title))
+ federate_post(community, post)
return redirect(f"/c/{community.link()}")
else:
- # when request.form has some data in it, it means form validation failed. Set the post_type so the correct tab is shown. See setupPostTypeTabs() in scripts.js
- if request.form.get('post_type', None):
- form.post_type.data = request.form.get('post_type')
form.communities.data = community.id
form.notify_author.data = True
- return render_template('community/add_post.html', title=_('Add post to community'), form=form, community=community,
- markdown_editor=current_user.markdown_editor, low_bandwidth=False,
+ return render_template('community/add_image_post.html', title=_('Add post to community'), form=form, community=community,
+ markdown_editor=current_user.markdown_editor, low_bandwidth=False, actor=actor,
moderating_communities=moderating_communities(current_user.get_id()),
joined_communities=joined_communities(current_user.id),
inoculation=inoculation[randint(0, len(inoculation) - 1)]
)
+@bp.route('//submit_link', methods=['GET', 'POST'])
+@login_required
+@validation_required
+def add_link_post(actor):
+ if current_user.banned:
+ return show_ban_message()
+ community = actor_to_community(actor)
+
+ form = CreateLinkForm()
+
+ if g.site.enable_nsfl is False:
+ form.nsfl.render_kw = {'disabled': True}
+ if community.nsfw:
+ form.nsfw.data = True
+ form.nsfw.render_kw = {'disabled': True}
+ if community.nsfl:
+ form.nsfl.data = True
+ form.nsfw.render_kw = {'disabled': True}
+ if not(community.is_moderator() or community.is_owner() or current_user.is_admin()):
+ form.sticky.render_kw = {'disabled': True}
+
+ form.communities.choices = [(c.id, c.display_name()) for c in current_user.communities()]
+
+ if not can_create_post(current_user, community):
+ abort(401)
+
+ if form.validate_on_submit():
+ community = Community.query.get_or_404(form.communities.data)
+ if not can_create_post(current_user, community):
+ abort(401)
+ post = Post(user_id=current_user.id, community_id=form.communities.data, instance_id=1)
+ save_post(form, post, 'link')
+ community.post_count += 1
+ community.last_active = g.site.last_active = utcnow()
+ db.session.commit()
+ post.ap_id = f"https://{current_app.config['SERVER_NAME']}/post/{post.id}"
+ db.session.commit()
+ if post.image_id and post.image.file_path is None:
+ make_image_sizes(post.image_id, 150, 512, 'posts') # the 512 sized image is for masonry view
+
+ # Update list of cross posts
+ if post.url:
+ other_posts = Post.query.filter(Post.id != post.id, Post.url == post.url,
+ Post.posted_at > post.posted_at - timedelta(days=6)).all()
+ for op in other_posts:
+ if op.cross_posts is None:
+ op.cross_posts = [post.id]
+ else:
+ op.cross_posts.append(post.id)
+ if post.cross_posts is None:
+ post.cross_posts = [op.id]
+ else:
+ post.cross_posts.append(op.id)
+ db.session.commit()
+
+ notify_about_post(post)
+
+ if not community.local_only:
+ federate_post(community, post)
+
+ return redirect(f"/c/{community.link()}")
+ else:
+ form.communities.data = community.id
+ form.notify_author.data = True
+
+ return render_template('community/add_link_post.html', title=_('Add post to community'), form=form, community=community,
+ markdown_editor=current_user.markdown_editor, low_bandwidth=False, actor=actor,
+ moderating_communities=moderating_communities(current_user.get_id()),
+ joined_communities=joined_communities(current_user.id),
+ inoculation=inoculation[randint(0, len(inoculation) - 1)]
+ )
+
+
+def federate_post(community, post):
+ page = {
+ 'type': 'Page',
+ 'id': post.ap_id,
+ 'attributedTo': current_user.ap_profile_id,
+ 'to': [
+ community.ap_profile_id,
+ 'https://www.w3.org/ns/activitystreams#Public'
+ ],
+ 'name': post.title,
+ 'cc': [],
+ 'content': post.body_html if post.body_html else '',
+ 'mediaType': 'text/html',
+ 'source': {
+ 'content': post.body if post.body else '',
+ 'mediaType': 'text/markdown'
+ },
+ 'attachment': [],
+ 'commentsEnabled': post.comments_enabled,
+ 'sensitive': post.nsfw,
+ 'nsfl': post.nsfl,
+ 'stickied': post.sticky,
+ 'published': ap_datetime(utcnow()),
+ 'audience': community.ap_profile_id
+ }
+ create = {
+ "id": f"https://{current_app.config['SERVER_NAME']}/activities/create/{gibberish(15)}",
+ "actor": current_user.ap_profile_id,
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ community.ap_profile_id
+ ],
+ "type": "Create",
+ "audience": community.ap_profile_id,
+ "object": page,
+ '@context': default_context()
+ }
+ if post.type == POST_TYPE_LINK:
+ page['attachment'] = [{'href': post.url, 'type': 'Link'}]
+ elif post.image_id:
+ if post.image.file_path:
+ image_url = post.image.file_path.replace('app/static/',
+ f"https://{current_app.config['SERVER_NAME']}/static/")
+ elif post.image.thumbnail_path:
+ image_url = post.image.thumbnail_path.replace('app/static/',
+ f"https://{current_app.config['SERVER_NAME']}/static/")
+ else:
+ image_url = post.image.source_url
+ # NB image is a dict while attachment is a list of dicts (usually just one dict in the list)
+ page['image'] = {'type': 'Image', 'url': image_url}
+ if post.type == POST_TYPE_IMAGE:
+ page['attachment'] = [{'type': 'Link',
+ 'href': post.image.source_url}] # source_url is always a https link, no need for .replace() as done above
+ if not community.is_local(): # this is a remote community - send the post to the instance that hosts it
+ success = post_request(community.ap_inbox_url, create, current_user.private_key,
+ current_user.ap_profile_id + '#main-key')
+ if success:
+ flash(_('Your post to %(name)s has been made.', name=community.title))
+ else:
+ flash('There was a problem making your post to ' + community.title)
+ else: # local community - send (announce) post out to followers
+ announce = {
+ "id": f"https://{current_app.config['SERVER_NAME']}/activities/announce/{gibberish(15)}",
+ "type": 'Announce',
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "actor": community.ap_profile_id,
+ "cc": [
+ community.ap_followers_url
+ ],
+ '@context': default_context(),
+ 'object': create
+ }
+
+ sent_to = 0
+ for instance in community.following_instances():
+ if instance.inbox and not current_user.has_blocked_instance(instance.id) and not instance_banned(
+ instance.domain):
+ send_to_remote_instance(instance.id, community.id, announce)
+ sent_to += 1
+ if sent_to:
+ flash(_('Your post to %(name)s has been made.', name=community.title))
+ else:
+ flash(_('Your post to %(name)s has been made.', name=community.title))
+
+
@bp.route('/community//report', methods=['GET', 'POST'])
@login_required
def community_report(community_id: int):
diff --git a/app/community/util.py b/app/community/util.py
index 37875a42..c58dcad9 100644
--- a/app/community/util.py
+++ b/app/community/util.py
@@ -196,18 +196,18 @@ def url_to_thumbnail_file(filename) -> File:
source_url=filename)
-def save_post(form, post: Post):
+def save_post(form, post: Post, type: str):
post.indexable = current_user.indexable
post.sticky = form.sticky.data
post.nsfw = form.nsfw.data
post.nsfl = form.nsfl.data
post.notify_author = form.notify_author.data
- if form.post_type.data == '' or form.post_type.data == 'discussion':
+ if type == '' or type == 'discussion':
post.title = form.discussion_title.data
post.body = form.discussion_body.data
post.body_html = markdown_to_html(post.body)
post.type = POST_TYPE_ARTICLE
- elif form.post_type.data == 'link':
+ elif type == 'link':
post.title = form.link_title.data
post.body = form.link_body.data
post.body_html = markdown_to_html(post.body)
@@ -244,7 +244,7 @@ def save_post(form, post: Post):
post.image = file
db.session.add(file)
- elif form.post_type.data == 'image':
+ elif type == 'image':
post.title = form.image_title.data
post.body = form.image_body.data
post.body_html = markdown_to_html(post.body)
@@ -304,7 +304,7 @@ def save_post(form, post: Post):
post.image = file
db.session.add(file)
- elif form.post_type.data == 'poll':
+ elif type == 'poll':
...
else:
raise Exception('invalid post type')
diff --git a/app/post/routes.py b/app/post/routes.py
index 9aae27b9..9e1dd406 100644
--- a/app/post/routes.py
+++ b/app/post/routes.py
@@ -13,9 +13,9 @@ from app.activitypub.util import default_context
from app.community.util import save_post, send_to_remote_instance
from app.inoculation import inoculation
from app.post.forms import NewReplyForm, ReportPostForm, MeaCulpaForm
-from app.community.forms import CreatePostForm
+from app.community.forms import CreateLinkForm, CreateImageForm, CreateDiscussionForm
from app.post.util import post_replies, get_comment_branch, post_reply_count
-from app.constants import SUBSCRIPTION_MEMBER, POST_TYPE_LINK, POST_TYPE_IMAGE
+from app.constants import SUBSCRIPTION_MEMBER, POST_TYPE_LINK, POST_TYPE_IMAGE, POST_TYPE_ARTICLE
from app.models import Post, PostReply, \
PostReplyVote, PostVote, Notification, utcnow, UserBlock, DomainBlock, InstanceBlock, Report, Site, Community, \
Topic, User, Instance
@@ -654,11 +654,82 @@ def post_reply_options(post_id: int, comment_id: int):
)
-@bp.route('/post//edit', methods=['GET', 'POST'])
+@bp.route('/post//edit', methods=['GET'])
@login_required
def post_edit(post_id: int):
post = Post.query.get_or_404(post_id)
- form = CreatePostForm()
+ if post.type == POST_TYPE_ARTICLE:
+ return redirect(url_for('post.post_edit_discussion_post', post_id=post_id))
+ elif post.type == POST_TYPE_LINK:
+ return redirect(url_for('post.post_edit_link_post', post_id=post_id))
+ elif post.type == POST_TYPE_IMAGE:
+ return redirect(url_for('post.post_edit_image_post', post_id=post_id))
+ else:
+ abort(404)
+
+
+@bp.route('/post//edit_discussion', methods=['GET', 'POST'])
+@login_required
+def post_edit_discussion_post(post_id: int):
+ post = Post.query.get_or_404(post_id)
+ form = CreateDiscussionForm()
+ del form.communities
+
+ mods = post.community.moderators()
+ if post.community.private_mods:
+ mod_list = []
+ else:
+ mod_user_ids = [mod.user_id for mod in mods]
+ mod_list = User.query.filter(User.id.in_(mod_user_ids)).all()
+
+ if post.user_id == current_user.id or post.community.is_moderator() or current_user.is_admin():
+ if g.site.enable_nsfl is False:
+ form.nsfl.render_kw = {'disabled': True}
+ if post.community.nsfw:
+ form.nsfw.data = True
+ form.nsfw.render_kw = {'disabled': True}
+ if post.community.nsfl:
+ form.nsfl.data = True
+ form.nsfw.render_kw = {'disabled': True}
+
+ if form.validate_on_submit():
+ save_post(form, post, 'discussion')
+ post.community.last_active = utcnow()
+ post.edited_at = utcnow()
+ db.session.commit()
+
+ post.flush_cache()
+ flash(_('Your changes have been saved.'), 'success')
+
+ # federate edit
+ if not post.community.local_only:
+ federate_post_update(post)
+
+ return redirect(url_for('activitypub.post_ap', post_id=post.id))
+ else:
+ form.discussion_title.data = post.title
+ form.discussion_body.data = post.body
+ form.notify_author.data = post.notify_author
+ form.nsfw.data = post.nsfw
+ form.nsfl.data = post.nsfl
+ form.sticky.data = post.sticky
+ if not (post.community.is_moderator() or post.community.is_owner() or current_user.is_admin()):
+ form.sticky.render_kw = {'disabled': True}
+ return render_template('post/post_edit_discussion.html', title=_('Edit post'), form=form, post=post,
+ markdown_editor=current_user.markdown_editor, mods=mod_list,
+ moderating_communities=moderating_communities(current_user.get_id()),
+ joined_communities=joined_communities(current_user.get_id()),
+ inoculation=inoculation[randint(0, len(inoculation) - 1)]
+ )
+ else:
+ abort(401)
+
+
+@bp.route('/post//edit_image', methods=['GET', 'POST'])
+@login_required
+def post_edit_image_post(post_id: int):
+ post = Post.query.get_or_404(post_id)
+ form = CreateImageForm()
del form.communities
mods = post.community.moderators()
@@ -678,11 +749,10 @@ def post_edit(post_id: int):
form.nsfl.data = True
form.nsfw.render_kw = {'disabled': True}
- #form.communities.choices = [(c.id, c.display_name()) for c in current_user.communities()]
old_url = post.url
if form.validate_on_submit():
- save_post(form, post)
+ save_post(form, post, 'image')
post.community.last_active = utcnow()
post.edited_at = utcnow()
db.session.commit()
@@ -714,104 +784,20 @@ def post_edit(post_id: int):
# federate edit
if not post.community.local_only:
- page_json = {
- 'type': 'Page',
- 'id': post.ap_id,
- 'attributedTo': current_user.ap_profile_id,
- 'to': [
- post.community.ap_profile_id,
- 'https://www.w3.org/ns/activitystreams#Public'
- ],
- 'name': post.title,
- 'cc': [],
- 'content': post.body_html if post.body_html else '',
- 'mediaType': 'text/html',
- 'source': {
- 'content': post.body if post.body else '',
- 'mediaType': 'text/markdown'
- },
- 'attachment': [],
- 'commentsEnabled': post.comments_enabled,
- 'sensitive': post.nsfw,
- 'nsfl': post.nsfl,
- 'stickied': post.sticky,
- 'published': ap_datetime(post.posted_at),
- 'updated': ap_datetime(post.edited_at),
- 'audience': post.community.ap_profile_id
- }
- update_json = {
- 'id': f"https://{current_app.config['SERVER_NAME']}/activities/update/{gibberish(15)}",
- 'type': 'Update',
- 'actor': current_user.profile_id(),
- 'audience': post.community.profile_id(),
- 'to': [post.community.profile_id(), 'https://www.w3.org/ns/activitystreams#Public'],
- 'published': ap_datetime(utcnow()),
- 'cc': [
- current_user.followers_url()
- ],
- 'object': page_json,
- }
- if post.type == POST_TYPE_LINK:
- page_json['attachment'] = [{'href': post.url, 'type': 'Link'}]
- elif post.image_id:
- if post.image.file_path:
- image_url = post.image.file_path.replace('app/static/', f"https://{current_app.config['SERVER_NAME']}/static/")
- elif post.image.thumbnail_path:
- image_url = post.image.thumbnail_path.replace('app/static/', f"https://{current_app.config['SERVER_NAME']}/static/")
- else:
- image_url = post.image.source_url
- # NB image is a dict while attachment is a list of dicts (usually just one dict in the list)
- page_json['image'] = {'type': 'Image', 'url': image_url}
- if post.type == POST_TYPE_IMAGE:
- page_json['attachment'] = [{'type': 'Link', 'href': post.image.source_url}] # source_url is always a https link, no need for .replace() as done above
-
- if not post.community.is_local(): # this is a remote community, send it to the instance that hosts it
- success = post_request(post.community.ap_inbox_url, update_json, current_user.private_key,
- current_user.ap_profile_id + '#main-key')
- if not success:
- flash('Failed to send edit to remote server', 'error')
- else: # local community - send it to followers on remote instances
- announce = {
- "id": f"https://{current_app.config['SERVER_NAME']}/activities/announce/{gibberish(15)}",
- "type": 'Announce',
- "to": [
- "https://www.w3.org/ns/activitystreams#Public"
- ],
- "actor": post.community.ap_profile_id,
- "cc": [
- post.community.ap_followers_url
- ],
- '@context': default_context(),
- 'object': update_json
- }
-
- for instance in post.community.following_instances():
- if instance.inbox and not current_user.has_blocked_instance(instance.id) and not instance_banned(instance.domain):
- send_to_remote_instance(instance.id, post.community.id, announce)
+ federate_post_update(post)
return redirect(url_for('activitypub.post_ap', post_id=post.id))
else:
- if post.type == constants.POST_TYPE_ARTICLE:
- form.post_type.data = 'discussion'
- form.discussion_title.data = post.title
- form.discussion_body.data = post.body
- elif post.type == constants.POST_TYPE_LINK:
- form.post_type.data = 'link'
- form.link_title.data = post.title
- form.link_body.data = post.body
- form.link_url.data = post.url
- elif post.type == constants.POST_TYPE_IMAGE:
- form.post_type.data = 'image'
- form.image_title.data = post.title
- form.image_body.data = post.body
- form.image_alt_text.data = post.image.alt_text
+ form.image_title.data = post.title
+ form.image_body.data = post.body
+ form.image_alt_text.data = post.image.alt_text
form.notify_author.data = post.notify_author
form.nsfw.data = post.nsfw
form.nsfl.data = post.nsfl
form.sticky.data = post.sticky
if not (post.community.is_moderator() or post.community.is_owner() or current_user.is_admin()):
form.sticky.render_kw = {'disabled': True}
- return render_template('post/post_edit.html', title=_('Edit post'), form=form, post=post,
+ return render_template('post/post_edit_image.html', title=_('Edit post'), form=form, post=post,
markdown_editor=current_user.markdown_editor, mods=mod_list,
moderating_communities=moderating_communities(current_user.get_id()),
joined_communities=joined_communities(current_user.get_id()),
@@ -821,6 +807,168 @@ def post_edit(post_id: int):
abort(401)
+@bp.route('/post//edit_link', methods=['GET', 'POST'])
+@login_required
+def post_edit_link_post(post_id: int):
+ post = Post.query.get_or_404(post_id)
+ form = CreateLinkForm()
+ del form.communities
+
+ mods = post.community.moderators()
+ if post.community.private_mods:
+ mod_list = []
+ else:
+ mod_user_ids = [mod.user_id for mod in mods]
+ mod_list = User.query.filter(User.id.in_(mod_user_ids)).all()
+
+ if post.user_id == current_user.id or post.community.is_moderator() or current_user.is_admin():
+ if g.site.enable_nsfl is False:
+ form.nsfl.render_kw = {'disabled': True}
+ if post.community.nsfw:
+ form.nsfw.data = True
+ form.nsfw.render_kw = {'disabled': True}
+ if post.community.nsfl:
+ form.nsfl.data = True
+ form.nsfw.render_kw = {'disabled': True}
+
+ old_url = post.url
+
+ if form.validate_on_submit():
+ save_post(form, post, 'link')
+ post.community.last_active = utcnow()
+ post.edited_at = utcnow()
+ db.session.commit()
+
+ if post.url != old_url:
+ if post.cross_posts is not None:
+ old_cross_posts = Post.query.filter(Post.id.in_(post.cross_posts)).all()
+ post.cross_posts.clear()
+ for ocp in old_cross_posts:
+ if ocp.cross_posts is not None:
+ ocp.cross_posts.remove(post.id)
+
+ new_cross_posts = Post.query.filter(Post.id != post.id, Post.url == post.url,
+ Post.posted_at > post.edited_at - timedelta(days=6)).all()
+ for ncp in new_cross_posts:
+ if ncp.cross_posts is None:
+ ncp.cross_posts = [post.id]
+ else:
+ ncp.cross_posts.append(post.id)
+ if post.cross_posts is None:
+ post.cross_posts = [ncp.id]
+ else:
+ post.cross_posts.append(ncp.id)
+
+ db.session.commit()
+
+ post.flush_cache()
+ flash(_('Your changes have been saved.'), 'success')
+ # federate edit
+
+ if not post.community.local_only:
+ federate_post_update(post)
+
+ return redirect(url_for('activitypub.post_ap', post_id=post.id))
+ else:
+ form.link_title.data = post.title
+ form.link_body.data = post.body
+ form.link_url.data = post.url
+ form.notify_author.data = post.notify_author
+ form.nsfw.data = post.nsfw
+ form.nsfl.data = post.nsfl
+ form.sticky.data = post.sticky
+ if not (post.community.is_moderator() or post.community.is_owner() or current_user.is_admin()):
+ form.sticky.render_kw = {'disabled': True}
+ return render_template('post/post_edit_link.html', title=_('Edit post'), form=form, post=post,
+ markdown_editor=current_user.markdown_editor, mods=mod_list,
+ moderating_communities=moderating_communities(current_user.get_id()),
+ joined_communities=joined_communities(current_user.get_id()),
+ inoculation=inoculation[randint(0, len(inoculation) - 1)]
+ )
+ else:
+ abort(401)
+
+
+def federate_post_update(post):
+ page_json = {
+ 'type': 'Page',
+ 'id': post.ap_id,
+ 'attributedTo': current_user.ap_profile_id,
+ 'to': [
+ post.community.ap_profile_id,
+ 'https://www.w3.org/ns/activitystreams#Public'
+ ],
+ 'name': post.title,
+ 'cc': [],
+ 'content': post.body_html if post.body_html else '',
+ 'mediaType': 'text/html',
+ 'source': {
+ 'content': post.body if post.body else '',
+ 'mediaType': 'text/markdown'
+ },
+ 'attachment': [],
+ 'commentsEnabled': post.comments_enabled,
+ 'sensitive': post.nsfw,
+ 'nsfl': post.nsfl,
+ 'stickied': post.sticky,
+ 'published': ap_datetime(post.posted_at),
+ 'updated': ap_datetime(post.edited_at),
+ 'audience': post.community.ap_profile_id
+ }
+ update_json = {
+ 'id': f"https://{current_app.config['SERVER_NAME']}/activities/update/{gibberish(15)}",
+ 'type': 'Update',
+ 'actor': current_user.profile_id(),
+ 'audience': post.community.profile_id(),
+ 'to': [post.community.profile_id(), 'https://www.w3.org/ns/activitystreams#Public'],
+ 'published': ap_datetime(utcnow()),
+ 'cc': [
+ current_user.followers_url()
+ ],
+ 'object': page_json,
+ }
+ if post.type == POST_TYPE_LINK:
+ page_json['attachment'] = [{'href': post.url, 'type': 'Link'}]
+ elif post.image_id:
+ if post.image.file_path:
+ image_url = post.image.file_path.replace('app/static/',
+ f"https://{current_app.config['SERVER_NAME']}/static/")
+ elif post.image.thumbnail_path:
+ image_url = post.image.thumbnail_path.replace('app/static/',
+ f"https://{current_app.config['SERVER_NAME']}/static/")
+ else:
+ image_url = post.image.source_url
+ # NB image is a dict while attachment is a list of dicts (usually just one dict in the list)
+ page_json['image'] = {'type': 'Image', 'url': image_url}
+ if post.type == POST_TYPE_IMAGE:
+ page_json['attachment'] = [{'type': 'Link',
+ 'href': post.image.source_url}] # source_url is always a https link, no need for .replace() as done above
+ if not post.community.is_local(): # this is a remote community, send it to the instance that hosts it
+ success = post_request(post.community.ap_inbox_url, update_json, current_user.private_key,
+ current_user.ap_profile_id + '#main-key')
+ if not success:
+ flash('Failed to send edit to remote server', 'error')
+ else: # local community - send it to followers on remote instances
+ announce = {
+ "id": f"https://{current_app.config['SERVER_NAME']}/activities/announce/{gibberish(15)}",
+ "type": 'Announce',
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "actor": post.community.ap_profile_id,
+ "cc": [
+ post.community.ap_followers_url
+ ],
+ '@context': default_context(),
+ 'object': update_json
+ }
+
+ for instance in post.community.following_instances():
+ if instance.inbox and not current_user.has_blocked_instance(instance.id) and not instance_banned(
+ instance.domain):
+ send_to_remote_instance(instance.id, post.community.id, announce)
+
+
@bp.route('/post//delete', methods=['GET', 'POST'])
@login_required
def post_delete(post_id: int):
diff --git a/app/static/structure.css b/app/static/structure.css
index 5a631fc0..1b3a385b 100644
--- a/app/static/structure.css
+++ b/app/static/structure.css
@@ -501,6 +501,14 @@ fieldset legend {
.form-group {
margin-bottom: 1.1rem;
}
+.form-group.required label:after {
+ content: "*";
+ color: red;
+ margin-left: 2px;
+ font-size: 80%;
+ position: relative;
+ top: -1px;
+}
.card {
max-width: 350px;
diff --git a/app/static/structure.scss b/app/static/structure.scss
index 5c0951c6..2b2a047f 100644
--- a/app/static/structure.scss
+++ b/app/static/structure.scss
@@ -65,6 +65,19 @@ html {
.form-group {
margin-bottom: 1.1rem;
+
+ &.required {
+ label {
+ &:after {
+ content: '*';
+ color: red;
+ margin-left: 2px;
+ font-size: 80%;
+ position: relative;
+ top: -1px;
+ }
+ }
+ }
}
.card {
diff --git a/app/templates/community/add_discussion_post.html b/app/templates/community/add_discussion_post.html
new file mode 100644
index 00000000..2a352622
--- /dev/null
+++ b/app/templates/community/add_discussion_post.html
@@ -0,0 +1,95 @@
+{% if theme() and file_exists('app/templates/themes/' + theme() + '/base.html') %}
+ {% extends 'themes/' + theme() + '/base.html' %}
+{% else %}
+ {% extends "base.html" %}
+{% endif %} %}
+{% from 'bootstrap/form.html' import render_field %}
+
+{% block app_content %}
+
+
+
{{ _('Create post') }}
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/community/add_image_post.html b/app/templates/community/add_image_post.html
new file mode 100644
index 00000000..8ea4da26
--- /dev/null
+++ b/app/templates/community/add_image_post.html
@@ -0,0 +1,97 @@
+{% if theme() and file_exists('app/templates/themes/' + theme() + '/base.html') %}
+ {% extends 'themes/' + theme() + '/base.html' %}
+{% else %}
+ {% extends "base.html" %}
+{% endif %} %}
+{% from 'bootstrap/form.html' import render_field %}
+
+{% block app_content %}
+
+
+
{{ _('Create post') }}
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/community/add_link_post.html b/app/templates/community/add_link_post.html
new file mode 100644
index 00000000..e59c82df
--- /dev/null
+++ b/app/templates/community/add_link_post.html
@@ -0,0 +1,96 @@
+{% if theme() and file_exists('app/templates/themes/' + theme() + '/base.html') %}
+ {% extends 'themes/' + theme() + '/base.html' %}
+{% else %}
+ {% extends "base.html" %}
+{% endif %} %}
+{% from 'bootstrap/form.html' import render_field %}
+
+{% block app_content %}
+
+
+
{{ _('Create post') }}
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/community/add_post.html b/app/templates/community/add_post.html
deleted file mode 100644
index f957d17a..00000000
--- a/app/templates/community/add_post.html
+++ /dev/null
@@ -1,145 +0,0 @@
-{% if theme() and file_exists('app/templates/themes/' + theme() + '/base.html') %}
- {% extends 'themes/' + theme() + '/base.html' %}
-{% else %}
- {% extends "base.html" %}
-{% endif %} %}
-{% from 'bootstrap/form.html' import render_field %}
-
-{% block app_content %}
-
-
-
{{ _('Create post') }}
-
-
-
-
-
-{% endblock %}
\ No newline at end of file
diff --git a/app/templates/post/post_edit.html b/app/templates/post/post_edit.html
deleted file mode 100644
index 515993de..00000000
--- a/app/templates/post/post_edit.html
+++ /dev/null
@@ -1,164 +0,0 @@
-{% if theme() and file_exists('app/templates/themes/' + theme() + '/base.html') %}
- {% extends 'themes/' + theme() + '/base.html' %}
-{% else %}
- {% extends "base.html" %}
-{% endif %} %}
-{% from 'bootstrap/form.html' import render_form, render_field %}
-
-{% block app_content %}
-
-
-
-
{{ _('Edit post') }}
-
-
-
-
-
-
-{% endblock %}
\ No newline at end of file
diff --git a/app/templates/post/post_edit_discussion.html b/app/templates/post/post_edit_discussion.html
new file mode 100644
index 00000000..d8cba771
--- /dev/null
+++ b/app/templates/post/post_edit_discussion.html
@@ -0,0 +1,75 @@
+{% if theme() and file_exists('app/templates/themes/' + theme() + '/base.html') %}
+ {% extends 'themes/' + theme() + '/base.html' %}
+{% else %}
+ {% extends "base.html" %}
+{% endif %} %}
+{% from 'bootstrap/form.html' import render_form, render_field %}
+
+{% block app_content %}
+
+
+
{{ _('Edit post') }}
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/post/post_edit_image.html b/app/templates/post/post_edit_image.html
new file mode 100644
index 00000000..db0a9d9f
--- /dev/null
+++ b/app/templates/post/post_edit_image.html
@@ -0,0 +1,78 @@
+{% if theme() and file_exists('app/templates/themes/' + theme() + '/base.html') %}
+ {% extends 'themes/' + theme() + '/base.html' %}
+{% else %}
+ {% extends "base.html" %}
+{% endif %} %}
+{% from 'bootstrap/form.html' import render_form, render_field %}
+
+{% block app_content %}
+
+
+
{{ _('Edit post') }}
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/post/post_edit_link.html b/app/templates/post/post_edit_link.html
new file mode 100644
index 00000000..82fa2781
--- /dev/null
+++ b/app/templates/post/post_edit_link.html
@@ -0,0 +1,75 @@
+{% if theme() and file_exists('app/templates/themes/' + theme() + '/base.html') %}
+ {% extends 'themes/' + theme() + '/base.html' %}
+{% else %}
+ {% extends "base.html" %}
+{% endif %} %}
+{% from 'bootstrap/form.html' import render_form, render_field %}
+
+{% block app_content %}
+
+
+
{{ _('Edit post') }}
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
From 502cf34edd47fb9eebfc0202e6d50067157a8186 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Sun, 7 Apr 2024 16:06:42 +1200
Subject: [PATCH 12/50] move project management docs to their own directory
---
README.md | 1 +
.../project_management/contributing.md | 2 +-
docs/project_management/decision_log.md | 4 ++++
.../project_management/governance.md | 0
ROADMAP.md => docs/project_management/roadmap.md | 6 +++---
docs/project_management/who_is_who.md | 11 +++++++++++
6 files changed, 20 insertions(+), 4 deletions(-)
rename CONTRIBUTING.md => docs/project_management/contributing.md (99%)
create mode 100644 docs/project_management/decision_log.md
rename GOVERNANCE.md => docs/project_management/governance.md (100%)
rename ROADMAP.md => docs/project_management/roadmap.md (88%)
create mode 100644 docs/project_management/who_is_who.md
diff --git a/README.md b/README.md
index 465b8dc0..68eb582c 100644
--- a/README.md
+++ b/README.md
@@ -16,3 +16,4 @@ To build a federated discussion and link aggregation platform, similar to Reddit
- [Screencast: overview of the PieFed codebase](https://join.piefed.social/2024/01/22/an-introduction-to-the-piefed-codebase/)
- [Database / entity relationship diagram](https://join.piefed.social/wp-content/uploads/2024/02/PieFed-entity-relationships.png)
- see [INSTALL.md](INSTALL.md)
+- see docs/project_management/* for a project roadmap, contributing guide and much more.
diff --git a/CONTRIBUTING.md b/docs/project_management/contributing.md
similarity index 99%
rename from CONTRIBUTING.md
rename to docs/project_management/contributing.md
index e2ce8798..f09ea3d3 100644
--- a/CONTRIBUTING.md
+++ b/docs/project_management/contributing.md
@@ -26,7 +26,7 @@ Mailing list, Matrix channel, etc still to come.
- Redis
Python developers with no Flask experience can quickly learn Flask by exploring the
-[Flask Mega Tutorial](https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world)
+[Flask Mega Tutorial](https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world-2018)
which will guide them through the process of building a simple social media app. Django is
very similar to Flask so developers familiar with that framework will have an easier
time of things.
diff --git a/docs/project_management/decision_log.md b/docs/project_management/decision_log.md
new file mode 100644
index 00000000..210b3b58
--- /dev/null
+++ b/docs/project_management/decision_log.md
@@ -0,0 +1,4 @@
+# Decision log
+
+This document helps prevent rearguing decisions after they have been made. It can also help new contributors come up to
+speed by providing a summary of how we got to the present state.
diff --git a/GOVERNANCE.md b/docs/project_management/governance.md
similarity index 100%
rename from GOVERNANCE.md
rename to docs/project_management/governance.md
diff --git a/ROADMAP.md b/docs/project_management/roadmap.md
similarity index 88%
rename from ROADMAP.md
rename to docs/project_management/roadmap.md
index 1ab115a7..0094e542 100644
--- a/ROADMAP.md
+++ b/docs/project_management/roadmap.md
@@ -29,15 +29,15 @@ The following are the goals for a 1.0 release, good enough for production use. I
### Moderation
-- community moderation
+- ✅ community moderation
- ✅ blocking - users, communities, domains, instances. bi-directional.
- import/export of block lists
### Onboarding
-- ✅ choose interests to auto-subscribe new accounts
+- ✅ choose topics to auto-subscribe new accounts
### Performance and scaling
- ✅ background task runner
-
+- send queue for federation
diff --git a/docs/project_management/who_is_who.md b/docs/project_management/who_is_who.md
new file mode 100644
index 00000000..311d3f58
--- /dev/null
+++ b/docs/project_management/who_is_who.md
@@ -0,0 +1,11 @@
+# People involved in PieFed
+
+This document gives the community a shared understanding of who is responsible for what and helps to make sure no one
+is inadvertently left out of a decision.
+
+### Rimu
+
+- https://piefed.social/u/rimu, https://mastodon.nzoss.nz/@rimu
+
+Founder and lead developer. Approver of PRs, payer of bills.
+
From f7f8c71dff0727a1d23bc0296a4307a276d3d645 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Sun, 7 Apr 2024 19:40:52 +1200
Subject: [PATCH 13/50] slugify topic machine name #78
---
app/admin/routes.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/admin/routes.py b/app/admin/routes.py
index 8075676e..8a6b5fb8 100644
--- a/app/admin/routes.py
+++ b/app/admin/routes.py
@@ -4,6 +4,7 @@ from time import sleep
from flask import request, flash, json, url_for, current_app, redirect, g
from flask_login import login_required, current_user
from flask_babel import _
+from slugify import slugify
from sqlalchemy import text, desc, or_
from app import db, celery, cache
@@ -357,7 +358,7 @@ def admin_topic_add():
form = EditTopicForm()
form.parent_id.choices = topics_for_form(0)
if form.validate_on_submit():
- topic = Topic(name=form.name.data, machine_name=form.machine_name.data, num_communities=0)
+ topic = Topic(name=form.name.data, machine_name=slugify(form.machine_name.data.strip()), num_communities=0)
if form.parent_id.data:
topic.parent_id = form.parent_id.data
else:
From b2e678926d98612a7df5fcc53844bfd3a02c2427 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Mon, 8 Apr 2024 19:48:25 +1200
Subject: [PATCH 14/50] topic tree fixes #145
---
app/admin/routes.py | 5 +++--
app/admin/util.py | 17 +----------------
app/main/routes.py | 4 ++--
app/templates/list_topics.html | 22 +++++++++++++++++++---
app/utils.py | 17 ++++++++++++++++-
5 files changed, 41 insertions(+), 24 deletions(-)
diff --git a/app/admin/routes.py b/app/admin/routes.py
index 8a6b5fb8..f1f197dc 100644
--- a/app/admin/routes.py
+++ b/app/admin/routes.py
@@ -14,13 +14,14 @@ from app.activitypub.util import default_context, instance_allowed, instance_blo
from app.admin.forms import FederationForm, SiteMiscForm, SiteProfileForm, EditCommunityForm, EditUserForm, \
EditTopicForm, SendNewsletterForm, AddUserForm
from app.admin.util import unsubscribe_from_everything_then_delete, unsubscribe_from_community, send_newsletter, \
- topic_tree, topics_for_form
+ topics_for_form
from app.community.util import save_icon_file, save_banner_file
from app.constants import REPORT_STATE_NEW, REPORT_STATE_ESCALATED
from app.models import AllowedInstances, BannedInstances, ActivityPubLog, utcnow, Site, Community, CommunityMember, \
User, Instance, File, Report, Topic, UserRegistration, Role, Post
from app.utils import render_template, permission_required, set_setting, get_setting, gibberish, markdown_to_html, \
- moderating_communities, joined_communities, finalize_user_setup, theme_list, blocked_phrases, blocked_referrers
+ moderating_communities, joined_communities, finalize_user_setup, theme_list, blocked_phrases, blocked_referrers, \
+ topic_tree
from app.admin import bp
diff --git a/app/admin/util.py b/app/admin/util.py
index b1669ac1..70462b23 100644
--- a/app/admin/util.py
+++ b/app/admin/util.py
@@ -9,7 +9,7 @@ from app import db, cache, celery
from app.activitypub.signature import post_request
from app.activitypub.util import default_context
from app.models import User, Community, Instance, Site, ActivityPubLog, CommunityMember, Topic
-from app.utils import gibberish
+from app.utils import gibberish, topic_tree
def unsubscribe_from_everything_then_delete(user_id):
@@ -106,21 +106,6 @@ def send_newsletter(form):
break
-# replies to a post, in a tree, sorted by a variety of methods
-def topic_tree() -> List:
- topics = Topic.query.order_by(Topic.name)
-
- topics_dict = {topic.id: {'topic': topic, 'children': []} for topic in topics.all()}
-
- for topic in topics:
- if topic.parent_id is not None:
- parent_comment = topics_dict.get(topic.parent_id)
- if parent_comment:
- parent_comment['children'].append(topics_dict[topic.id])
-
- return [topic for topic in topics_dict.values() if topic['topic'].parent_id is None]
-
-
def topics_for_form(current_topic: int) -> List[Tuple[int, str]]:
result = [(0, _('None'))]
topics = topic_tree()
diff --git a/app/main/routes.py b/app/main/routes.py
index dfaf1317..9df40e6c 100644
--- a/app/main/routes.py
+++ b/app/main/routes.py
@@ -25,7 +25,7 @@ from sqlalchemy_searchable import search
from app.utils import render_template, get_setting, gibberish, request_etag_matches, return_304, blocked_domains, \
ap_datetime, ip_address, retrieve_block_list, shorten_string, markdown_to_text, user_filters_home, \
joined_communities, moderating_communities, parse_page, theme_list, get_request, markdown_to_html, allowlist_html, \
- blocked_instances, communities_banned_from
+ blocked_instances, communities_banned_from, topic_tree
from app.models import Community, CommunityMember, Post, Site, User, utcnow, Domain, Topic, File, Instance, \
InstanceRole, Notification
from PIL import Image
@@ -158,7 +158,7 @@ def home_page(type, sort):
@bp.route('/topics', methods=['GET'])
def list_topics():
verification_warning()
- topics = Topic.query.filter_by(parent_id=None).order_by(Topic.name).all()
+ topics = topic_tree()
return render_template('list_topics.html', topics=topics, title=_('Browse by topic'),
low_bandwidth=request.cookies.get('low_bandwidth', '0') == '1',
diff --git a/app/templates/list_topics.html b/app/templates/list_topics.html
index f25a0b9b..d6ec82ca 100644
--- a/app/templates/list_topics.html
+++ b/app/templates/list_topics.html
@@ -8,14 +8,30 @@
{% block app_content %}
{% if len(topics) > 0 %}
+ {% macro render_topic(topic, depth) %}
+
+ {{ '--' * depth }} {{ topic['topic'].name }} |
+ {{ topic['topic'].num_communities }} |
+ Edit |
+ {% if topic['topic'].num_communities == 0 %}
+ Delete
+ {% else %}
+ Delete
+ {% endif %}
+ |
+
+ {% if topic['children'] %}
+ {% for topic in topic['children'] %}
+ {{ render_topic(topic, depth + 1)|safe }}
+ {% endfor %}
+ {% endif %}
+ {% endmacro %}
{{ _('Choose a topic') }}
{% for topic in topics %}
-
- {{ topic.name }} |
-
+ {{ render_topic(topic, 0)|safe }}
{% endfor %}
diff --git a/app/utils.py b/app/utils.py
index a88cda93..e5ebe888 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -28,7 +28,7 @@ import re
from app.email import send_welcome_email
from app.models import Settings, Domain, Instance, BannedInstances, User, Community, DomainBlock, ActivityPubLog, IpBan, \
- Site, Post, PostReply, utcnow, Filter, CommunityMember, InstanceBlock, CommunityBan
+ Site, Post, PostReply, utcnow, Filter, CommunityMember, InstanceBlock, CommunityBan, Topic
# Flask's render_template function, with support for themes added
@@ -679,6 +679,21 @@ def finalize_user_setup(user, application_required=False):
send_welcome_email(user, application_required)
+# topics, in a tree
+def topic_tree() -> List:
+ topics = Topic.query.order_by(Topic.name)
+
+ topics_dict = {topic.id: {'topic': topic, 'children': []} for topic in topics.all()}
+
+ for topic in topics:
+ if topic.parent_id is not None:
+ parent_comment = topics_dict.get(topic.parent_id)
+ if parent_comment:
+ parent_comment['children'].append(topics_dict[topic.id])
+
+ return [topic for topic in topics_dict.values() if topic['topic'].parent_id is None]
+
+
# All the following post/comment ranking math is explained at https://medium.com/hacking-and-gonzo/how-reddit-ranking-algorithms-work-ef111e33d0d9
epoch = datetime(1970, 1, 1)
From 160725b20789ee73aa7ef050d9f286279ea69f68 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Mon, 8 Apr 2024 19:49:56 +1200
Subject: [PATCH 15/50] remove admin stuff #145
---
app/templates/list_topics.html | 8 --------
1 file changed, 8 deletions(-)
diff --git a/app/templates/list_topics.html b/app/templates/list_topics.html
index d6ec82ca..cf57ab2f 100644
--- a/app/templates/list_topics.html
+++ b/app/templates/list_topics.html
@@ -11,14 +11,6 @@
{% macro render_topic(topic, depth) %}
{{ '--' * depth }} {{ topic['topic'].name }} |
- {{ topic['topic'].num_communities }} |
- Edit |
- {% if topic['topic'].num_communities == 0 %}
- Delete
- {% else %}
- Delete
- {% endif %}
- |
{% if topic['children'] %}
{% for topic in topic['children'] %}
From 6485f201d3d26cc407fe250102f9766e55f7e5ef Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Mon, 8 Apr 2024 20:01:08 +1200
Subject: [PATCH 16/50] topic paths #145
---
app/models.py | 12 ++++++++++++
app/templates/list_topics.html | 6 +++++-
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/app/models.py b/app/models.py
index 4981498e..fbc40990 100644
--- a/app/models.py
+++ b/app/models.py
@@ -292,6 +292,18 @@ class Topic(db.Model):
parent_id = db.Column(db.Integer)
communities = db.relationship('Community', lazy='dynamic', backref='topic', cascade="all, delete-orphan")
+ def path(self):
+ return_value = [self.machine_name]
+ parent_id = self.parent_id
+ while parent_id is not None:
+ parent_topic = Topic.query.get(parent_id)
+ if parent_topic is None:
+ break
+ return_value.append(parent_topic.machine_name)
+ parent_id = parent_topic.parent_id
+ return_value = list(reversed(return_value))
+ return '/'.join(return_value)
+
class Community(db.Model):
query_class = FullTextSearchQuery
diff --git a/app/templates/list_topics.html b/app/templates/list_topics.html
index cf57ab2f..5a928ec1 100644
--- a/app/templates/list_topics.html
+++ b/app/templates/list_topics.html
@@ -10,7 +10,11 @@
{% if len(topics) > 0 %}
{% macro render_topic(topic, depth) %}
- {{ '--' * depth }} {{ topic['topic'].name }} |
+ {{ '--' * depth }}
+ {% if depth == 0 %}{% endif %}
+ {{ topic['topic'].name }}
+ {% if depth == 0 %}{% endif %}
+ |
{% if topic['children'] %}
{% for topic in topic['children'] %}
From 5c3fb82ebb1a6ecfe1bfcdb69f51957f272daee0 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 08:14:25 +1200
Subject: [PATCH 17/50] speed up redis-based dup detection by avoiding touching
the DB in before_request() #135
---
app/activitypub/routes.py | 1 +
pyfedi.py | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/activitypub/routes.py b/app/activitypub/routes.py
index 310e6107..8a55f262 100644
--- a/app/activitypub/routes.py
+++ b/app/activitypub/routes.py
@@ -374,6 +374,7 @@ def shared_inbox():
redis_client.set(request_json['id'], 1, ex=90) # Save the activity ID into redis, to avoid duplicate activities that Lemmy sometimes sends
activity_log.activity_id = request_json['id']
+ g.site = Site.query.get(1) # g.site is not initialized by @app.before_request when request.path == '/inbox'
if g.site.log_activitypub_json:
activity_log.activity_json = json.dumps(request_json)
activity_log.result = 'processing'
diff --git a/pyfedi.py b/pyfedi.py
index 410baaec..8efd05bb 100644
--- a/pyfedi.py
+++ b/pyfedi.py
@@ -53,7 +53,8 @@ with app.app_context():
def before_request():
session['nonce'] = gibberish()
g.locale = str(get_locale())
- g.site = Site.query.get(1)
+ if request.path != '/inbox' and not request.path.startswith('/static/'): # do not load g.site on shared inbox, to increase chance of duplicate detection working properly
+ g.site = Site.query.get(1)
if current_user.is_authenticated:
current_user.last_seen = datetime.utcnow()
current_user.email_unread_sent = False
From 9840f7bc53a040559cd4ac6a508a667c0c9cf769 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 10:29:55 +1200
Subject: [PATCH 18/50] avoid invalid image json in Actors
---
app/activitypub/util.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/activitypub/util.py b/app/activitypub/util.py
index 881f0ea5..14847612 100644
--- a/app/activitypub/util.py
+++ b/app/activitypub/util.py
@@ -561,11 +561,11 @@ def actor_json_to_model(activity_json, address, server):
current_app.logger.error(f'KeyError for {address}@{server} while parsing ' + str(activity_json))
return None
- if 'icon' in activity_json:
+ if 'icon' in activity_json and activity_json['icon'] is not None and 'url' in activity_json['icon']:
avatar = File(source_url=activity_json['icon']['url'])
user.avatar = avatar
db.session.add(avatar)
- if 'image' in activity_json:
+ if 'image' in activity_json and activity_json['image'] is not None and 'url' in activity_json['image']:
cover = File(source_url=activity_json['image']['url'])
user.cover = cover
db.session.add(cover)
@@ -625,11 +625,11 @@ def actor_json_to_model(activity_json, address, server):
elif 'content' in activity_json:
community.description_html = allowlist_html(activity_json['content'])
community.description = ''
- if 'icon' in activity_json:
+ if 'icon' in activity_json and activity_json['icon'] is not None and 'url' in activity_json['icon']:
icon = File(source_url=activity_json['icon']['url'])
community.icon = icon
db.session.add(icon)
- if 'image' in activity_json:
+ if 'image' in activity_json and activity_json['image'] is not None and 'url' in activity_json['image']:
image = File(source_url=activity_json['image']['url'])
community.image = image
db.session.add(image)
From cfce14b9f3ce0547f21dbfc2303470ff4681f154 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 12:29:48 +1200
Subject: [PATCH 19/50] images > 2000px tend to be real photos instead of 4chan
screenshots
---
app/activitypub/util.py | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/app/activitypub/util.py b/app/activitypub/util.py
index 14847612..3e2bb810 100644
--- a/app/activitypub/util.py
+++ b/app/activitypub/util.py
@@ -793,18 +793,19 @@ def make_image_sizes_async(file_id, thumbnail_width, medium_width, directory):
db.session.commit()
# Alert regarding fascist meme content
- try:
- image_text = pytesseract.image_to_string(Image.open(BytesIO(source_image)).convert('L'), timeout=30)
- except FileNotFoundError as e:
- image_text = ''
- if 'Anonymous' in image_text and ('No.' in image_text or ' N0' in image_text): # chan posts usually contain the text 'Anonymous' and ' No.12345'
- post = Post.query.filter_by(image_id=file.id).first()
- notification = Notification(title='Review this',
- user_id=1,
- author_id=post.user_id,
- url=url_for('activitypub.post_ap', post_id=post.id))
- db.session.add(notification)
- db.session.commit()
+ if img_width < 2000: # images > 2000px tend to be real photos instead of 4chan screenshots.
+ try:
+ image_text = pytesseract.image_to_string(Image.open(BytesIO(source_image)).convert('L'), timeout=30)
+ except FileNotFoundError as e:
+ image_text = ''
+ if 'Anonymous' in image_text and ('No.' in image_text or ' N0' in image_text): # chan posts usually contain the text 'Anonymous' and ' No.12345'
+ post = Post.query.filter_by(image_id=file.id).first()
+ notification = Notification(title='Review this',
+ user_id=1,
+ author_id=post.user_id,
+ url=url_for('activitypub.post_ap', post_id=post.id))
+ db.session.add(notification)
+ db.session.commit()
# create a summary from markdown if present, otherwise use html if available
From 74aa8262fb74448d168709cf90720c4db89d09fe Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 12:43:32 +1200
Subject: [PATCH 20/50] translation update
---
app/translations/ca/LC_MESSAGES/messages.po | 2962 +++++++++++++++++++
app/translations/de/LC_MESSAGES/messages.po | 1497 +++++++---
app/translations/es/LC_MESSAGES/messages.po | 2962 +++++++++++++++++++
app/translations/fr/LC_MESSAGES/messages.po | 1077 ++++---
app/translations/ja/LC_MESSAGES/messages.po | 1077 ++++---
app/translations/lt/LC_MESSAGES/messages.po | 2607 ++++++++++++++++
app/translations/pt/LC_MESSAGES/messages.po | 1077 ++++---
7 files changed, 11597 insertions(+), 1662 deletions(-)
create mode 100644 app/translations/ca/LC_MESSAGES/messages.po
create mode 100644 app/translations/es/LC_MESSAGES/messages.po
create mode 100644 app/translations/lt/LC_MESSAGES/messages.po
diff --git a/app/translations/ca/LC_MESSAGES/messages.po b/app/translations/ca/LC_MESSAGES/messages.po
new file mode 100644
index 00000000..ee2601a2
--- /dev/null
+++ b/app/translations/ca/LC_MESSAGES/messages.po
@@ -0,0 +1,2962 @@
+# Catalan translations for PROJECT.
+# Copyright (C) 2024 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR
, 2024.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2024-04-09 12:33+1200\n"
+"PO-Revision-Date: 2024-04-09 12:33+1200\n"
+"Last-Translator: FULL NAME \n"
+"Language: ca\n"
+"Language-Team: ca \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.12.1\n"
+
+#: app/__init__.py:33
+msgid "Please log in to access this page."
+msgstr ""
+
+#: app/cli.py:225 app/main/routes.py:328
+msgid "[PieFed] You have unread notifications"
+msgstr ""
+
+#: app/email.py:16
+msgid "[PieFed] Reset Your Password"
+msgstr ""
+
+#: app/email.py:26
+msgid "[PieFed] Please verify your email address"
+msgstr ""
+
+#: app/email.py:34
+msgid "Your application has been approved - welcome to PieFed"
+msgstr ""
+
+#: app/email.py:34
+msgid "Welcome to PieFed"
+msgstr ""
+
+#: app/activitypub/util.py:1280 app/post/routes.py:91 app/post/routes.py:509
+#, python-format
+msgid "Reply from %(name)s on %(post_title)s"
+msgstr ""
+
+#: app/activitypub/util.py:1679 app/post/routes.py:1053
+msgid "A post has been reported"
+msgstr ""
+
+#: app/activitypub/util.py:1700 app/post/routes.py:1187
+msgid "A comment has been reported"
+msgstr ""
+
+#: app/admin/forms.py:13 app/admin/forms.py:99 app/community/forms.py:18
+#: app/templates/community/community_mod_list.html:32
+#: app/templates/user/filters.html:29 app/templates/user/filters.html:70
+#: app/templates/user/filters.html:88 app/templates/user/filters.html:106
+#: app/templates/user/filters.html:124 app/user/forms.py:89
+msgid "Name"
+msgstr ""
+
+#: app/admin/forms.py:14
+msgid "Tagline"
+msgstr ""
+
+#: app/admin/forms.py:15
+msgid "Icon"
+msgstr ""
+
+#: app/admin/forms.py:18
+msgid "Sidebar"
+msgstr ""
+
+#: app/admin/forms.py:19
+msgid "Legal information"
+msgstr ""
+
+#: app/admin/forms.py:20 app/admin/forms.py:37 app/admin/forms.py:46
+#: app/admin/forms.py:83 app/admin/forms.py:102 app/admin/forms.py:128
+#: app/admin/forms.py:180 app/community/forms.py:56 app/community/forms.py:96
+#: app/community/forms.py:109 app/community/forms.py:129 app/user/forms.py:99
+msgid "Save"
+msgstr ""
+
+#: app/admin/forms.py:24
+msgid "Enable downvotes"
+msgstr ""
+
+#: app/admin/forms.py:25
+msgid "Allow local image posts"
+msgstr ""
+
+#: app/admin/forms.py:26
+msgid "Days to cache images from remote instances for"
+msgstr ""
+
+#: app/admin/forms.py:27
+msgid "Allow NSFW communities"
+msgstr ""
+
+#: app/admin/forms.py:28
+msgid "Allow NSFL communities and posts"
+msgstr ""
+
+#: app/admin/forms.py:29
+msgid "Only admins can create new local communities"
+msgstr ""
+
+#: app/admin/forms.py:30
+msgid "Notify admins about reports, not just moderators"
+msgstr ""
+
+#: app/admin/forms.py:31
+msgid "Open"
+msgstr ""
+
+#: app/admin/forms.py:31
+msgid "Require application"
+msgstr ""
+
+#: app/admin/forms.py:31
+msgid "Closed"
+msgstr ""
+
+#: app/admin/forms.py:32
+msgid "Registration mode"
+msgstr ""
+
+#: app/admin/forms.py:33
+msgid "Question to ask people applying for an account"
+msgstr ""
+
+#: app/admin/forms.py:34
+msgid "Block registrations from these referrers (one per line)"
+msgstr ""
+
+#: app/admin/forms.py:35
+msgid "Log ActivityPub JSON for debugging"
+msgstr ""
+
+#: app/admin/forms.py:36
+msgid "Default theme"
+msgstr ""
+
+#: app/admin/forms.py:41
+msgid "Allowlist instead of blocklist"
+msgstr ""
+
+#: app/admin/forms.py:42
+msgid "Allow federation with these instances"
+msgstr ""
+
+#: app/admin/forms.py:43
+msgid "Blocklist instead of allowlist"
+msgstr ""
+
+#: app/admin/forms.py:44
+msgid "Deny federation with these instances"
+msgstr ""
+
+#: app/admin/forms.py:45
+msgid "Discard all posts and comments with these phrases (one per line)"
+msgstr ""
+
+#: app/admin/forms.py:50 app/community/forms.py:42 app/community/forms.py:90
+#: app/community/forms.py:101 app/community/forms.py:121
+msgid "Title"
+msgstr ""
+
+#: app/admin/forms.py:51 app/admin/forms.py:100 app/community/forms.py:19
+msgid "Url"
+msgstr ""
+
+#: app/admin/forms.py:52 app/community/forms.py:20 app/community/forms.py:43
+msgid "Description"
+msgstr ""
+
+#: app/admin/forms.py:53 app/community/forms.py:21 app/community/forms.py:44
+msgid "Icon image"
+msgstr ""
+
+#: app/admin/forms.py:54 app/community/forms.py:22 app/community/forms.py:45
+msgid "Banner image"
+msgstr ""
+
+#: app/admin/forms.py:55 app/community/forms.py:23 app/community/forms.py:46
+msgid "Rules"
+msgstr ""
+
+#: app/admin/forms.py:56 app/community/forms.py:47
+msgid "Porn community"
+msgstr ""
+
+#: app/admin/forms.py:57
+msgid "Banned - no new posts accepted"
+msgstr ""
+
+#: app/admin/forms.py:58 app/community/forms.py:48
+msgid "Only accept posts from current instance"
+msgstr ""
+
+#: app/admin/forms.py:59 app/community/forms.py:49
+msgid "Only moderators can post"
+msgstr ""
+
+#: app/admin/forms.py:60 app/community/forms.py:50
+msgid "New moderators wanted"
+msgstr ""
+
+#: app/admin/forms.py:61
+msgid "Posts show on home page"
+msgstr ""
+
+#: app/admin/forms.py:62
+msgid "Posts can be popular"
+msgstr ""
+
+#: app/admin/forms.py:63
+msgid "Posts show in All list"
+msgstr ""
+
+#: app/admin/forms.py:64
+msgid "Low quality / toxic - upvotes in here don't add to reputation"
+msgstr ""
+
+#: app/admin/forms.py:65
+msgid "Forever"
+msgstr ""
+
+#: app/admin/forms.py:66
+msgid "1 week"
+msgstr ""
+
+#: app/admin/forms.py:67
+msgid "2 weeks"
+msgstr ""
+
+#: app/admin/forms.py:68
+msgid "1 month"
+msgstr ""
+
+#: app/admin/forms.py:69
+msgid "2 months"
+msgstr ""
+
+#: app/admin/forms.py:70
+msgid "3 months"
+msgstr ""
+
+#: app/admin/forms.py:71
+msgid "6 months"
+msgstr ""
+
+#: app/admin/forms.py:72
+msgid "1 year"
+msgstr ""
+
+#: app/admin/forms.py:73
+msgid "2 years"
+msgstr ""
+
+#: app/admin/forms.py:74
+msgid "5 years"
+msgstr ""
+
+#: app/admin/forms.py:75
+msgid "10 years"
+msgstr ""
+
+#: app/admin/forms.py:77
+msgid "Retain content"
+msgstr ""
+
+#: app/admin/forms.py:78 app/community/forms.py:51
+msgid "Topic"
+msgstr ""
+
+#: app/admin/forms.py:79 app/community/forms.py:52
+#: app/templates/community/_community_nav.html:23
+msgid "List"
+msgstr ""
+
+#: app/admin/forms.py:80 app/community/forms.py:53
+msgid "Masonry"
+msgstr ""
+
+#: app/admin/forms.py:81 app/community/forms.py:54
+msgid "Wide masonry"
+msgstr ""
+
+#: app/admin/forms.py:82 app/community/forms.py:55
+msgid "Layout"
+msgstr ""
+
+#: app/admin/forms.py:89 app/community/forms.py:32
+msgid "Url is required."
+msgstr ""
+
+#: app/admin/forms.py:93 app/community/forms.py:36
+msgid "- cannot be in Url. Use _ instead?"
+msgstr ""
+
+#: app/admin/forms.py:101
+msgid "Parent topic"
+msgstr ""
+
+#: app/admin/forms.py:106 app/auth/forms.py:10 app/auth/forms.py:17
+#: app/community/forms.py:60
+msgid "User name"
+msgstr ""
+
+#: app/admin/forms.py:108 app/user/forms.py:14
+msgid "Email address"
+msgstr ""
+
+#: app/admin/forms.py:109 app/auth/forms.py:11 app/auth/forms.py:20
+#: app/auth/forms.py:74
+msgid "Password"
+msgstr ""
+
+#: app/admin/forms.py:111 app/auth/forms.py:22 app/auth/forms.py:76
+msgid "Repeat password"
+msgstr ""
+
+#: app/admin/forms.py:112 app/user/forms.py:17
+msgid "Bio"
+msgstr ""
+
+#: app/admin/forms.py:113 app/user/forms.py:18
+msgid "Matrix User ID"
+msgstr ""
+
+#: app/admin/forms.py:114 app/user/forms.py:19
+msgid "Avatar image"
+msgstr ""
+
+#: app/admin/forms.py:115 app/user/forms.py:20
+msgid "Top banner image"
+msgstr ""
+
+#: app/admin/forms.py:116 app/admin/forms.py:170 app/user/forms.py:21
+msgid "This profile is a bot"
+msgstr ""
+
+#: app/admin/forms.py:117 app/admin/forms.py:171
+msgid "Email address is verified"
+msgstr ""
+
+#: app/admin/forms.py:118 app/admin/forms.py:172
+msgid "Banned"
+msgstr ""
+
+#: app/admin/forms.py:119 app/user/forms.py:34
+msgid "Subscribe to email newsletter"
+msgstr ""
+
+#: app/admin/forms.py:120 app/user/forms.py:36
+msgid "Hide posts by bots"
+msgstr ""
+
+#: app/admin/forms.py:121 app/user/forms.py:37
+msgid "Show NSFW posts"
+msgstr ""
+
+#: app/admin/forms.py:122 app/user/forms.py:38
+msgid "Show NSFL posts"
+msgstr ""
+
+#: app/admin/forms.py:123 app/admin/forms.py:173
+msgid "User"
+msgstr ""
+
+#: app/admin/forms.py:124 app/admin/forms.py:174
+msgid "Staff"
+msgstr ""
+
+#: app/admin/forms.py:125 app/admin/forms.py:175 app/admin/routes.py:32
+#: app/templates/base.html:185
+msgid "Admin"
+msgstr ""
+
+#: app/admin/forms.py:127 app/admin/forms.py:177
+msgid "Role"
+msgstr ""
+
+#: app/admin/forms.py:133 app/auth/forms.py:32
+msgid "An account with this email address already exists."
+msgstr ""
+
+#: app/admin/forms.py:137 app/auth/forms.py:36
+msgid "User names cannot contain @."
+msgstr ""
+
+#: app/admin/forms.py:141 app/auth/forms.py:40
+msgid "This username was used in the past and cannot be reused."
+msgstr ""
+
+#: app/admin/forms.py:143 app/auth/forms.py:42
+msgid "An account with this user name already exists."
+msgstr ""
+
+#: app/admin/forms.py:146 app/auth/forms.py:45
+msgid "A community with this name exists so it cannot be used for a user."
+msgstr ""
+
+#: app/admin/forms.py:153 app/admin/forms.py:166 app/auth/forms.py:52
+#: app/auth/forms.py:65
+msgid "This password is too common."
+msgstr ""
+
+#: app/admin/forms.py:163 app/auth/forms.py:62
+msgid "This password is not secure."
+msgstr ""
+
+#: app/admin/forms.py:178
+msgid "Remove avatar"
+msgstr ""
+
+#: app/admin/forms.py:179
+msgid "Remove banner"
+msgstr ""
+
+#: app/admin/forms.py:184
+msgid "Subject"
+msgstr ""
+
+#: app/admin/forms.py:185
+msgid "Body (text)"
+msgstr ""
+
+#: app/admin/forms.py:186
+msgid "Body (html)"
+msgstr ""
+
+#: app/admin/forms.py:187
+msgid "Test mode"
+msgstr ""
+
+#: app/admin/forms.py:188 app/admin/routes.py:708
+msgid "Send newsletter"
+msgstr ""
+
+#: app/admin/routes.py:60 app/templates/admin/_nav.html:4
+msgid "Site profile"
+msgstr ""
+
+#: app/admin/routes.py:108 app/templates/admin/_nav.html:5
+msgid "Misc settings"
+msgstr ""
+
+#: app/admin/routes.py:144
+msgid "Admin settings saved"
+msgstr ""
+
+#: app/admin/routes.py:155
+msgid "Federation settings"
+msgstr ""
+
+#: app/admin/routes.py:177
+msgid "ActivityPub Log"
+msgstr ""
+
+#: app/admin/routes.py:187
+msgid "Activity JSON"
+msgstr ""
+
+#: app/admin/routes.py:222 app/community/routes.py:232 app/main/routes.py:193
+#: app/post/routes.py:238 app/templates/admin/_nav.html:6
+#: app/templates/list_communities.html:51 app/templates/user/filters.html:58
+#: app/templates/user/notifications.html:66
+#: app/templates/user/show_profile.html:133
+msgid "Communities"
+msgstr ""
+
+#: app/admin/routes.py:274 app/admin/routes.py:370 app/admin/routes.py:395
+#: app/admin/routes.py:564 app/community/routes.py:808
+msgid "Saved"
+msgstr ""
+
+#: app/admin/routes.py:278
+msgid ""
+"This is a remote community - most settings here will be regularly "
+"overwritten with data from the original server."
+msgstr ""
+
+#: app/admin/routes.py:295 app/community/routes.py:820
+msgid "Edit community"
+msgstr ""
+
+#: app/admin/routes.py:314 app/community/routes.py:843
+msgid "Community deleted"
+msgstr ""
+
+#: app/admin/routes.py:348 app/community/routes.py:218 app/post/routes.py:224
+#: app/templates/admin/_nav.html:7 app/templates/base.html:137
+#: app/templates/base.html:155 app/templates/topic/show_topic.html:14
+msgid "Topics"
+msgstr ""
+
+#: app/admin/routes.py:373 app/templates/admin/topics.html:35
+msgid "Add topic"
+msgstr ""
+
+#: app/admin/routes.py:401
+msgid "Edit topic"
+msgstr ""
+
+#: app/admin/routes.py:416
+msgid "Topic deleted"
+msgstr ""
+
+#: app/admin/routes.py:418
+msgid "Cannot delete topic with communities assigned to it."
+msgstr ""
+
+#: app/admin/routes.py:445 app/templates/admin/_nav.html:8
+msgid "Users"
+msgstr ""
+
+#: app/admin/routes.py:475
+msgid "Problematic users"
+msgstr ""
+
+#: app/admin/routes.py:496
+msgid "Bad posts"
+msgstr ""
+
+#: app/admin/routes.py:529
+msgid "Registration approved."
+msgstr ""
+
+#: app/admin/routes.py:560
+msgid ""
+"Permissions are cached for 50 seconds so new admin roles won't take "
+"effect immediately."
+msgstr ""
+
+#: app/admin/routes.py:568
+msgid ""
+"This is a remote user - most settings here will be regularly overwritten "
+"with data from the original server."
+msgstr ""
+
+#: app/admin/routes.py:575
+msgid "Edit user"
+msgstr ""
+
+#: app/admin/routes.py:640
+msgid "User added"
+msgstr ""
+
+#: app/admin/routes.py:643
+msgid "Add user"
+msgstr ""
+
+#: app/admin/routes.py:667
+msgid "User deleted"
+msgstr ""
+
+#: app/admin/routes.py:690
+#: app/templates/community/_community_moderation_nav.html:11
+#: app/templates/community/community_moderate.html:21
+msgid "Reports"
+msgstr ""
+
+#: app/admin/util.py:110
+msgid "None"
+msgstr ""
+
+#: app/auth/forms.py:12
+msgid "Low bandwidth mode"
+msgstr ""
+
+#: app/auth/forms.py:13
+msgid "Log In"
+msgstr ""
+
+#: app/auth/forms.py:18 app/auth/forms.py:19 app/auth/forms.py:69
+msgid "Email"
+msgstr ""
+
+#: app/auth/forms.py:24
+msgid "Why would you like to join this site?"
+msgstr ""
+
+#: app/auth/forms.py:27 app/auth/routes.py:153 app/templates/base.html:144
+msgid "Register"
+msgstr ""
+
+#: app/auth/forms.py:70
+msgid "Request password reset"
+msgstr ""
+
+#: app/auth/forms.py:78
+msgid "Set password"
+msgstr ""
+
+#: app/auth/routes.py:29 app/auth/routes.py:32
+msgid "No account exists with that user name."
+msgstr ""
+
+#: app/auth/routes.py:36
+msgid ""
+"Invalid password. Please reset "
+"your password."
+msgstr ""
+
+#: app/auth/routes.py:39
+msgid "Invalid password"
+msgstr ""
+
+#: app/auth/routes.py:42
+msgid "You have been banned."
+msgstr ""
+
+#: app/auth/routes.py:74
+msgid "Login"
+msgstr ""
+
+#: app/auth/routes.py:100
+msgid "Sorry, you cannot use that email address"
+msgstr ""
+
+#: app/auth/routes.py:102
+msgid "Sorry, you cannot use that user name"
+msgstr ""
+
+#: app/auth/routes.py:119
+#, python-format
+msgid "Your username contained special letters so it was changed to %(name)s."
+msgstr ""
+
+#: app/auth/routes.py:158
+msgid "Account under review"
+msgstr ""
+
+#: app/auth/routes.py:163 app/templates/auth/check_email.html:8
+msgid "Check your email"
+msgstr ""
+
+#: app/auth/routes.py:174
+msgid "Sorry, you cannot use that email address."
+msgstr ""
+
+#: app/auth/routes.py:179
+msgid "Check your email for a link to reset your password."
+msgstr ""
+
+#: app/auth/routes.py:182
+msgid "No account with that email address exists"
+msgstr ""
+
+#: app/auth/routes.py:184
+msgid "Reset Password"
+msgstr ""
+
+#: app/auth/routes.py:198
+#, python-format
+msgid ""
+"Your password has been reset. Please use it to log in with user name of "
+"%(name)s."
+msgstr ""
+
+#: app/auth/routes.py:218
+msgid "Thank you for verifying your email address."
+msgstr ""
+
+#: app/auth/routes.py:220
+msgid "Email address validation failed."
+msgstr ""
+
+#: app/chat/forms.py:13
+msgid "Message"
+msgstr ""
+
+#: app/chat/forms.py:14
+msgid "Reply"
+msgstr ""
+
+#: app/chat/forms.py:18 app/post/forms.py:16 app/user/forms.py:60
+msgid "Spam"
+msgstr ""
+
+#: app/chat/forms.py:19 app/post/forms.py:16 app/user/forms.py:61
+msgid "Harassment"
+msgstr ""
+
+#: app/chat/forms.py:20 app/post/forms.py:17 app/user/forms.py:62
+msgid "Threatening violence"
+msgstr ""
+
+#: app/chat/forms.py:21 app/user/forms.py:63
+msgid "Promoting hate / genocide"
+msgstr ""
+
+#: app/chat/forms.py:22 app/post/forms.py:18 app/user/forms.py:64
+msgid "Misinformation / disinformation"
+msgstr ""
+
+#: app/chat/forms.py:23 app/post/forms.py:19 app/user/forms.py:65
+msgid "Racism, sexism, transphobia"
+msgstr ""
+
+#: app/chat/forms.py:24 app/post/forms.py:21 app/user/forms.py:68
+msgid "Minor abuse or sexualization"
+msgstr ""
+
+#: app/chat/forms.py:25 app/post/forms.py:22 app/user/forms.py:69
+msgid "Non-consensual intimate media"
+msgstr ""
+
+#: app/chat/forms.py:26 app/post/forms.py:23 app/user/forms.py:70
+msgid "Prohibited transaction"
+msgstr ""
+
+#: app/chat/forms.py:26 app/post/forms.py:23 app/user/forms.py:70
+msgid "Impersonation"
+msgstr ""
+
+#: app/chat/forms.py:27 app/post/forms.py:24 app/user/forms.py:71
+msgid "Copyright violation"
+msgstr ""
+
+#: app/chat/forms.py:27 app/post/forms.py:24 app/user/forms.py:71
+msgid "Trademark violation"
+msgstr ""
+
+#: app/chat/forms.py:28 app/post/forms.py:25 app/user/forms.py:72
+msgid "Self-harm or suicide"
+msgstr ""
+
+#: app/chat/forms.py:29 app/community/forms.py:162 app/post/forms.py:26
+#: app/user/forms.py:73
+msgid "Other"
+msgstr ""
+
+#: app/chat/forms.py:30 app/community/forms.py:81 app/community/forms.py:164
+#: app/post/forms.py:27 app/user/forms.py:74
+msgid "Reason"
+msgstr ""
+
+#: app/chat/forms.py:31 app/community/forms.py:165 app/post/forms.py:28
+#: app/user/forms.py:75
+msgid "More info"
+msgstr ""
+
+#: app/chat/forms.py:33 app/community/forms.py:167 app/post/forms.py:30
+#: app/templates/user/show_profile.html:56 app/user/forms.py:77
+msgid "Report"
+msgstr ""
+
+#: app/chat/routes.py:49
+#, python-format
+msgid "Chat with %(name)s"
+msgstr ""
+
+#: app/chat/routes.py:69
+msgid "Send"
+msgstr ""
+
+#: app/chat/routes.py:79 app/templates/chat/new_message.html:14
+#, python-format
+msgid "New message to \"%(recipient_name)s\""
+msgstr ""
+
+#: app/chat/routes.py:124
+msgid "Conversation deleted"
+msgstr ""
+
+#: app/chat/routes.py:135
+msgid "Instance blocked."
+msgstr ""
+
+#: app/chat/routes.py:165
+msgid "This conversation has been reported, thank you!"
+msgstr ""
+
+#: app/chat/routes.py:170
+msgid "Report conversation"
+msgstr ""
+
+#: app/chat/util.py:59
+#, python-format
+msgid "Message failed to send to %(name)s."
+msgstr ""
+
+#: app/chat/util.py:61
+msgid "Message sent."
+msgstr ""
+
+#: app/community/forms.py:26
+msgid "Create"
+msgstr ""
+
+#: app/community/forms.py:61
+msgid "Add"
+msgstr ""
+
+#: app/community/forms.py:65
+msgid "Amend the report description if necessary"
+msgstr ""
+
+#: app/community/forms.py:66
+msgid "Escalate report"
+msgstr ""
+
+#: app/community/forms.py:70
+msgid "Note for mod log"
+msgstr ""
+
+#: app/community/forms.py:71
+msgid "Also resolve all other reports about the same thing."
+msgstr ""
+
+#: app/community/forms.py:72
+#: app/templates/community/community_moderate_report_resolve.html:13
+msgid "Resolve report"
+msgstr ""
+
+#: app/community/forms.py:76
+msgid "Community address"
+msgstr ""
+
+#: app/community/forms.py:77 app/search/routes.py:56
+#: app/templates/base.html:198 app/templates/community/add_remote.html:13
+#: app/templates/domain/domains.html:29
+#: app/templates/domain/domains_blocked.html:29 app/templates/index.html:40
+#: app/templates/list_communities.html:36 app/templates/search/results.html:38
+msgid "Search"
+msgstr ""
+
+#: app/community/forms.py:82
+msgid "Ban until"
+msgstr ""
+
+#: app/community/forms.py:83
+msgid "Also delete all their posts"
+msgstr ""
+
+#: app/community/forms.py:84
+msgid "Also delete all their comments"
+msgstr ""
+
+#: app/community/forms.py:85
+#: app/templates/community/community_moderate_subscribers.html:56
+#: app/templates/domain/domains_blocked.html:48
+#: app/templates/user/show_profile.html:173
+msgid "Ban"
+msgstr ""
+
+#: app/community/forms.py:89 app/community/forms.py:100
+#: app/community/forms.py:120 app/templates/list_communities.html:56
+msgid "Community"
+msgstr ""
+
+#: app/community/forms.py:91 app/community/forms.py:102
+#: app/community/forms.py:123 app/post/forms.py:10
+msgid "Body"
+msgstr ""
+
+#: app/community/forms.py:92 app/community/forms.py:105
+#: app/community/forms.py:125
+msgid "Sticky"
+msgstr ""
+
+#: app/community/forms.py:93 app/community/forms.py:106
+#: app/community/forms.py:126
+msgid "NSFW"
+msgstr ""
+
+#: app/community/forms.py:94 app/community/forms.py:107
+#: app/community/forms.py:127
+msgid "Gore/gross"
+msgstr ""
+
+#: app/community/forms.py:95 app/community/forms.py:108
+#: app/community/forms.py:128 app/post/forms.py:11
+#: app/templates/post/_post_notification_toggle.html:4
+#: app/templates/post/_reply_notification_toggle.html:4
+msgid "Notify about replies"
+msgstr ""
+
+#: app/community/forms.py:103
+msgid "URL"
+msgstr ""
+
+#: app/community/forms.py:114
+#, python-format
+msgid "Links to %(domain)s are not allowed."
+msgstr ""
+
+#: app/community/forms.py:122
+msgid "Alt text"
+msgstr ""
+
+#: app/community/forms.py:124
+#: app/templates/community/add_discussion_post.html:21
+#: app/templates/community/add_image_post.html:21
+#: app/templates/community/add_link_post.html:21
+msgid "Image"
+msgstr ""
+
+#: app/community/forms.py:150
+msgid "Images cannot be posted to local communities."
+msgstr ""
+
+#: app/community/forms.py:156
+msgid "Breaks instance rules"
+msgstr ""
+
+#: app/community/forms.py:157
+msgid "Abandoned by moderators"
+msgstr ""
+
+#: app/community/forms.py:158
+msgid "Cult"
+msgstr ""
+
+#: app/community/forms.py:159
+msgid "Scam"
+msgstr ""
+
+#: app/community/forms.py:160
+msgid "Alt-right pipeline"
+msgstr ""
+
+#: app/community/forms.py:161 app/post/forms.py:17
+msgid "Hate / genocide"
+msgstr ""
+
+#: app/community/forms.py:179 app/community/routes.py:846
+msgid "Delete community"
+msgstr ""
+
+#: app/community/routes.py:79
+msgid "Your new community has been created."
+msgstr ""
+
+#: app/community/routes.py:85 app/templates/community/add_local.html:13
+#: app/templates/community/community_edit.html:25
+msgid "Create community"
+msgstr ""
+
+#: app/community/routes.py:111 app/community/routes.py:1278
+msgid "Community not found."
+msgstr ""
+
+#: app/community/routes.py:113 app/community/routes.py:1280
+msgid ""
+"Community not found. If you are searching for a nsfw community it is "
+"blocked by this instance."
+msgstr ""
+
+#: app/community/routes.py:116 app/community/routes.py:1283
+#, python-format
+msgid "That community is banned from %(site)s."
+msgstr ""
+
+#: app/community/routes.py:119
+msgid "Add remote community"
+msgstr ""
+
+#: app/community/routes.py:201 app/post/routes.py:207
+#: app/templates/base.html:130 app/templates/base.html:132
+#: app/templates/base.html:148 app/templates/base.html:150
+#: app/templates/chat/conversation.html:36
+#: app/templates/community/community_edit.html:13
+#: app/templates/community/community_mod_list.html:13
+#: app/templates/community/community_moderate.html:13
+#: app/templates/community/community_moderate_subscribers.html:13
+#: app/templates/domain/domain.html:13 app/templates/topic/show_topic.html:13
+#: app/templates/user/delete_account.html:13
+#: app/templates/user/edit_filters.html:14
+#: app/templates/user/edit_profile.html:14
+#: app/templates/user/edit_settings.html:15 app/templates/user/filters.html:14
+#: app/templates/user/notifications.html:13 app/templates/user/people.html:13
+#: app/templates/user/show_profile.html:18
+#: app/templates/user/show_profile.html:38
+msgid "Home"
+msgstr ""
+
+#: app/community/routes.py:327
+msgid "You cannot join this community"
+msgstr ""
+
+#: app/community/routes.py:343
+msgid ""
+"There was a problem while trying to communicate with remote server. If "
+"other people have already joined this community it won't matter."
+msgstr ""
+
+#: app/community/routes.py:492 app/community/routes.py:565
+#: app/community/routes.py:638
+msgid "Add post to community"
+msgstr ""
+
+#: app/community/routes.py:705 app/community/routes.py:730
+#: app/community/routes.py:732
+#, python-format
+msgid "Your post to %(name)s has been made."
+msgstr ""
+
+#: app/community/routes.py:749
+msgid "A community has been reported"
+msgstr ""
+
+#: app/community/routes.py:760
+msgid "Community has been reported, thank you!"
+msgstr ""
+
+#: app/community/routes.py:763
+msgid "Report community"
+msgstr ""
+
+#: app/community/routes.py:864
+#: app/templates/community/community_mod_list.html:22
+#, python-format
+msgid "Moderators for %(community)s"
+msgstr ""
+
+#: app/community/routes.py:889
+msgid "Moderator added"
+msgstr ""
+
+#: app/community/routes.py:893
+#, python-format
+msgid "You are now a moderator of %(name)s"
+msgstr ""
+
+#: app/community/routes.py:918
+msgid "Account not found"
+msgstr ""
+
+#: app/community/routes.py:920
+#: app/templates/community/community_add_moderator.html:13
+#, python-format
+msgid "Add moderator to %(community)s"
+msgstr ""
+
+#: app/community/routes.py:940
+msgid "Moderator removed"
+msgstr ""
+
+#: app/community/routes.py:957 app/post/routes.py:1139 app/post/routes.py:1262
+#, python-format
+msgid "Content from %(name)s will be hidden."
+msgstr ""
+
+#: app/community/routes.py:986
+#, python-format
+msgid "%(name)s has been banned."
+msgstr ""
+
+#: app/community/routes.py:993
+#, python-format
+msgid "Posts by %(name)s have been deleted."
+msgstr ""
+
+#: app/community/routes.py:999
+#, python-format
+msgid "Comments by %(name)s have been deleted."
+msgstr ""
+
+#: app/community/routes.py:1020
+msgid "Ban from community"
+msgstr ""
+
+#: app/community/routes.py:1043
+#, python-format
+msgid "%(name)s has been unbanned."
+msgstr ""
+
+#: app/community/routes.py:1108 app/community/routes.py:1142
+#, python-format
+msgid "Moderation of %(community)s"
+msgstr ""
+
+#: app/community/routes.py:1170
+msgid "Admin has been notified about this report."
+msgstr ""
+
+#: app/community/routes.py:1218
+msgid "Report resolved."
+msgstr ""
+
+#: app/community/routes.py:1256
+msgid "Report ignored."
+msgstr ""
+
+#: app/community/routes.py:1286
+msgid "Search result for remote community"
+msgstr ""
+
+#: app/domain/routes.py:113
+#, python-format
+msgid "%(name)s blocked."
+msgstr ""
+
+#: app/domain/routes.py:126
+#, python-format
+msgid "%(name)s un-blocked."
+msgstr ""
+
+#: app/domain/routes.py:139
+#, python-format
+msgid "%(name)s banned for all users and all content deleted."
+msgstr ""
+
+#: app/domain/routes.py:151
+#, python-format
+msgid "%(name)s un-banned for all users."
+msgstr ""
+
+#: app/main/routes.py:73
+msgid "Create an account to tailor this feed to your interests."
+msgstr ""
+
+#: app/main/routes.py:163 app/templates/base.html:139
+#: app/templates/base.html:157
+msgid "Browse by topic"
+msgstr ""
+
+#: app/main/routes.py:206
+msgid "Local communities"
+msgstr ""
+
+#: app/main/routes.py:221 app/templates/base.html:168
+#: app/templates/list_communities.html:19
+msgid "Joined communities"
+msgstr ""
+
+#: app/main/routes.py:354
+msgid "Please click the link in your email inbox to verify your account."
+msgstr ""
+
+#: app/post/forms.py:12
+msgid "Comment"
+msgstr ""
+
+#: app/post/forms.py:16 app/user/forms.py:59
+msgid "Breaks community rules"
+msgstr ""
+
+#: app/post/forms.py:20 app/user/forms.py:67
+msgid "Sharing personal info - doxing"
+msgstr ""
+
+#: app/post/forms.py:42 app/post/routes.py:1156
+#: app/templates/post/post_mea_culpa.html:13
+msgid "I changed my mind"
+msgstr ""
+
+#: app/post/routes.py:45
+#, python-format
+msgid "%(name)s has indicated they made a mistake in this post."
+msgstr ""
+
+#: app/post/routes.py:72 app/post/routes.py:476
+#, python-format
+msgid "You cannot reply to %(name)s"
+msgstr ""
+
+#: app/post/routes.py:82 app/post/routes.py:489
+msgid "This type of comment is not accepted, sorry."
+msgstr ""
+
+#: app/post/routes.py:446 app/post/routes.py:632
+#, python-format
+msgid "Discussing %(title)s"
+msgstr ""
+
+#: app/post/routes.py:702 app/post/routes.py:783 app/post/routes.py:865
+#: app/post/routes.py:1285 app/user/routes.py:143 app/user/routes.py:204
+#: app/user/routes.py:686 app/user/routes.py:717
+msgid "Your changes have been saved."
+msgstr ""
+
+#: app/post/routes.py:718 app/post/routes.py:800 app/post/routes.py:882
+#: app/templates/post/post_edit_discussion.html:11
+#: app/templates/post/post_edit_image.html:11
+#: app/templates/post/post_edit_link.html:11
+msgid "Edit post"
+msgstr ""
+
+#: app/post/routes.py:990
+msgid "Post deleted."
+msgstr ""
+
+#: app/post/routes.py:1040
+msgid ""
+"Moderators have already assessed reports regarding this post, no further "
+"reports are necessary."
+msgstr ""
+
+#: app/post/routes.py:1043
+msgid "Post has already been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1091
+msgid "Post has been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1096
+msgid "Report post"
+msgstr ""
+
+#: app/post/routes.py:1110 app/post/routes.py:1246
+#, python-format
+msgid "%(name)s has been blocked."
+msgstr ""
+
+#: app/post/routes.py:1126
+#, python-format
+msgid "Posts linking to %(name)s will be hidden."
+msgstr ""
+
+#: app/post/routes.py:1170
+msgid ""
+"Moderators have already assessed reports regarding this comment, no "
+"further reports are necessary."
+msgstr ""
+
+#: app/post/routes.py:1175
+msgid "Comment has already been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1226
+msgid "Comment has been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1231
+msgid "Report comment"
+msgstr ""
+
+#: app/post/routes.py:1389
+msgid "Edit comment"
+msgstr ""
+
+#: app/post/routes.py:1413
+msgid "Comment deleted."
+msgstr ""
+
+#: app/search/routes.py:49
+#, python-format
+msgid "Search results for %(q)s"
+msgstr ""
+
+#: app/templates/_home_nav.html:3 app/templates/community/_community_nav.html:8
+#: app/templates/post/post.html:66 app/user/forms.py:44
+msgid "Hot"
+msgstr ""
+
+#: app/templates/_home_nav.html:6
+#: app/templates/community/_community_nav.html:11
+#: app/templates/post/post.html:69 app/user/forms.py:45
+msgid "Top"
+msgstr ""
+
+#: app/templates/_home_nav.html:9
+#: app/templates/community/_community_nav.html:14
+#: app/templates/post/post.html:72 app/user/forms.py:46
+msgid "New"
+msgstr ""
+
+#: app/templates/_home_nav.html:12
+#: app/templates/community/_community_nav.html:17
+#: app/templates/list_communities.html:71 app/user/forms.py:47
+msgid "Active"
+msgstr ""
+
+#: app/templates/_inoculation_links.html:4
+msgid "Rational Discourse Toolkit"
+msgstr ""
+
+#: app/templates/about.html:10 app/templates/donate.html:26
+#: app/templates/index.html:67 app/templates/keyboard_shortcuts.html:63
+#: app/templates/search/results.html:65
+#, python-format
+msgid "About %(site_name)s"
+msgstr ""
+
+#: app/templates/base.html:55
+msgid "PieFed"
+msgstr ""
+
+#: app/templates/base.html:113 app/templates/base.html:189
+#: app/templates/user/notifications.html:18 app/user/routes.py:537
+msgid "Notifications"
+msgstr ""
+
+#: app/templates/base.html:133 app/templates/base.html:151
+msgid "Popular"
+msgstr ""
+
+#: app/templates/base.html:134 app/templates/base.html:152
+msgid "All posts"
+msgstr ""
+
+#: app/templates/base.html:140 app/templates/base.html:158
+#: app/templates/list_communities.html:13
+msgid "All communities"
+msgstr ""
+
+#: app/templates/auth/login.html:9 app/templates/base.html:143
+msgid "Log in"
+msgstr ""
+
+#: app/templates/base.html:145 app/templates/base.html:183
+#: app/templates/donate.html:10
+msgid "Donate"
+msgstr ""
+
+#: app/templates/base.html:161
+msgid "Moderating"
+msgstr ""
+
+#: app/templates/base.html:176
+msgid "Account"
+msgstr ""
+
+#: app/templates/base.html:178
+msgid "View profile"
+msgstr ""
+
+#: app/templates/base.html:179
+msgid "Edit profile & settings"
+msgstr ""
+
+#: app/templates/base.html:180
+msgid "Chats"
+msgstr ""
+
+#: app/templates/base.html:187
+msgid "Log out"
+msgstr ""
+
+#: app/templates/base.html:189
+#, python-format
+msgid "%(num)d unread notifications"
+msgstr ""
+
+#: app/templates/base.html:199
+msgid "Light mode"
+msgstr ""
+
+#: app/templates/base.html:200
+msgid "Dark mode"
+msgstr ""
+
+#: app/templates/base.html:228 app/templates/keyboard_shortcuts.html:10
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: app/templates/index.html:17
+msgid "No posts yet. Join some communities to see more."
+msgstr ""
+
+#: app/templates/community/community.html:168 app/templates/index.html:18
+#: app/templates/index.html:59 app/templates/list_topics.html:38
+#: app/templates/post/post.html:220 app/templates/search/results.html:57
+#: app/templates/topic/show_topic.html:91
+msgid "Explore communities"
+msgstr ""
+
+#: app/templates/admin/activities.html:54
+#: app/templates/admin/communities.html:51 app/templates/admin/posts.html:26
+#: app/templates/admin/reports.html:58 app/templates/admin/users.html:69
+#: app/templates/community/community.html:92
+#: app/templates/community/community_moderate.html:80
+#: app/templates/community/community_moderate_subscribers.html:67
+#: app/templates/domain/domain.html:30 app/templates/domain/domains.html:51
+#: app/templates/domain/domains_blocked.html:59 app/templates/index.html:25
+#: app/templates/search/results.html:23 app/templates/topic/show_topic.html:52
+#: app/templates/user/show_profile.html:75
+#: app/templates/user/show_profile.html:98
+msgid "Previous page"
+msgstr ""
+
+#: app/templates/admin/activities.html:59
+#: app/templates/admin/communities.html:56 app/templates/admin/posts.html:31
+#: app/templates/admin/reports.html:63 app/templates/admin/users.html:74
+#: app/templates/community/community.html:97
+#: app/templates/community/community_moderate.html:85
+#: app/templates/community/community_moderate_subscribers.html:72
+#: app/templates/domain/domain.html:35 app/templates/domain/domains.html:56
+#: app/templates/domain/domains_blocked.html:64 app/templates/index.html:30
+#: app/templates/search/results.html:28 app/templates/topic/show_topic.html:57
+#: app/templates/user/show_profile.html:80
+#: app/templates/user/show_profile.html:103
+msgid "Next page"
+msgstr ""
+
+#: app/templates/index.html:47 app/templates/search/results.html:45
+msgid "Active communities"
+msgstr ""
+
+#: app/templates/index.html:60 app/templates/list_communities.html:108
+#: app/templates/search/results.html:58
+msgid "Browse topics"
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:11
+msgid "Most shortcuts are the same as what reddit has."
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:14
+msgid "Navigation"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:33
+#: app/templates/keyboard_shortcuts.html:43 app/templates/user/filters.html:31
+msgid "Action"
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:46
+msgid "Upvote"
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:50
+msgid "Downvote"
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:55
+msgid ""
+"When viewing a list of posts actions like voting or going to a post "
+"depend on which is the current post. The current post is determined by "
+"hovering with the mouse or the J and K keys."
+msgstr ""
+
+#: app/templates/list_communities.html:14
+msgid "All"
+msgstr ""
+
+#: app/templates/list_communities.html:16
+msgid "Communities on this server"
+msgstr ""
+
+#: app/templates/list_communities.html:17
+msgid "Local"
+msgstr ""
+
+#: app/templates/list_communities.html:20
+#: app/templates/user/show_profile.html:59
+msgid "Joined"
+msgstr ""
+
+#: app/templates/list_communities.html:28
+msgid "Choose a topic to filter communities by"
+msgstr ""
+
+#: app/templates/list_communities.html:40
+msgid "Create local community"
+msgstr ""
+
+#: app/templates/list_communities.html:40
+msgid "Create local"
+msgstr ""
+
+#: app/templates/list_communities.html:41
+msgid "Add community from another instance"
+msgstr ""
+
+#: app/templates/list_communities.html:41
+msgid "Add remote"
+msgstr ""
+
+#: app/templates/list_communities.html:56
+msgid "Sort by name"
+msgstr ""
+
+#: app/templates/list_communities.html:61
+msgid "Sort by post count"
+msgstr ""
+
+#: app/templates/list_communities.html:61
+msgid "Posts"
+msgstr ""
+
+#: app/templates/list_communities.html:66
+msgid "Sort by reply count"
+msgstr ""
+
+#: app/templates/list_communities.html:66 app/templates/post/post.html:61
+#: app/templates/post/post.html:158
+msgid "Comments"
+msgstr ""
+
+#: app/templates/list_communities.html:71
+msgid "Sort by recent activity"
+msgstr ""
+
+#: app/templates/list_communities.html:82
+#, python-format
+msgid "Leave %(name)s"
+msgstr ""
+
+#: app/templates/community/add_remote.html:32
+#: app/templates/community/community.html:112
+#: app/templates/community/lookup_remote.html:21
+#: app/templates/list_communities.html:82 app/templates/post/add_reply.html:48
+#: app/templates/post/continue_discussion.html:99
+#: app/templates/post/post.html:177
+msgid "Leave"
+msgstr ""
+
+#: app/templates/community/community.html:114
+#: app/templates/list_communities.html:84
+msgid "Pending"
+msgstr ""
+
+#: app/templates/list_communities.html:86
+#: app/templates/list_communities.html:89
+#, python-format
+msgid "Join %(name)s"
+msgstr ""
+
+#: app/templates/community/add_remote.html:34
+#: app/templates/community/community.html:116
+#: app/templates/community/lookup_remote.html:23
+#: app/templates/list_communities.html:86
+#: app/templates/list_communities.html:89 app/templates/post/add_reply.html:50
+#: app/templates/post/continue_discussion.html:101
+#: app/templates/post/post.html:179
+msgid "Join"
+msgstr ""
+
+#: app/templates/list_communities.html:96
+#, python-format
+msgid "Browse %(name)s"
+msgstr ""
+
+#: app/templates/list_communities.html:106 app/templates/list_topics.html:36
+msgid "There are no communities yet."
+msgstr ""
+
+#: app/templates/list_topics.html:25
+msgid "Choose a topic"
+msgstr ""
+
+#: app/templates/privacy.html:10
+msgid "Privacy"
+msgstr ""
+
+#: app/templates/admin/_nav.html:2
+msgid "Admin navigation"
+msgstr ""
+
+#: app/templates/admin/_nav.html:3
+msgid "Admin home"
+msgstr ""
+
+#: app/templates/admin/_nav.html:9
+msgid "Watch"
+msgstr ""
+
+#: app/templates/admin/_nav.html:11
+msgid "Registration applications"
+msgstr ""
+
+#: app/templates/admin/_nav.html:13 app/templates/community/community.html:181
+#: app/templates/community/community_moderate.html:15
+#: app/templates/community/community_moderate_subscribers.html:15
+msgid "Moderation"
+msgstr ""
+
+#: app/templates/admin/_nav.html:14
+msgid "Federation"
+msgstr ""
+
+#: app/templates/admin/_nav.html:15
+msgid "Newsletter"
+msgstr ""
+
+#: app/templates/admin/_nav.html:16
+msgid "Activities"
+msgstr ""
+
+#: app/templates/admin/add_user.html:17
+msgid "Add new user"
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:18
+#, python-format
+msgid "When registering, people are asked \"%(question)s\"."
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:43
+msgid "Approve"
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:44
+msgid "View"
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:45
+#: app/templates/post/post_options.html:20
+#: app/templates/post/post_reply_options.html:20
+#: app/templates/user/show_profile.html:179
+msgid "Delete"
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:51
+msgid "No one is waiting to be approved."
+msgstr ""
+
+#: app/templates/admin/edit_community.html:17
+#, python-format
+msgid "Edit %(community_name)s"
+msgstr ""
+
+#: app/templates/admin/edit_community.html:43
+msgid "Will not be overwritten by remote server"
+msgstr ""
+
+#: app/templates/admin/edit_topic.html:18
+#, python-format
+msgid "Edit %(topic_name)s"
+msgstr ""
+
+#: app/templates/admin/edit_user.html:17
+#, python-format
+msgid "Edit %(user_name)s (%(display_name)s)"
+msgstr ""
+
+#: app/templates/admin/posts.html:17
+msgid "Most downvoted in the last 3 days"
+msgstr ""
+
+#: app/templates/admin/users.html:17
+msgid "Add local user"
+msgstr ""
+
+#: app/templates/auth/check_email.html:9
+msgid ""
+"We sent you an email containing a link that you need to click to enable "
+"your account."
+msgstr ""
+
+#: app/templates/auth/login.html:14
+msgid "New User?"
+msgstr ""
+
+#: app/templates/auth/login.html:14
+msgid "Register new account"
+msgstr ""
+
+#: app/templates/auth/login.html:16
+msgid "Forgot Your Password?"
+msgstr ""
+
+#: app/templates/auth/login.html:17
+msgid "Reset it"
+msgstr ""
+
+#: app/templates/auth/permission_denied.html:8
+#: app/templates/chat/blocked.html:13 app/templates/chat/denied.html:14
+msgid "Sorry"
+msgstr ""
+
+#: app/templates/auth/permission_denied.html:12
+msgid "Your account does not have access to that area."
+msgstr ""
+
+#: app/templates/auth/please_wait.html:8
+msgid "Thanks for registering"
+msgstr ""
+
+#: app/templates/auth/please_wait.html:9
+msgid ""
+"We are reviewing your application and will email you once it has been "
+"accepted."
+msgstr ""
+
+#: app/templates/auth/register.html:19
+msgid "Create new account"
+msgstr ""
+
+#: app/templates/auth/register.html:22
+msgid "Registration is closed. Only admins can create accounts."
+msgstr ""
+
+#: app/templates/auth/reset_password.html:13
+#: app/templates/auth/reset_password_request.html:13
+msgid "Reset your password"
+msgstr ""
+
+#: app/templates/auth/validation_required.html:8
+msgid "Please check your email inbox"
+msgstr ""
+
+#: app/templates/auth/validation_required.html:12
+msgid ""
+"To keep spam and bots to a managable level, we send every new account an "
+"email with a link in it that needs to be clicked to fully enable the "
+"account."
+msgstr ""
+
+#: app/templates/chat/blocked.html:15
+msgid "You have blocked this person or they have blocked you."
+msgstr ""
+
+#: app/templates/chat/chat_options.html:14
+#, python-format
+msgid "Options for conversation with \"%(member_names)s\""
+msgstr ""
+
+#: app/templates/chat/chat_options.html:17
+msgid "Delete conversation"
+msgstr ""
+
+#: app/templates/chat/chat_options.html:21
+#, python-format
+msgid "Block @%(author_name)s"
+msgstr ""
+
+#: app/templates/chat/chat_options.html:26
+#, python-format
+msgid "Block chats and posts from instance: %(name)s"
+msgstr ""
+
+#: app/templates/chat/chat_options.html:29
+#: app/templates/post/post_options.html:48
+#: app/templates/post/post_reply_options.html:32
+msgid "Report to moderators"
+msgstr ""
+
+#: app/templates/chat/chat_options.html:31
+msgid ""
+"If you are reporting abuse then do not delete the conversation - "
+"moderators will not be able to read it if you delete it."
+msgstr ""
+
+#: app/templates/chat/conversation.html:37
+msgid "Chat"
+msgstr ""
+
+#: app/templates/chat/conversation.html:42 app/templates/user/filters.html:56
+#: app/templates/user/notifications.html:14 app/templates/user/people.html:14
+#: app/templates/user/people.html:17 app/templates/user/show_profile.html:19
+#: app/templates/user/show_profile.html:39 app/user/routes.py:35
+msgid "People"
+msgstr ""
+
+#: app/templates/chat/conversation.html:59
+#, python-format
+msgid "Messages with %(name)s"
+msgstr ""
+
+#: app/templates/chat/conversation.html:60
+msgid "Messages with: "
+msgstr ""
+
+#: app/templates/chat/conversation.html:75
+#: app/templates/post/_post_teaser.html:75
+msgid "Options"
+msgstr ""
+
+#: app/templates/chat/denied.html:16
+msgid ""
+"You have not been using PieFed long enough to be allowed to send messages"
+" to people."
+msgstr ""
+
+#: app/templates/chat/empty.html:13
+msgid "No chats"
+msgstr ""
+
+#: app/templates/chat/empty.html:15
+msgid ""
+"There are no chats involving you, yet. Start a conversation using the "
+"\"Send message\" button on someone's profile."
+msgstr ""
+
+#: app/templates/chat/report.html:14
+#, python-format
+msgid "Report conversation with \"%(member_names)s\""
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:4
+#: app/templates/community/community_edit.html:15
+#: app/templates/community/community_mod_list.html:15
+#: app/templates/post/add_reply.html:89
+#: app/templates/post/continue_discussion.html:140
+#: app/templates/post/post.html:234 app/templates/post/post_reply_edit.html:85
+#: app/templates/user/_user_nav.html:5 app/templates/user/notifications.html:57
+#: app/templates/user/show_profile.html:124
+msgid "Settings"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:7
+#: app/templates/community/community_mod_list.html:16
+msgid "Moderators"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:10
+#: app/templates/community/_community_nav.html:7
+msgid "Sort by hot"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:14
+#: app/templates/community/community_moderate_subscribers.html:21
+msgid "Subscribers"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:17
+msgid "Appeals"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:20
+msgid "Mod log"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:3
+#: app/templates/community/add_discussion_post.html:11
+#: app/templates/community/add_image_post.html:11
+#: app/templates/community/add_link_post.html:11
+#: app/templates/community/community.html:108
+#: app/templates/post/add_reply.html:54
+#: app/templates/post/continue_discussion.html:105
+#: app/templates/post/post.html:173 app/templates/post/post_reply_edit.html:50
+#: app/templates/topic/show_topic.html:68
+msgid "Create post"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:10
+msgid "Sort by top"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:13
+msgid "Sort by new"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:16
+msgid "Sort by active"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:26
+msgid "Tile"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:29
+msgid "Wide tile"
+msgstr ""
+
+#: app/templates/community/_notification_toggle.html:5
+msgid "Notify about every new post. Not advisable in high traffic communities!"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:16
+#: app/templates/community/add_image_post.html:16
+#: app/templates/community/add_link_post.html:16
+msgid "Type of post"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:19
+#: app/templates/community/add_image_post.html:19
+#: app/templates/community/add_link_post.html:19
+msgid "Start a discussion"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:19
+#: app/templates/community/add_image_post.html:19
+#: app/templates/community/add_link_post.html:19
+msgid "Discussion"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:20
+#: app/templates/community/add_image_post.html:20
+#: app/templates/community/add_link_post.html:20
+msgid "Share a link"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:20
+#: app/templates/community/add_image_post.html:20
+#: app/templates/community/add_link_post.html:20
+msgid "Link"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:21
+#: app/templates/community/add_image_post.html:21
+#: app/templates/community/add_link_post.html:21
+msgid "Share an image"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:22
+#: app/templates/community/add_image_post.html:22
+#: app/templates/community/add_link_post.html:22
+msgid "Create a poll"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:22
+#: app/templates/community/add_image_post.html:22
+#: app/templates/community/add_link_post.html:22
+msgid "Poll"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:23
+#: app/templates/community/add_image_post.html:23
+#: app/templates/community/add_link_post.html:23
+msgid "Create an event"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:23
+#: app/templates/community/add_image_post.html:23
+#: app/templates/community/add_link_post.html:23
+msgid "Event"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:43
+#: app/templates/community/add_image_post.html:45
+#: app/templates/community/add_link_post.html:44
+#: app/templates/post/add_reply.html:37 app/templates/post/post.html:42
+#: app/templates/user/edit_profile.html:44
+msgid "Enable markdown editor"
+msgstr ""
+
+#: app/templates/community/add_image_post.html:30
+#: app/templates/post/post_edit_image.html:17
+msgid "Describe the image, to help visually impaired people."
+msgstr ""
+
+#: app/templates/community/add_local.html:31
+#, python-format
+msgid "Only people using %(name)s can post or reply"
+msgstr ""
+
+#: app/templates/community/add_remote.html:25
+#: app/templates/community/lookup_remote.html:14
+msgid "Found a community:"
+msgstr ""
+
+#: app/templates/community/community.html:27
+#: app/templates/community/community.html:48
+#: app/templates/community/community.html:66
+#: app/templates/post/_post_full.html:20 app/templates/post/_post_full.html:66
+#: app/templates/post/_post_teaser.html:56
+msgid "Not safe for work"
+msgstr ""
+
+#: app/templates/community/community.html:28
+#: app/templates/community/community.html:49
+#: app/templates/community/community.html:67
+msgid "Not safe for life"
+msgstr ""
+
+#: app/templates/community/community.html:76
+#: app/templates/community/community.html:84
+msgid "No posts in this community yet."
+msgstr ""
+
+#: app/templates/community/community.html:121
+#: app/templates/post/add_reply.html:58
+#: app/templates/post/continue_discussion.html:109
+#: app/templates/post/post.html:184 app/templates/post/post_reply_edit.html:54
+msgid "Search this community"
+msgstr ""
+
+#: app/templates/community/community.html:127
+#: app/templates/post/add_reply.html:64
+#: app/templates/post/continue_discussion.html:115
+#: app/templates/post/post.html:190 app/templates/post/post_reply_edit.html:60
+msgid "About community"
+msgstr ""
+
+#: app/templates/community/community.html:146
+#, python-format
+msgid "Only people on %(instance_name)s can post or reply in this community."
+msgstr ""
+
+#: app/templates/community/community.html:156 app/templates/post/post.html:208
+msgid "Related communities"
+msgstr ""
+
+#: app/templates/community/community.html:162 app/templates/post/post.html:214
+#: app/templates/topic/show_topic.html:85
+msgid "Go to community"
+msgstr ""
+
+#: app/templates/community/community.html:175
+#: app/templates/post/add_reply.html:82
+#: app/templates/post/continue_discussion.html:133
+#: app/templates/post/post.html:227 app/templates/post/post_reply_edit.html:78
+msgid "Community Settings"
+msgstr ""
+
+#: app/templates/community/community.html:179
+msgid "Settings & Moderation"
+msgstr ""
+
+#: app/templates/community/community_ban_user.html:13
+#, python-format
+msgid "Ban \"%(user_name)s\" from %(community_name)s"
+msgstr ""
+
+#: app/templates/community/community_delete.html:13
+#, python-format
+msgid "Delete \"%(community_title)s\""
+msgstr ""
+
+#: app/templates/community/community_edit.html:23
+#, python-format
+msgid "Edit %(community)s"
+msgstr ""
+
+#: app/templates/community/community_edit.html:28
+msgid "Edit and configure this community"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:24
+msgid "See and change who moderates this community"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:26
+#: app/templates/community/community_moderate.html:24
+#: app/templates/community/community_moderate_subscribers.html:24
+msgid "Add moderator"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:43
+msgid "Remove"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:27
+#, python-format
+msgid "See and handle all reports made about %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:67
+msgid "Escalate"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:68
+msgid "Resolve"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:70
+msgid "Ignore"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:90
+msgid "No reports yet"
+msgstr ""
+
+#: app/templates/community/community_moderate_report_escalate.html:13
+msgid "Escalate report to admins"
+msgstr ""
+
+#: app/templates/community/community_moderate_report_escalate.html:14
+msgid ""
+"For reports that could potentially involve legal issues or where you are "
+"unsure how to respond, you may prefer to let admins handle it."
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:27
+#, python-format
+msgid "See who is subscribed to %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:77
+msgid "This community has no subscribers"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:79
+msgid "Banned People"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:80
+#, python-format
+msgid "See and manage who is banned from %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:116
+#: app/templates/domain/domain.html:61
+#: app/templates/domain/domains_blocked.html:46
+#: app/templates/user/show_profile.html:169
+msgid "Unban"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:125
+msgid "No banned people yet"
+msgstr ""
+
+#: app/templates/domain/domain.html:14 app/templates/domain/domains.html:12
+#: app/templates/domain/domains.html:21
+#: app/templates/domain/domains_blocked.html:21
+#: app/templates/user/filters.html:60
+msgid "Domains"
+msgstr ""
+
+#: app/templates/domain/domain.html:23
+msgid "No posts in this domain yet."
+msgstr ""
+
+#: app/templates/domain/domain.html:45
+msgid "Domain management"
+msgstr ""
+
+#: app/templates/domain/domain.html:51 app/templates/user/filters.html:71
+#: app/templates/user/filters.html:76 app/templates/user/filters.html:89
+#: app/templates/user/filters.html:94 app/templates/user/filters.html:107
+#: app/templates/user/filters.html:112 app/templates/user/filters.html:125
+#: app/templates/user/filters.html:130 app/templates/user/show_profile.html:52
+msgid "Unblock"
+msgstr ""
+
+#: app/templates/domain/domain.html:55 app/templates/user/show_profile.html:54
+msgid "Block"
+msgstr ""
+
+#: app/templates/domain/domain.html:65
+msgid "Ban instance-wide"
+msgstr ""
+
+#: app/templates/domain/domains.html:14
+#, python-format
+msgid "Domains containing \"%(search)s\""
+msgstr ""
+
+#: app/templates/domain/domains.html:24
+#: app/templates/domain/domains_blocked.html:24
+msgid "Banned domains"
+msgstr ""
+
+#: app/templates/domain/domains.html:38
+msgid "How many times has something on this domain been posted"
+msgstr ""
+
+#: app/templates/domain/domains_blocked.html:12
+msgid "Blocked domains"
+msgstr ""
+
+#: app/templates/domain/domains_blocked.html:14
+#, python-format
+msgid "Blocked domains containing \"%(search)s\""
+msgstr ""
+
+#: app/templates/domain/domains_blocked.html:46
+msgid "Unbanning this domain allows future posts linking to that domain."
+msgstr ""
+
+#: app/templates/domain/domains_blocked.html:48
+msgid ""
+"Banning this domain will delete all posts linking to this domain and "
+"prevent future posts linking to that domain."
+msgstr ""
+
+#: app/templates/errors/404.html:12
+msgid "Ooops, something is broken!"
+msgstr ""
+
+#: app/templates/errors/404.html:15
+msgid "The page your browser tried to load could not be found."
+msgstr ""
+
+#: app/templates/errors/404.html:16 app/templates/errors/500.html:16
+msgid "Back"
+msgstr ""
+
+#: app/templates/errors/500.html:12
+msgid "An unexpected error has occurred"
+msgstr ""
+
+#: app/templates/errors/500.html:15
+msgid ""
+"Sorry for the inconvenience! Please let us know about this, so we can "
+"repair it and make PieFed better for everyone."
+msgstr ""
+
+#: app/templates/post/_comment_voting_buttons.html:3
+msgid "UpVote button."
+msgstr ""
+
+#: app/templates/post/_comment_voting_buttons.html:9
+msgid "Score: "
+msgstr ""
+
+#: app/templates/post/_comment_voting_buttons.html:11
+msgid "DownVote button."
+msgstr ""
+
+#: app/templates/post/_comment_voting_buttons.html:21
+msgid "Score:"
+msgstr ""
+
+#: app/templates/post/_post_full.html:21 app/templates/post/_post_full.html:67
+#: app/templates/post/_post_teaser.html:57
+msgid "Potentially emotionally scarring content"
+msgstr ""
+
+#: app/templates/post/_post_full.html:28 app/templates/post/_post_full.html:76
+#: app/templates/post/_post_teaser.html:59
+msgid "Reported. Check post for issues."
+msgstr ""
+
+#: app/templates/post/_post_full.html:109
+#: app/templates/post/_post_full.html:110
+msgid "Show cross-posts"
+msgstr ""
+
+#: app/templates/post/_post_full.html:111
+msgid "Number of cross-posts:"
+msgstr ""
+
+#: app/templates/post/_post_reply_teaser.html:3
+msgid "View context"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:6
+#: app/templates/post/_post_teaser_masonry.html:6
+msgid "Filtered: "
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:18
+#: app/templates/post/_post_teaser.html:26
+#: app/templates/post/_post_teaser.html:42
+msgid "Read article"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:20
+#: app/templates/post/_post_teaser.html:30
+#: app/templates/post/_post_teaser.html:70
+#: app/templates/post/_post_teaser.html:72
+#: app/templates/post/_post_teaser_masonry.html:16
+#: app/templates/post/_post_teaser_masonry.html:20
+#: app/templates/post/_post_teaser_masonry.html:23
+#: app/templates/post/_post_teaser_masonry.html:55
+msgid "View image"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:22
+#: app/templates/post/_post_teaser.html:34
+msgid "Read post"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:54
+msgid "All posts about this domain"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:64
+#, python-format
+msgid "Go to community %(name)s"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:67
+#: app/templates/post/_post_teaser_masonry.html:47
+#: app/templates/post/_post_teaser_masonry.html:48
+#: app/templates/post/_post_teaser_masonry.html:68
+#: app/templates/post/_post_teaser_masonry.html:69
+msgid "View comments"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:67
+msgid "Number of comments:"
+msgstr ""
+
+#: app/templates/post/_post_voting_buttons.html:3
+#, python-format
+msgid "UpVote button, %(count)d upvotes so far."
+msgstr ""
+
+#: app/templates/post/_post_voting_buttons.html:11
+#, python-format
+msgid "DownVote button, %(count)d downvotes so far."
+msgstr ""
+
+#: app/templates/post/_post_voting_buttons_masonry.html:3
+msgid "UpVote"
+msgstr ""
+
+#: app/templates/post/_post_voting_buttons_masonry.html:10
+msgid "DownVote"
+msgstr ""
+
+#: app/templates/post/add_reply.html:21 app/templates/post/post.html:23
+msgid ""
+"This post is hosted on beehaw.org which has higher standards of behaviour than "
+"most places. Be nice."
+msgstr ""
+
+#: app/templates/post/add_reply.html:86
+#: app/templates/post/continue_discussion.html:137
+#: app/templates/post/post.html:231 app/templates/post/post_reply_edit.html:82
+msgid "Moderate"
+msgstr ""
+
+#: app/templates/post/continue_discussion.html:47
+#: app/templates/post/post.html:108
+msgid "Reported. Check comment for issues."
+msgstr ""
+
+#: app/templates/post/post.html:26
+msgid ""
+"This post is hosted on lemmy.ml which will ban you for saying anything "
+"negative about China, Russia or Putin. Tread carefully."
+msgstr ""
+
+#: app/templates/post/post.html:52
+msgid "Verify your email address to comment"
+msgstr ""
+
+#: app/templates/post/post.html:55
+msgid "Log in to comment"
+msgstr ""
+
+#: app/templates/post/post.html:58
+msgid "Comments are disabled."
+msgstr ""
+
+#: app/templates/post/post.html:65
+msgid "Sort by magic"
+msgstr ""
+
+#: app/templates/post/post.html:68
+msgid "Comments with the most upvotes"
+msgstr ""
+
+#: app/templates/post/post.html:71
+msgid "Show newest first"
+msgstr ""
+
+#: app/templates/post/post.html:87
+msgid "Author"
+msgstr ""
+
+#: app/templates/post/post.html:104
+msgid "Post creator"
+msgstr ""
+
+#: app/templates/post/post.html:105
+msgid "When: "
+msgstr ""
+
+#: app/templates/post/post.html:134
+msgid "Comment options"
+msgstr ""
+
+#: app/templates/post/post_cross_posts.html:11
+#, python-format
+msgid "Cross-posts for \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/post/post_cross_posts.html:12
+msgid "Posts to the same url have also been created in the following communities:"
+msgstr ""
+
+#: app/templates/post/post_mea_culpa.html:15
+msgid ""
+"If you wish to de-escalate the discussion on your post and now feel like "
+"it was a mistake, click the button below."
+msgstr ""
+
+#: app/templates/post/post_mea_culpa.html:16
+msgid ""
+"No further comments will be posted and a message saying you made a "
+"mistake in this post will be displayed."
+msgstr ""
+
+#: app/templates/post/post_mea_culpa.html:17
+msgid "The effect of downvotes on your reputation score will be removed."
+msgstr ""
+
+#: app/templates/post/post_options.html:13
+#, python-format
+msgid "Options for \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/post/post_options.html:18
+#: app/templates/post/post_reply_options.html:18
+msgid "Edit"
+msgstr ""
+
+#: app/templates/post/post_options.html:24
+msgid "I made a mistake with this post and have changed my mind about the topic"
+msgstr ""
+
+#: app/templates/post/post_options.html:28
+#, python-format
+msgid "Block post author @%(author_name)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:31
+#, python-format
+msgid "Ban post author @%(author_name)s from
%(community_name)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:35
+#, python-format
+msgid "Block domain %(domain)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:39
+#: app/templates/post/post_reply_options.html:27
+#, python-format
+msgid "Hide every post from author's instance: %(name)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:45
+#, python-format
+msgid "View original on %(domain)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:50
+#: app/templates/post/post_reply_options.html:34
+msgid ""
+"If you want to perform more than one of these (e.g. block and report), "
+"hold down Ctrl and click, then complete the operation in the new tabs "
+"that open."
+msgstr ""
+
+#: app/templates/post/post_reply_edit.html:44
+msgid "Unsubscribe"
+msgstr ""
+
+#: app/templates/post/post_reply_edit.html:46
+msgid "Subscribe"
+msgstr ""
+
+#: app/templates/post/post_reply_options.html:13
+#, python-format
+msgid "Options for comment on \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/post/post_reply_options.html:24
+#, python-format
+msgid "Block author @%(author_name)s"
+msgstr ""
+
+#: app/templates/post/post_reply_report.html:13
+#, python-format
+msgid "Report comment on \"%(post_title)s\" by %(reply_name)s"
+msgstr ""
+
+#: app/templates/post/post_report.html:13
+#, python-format
+msgid "Report \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/search/results.html:11
+msgid "Search results for"
+msgstr ""
+
+#: app/templates/search/results.html:16
+msgid "No posts match your search."
+msgstr ""
+
+#: app/templates/search/start.html:13
+msgid "Search for posts"
+msgstr ""
+
+#: app/templates/search/start.html:20
+msgid "Example searches:"
+msgstr ""
+
+#: app/templates/search/start.html:23
+msgid "star wars"
+msgstr ""
+
+#: app/templates/search/start.html:24
+msgid ""
+"There is an implied \"and\" here. Results will have both words somewhere "
+"in them."
+msgstr ""
+
+#: app/templates/search/start.html:27
+msgid "star or wars"
+msgstr ""
+
+#: app/templates/search/start.html:28
+msgid ""
+"This will broaden the search to include results that contain any of the "
+"words."
+msgstr ""
+
+#: app/templates/search/start.html:31
+msgid "star -wars"
+msgstr ""
+
+#: app/templates/search/start.html:32
+msgid ""
+"To search for things containing \"star\" but not \"wars\" you can put a -"
+" before the word you want to exclude."
+msgstr ""
+
+#: app/templates/search/start.html:35
+msgid "\"star wars\""
+msgstr ""
+
+#: app/templates/search/start.html:36
+msgid "Results will have exactly that phrase in them."
+msgstr ""
+
+#: app/templates/topic/choose_topics.html:9
+msgid "Please choose at least 3 topics that interest you."
+msgstr ""
+
+#: app/templates/topic/show_topic.html:23
+msgid "Sub-topics"
+msgstr ""
+
+#: app/templates/topic/show_topic.html:36
+#: app/templates/topic/show_topic.html:44
+msgid "No posts in this topic yet."
+msgstr ""
+
+#: app/templates/topic/show_topic.html:79
+msgid "Topic communities"
+msgstr ""
+
+#: app/templates/topic/topic_create_post.html:9
+#, python-format
+msgid "Which community within %(topic)s to post in?"
+msgstr ""
+
+#: app/templates/topic/topic_create_post.html:17
+#, python-format
+msgid "Post in %(name)s"
+msgstr ""
+
+#: app/templates/user/_user_nav.html:8 app/templates/user/notifications.html:54
+#: app/templates/user/show_profile.html:121
+msgid "Profile"
+msgstr ""
+
+#: app/templates/user/_user_nav.html:11
+msgid "Blocks & Filters"
+msgstr ""
+
+#: app/templates/user/delete_account.html:15
+#: app/templates/user/edit_settings.html:17
+#: app/templates/user/edit_settings.html:20
+msgid "Change settings"
+msgstr ""
+
+#: app/templates/user/delete_account.html:18
+#, python-format
+msgid "Delete %(username)s"
+msgstr ""
+
+#: app/templates/user/delete_account.html:20
+#, python-format
+msgid ""
+"You are about to permanently delete the account with the username "
+"\"%(username)s.\" This means your profile will "
+"disappear, pictures will be deleted. Text-based posts will stay but look "
+"like they are from someone named \"deleted.\""
+msgstr ""
+
+#: app/templates/user/delete_account.html:21
+#, python-format
+msgid ""
+"Once you hit delete, nobody can use \"%(username)s\" as a username again."
+" We are doing this so nobody pretends to be you."
+msgstr ""
+
+#: app/templates/user/delete_account.html:22
+msgid ""
+"We will tell other websites (fediverse instances) that your account is "
+"gone. But it's up to them to decide what to do with any copies they have "
+"of your stuff. Some websites work differently than ours."
+msgstr ""
+
+#: app/templates/user/delete_account.html:23
+msgid ""
+"Remember, once you do this, there's no going back. Are you sure you want "
+"to continue?"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:16 app/templates/user/filters.html:16
+#: app/templates/user/filters.html:19
+msgid "Filters"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:18 app/user/routes.py:729
+msgid "Edit filter"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:20
+#: app/templates/user/edit_filters.html:27 app/templates/user/filters.html:22
+#: app/user/routes.py:689
+msgid "Add filter"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:25
+#, python-format
+msgid "Filter %(name)s"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:33
+msgid "Filter in these places"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:39
+msgid "One per line. Case does not matter."
+msgstr ""
+
+#: app/templates/user/edit_filters.html:41
+msgid "Stop applying this filter after this date. Optional."
+msgstr ""
+
+#: app/templates/user/edit_profile.html:16 app/user/routes.py:153
+#: app/user/routes.py:218
+msgid "Edit profile"
+msgstr ""
+
+#: app/templates/user/edit_profile.html:19
+#, python-format
+msgid "Edit profile of %(name)s"
+msgstr ""
+
+#: app/templates/user/edit_profile.html:58
+msgid "Delete account"
+msgstr ""
+
+#: app/templates/user/email_notifs_unsubscribed.html:9
+#: app/templates/user/newsletter_unsubscribed.html:9
+msgid "Unsubscribed"
+msgstr ""
+
+#: app/templates/user/email_notifs_unsubscribed.html:10
+msgid ""
+"You have unsubscribed from emails about unread notifications. We might "
+"email you for other reasons, though."
+msgstr ""
+
+#: app/templates/user/email_notifs_unsubscribed.html:11
+#: app/templates/user/newsletter_unsubscribed.html:11
+msgid "More email settings"
+msgstr ""
+
+#: app/templates/user/filters.html:25
+msgid ""
+"Filters can hide posts that contain keywords you specify, either by "
+"making them less noticeable or invisible."
+msgstr ""
+
+#: app/templates/user/filters.html:30
+msgid "Keywords"
+msgstr ""
+
+#: app/templates/user/filters.html:32
+msgid "Expires"
+msgstr ""
+
+#: app/templates/user/filters.html:39
+msgid "Invisible"
+msgstr ""
+
+#: app/templates/user/filters.html:39
+msgid "Semi-transparent"
+msgstr ""
+
+#: app/templates/user/filters.html:49
+msgid "No filters defined yet."
+msgstr ""
+
+#: app/templates/user/filters.html:62
+msgid "Instances"
+msgstr ""
+
+#: app/templates/user/filters.html:81
+msgid "No blocked people"
+msgstr ""
+
+#: app/templates/user/filters.html:99
+msgid "No blocked communities"
+msgstr ""
+
+#: app/templates/user/filters.html:117
+msgid "No blocked domains"
+msgstr ""
+
+#: app/templates/user/filters.html:135
+msgid "No blocked instances"
+msgstr ""
+
+#: app/templates/user/newsletter_unsubscribed.html:10
+msgid ""
+"You have unsubscribed from the email newsletter. We might email you for "
+"other reasons, though."
+msgstr ""
+
+#: app/templates/user/notifications.html:25
+msgid "Mark all as read"
+msgstr ""
+
+#: app/templates/user/notifications.html:49
+#: app/templates/user/show_profile.html:116
+msgid "Manage"
+msgstr ""
+
+#: app/templates/user/notifications.html:95
+#: app/templates/user/show_profile.html:192
+msgid "Upvoted"
+msgstr ""
+
+#: app/templates/user/people.html:32
+msgid "No people to show"
+msgstr ""
+
+#: app/templates/user/show_profile.html:24
+#: app/templates/user/show_profile.html:29
+msgid "Profile pic"
+msgstr ""
+
+#: app/templates/user/show_profile.html:47
+msgid "Send message"
+msgstr ""
+
+#: app/templates/user/show_profile.html:49
+msgid "Send message with matrix chat"
+msgstr ""
+
+#: app/templates/user/show_profile.html:49
+msgid "Send message using Matrix"
+msgstr ""
+
+#: app/templates/user/show_profile.html:61
+msgid "Bot Account"
+msgstr ""
+
+#: app/templates/user/show_profile.html:63
+msgid "Attitude"
+msgstr ""
+
+#: app/templates/user/show_profile.html:63
+msgid "Ratio of upvotes cast to downvotes cast. Higher is more positive."
+msgstr ""
+
+#: app/templates/user/show_profile.html:72
+msgid "Post pagination"
+msgstr ""
+
+#: app/templates/user/show_profile.html:85
+msgid "No posts yet."
+msgstr ""
+
+#: app/templates/user/show_profile.html:95
+msgid "Comment pagination"
+msgstr ""
+
+#: app/templates/user/show_profile.html:108
+msgid "No comments yet."
+msgstr ""
+
+#: app/templates/user/show_profile.html:137
+msgid "Member of"
+msgstr ""
+
+#: app/templates/user/show_profile.html:162
+msgid "Moderate user"
+msgstr ""
+
+#: app/templates/user/show_profile.html:182
+msgid "Ban + Purge"
+msgstr ""
+
+#: app/templates/user/user_report.html:13
+#, python-format
+msgid "Report \"%(user_name)s\""
+msgstr ""
+
+#: app/topic/forms.py:13
+msgid "Choose some topics you are interested in"
+msgstr ""
+
+#: app/topic/forms.py:14
+msgid "Choose"
+msgstr ""
+
+#: app/topic/routes.py:172
+msgid ""
+"You have joined some communities relating to those interests. Find them "
+"on the Topics menu or browse the home page."
+msgstr ""
+
+#: app/topic/routes.py:176
+msgid ""
+"You did not choose any topics. Would you like to choose individual "
+"communities instead?"
+msgstr ""
+
+#: app/user/forms.py:13
+msgid "Display name"
+msgstr ""
+
+#: app/user/forms.py:15
+msgid "Set new password"
+msgstr ""
+
+#: app/user/forms.py:22
+msgid "Save profile"
+msgstr ""
+
+#: app/user/forms.py:26
+msgid "That email address is already in use by another account"
+msgstr ""
+
+#: app/user/forms.py:30
+msgid "Matrix user ids start with @"
+msgstr ""
+
+#: app/user/forms.py:35
+msgid "Receive email about missed notifications"
+msgstr ""
+
+#: app/user/forms.py:39
+msgid "Use markdown editor GUI when writing"
+msgstr ""
+
+#: app/user/forms.py:40
+msgid "Show profile in user list"
+msgstr ""
+
+#: app/user/forms.py:41
+msgid "My posts appear in search results"
+msgstr ""
+
+#: app/user/forms.py:42
+msgid "Manually approve followers"
+msgstr ""
+
+#: app/user/forms.py:43
+msgid "Import community subscriptions and user blocks from Lemmy"
+msgstr ""
+
+#: app/user/forms.py:49
+msgid "By default, sort posts by"
+msgstr ""
+
+#: app/user/forms.py:50
+msgid "Theme"
+msgstr ""
+
+#: app/user/forms.py:51
+msgid "Save settings"
+msgstr ""
+
+#: app/user/forms.py:55
+msgid "Yes, delete my account"
+msgstr ""
+
+#: app/user/forms.py:66
+msgid "Malicious reporting"
+msgstr ""
+
+#: app/user/forms.py:90
+msgid "Home feed"
+msgstr ""
+
+#: app/user/forms.py:91
+msgid "Posts in communities"
+msgstr ""
+
+#: app/user/forms.py:92
+msgid "Comments on posts"
+msgstr ""
+
+#: app/user/forms.py:93
+msgid "Make semi-transparent"
+msgstr ""
+
+#: app/user/forms.py:93
+msgid "Hide completely"
+msgstr ""
+
+#: app/user/forms.py:94
+msgid "Action to take"
+msgstr ""
+
+#: app/user/forms.py:95
+msgid "Keywords that trigger this filter"
+msgstr ""
+
+#: app/user/forms.py:98
+msgid "Expire after"
+msgstr ""
+
+#: app/user/routes.py:49
+msgid "This user has been banned."
+msgstr ""
+
+#: app/user/routes.py:51
+msgid "This user has been deleted."
+msgstr ""
+
+#: app/user/routes.py:83
+#, python-format
+msgid "Posts by %(user_name)s"
+msgstr ""
+
+#: app/user/routes.py:200
+msgid ""
+"Your subscriptions and blocks are being imported. If you have many it "
+"could take a few minutes."
+msgstr ""
+
+#: app/user/routes.py:235
+msgid "You cannot ban yourself."
+msgstr ""
+
+#: app/user/routes.py:260
+msgid "You cannot unban yourself."
+msgstr ""
+
+#: app/user/routes.py:284
+msgid "You cannot block yourself."
+msgstr ""
+
+#: app/user/routes.py:313
+msgid "You cannot unblock yourself."
+msgstr ""
+
+#: app/user/routes.py:340
+msgid ""
+"Moderators have already assessed reports regarding this person, no "
+"further reports are necessary."
+msgstr ""
+
+#: app/user/routes.py:346
+#, python-format
+msgid "%(user_name)s has already been reported, thank you!"
+msgstr ""
+
+#: app/user/routes.py:368
+#, python-format
+msgid "%(user_name)s has been reported, thank you!"
+msgstr ""
+
+#: app/user/routes.py:374
+msgid "Report user"
+msgstr ""
+
+#: app/user/routes.py:391
+msgid "You cannot delete yourself."
+msgstr ""
+
+#: app/user/routes.py:448
+msgid "Account deletion in progress. Give it a few minutes."
+msgstr ""
+
+#: app/user/routes.py:453
+msgid "Delete my account"
+msgstr ""
+
+#: app/user/routes.py:498
+msgid "You cannot purge yourself."
+msgstr ""
+
+#: app/user/routes.py:575
+msgid "All notifications marked as read."
+msgstr ""
+
+#: app/user/routes.py:746
+msgid "Filter deleted."
+msgstr ""
+
diff --git a/app/translations/de/LC_MESSAGES/messages.po b/app/translations/de/LC_MESSAGES/messages.po
index 2161a116..b73fd030 100644
--- a/app/translations/de/LC_MESSAGES/messages.po
+++ b/app/translations/de/LC_MESSAGES/messages.po
@@ -1,28 +1,24 @@
+
msgid ""
msgstr ""
-"Project-Id-Version: piefed\n"
+"Project-Id-Version: piefed\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-03-17 19:06+1300\n"
-"PO-Revision-Date: 2024-04-04 20:09\n"
+"POT-Creation-Date: 2024-04-09 12:33+1200\n"
+"PO-Revision-Date: 2024-04-04 20:09+0000\n"
"Last-Translator: \n"
"Language: de\n"
"Language-Team: German\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
-"X-Crowdin-Project: piefed\n"
-"X-Crowdin-Project-ID: 657446\n"
-"X-Crowdin-Language: de\n"
-"X-Crowdin-File: messages.po\n"
-"X-Crowdin-File-ID: 2\n"
-#: app/__init__.py:26
+#: app/__init__.py:33
msgid "Please log in to access this page."
msgstr "Bitte melden dich an, um auf diese Seite zuzugreifen."
-#: app/cli.py:238 app/main/routes.py:300
+#: app/cli.py:225 app/main/routes.py:328
msgid "[PieFed] You have unread notifications"
msgstr "[PieFed] Du hast ungelesene Benachrichtigungen"
@@ -42,13 +38,21 @@ msgstr "Deine Bewerbung wurde genehmigt - Willkommen bei PieFed"
msgid "Welcome to PieFed"
msgstr "Willkommen bei PieFed"
-#: app/activitypub/util.py:1205 app/post/routes.py:85 app/post/routes.py:472
+#: app/activitypub/util.py:1280 app/post/routes.py:91 app/post/routes.py:509
#, python-format
msgid "Reply from %(name)s on %(post_title)s"
msgstr "Antwort von %(name)s auf %(post_title)s"
-#: app/admin/forms.py:13 app/admin/forms.py:97 app/community/forms.py:18
-#: app/templates/community/community_mod_list.html:30
+#: app/activitypub/util.py:1679 app/post/routes.py:1053
+msgid "A post has been reported"
+msgstr "Ein Beitrag wurde gemeldet"
+
+#: app/activitypub/util.py:1700 app/post/routes.py:1187
+msgid "A comment has been reported"
+msgstr "Ein Kommentar wurde gemeldet"
+
+#: app/admin/forms.py:13 app/admin/forms.py:99 app/community/forms.py:18
+#: app/templates/community/community_mod_list.html:32
#: app/templates/user/filters.html:29 app/templates/user/filters.html:70
#: app/templates/user/filters.html:88 app/templates/user/filters.html:106
#: app/templates/user/filters.html:124 app/user/forms.py:89
@@ -71,10 +75,10 @@ msgstr "Sidebar"
msgid "Legal information"
msgstr "Rechtliche Informationen"
-#: app/admin/forms.py:20 app/admin/forms.py:36 app/admin/forms.py:44
-#: app/admin/forms.py:81 app/admin/forms.py:100 app/admin/forms.py:126
-#: app/admin/forms.py:188 app/community/forms.py:56 app/community/forms.py:95
-#: app/user/forms.py:99
+#: app/admin/forms.py:20 app/admin/forms.py:37 app/admin/forms.py:46
+#: app/admin/forms.py:83 app/admin/forms.py:102 app/admin/forms.py:128
+#: app/admin/forms.py:180 app/community/forms.py:56 app/community/forms.py:96
+#: app/community/forms.py:109 app/community/forms.py:129 app/user/forms.py:99
msgid "Save"
msgstr "Speichern"
@@ -127,428 +131,453 @@ msgid "Question to ask people applying for an account"
msgstr "Frage an Personen, die sich um ein Konto bewerben"
#: app/admin/forms.py:34
+msgid "Block registrations from these referrers (one per line)"
+msgstr ""
+
+#: app/admin/forms.py:35
msgid "Log ActivityPub JSON for debugging"
msgstr "ActivityPub JSON zum Debuggen protokollieren"
-#: app/admin/forms.py:35
+#: app/admin/forms.py:36
msgid "Default theme"
msgstr "Standard-Template"
-#: app/admin/forms.py:40
+#: app/admin/forms.py:41
msgid "Allowlist instead of blocklist"
msgstr "Erlaubte Liste statt Sperrliste"
-#: app/admin/forms.py:41
+#: app/admin/forms.py:42
msgid "Allow federation with these instances"
msgstr "Föderation mit diesen Instanzen erlauben"
-#: app/admin/forms.py:42
+#: app/admin/forms.py:43
msgid "Blocklist instead of allowlist"
msgstr "Sperrliste statt erlaubte Liste"
-#: app/admin/forms.py:43
+#: app/admin/forms.py:44
msgid "Deny federation with these instances"
msgstr "Föderation mit diesen Instanzen verweigern"
-#: app/admin/forms.py:48 app/community/forms.py:42 app/community/forms.py:80
-#: app/community/forms.py:82 app/community/forms.py:86
+#: app/admin/forms.py:45
+msgid "Discard all posts and comments with these phrases (one per line)"
+msgstr ""
+
+#: app/admin/forms.py:50 app/community/forms.py:42 app/community/forms.py:90
+#: app/community/forms.py:101 app/community/forms.py:121
msgid "Title"
msgstr "Titel"
-#: app/admin/forms.py:49 app/admin/forms.py:98 app/community/forms.py:19
+#: app/admin/forms.py:51 app/admin/forms.py:100 app/community/forms.py:19
msgid "Url"
msgstr "Url"
-#: app/admin/forms.py:50 app/community/forms.py:20 app/community/forms.py:43
+#: app/admin/forms.py:52 app/community/forms.py:20 app/community/forms.py:43
msgid "Description"
msgstr "Beschreibung"
-#: app/admin/forms.py:51 app/community/forms.py:21 app/community/forms.py:44
+#: app/admin/forms.py:53 app/community/forms.py:21 app/community/forms.py:44
msgid "Icon image"
msgstr "Icon-Bild"
-#: app/admin/forms.py:52 app/community/forms.py:22 app/community/forms.py:45
+#: app/admin/forms.py:54 app/community/forms.py:22 app/community/forms.py:45
msgid "Banner image"
msgstr "Bannerbild"
-#: app/admin/forms.py:53 app/community/forms.py:23 app/community/forms.py:46
+#: app/admin/forms.py:55 app/community/forms.py:23 app/community/forms.py:46
msgid "Rules"
msgstr "Regeln"
-#: app/admin/forms.py:54 app/community/forms.py:47
+#: app/admin/forms.py:56 app/community/forms.py:47
msgid "Porn community"
msgstr "Porno Community"
-#: app/admin/forms.py:55
+#: app/admin/forms.py:57
msgid "Banned - no new posts accepted"
msgstr "Gesperrt - keine neuen Beiträge akzeptiert"
-#: app/admin/forms.py:56 app/community/forms.py:48
+#: app/admin/forms.py:58 app/community/forms.py:48
msgid "Only accept posts from current instance"
msgstr "Nur Beiträge von der aktuellen Instanz akzeptieren"
-#: app/admin/forms.py:57 app/community/forms.py:49
+#: app/admin/forms.py:59 app/community/forms.py:49
msgid "Only moderators can post"
msgstr "Nur Moderatoren können schreiben"
-#: app/admin/forms.py:58 app/community/forms.py:50
+#: app/admin/forms.py:60 app/community/forms.py:50
msgid "New moderators wanted"
msgstr "Neue Moderatoren gesucht"
-#: app/admin/forms.py:59
+#: app/admin/forms.py:61
msgid "Posts show on home page"
msgstr "Beiträge auf der Startseite anzeigen"
-#: app/admin/forms.py:60
+#: app/admin/forms.py:62
msgid "Posts can be popular"
msgstr "Beiträge können beliebt sein"
-#: app/admin/forms.py:61
+#: app/admin/forms.py:63
msgid "Posts show in All list"
msgstr "Beiträge in aller Liste anzeigen"
-#: app/admin/forms.py:62
+#: app/admin/forms.py:64
msgid "Low quality / toxic - upvotes in here don't add to reputation"
-msgstr "Niedrige Qualität / toxisch - positive Bewertungen von hier verbessern den Ruf nicht"
+msgstr ""
+"Niedrige Qualität / toxisch - positive Bewertungen von hier verbessern "
+"den Ruf nicht"
-#: app/admin/forms.py:63
+#: app/admin/forms.py:65
msgid "Forever"
msgstr "Für immer"
-#: app/admin/forms.py:64
+#: app/admin/forms.py:66
msgid "1 week"
msgstr "1 Woche"
-#: app/admin/forms.py:65
+#: app/admin/forms.py:67
msgid "2 weeks"
msgstr "2 Wochen"
-#: app/admin/forms.py:66
+#: app/admin/forms.py:68
msgid "1 month"
msgstr "1 Monat"
-#: app/admin/forms.py:67
+#: app/admin/forms.py:69
msgid "2 months"
msgstr "2 Monate"
-#: app/admin/forms.py:68
+#: app/admin/forms.py:70
msgid "3 months"
msgstr "3 Monate"
-#: app/admin/forms.py:69
+#: app/admin/forms.py:71
msgid "6 months"
msgstr "6 Monate"
-#: app/admin/forms.py:70
+#: app/admin/forms.py:72
msgid "1 year"
msgstr "1 Jahr"
-#: app/admin/forms.py:71
+#: app/admin/forms.py:73
msgid "2 years"
msgstr "2 Jahre"
-#: app/admin/forms.py:72
+#: app/admin/forms.py:74
msgid "5 years"
msgstr "5 Jahre"
-#: app/admin/forms.py:73
+#: app/admin/forms.py:75
msgid "10 years"
msgstr "10 Jahre"
-#: app/admin/forms.py:75
+#: app/admin/forms.py:77
msgid "Retain content"
msgstr "Inhalt beibehalten"
-#: app/admin/forms.py:76 app/community/forms.py:51
+#: app/admin/forms.py:78 app/community/forms.py:51
msgid "Topic"
msgstr "Thema"
-#: app/admin/forms.py:77 app/community/forms.py:52
+#: app/admin/forms.py:79 app/community/forms.py:52
#: app/templates/community/_community_nav.html:23
msgid "List"
msgstr "Liste"
-#: app/admin/forms.py:78 app/community/forms.py:53
+#: app/admin/forms.py:80 app/community/forms.py:53
msgid "Masonry"
msgstr "Mauerwerk"
-#: app/admin/forms.py:79 app/community/forms.py:54
+#: app/admin/forms.py:81 app/community/forms.py:54
msgid "Wide masonry"
msgstr "Großes Mauerwerk"
-#: app/admin/forms.py:80 app/community/forms.py:55
+#: app/admin/forms.py:82 app/community/forms.py:55
msgid "Layout"
msgstr "Layout"
-#: app/admin/forms.py:87 app/community/forms.py:32
+#: app/admin/forms.py:89 app/community/forms.py:32
msgid "Url is required."
msgstr "URL ist erforderlich."
-#: app/admin/forms.py:91 app/community/forms.py:36
+#: app/admin/forms.py:93 app/community/forms.py:36
msgid "- cannot be in Url. Use _ instead?"
msgstr "- kann nicht in Url sein. Verwenden Sie stattdessen _ ?"
-#: app/admin/forms.py:99
+#: app/admin/forms.py:101
msgid "Parent topic"
msgstr "Ãœbergeordnetes Thema"
-#: app/admin/forms.py:104 app/auth/forms.py:10 app/auth/forms.py:17
+#: app/admin/forms.py:106 app/auth/forms.py:10 app/auth/forms.py:17
#: app/community/forms.py:60
msgid "User name"
msgstr "Benutzername"
-#: app/admin/forms.py:106 app/admin/forms.py:169 app/user/forms.py:14
+#: app/admin/forms.py:108 app/user/forms.py:14
msgid "Email address"
msgstr "Email-Adresse"
-#: app/admin/forms.py:107 app/auth/forms.py:11 app/auth/forms.py:20
+#: app/admin/forms.py:109 app/auth/forms.py:11 app/auth/forms.py:20
#: app/auth/forms.py:74
msgid "Password"
msgstr "Passwort"
-#: app/admin/forms.py:109 app/auth/forms.py:22 app/auth/forms.py:76
+#: app/admin/forms.py:111 app/auth/forms.py:22 app/auth/forms.py:76
msgid "Repeat password"
msgstr "Passwort festlegen"
-#: app/admin/forms.py:110 app/admin/forms.py:168 app/user/forms.py:17
+#: app/admin/forms.py:112 app/user/forms.py:17
msgid "Bio"
msgstr "Bio"
-#: app/admin/forms.py:111 app/admin/forms.py:170 app/user/forms.py:18
+#: app/admin/forms.py:113 app/user/forms.py:18
msgid "Matrix User ID"
msgstr "Matrix-Benutzer-ID"
-#: app/admin/forms.py:112 app/admin/forms.py:171 app/user/forms.py:19
+#: app/admin/forms.py:114 app/user/forms.py:19
msgid "Avatar image"
msgstr "Avatar-Bild"
-#: app/admin/forms.py:113 app/admin/forms.py:172 app/user/forms.py:20
+#: app/admin/forms.py:115 app/user/forms.py:20
msgid "Top banner image"
msgstr "Top Banner-Bild"
-#: app/admin/forms.py:114 app/admin/forms.py:173 app/user/forms.py:21
+#: app/admin/forms.py:116 app/admin/forms.py:170 app/user/forms.py:21
msgid "This profile is a bot"
msgstr "Dieses Profil ist ein Bot"
-#: app/admin/forms.py:115 app/admin/forms.py:174
+#: app/admin/forms.py:117 app/admin/forms.py:171
msgid "Email address is verified"
msgstr "E-Mail-Adresse ist verifiziert"
-#: app/admin/forms.py:116 app/admin/forms.py:175
+#: app/admin/forms.py:118 app/admin/forms.py:172
msgid "Banned"
msgstr "Gesperrt"
-#: app/admin/forms.py:117 app/admin/forms.py:176 app/user/forms.py:34
+#: app/admin/forms.py:119 app/user/forms.py:34
msgid "Subscribe to email newsletter"
msgstr "E-Mail-Newsletter abonnieren"
-#: app/admin/forms.py:118 app/admin/forms.py:177 app/user/forms.py:36
+#: app/admin/forms.py:120 app/user/forms.py:36
msgid "Hide posts by bots"
msgstr "Beiträge von Bots ausblenden"
-#: app/admin/forms.py:119 app/admin/forms.py:178 app/user/forms.py:37
+#: app/admin/forms.py:121 app/user/forms.py:37
msgid "Show NSFW posts"
msgstr "NSFW-Beiträge anzeigen"
-#: app/admin/forms.py:120 app/admin/forms.py:179 app/user/forms.py:38
+#: app/admin/forms.py:122 app/user/forms.py:38
msgid "Show NSFL posts"
msgstr "NSFL-Beiträge anzeigen"
-#: app/admin/forms.py:121 app/admin/forms.py:183
+#: app/admin/forms.py:123 app/admin/forms.py:173
msgid "User"
msgstr "Benutzer"
-#: app/admin/forms.py:122 app/admin/forms.py:184
+#: app/admin/forms.py:124 app/admin/forms.py:174
msgid "Staff"
msgstr "Mitarbeiter"
-#: app/admin/forms.py:123 app/admin/forms.py:185 app/admin/routes.py:29
-#: app/templates/base.html:180
+#: app/admin/forms.py:125 app/admin/forms.py:175 app/admin/routes.py:32
+#: app/templates/base.html:185
msgid "Admin"
msgstr "Verwalter"
-#: app/admin/forms.py:125 app/admin/forms.py:187
+#: app/admin/forms.py:127 app/admin/forms.py:177
msgid "Role"
msgstr "Rolle"
-#: app/admin/forms.py:131 app/auth/forms.py:32
+#: app/admin/forms.py:133 app/auth/forms.py:32
msgid "An account with this email address already exists."
msgstr "Ein Konto mit dieser E-Mail-Adresse existiert bereits."
-#: app/admin/forms.py:135 app/auth/forms.py:36
+#: app/admin/forms.py:137 app/auth/forms.py:36
msgid "User names cannot contain @."
msgstr "Benutzernamen dürfen kein @ enthalten."
-#: app/admin/forms.py:139 app/auth/forms.py:40
+#: app/admin/forms.py:141 app/auth/forms.py:40
msgid "This username was used in the past and cannot be reused."
-msgstr "Dieser Benutzername wurde in der Vergangenheit verwendet und kann nicht wiederverwendet werden."
+msgstr ""
+"Dieser Benutzername wurde in der Vergangenheit verwendet und kann nicht "
+"wiederverwendet werden."
-#: app/admin/forms.py:141 app/auth/forms.py:42
+#: app/admin/forms.py:143 app/auth/forms.py:42
msgid "An account with this user name already exists."
msgstr "Ein Konto mit diesem Benutzernamen existiert bereits."
-#: app/admin/forms.py:144 app/auth/forms.py:45
+#: app/admin/forms.py:146 app/auth/forms.py:45
msgid "A community with this name exists so it cannot be used for a user."
-msgstr "Eine Community mit diesem Namen existiert und kann daher nicht für einen Benutzer verwendet werden."
+msgstr ""
+"Eine Community mit diesem Namen existiert und kann daher nicht für einen "
+"Benutzer verwendet werden."
-#: app/admin/forms.py:151 app/admin/forms.py:164 app/auth/forms.py:52
+#: app/admin/forms.py:153 app/admin/forms.py:166 app/auth/forms.py:52
#: app/auth/forms.py:65
msgid "This password is too common."
msgstr "Dieses Passwort ist zu geläufig."
-#: app/admin/forms.py:161 app/auth/forms.py:62
+#: app/admin/forms.py:163 app/auth/forms.py:62
msgid "This password is not secure."
msgstr "Dieses Passwort ist nicht sicher."
-#: app/admin/forms.py:180 app/user/forms.py:40
-msgid "Show profile in user list"
-msgstr "Profil in der Benutzerliste anzeigen"
+#: app/admin/forms.py:178
+#, fuzzy
+msgid "Remove avatar"
+msgstr "Entfernen"
-#: app/admin/forms.py:181
-msgid "Allow search engines to index this profile"
-msgstr "Suchmaschinen erlauben, dieses Profil zu indizieren"
+#: app/admin/forms.py:179
+#, fuzzy
+msgid "Remove banner"
+msgstr "Entfernen"
-#: app/admin/forms.py:182 app/user/forms.py:42
-msgid "Manually approve followers"
-msgstr "Follower manuell genehmigen"
-
-#: app/admin/forms.py:192
+#: app/admin/forms.py:184
msgid "Subject"
msgstr "Betreff"
-#: app/admin/forms.py:193
+#: app/admin/forms.py:185
msgid "Body (text)"
msgstr "Textkörper (Text)"
-#: app/admin/forms.py:194
+#: app/admin/forms.py:186
msgid "Body (html)"
msgstr "Textkörper (html)"
-#: app/admin/forms.py:195
+#: app/admin/forms.py:187
msgid "Test mode"
msgstr "Testmodus"
-#: app/admin/forms.py:196 app/admin/routes.py:732
+#: app/admin/forms.py:188 app/admin/routes.py:708
msgid "Send newsletter"
msgstr "Newsletter senden"
-#: app/admin/routes.py:57 app/templates/admin/_nav.html:4
+#: app/admin/routes.py:60 app/templates/admin/_nav.html:4
msgid "Site profile"
msgstr "Seitenprofil"
-#: app/admin/routes.py:102 app/templates/admin/_nav.html:5
+#: app/admin/routes.py:108 app/templates/admin/_nav.html:5
msgid "Misc settings"
msgstr "Verschiedene Einstellungen"
-#: app/admin/routes.py:133
+#: app/admin/routes.py:144
msgid "Admin settings saved"
msgstr "Admin-Einstellungen gespeichert"
-#: app/admin/routes.py:143
+#: app/admin/routes.py:155
msgid "Federation settings"
msgstr "Föderations-Einstellungen"
-#: app/admin/routes.py:165
+#: app/admin/routes.py:177
msgid "ActivityPub Log"
msgstr "ActivityPub Protokoll"
-#: app/admin/routes.py:175
+#: app/admin/routes.py:187
msgid "Activity JSON"
msgstr "Aktivitäts-JSON"
-#: app/admin/routes.py:210 app/community/routes.py:215 app/main/routes.py:181
-#: app/post/routes.py:211 app/templates/admin/_nav.html:6
+#: app/admin/routes.py:222 app/community/routes.py:232 app/main/routes.py:193
+#: app/post/routes.py:238 app/templates/admin/_nav.html:6
#: app/templates/list_communities.html:51 app/templates/user/filters.html:58
#: app/templates/user/notifications.html:66
-#: app/templates/user/show_profile.html:130
+#: app/templates/user/show_profile.html:133
msgid "Communities"
msgstr "Communities"
-#: app/admin/routes.py:262 app/admin/routes.py:358 app/admin/routes.py:383
-#: app/admin/routes.py:578 app/community/routes.py:630
+#: app/admin/routes.py:274 app/admin/routes.py:370 app/admin/routes.py:395
+#: app/admin/routes.py:564 app/community/routes.py:808
msgid "Saved"
msgstr "Gespeichert"
-#: app/admin/routes.py:266
-msgid "This is a remote community - most settings here will be regularly overwritten with data from the original server."
-msgstr "Dies ist eine Remote-Community - die meisten Einstellungen hier werden regelmäßig mit Daten des ursprünglichen Servers überschrieben."
+#: app/admin/routes.py:278
+msgid ""
+"This is a remote community - most settings here will be regularly "
+"overwritten with data from the original server."
+msgstr ""
+"Dies ist eine Remote-Community - die meisten Einstellungen hier werden "
+"regelmäßig mit Daten des ursprünglichen Servers überschrieben."
-#: app/admin/routes.py:283 app/community/routes.py:642
-#: app/templates/community/community_edit.html:20
+#: app/admin/routes.py:295 app/community/routes.py:820
msgid "Edit community"
msgstr "Community bearbeiten"
-#: app/admin/routes.py:302 app/community/routes.py:664
+#: app/admin/routes.py:314 app/community/routes.py:843
msgid "Community deleted"
msgstr "Community gelöscht"
-#: app/admin/routes.py:336 app/community/routes.py:201 app/post/routes.py:197
-#: app/templates/admin/_nav.html:7 app/templates/base.html:134
-#: app/templates/base.html:152 app/templates/topic/show_topic.html:14
+#: app/admin/routes.py:348 app/community/routes.py:218 app/post/routes.py:224
+#: app/templates/admin/_nav.html:7 app/templates/base.html:137
+#: app/templates/base.html:155 app/templates/topic/show_topic.html:14
msgid "Topics"
msgstr "Themen"
-#: app/admin/routes.py:361 app/templates/admin/topics.html:35
+#: app/admin/routes.py:373 app/templates/admin/topics.html:35
msgid "Add topic"
msgstr "Thema hinzufügen"
-#: app/admin/routes.py:389
+#: app/admin/routes.py:401
msgid "Edit topic"
msgstr "Thema bearbeiten"
-#: app/admin/routes.py:404
+#: app/admin/routes.py:416
msgid "Topic deleted"
msgstr "Thema gelöscht"
-#: app/admin/routes.py:406
+#: app/admin/routes.py:418
msgid "Cannot delete topic with communities assigned to it."
msgstr "Thema mit zugewiesenen Communities kann nicht gelöscht werden."
-#: app/admin/routes.py:433 app/templates/admin/_nav.html:8
+#: app/admin/routes.py:445 app/templates/admin/_nav.html:8
msgid "Users"
msgstr "Benutzer"
-#: app/admin/routes.py:463
+#: app/admin/routes.py:475
msgid "Problematic users"
msgstr "Problematische Benutzer"
-#: app/admin/routes.py:484
+#: app/admin/routes.py:496
msgid "Bad posts"
msgstr "Schlechte Beiträge"
-#: app/admin/routes.py:517
+#: app/admin/routes.py:529
msgid "Registration approved."
msgstr "Registrierung genehmigt."
-#: app/admin/routes.py:574
-msgid "Permissions are cached for 50 seconds so new admin roles won't take effect immediately."
-msgstr "Berechtigungen werden für 50 Sekunden zwischengespeichert, so dass neue Administratorrollen nicht sofort wirksam werden."
+#: app/admin/routes.py:560
+msgid ""
+"Permissions are cached for 50 seconds so new admin roles won't take "
+"effect immediately."
+msgstr ""
+"Berechtigungen werden für 50 Sekunden zwischengespeichert, so dass neue "
+"Administratorrollen nicht sofort wirksam werden."
-#: app/admin/routes.py:582
-msgid "This is a remote user - most settings here will be regularly overwritten with data from the original server."
-msgstr "Dies ist ein Remote-Benutzer - die meisten Einstellungen hier werden regelmäßig mit Daten des ursprünglichen Servers überschrieben."
+#: app/admin/routes.py:568
+msgid ""
+"This is a remote user - most settings here will be regularly overwritten "
+"with data from the original server."
+msgstr ""
+"Dies ist ein Remote-Benutzer - die meisten Einstellungen hier werden "
+"regelmäßig mit Daten des ursprünglichen Servers überschrieben."
-#: app/admin/routes.py:599
+#: app/admin/routes.py:575
msgid "Edit user"
msgstr "Benutzer bearbeiten"
-#: app/admin/routes.py:664
+#: app/admin/routes.py:640
msgid "User added"
msgstr "Benutzer hinzugefügt"
-#: app/admin/routes.py:667
+#: app/admin/routes.py:643
msgid "Add user"
msgstr "Benutzer hinzufügen"
-#: app/admin/routes.py:691
+#: app/admin/routes.py:667
msgid "User deleted"
msgstr "Benutzer gelöscht"
-#: app/admin/routes.py:714
+#: app/admin/routes.py:690
+#: app/templates/community/_community_moderation_nav.html:11
+#: app/templates/community/community_moderate.html:21
msgid "Reports"
msgstr "Meldungen"
-#: app/admin/util.py:125
+#: app/admin/util.py:110
msgid "None"
msgstr "Keine"
@@ -568,7 +597,7 @@ msgstr "Email"
msgid "Why would you like to join this site?"
msgstr "Warum möchtest du dieser Seite beitreten?"
-#: app/auth/forms.py:27 app/auth/routes.py:140 app/templates/base.html:141
+#: app/auth/forms.py:27 app/auth/routes.py:153 app/templates/base.html:144
msgid "Register"
msgstr "Registrieren"
@@ -585,8 +614,12 @@ msgid "No account exists with that user name."
msgstr "Kein Konto mit diesem Benutzernamen vorhanden."
#: app/auth/routes.py:36
-msgid "Invalid password. Please reset your password."
-msgstr "Ungültiges Passwort. Bitte Ihr Passwort zurücksetzen."
+msgid ""
+"Invalid password. Please reset "
+"your password."
+msgstr ""
+"Ungültiges Passwort. Bitte Ihr "
+"Passwort zurücksetzen."
#: app/auth/routes.py:39
msgid "Invalid password"
@@ -600,53 +633,59 @@ msgstr "Du wurdest gebannt."
msgid "Login"
msgstr "Anmelden"
-#: app/auth/routes.py:97
+#: app/auth/routes.py:100
msgid "Sorry, you cannot use that email address"
msgstr "Du kannst diese E-Mail-Adresse nicht verwenden"
-#: app/auth/routes.py:99
+#: app/auth/routes.py:102
msgid "Sorry, you cannot use that user name"
msgstr "Du kannst diesen Benutzernamen nicht verwenden"
-#: app/auth/routes.py:106
+#: app/auth/routes.py:119
#, python-format
msgid "Your username contained special letters so it was changed to %(name)s."
-msgstr "Dein Benutzername enthielt spezielle Buchstaben, so dass er in %(name)s geändert wurde."
+msgstr ""
+"Dein Benutzername enthielt spezielle Buchstaben, so dass er in %(name)s "
+"geändert wurde."
-#: app/auth/routes.py:145
+#: app/auth/routes.py:158
msgid "Account under review"
msgstr "Konto wird überprüft"
-#: app/auth/routes.py:150 app/templates/auth/check_email.html:8
+#: app/auth/routes.py:163 app/templates/auth/check_email.html:8
msgid "Check your email"
msgstr "Überprüfe deine E-Mail"
-#: app/auth/routes.py:161
+#: app/auth/routes.py:174
msgid "Sorry, you cannot use that email address."
msgstr "Du kannst diese E-Mail-Adresse nicht verwenden."
-#: app/auth/routes.py:166
+#: app/auth/routes.py:179
msgid "Check your email for a link to reset your password."
msgstr "Überprüfen Sie Ihre E-Mail, um Ihr Passwort zurückzusetzen."
-#: app/auth/routes.py:169
+#: app/auth/routes.py:182
msgid "No account with that email address exists"
msgstr "Kein Konto mit dieser E-Mail-Adresse existiert"
-#: app/auth/routes.py:171
+#: app/auth/routes.py:184
msgid "Reset Password"
msgstr "Passwort zurücksetzen"
-#: app/auth/routes.py:185
+#: app/auth/routes.py:198
#, python-format
-msgid "Your password has been reset. Please use it to log in with user name of %(name)s."
-msgstr "Dein Passwort wurde zurückgesetzt. Bitte benutze es um dich mit dem Benutzernamen von %(name)s anzumelden."
+msgid ""
+"Your password has been reset. Please use it to log in with user name of "
+"%(name)s."
+msgstr ""
+"Dein Passwort wurde zurückgesetzt. Bitte benutze es um dich mit dem "
+"Benutzernamen von %(name)s anzumelden."
-#: app/auth/routes.py:205
+#: app/auth/routes.py:218
msgid "Thank you for verifying your email address."
msgstr "Vielen Dank für die Bestätigung deiner E-Mail-Adresse."
-#: app/auth/routes.py:207
+#: app/auth/routes.py:220
msgid "Email address validation failed."
msgstr "Überprüfung der E-Mail-Adresse fehlgeschlagen."
@@ -710,22 +749,22 @@ msgstr "Markenverletzung"
msgid "Self-harm or suicide"
msgstr "Selbstschädigung oder Selbstmord"
-#: app/chat/forms.py:29 app/community/forms.py:155 app/post/forms.py:26
+#: app/chat/forms.py:29 app/community/forms.py:162 app/post/forms.py:26
#: app/user/forms.py:73
msgid "Other"
msgstr "Andere"
-#: app/chat/forms.py:30 app/community/forms.py:70 app/community/forms.py:157
+#: app/chat/forms.py:30 app/community/forms.py:81 app/community/forms.py:164
#: app/post/forms.py:27 app/user/forms.py:74
msgid "Reason"
msgstr "Grund"
-#: app/chat/forms.py:31 app/community/forms.py:158 app/post/forms.py:28
+#: app/chat/forms.py:31 app/community/forms.py:165 app/post/forms.py:28
#: app/user/forms.py:75
msgid "More info"
msgstr "Mehr Info"
-#: app/chat/forms.py:33 app/community/forms.py:160 app/post/forms.py:30
+#: app/chat/forms.py:33 app/community/forms.py:167 app/post/forms.py:30
#: app/templates/user/show_profile.html:56 app/user/forms.py:77
msgid "Report"
msgstr "Melden"
@@ -760,12 +799,12 @@ msgstr "Dieses Gespräch wurde gemeldet, danke!"
msgid "Report conversation"
msgstr "Konversation melden"
-#: app/chat/util.py:58
+#: app/chat/util.py:59
#, python-format
msgid "Message failed to send to %(name)s."
msgstr "Nachricht konnte nicht an %(name)s gesendet werden."
-#: app/chat/util.py:60
+#: app/chat/util.py:61
msgid "Message sent."
msgstr "Nachricht gesendet."
@@ -778,155 +817,182 @@ msgid "Add"
msgstr "Neu"
#: app/community/forms.py:65
+msgid "Amend the report description if necessary"
+msgstr ""
+
+#: app/community/forms.py:66
+#, fuzzy
+msgid "Escalate report"
+msgstr "Beitrag erstellen"
+
+#: app/community/forms.py:70
+#, fuzzy
+msgid "Note for mod log"
+msgstr "Not safe for work"
+
+#: app/community/forms.py:71
+msgid "Also resolve all other reports about the same thing."
+msgstr ""
+
+#: app/community/forms.py:72
+#: app/templates/community/community_moderate_report_resolve.html:13
+#, fuzzy
+msgid "Resolve report"
+msgstr "Melden"
+
+#: app/community/forms.py:76
msgid "Community address"
msgstr "Gemeinschaftsadresse"
-#: app/community/forms.py:66 app/search/routes.py:52
-#: app/templates/base.html:193 app/templates/community/add_remote.html:13
+#: app/community/forms.py:77 app/search/routes.py:56
+#: app/templates/base.html:198 app/templates/community/add_remote.html:13
#: app/templates/domain/domains.html:29
#: app/templates/domain/domains_blocked.html:29 app/templates/index.html:40
#: app/templates/list_communities.html:36 app/templates/search/results.html:38
msgid "Search"
msgstr "Suchen"
-#: app/community/forms.py:71
+#: app/community/forms.py:82
msgid "Ban until"
msgstr "Bannen bis"
-#: app/community/forms.py:72
+#: app/community/forms.py:83
msgid "Also delete all their posts"
msgstr "Lösche auch alle Beiträge"
-#: app/community/forms.py:73
+#: app/community/forms.py:84
msgid "Also delete all their comments"
msgstr "Lösche auch alle Kommentare"
-#: app/community/forms.py:74 app/templates/domain/domains_blocked.html:48
-#: app/templates/user/show_profile.html:170
+#: app/community/forms.py:85
+#: app/templates/community/community_moderate_subscribers.html:56
+#: app/templates/domain/domains_blocked.html:48
+#: app/templates/user/show_profile.html:173
msgid "Ban"
msgstr "Bann"
-#: app/community/forms.py:78 app/templates/list_communities.html:56
+#: app/community/forms.py:89 app/community/forms.py:100
+#: app/community/forms.py:120 app/templates/list_communities.html:56
msgid "Community"
msgstr "Community"
-#: app/community/forms.py:81 app/community/forms.py:83
-#: app/community/forms.py:88 app/post/forms.py:10
+#: app/community/forms.py:91 app/community/forms.py:102
+#: app/community/forms.py:123 app/post/forms.py:10
msgid "Body"
msgstr "Textkörper"
-#: app/community/forms.py:85
-msgid "URL"
-msgstr "URL"
+#: app/community/forms.py:92 app/community/forms.py:105
+#: app/community/forms.py:125
+msgid "Sticky"
+msgstr ""
-#: app/community/forms.py:87
-msgid "Alt text"
-msgstr "Alt-Text"
-
-#: app/community/forms.py:90
-msgid "Image"
-msgstr "Bild"
-
-#: app/community/forms.py:92
+#: app/community/forms.py:93 app/community/forms.py:106
+#: app/community/forms.py:126
msgid "NSFW"
msgstr "NSFW"
-#: app/community/forms.py:93
+#: app/community/forms.py:94 app/community/forms.py:107
+#: app/community/forms.py:127
msgid "Gore/gross"
msgstr "Gore/ekelhaft"
-#: app/community/forms.py:94 app/post/forms.py:11
+#: app/community/forms.py:95 app/community/forms.py:108
+#: app/community/forms.py:128 app/post/forms.py:11
#: app/templates/post/_post_notification_toggle.html:4
#: app/templates/post/_reply_notification_toggle.html:4
msgid "Notify about replies"
msgstr "Ãœber Antworten benachrichtigen"
-#: app/community/forms.py:105 app/community/forms.py:109
-#: app/community/forms.py:120
-msgid "Title is required."
-msgstr "Titel ist erforderlich."
+#: app/community/forms.py:103
+msgid "URL"
+msgstr "URL"
-#: app/community/forms.py:112
-msgid "URL is required."
-msgstr "URL ist erforderlich."
-
-#: app/community/forms.py:116
+#: app/community/forms.py:114
#, python-format
msgid "Links to %(domain)s are not allowed."
msgstr "Links zu %(domain)s sind nicht erlaubt."
-#: app/community/forms.py:123
-msgid "File is required."
-msgstr "Datei ist erforderlich."
+#: app/community/forms.py:122
+msgid "Alt text"
+msgstr "Alt-Text"
-#: app/community/forms.py:140
+#: app/community/forms.py:124
+#: app/templates/community/add_discussion_post.html:21
+#: app/templates/community/add_image_post.html:21
+#: app/templates/community/add_link_post.html:21
+msgid "Image"
+msgstr "Bild"
+
+#: app/community/forms.py:150
msgid "Images cannot be posted to local communities."
msgstr "Bilder können nicht in lokalen Communities veröffentlicht werden."
-#: app/community/forms.py:142
-msgid "Poll not implemented yet."
-msgstr "Umfrage noch nicht implementiert."
-
-#: app/community/forms.py:149
+#: app/community/forms.py:156
msgid "Breaks instance rules"
msgstr "Bricht die Instanz-Regeln"
-#: app/community/forms.py:150
+#: app/community/forms.py:157
msgid "Abandoned by moderators"
msgstr "Von Moderatoren verlassen"
-#: app/community/forms.py:151
+#: app/community/forms.py:158
msgid "Cult"
msgstr "Kult"
-#: app/community/forms.py:152
+#: app/community/forms.py:159
msgid "Scam"
msgstr "Scam"
-#: app/community/forms.py:153
+#: app/community/forms.py:160
msgid "Alt-right pipeline"
msgstr "Alt-Right Pipeline"
-#: app/community/forms.py:154 app/post/forms.py:17
+#: app/community/forms.py:161 app/post/forms.py:17
msgid "Hate / genocide"
msgstr "Hass / Völkermord"
-#: app/community/forms.py:172 app/community/routes.py:667
+#: app/community/forms.py:179 app/community/routes.py:846
msgid "Delete community"
msgstr "Community löschen"
-#: app/community/routes.py:72
+#: app/community/routes.py:79
msgid "Your new community has been created."
msgstr "Deine neue Community wurde erstellt."
-#: app/community/routes.py:78 app/templates/community/add_local.html:13
-#: app/templates/community/community_edit.html:22
+#: app/community/routes.py:85 app/templates/community/add_local.html:13
+#: app/templates/community/community_edit.html:25
msgid "Create community"
msgstr "Community erstellen"
-#: app/community/routes.py:102
+#: app/community/routes.py:111 app/community/routes.py:1278
msgid "Community not found."
msgstr "Community nicht gefunden."
-#: app/community/routes.py:104
-msgid "Community not found. If you are searching for a nsfw community it is blocked by this instance."
-msgstr "Community nicht gefunden. Wenn Sie nach einer nsfw-Community suchen, wird sie von dieser Instanz blockiert."
+#: app/community/routes.py:113 app/community/routes.py:1280
+msgid ""
+"Community not found. If you are searching for a nsfw community it is "
+"blocked by this instance."
+msgstr ""
+"Community nicht gefunden. Wenn Sie nach einer nsfw-Community suchen, wird"
+" sie von dieser Instanz blockiert."
-#: app/community/routes.py:107
+#: app/community/routes.py:116 app/community/routes.py:1283
#, python-format
msgid "That community is banned from %(site)s."
msgstr "Diese Community ist von %(site)s gebannt."
-#: app/community/routes.py:110
+#: app/community/routes.py:119
msgid "Add remote community"
msgstr "Remote-Community hinzufügen"
-#: app/community/routes.py:184 app/post/routes.py:180
-#: app/templates/base.html:127 app/templates/base.html:129
-#: app/templates/base.html:145 app/templates/base.html:147
+#: app/community/routes.py:201 app/post/routes.py:207
+#: app/templates/base.html:130 app/templates/base.html:132
+#: app/templates/base.html:148 app/templates/base.html:150
#: app/templates/chat/conversation.html:36
#: app/templates/community/community_edit.html:13
#: app/templates/community/community_mod_list.html:13
+#: app/templates/community/community_moderate.html:13
+#: app/templates/community/community_moderate_subscribers.html:13
#: app/templates/domain/domain.html:13 app/templates/topic/show_topic.html:13
#: app/templates/user/delete_account.html:13
#: app/templates/user/edit_filters.html:14
@@ -938,89 +1004,124 @@ msgstr "Remote-Community hinzufügen"
msgid "Home"
msgstr "Startseite"
-#: app/community/routes.py:310
+#: app/community/routes.py:327
msgid "You cannot join this community"
msgstr "Du kannst dieser Community nicht beitreten"
-#: app/community/routes.py:326
-msgid "There was a problem while trying to communicate with remote server. If other people have already joined this community it won't matter."
-msgstr "Es gab ein Problem beim Versuch, mit einem entfernten Server zu kommunizieren. Wenn andere Personen dieser Community bereits beigetreten sind, spielt es keine Rolle."
+#: app/community/routes.py:343
+msgid ""
+"There was a problem while trying to communicate with remote server. If "
+"other people have already joined this community it won't matter."
+msgstr ""
+"Es gab ein Problem beim Versuch, mit einem entfernten Server zu "
+"kommunizieren. Wenn andere Personen dieser Community bereits beigetreten "
+"sind, spielt es keine Rolle."
-#: app/community/routes.py:516 app/community/routes.py:540
-#: app/community/routes.py:542
+#: app/community/routes.py:492 app/community/routes.py:565
+#: app/community/routes.py:638
+msgid "Add post to community"
+msgstr "Beitrag zur Community hinzufügen"
+
+#: app/community/routes.py:705 app/community/routes.py:730
+#: app/community/routes.py:732
#, python-format
msgid "Your post to %(name)s has been made."
msgstr "Dein Beitrag bei %(name)s wurde erstellt."
-#: app/community/routes.py:552
-msgid "Add post to community"
-msgstr "Beitrag zur Community hinzufügen"
-
-#: app/community/routes.py:574
+#: app/community/routes.py:749
msgid "A community has been reported"
msgstr "Eine Community wurde gemeldet"
-#: app/community/routes.py:585
+#: app/community/routes.py:760
msgid "Community has been reported, thank you!"
msgstr "Community wurde gemeldet, danke!"
-#: app/community/routes.py:588
+#: app/community/routes.py:763
msgid "Report community"
msgstr "Community melden"
-#: app/community/routes.py:683
-#: app/templates/community/community_mod_list.html:21
+#: app/community/routes.py:864
+#: app/templates/community/community_mod_list.html:22
#, python-format
msgid "Moderators for %(community)s"
msgstr "Moderatoren für %(community)s"
-#: app/community/routes.py:706
+#: app/community/routes.py:889
msgid "Moderator added"
msgstr "Moderator hinzugefügt"
-#: app/community/routes.py:710
+#: app/community/routes.py:893
#, python-format
msgid "You are now a moderator of %(name)s"
msgstr "Du bist jetzt Moderator von %(name)s"
-#: app/community/routes.py:735
+#: app/community/routes.py:918
msgid "Account not found"
msgstr "Konto nicht gefunden"
-#: app/community/routes.py:737
+#: app/community/routes.py:920
#: app/templates/community/community_add_moderator.html:13
#, python-format
msgid "Add moderator to %(community)s"
msgstr "Moderator zu %(community)s hinzufügen"
-#: app/community/routes.py:755
+#: app/community/routes.py:940
msgid "Moderator removed"
msgstr "Moderator gelöscht"
-#: app/community/routes.py:772 app/post/routes.py:870 app/post/routes.py:962
+#: app/community/routes.py:957 app/post/routes.py:1139 app/post/routes.py:1262
#, python-format
msgid "Content from %(name)s will be hidden."
msgstr "Inhalt von %(name)s wird ausgeblendet."
-#: app/community/routes.py:792
+#: app/community/routes.py:986
#, python-format
msgid "%(name)s has been banned."
msgstr "%(name)s wurde gesperrt."
-#: app/community/routes.py:799
+#: app/community/routes.py:993
#, python-format
msgid "Posts by %(name)s have been deleted."
msgstr "Beiträge von %(name)s wurden gelöscht."
-#: app/community/routes.py:805
+#: app/community/routes.py:999
#, python-format
msgid "Comments by %(name)s have been deleted."
msgstr "Kommentare von %(name)s wurden gelöscht."
-#: app/community/routes.py:823
+#: app/community/routes.py:1020
msgid "Ban from community"
msgstr "Community sperren"
+#: app/community/routes.py:1043
+#, fuzzy, python-format
+msgid "%(name)s has been unbanned."
+msgstr "%(name)s wurde gesperrt."
+
+#: app/community/routes.py:1108 app/community/routes.py:1142
+#, fuzzy, python-format
+msgid "Moderation of %(community)s"
+msgstr "Moderatoren für %(community)s"
+
+#: app/community/routes.py:1170
+msgid "Admin has been notified about this report."
+msgstr ""
+
+#: app/community/routes.py:1218
+#, fuzzy
+msgid "Report resolved."
+msgstr "Benutzer melden"
+
+#: app/community/routes.py:1256
+#, fuzzy
+msgid "Report ignored."
+msgstr "Kommentar melden"
+
+#: app/community/routes.py:1286
+#, fuzzy
+msgid "Search result for remote community"
+msgstr "Remote-Community hinzufügen"
+
#: app/domain/routes.py:113
#, python-format
msgid "%(name)s blocked."
@@ -1041,27 +1142,29 @@ msgstr "%(name)s wurde für alle Benutzer gesperrt und alle Inhalte gelöscht."
msgid "%(name)s un-banned for all users."
msgstr "%(name)s Sperrung wurde für alle Benutzer aufgehoben."
-#: app/main/routes.py:72
+#: app/main/routes.py:73
msgid "Create an account to tailor this feed to your interests."
msgstr "Erstelle ein Konto, um diesen Feed deinen Interessen anzupassen."
-#: app/main/routes.py:156 app/templates/base.html:136
-#: app/templates/base.html:154
+#: app/main/routes.py:163 app/templates/base.html:139
+#: app/templates/base.html:157
msgid "Browse by topic"
msgstr "Nach Thema suchen"
-#: app/main/routes.py:194
+#: app/main/routes.py:206
msgid "Local communities"
msgstr "Lokale Communities"
-#: app/main/routes.py:209 app/templates/base.html:163
+#: app/main/routes.py:221 app/templates/base.html:168
#: app/templates/list_communities.html:19
msgid "Joined communities"
msgstr "Beigetretene Communities"
-#: app/main/routes.py:326
+#: app/main/routes.py:354
msgid "Please click the link in your email inbox to verify your account."
-msgstr "Bitte klicke auf den Link in deinem E-mail Posteingang, um dein Konto zu bestätigen."
+msgstr ""
+"Bitte klicke auf den Link in deinem E-mail Posteingang, um dein Konto zu "
+"bestätigen."
#: app/post/forms.py:12
msgid "Comment"
@@ -1075,7 +1178,7 @@ msgstr "Bricht die Community-Regeln"
msgid "Sharing personal info - doxing"
msgstr "Verbreitung persönlicher Informationen - Doxing"
-#: app/post/forms.py:42 app/post/routes.py:887
+#: app/post/forms.py:42 app/post/routes.py:1156
#: app/templates/post/post_mea_culpa.html:13
msgid "I changed my mind"
msgstr "Ich habe meine Meinung geändert"
@@ -1083,78 +1186,98 @@ msgstr "Ich habe meine Meinung geändert"
#: app/post/routes.py:45
#, python-format
msgid "%(name)s has indicated they made a mistake in this post."
-msgstr "%(name)s hat angegeben, dass sie einen Fehler in diesem Beitrag gemacht haben."
+msgstr ""
+"%(name)s hat angegeben, dass sie einen Fehler in diesem Beitrag gemacht "
+"haben."
-#: app/post/routes.py:66 app/post/routes.py:443
+#: app/post/routes.py:72 app/post/routes.py:476
#, python-format
msgid "You cannot reply to %(name)s"
msgstr "Du kannst nicht auf %(name)s antworten"
-#: app/post/routes.py:76 app/post/routes.py:456
+#: app/post/routes.py:82 app/post/routes.py:489
msgid "This type of comment is not accepted, sorry."
msgstr "Diese Art von Kommentar wird nicht akzeptiert, sorry."
-#: app/post/routes.py:414 app/post/routes.py:579
+#: app/post/routes.py:446 app/post/routes.py:632
#, python-format
msgid "Discussing %(title)s"
msgstr "Diskussion %(title)s"
-#: app/post/routes.py:628 app/post/routes.py:985 app/user/routes.py:137
-#: app/user/routes.py:198 app/user/routes.py:670 app/user/routes.py:701
+#: app/post/routes.py:702 app/post/routes.py:783 app/post/routes.py:865
+#: app/post/routes.py:1285 app/user/routes.py:143 app/user/routes.py:204
+#: app/user/routes.py:686 app/user/routes.py:717
msgid "Your changes have been saved."
msgstr "Deine Änderungen wurden gespeichert."
-#: app/post/routes.py:725 app/templates/post/post_edit.html:43
+#: app/post/routes.py:718 app/post/routes.py:800 app/post/routes.py:882
+#: app/templates/post/post_edit_discussion.html:11
+#: app/templates/post/post_edit_image.html:11
+#: app/templates/post/post_edit_link.html:11
msgid "Edit post"
msgstr "Beitrag bearbeiten"
-#: app/post/routes.py:746
+#: app/post/routes.py:990
msgid "Post deleted."
msgstr "Beitrag gelöscht."
-#: app/post/routes.py:804
-msgid "A post has been reported"
-msgstr "Ein Beitrag wurde gemeldet"
+#: app/post/routes.py:1040
+msgid ""
+"Moderators have already assessed reports regarding this post, no further "
+"reports are necessary."
+msgstr ""
-#: app/post/routes.py:822
+#: app/post/routes.py:1043
+#, fuzzy
+msgid "Post has already been reported, thank you!"
+msgstr "Der Beitrag wurde gemeldet, danke!"
+
+#: app/post/routes.py:1091
msgid "Post has been reported, thank you!"
msgstr "Der Beitrag wurde gemeldet, danke!"
-#: app/post/routes.py:827
+#: app/post/routes.py:1096
msgid "Report post"
msgstr "Beitrag melden"
-#: app/post/routes.py:841 app/post/routes.py:946
+#: app/post/routes.py:1110 app/post/routes.py:1246
#, python-format
msgid "%(name)s has been blocked."
msgstr "%(name)s wurde blockiert."
-#: app/post/routes.py:857
+#: app/post/routes.py:1126
#, python-format
msgid "Posts linking to %(name)s will be hidden."
msgstr "Beiträge, die zu %(name)s verlinken, werden ausgeblendet."
-#: app/post/routes.py:908
-msgid "A comment has been reported"
-msgstr "Ein Kommentar wurde gemeldet"
+#: app/post/routes.py:1170
+msgid ""
+"Moderators have already assessed reports regarding this comment, no "
+"further reports are necessary."
+msgstr ""
-#: app/post/routes.py:926
+#: app/post/routes.py:1175
+#, fuzzy
+msgid "Comment has already been reported, thank you!"
+msgstr "Kommentar wurde gemeldet, danke!"
+
+#: app/post/routes.py:1226
msgid "Comment has been reported, thank you!"
msgstr "Kommentar wurde gemeldet, danke!"
-#: app/post/routes.py:931
+#: app/post/routes.py:1231
msgid "Report comment"
msgstr "Kommentar melden"
-#: app/post/routes.py:1062
+#: app/post/routes.py:1389
msgid "Edit comment"
msgstr "Kommentar bearbeiten"
-#: app/post/routes.py:1086
+#: app/post/routes.py:1413
msgid "Comment deleted."
msgstr "Kommentar gelöscht."
-#: app/search/routes.py:45
+#: app/search/routes.py:49
#, python-format
msgid "Search results for %(q)s"
msgstr "Suchergebnisse für %(q)s"
@@ -1186,92 +1309,92 @@ msgstr "Aktiv"
msgid "Rational Discourse Toolkit"
msgstr "Werkzeuge für rationalen Diskurs"
-#: app/templates/base.html:52
+#: app/templates/about.html:10 app/templates/donate.html:26
+#: app/templates/index.html:67 app/templates/keyboard_shortcuts.html:63
+#: app/templates/search/results.html:65
+#, python-format
+msgid "About %(site_name)s"
+msgstr "Ãœber %(site_name)s"
+
+#: app/templates/base.html:55
msgid "PieFed"
msgstr "PieFed"
-#: app/templates/base.html:110 app/templates/base.html:184
-#: app/templates/user/notifications.html:18 app/user/routes.py:521
+#: app/templates/base.html:113 app/templates/base.html:189
+#: app/templates/user/notifications.html:18 app/user/routes.py:537
msgid "Notifications"
msgstr "Benachrichtigungen"
-#: app/templates/base.html:130 app/templates/base.html:148
+#: app/templates/base.html:133 app/templates/base.html:151
msgid "Popular"
msgstr "Beliebt"
-#: app/templates/base.html:131 app/templates/base.html:149
+#: app/templates/base.html:134 app/templates/base.html:152
msgid "All posts"
msgstr "Alle Beiträge"
-#: app/templates/base.html:137 app/templates/base.html:155
+#: app/templates/base.html:140 app/templates/base.html:158
#: app/templates/list_communities.html:13
msgid "All communities"
msgstr "Alle Communities"
-#: app/templates/auth/login.html:9 app/templates/base.html:140
+#: app/templates/auth/login.html:9 app/templates/base.html:143
msgid "Log in"
msgstr "Anmelden"
-#: app/templates/base.html:142 app/templates/base.html:178
+#: app/templates/base.html:145 app/templates/base.html:183
#: app/templates/donate.html:10
msgid "Donate"
msgstr "Spenden"
-#: app/templates/base.html:157
+#: app/templates/base.html:161
msgid "Moderating"
msgstr "Moderieren"
-#: app/templates/base.html:171
+#: app/templates/base.html:176
msgid "Account"
msgstr "Konto"
-#: app/templates/base.html:173
+#: app/templates/base.html:178
msgid "View profile"
msgstr "Profil anzeigen"
-#: app/templates/base.html:174
+#: app/templates/base.html:179
msgid "Edit profile & settings"
msgstr "Profil & Einstellungen bearbeiten"
-#: app/templates/base.html:175
+#: app/templates/base.html:180
msgid "Chats"
msgstr "Chatten"
-#: app/templates/base.html:182
+#: app/templates/base.html:187
msgid "Log out"
msgstr "Abmelden"
-#: app/templates/base.html:184
+#: app/templates/base.html:189
#, python-format
msgid "%(num)d unread notifications"
msgstr "%(num)d ungelesene Benachrichtigungen"
-#: app/templates/base.html:194
+#: app/templates/base.html:199
msgid "Light mode"
msgstr "Tagmodus"
-#: app/templates/base.html:195
+#: app/templates/base.html:200
msgid "Dark mode"
msgstr "Nachtmodus"
-#: app/templates/base.html:223 app/templates/keyboard_shortcuts.html:10
+#: app/templates/base.html:228 app/templates/keyboard_shortcuts.html:10
msgid "Keyboard shortcuts"
msgstr "Tastaturkürzel"
-#: app/templates/donate.html:26 app/templates/index.html:65
-#: app/templates/keyboard_shortcuts.html:63
-#: app/templates/search/results.html:63
-#, python-format
-msgid "About %(site_name)s"
-msgstr "Ãœber %(site_name)s"
-
#: app/templates/index.html:17
msgid "No posts yet. Join some communities to see more."
msgstr "Noch keine Beiträge. Tritt einigen Communities bei, um mehr zu sehen."
#: app/templates/community/community.html:168 app/templates/index.html:18
-#: app/templates/index.html:59 app/templates/list_topics.html:26
-#: app/templates/post/post.html:217 app/templates/search/results.html:57
+#: app/templates/index.html:59 app/templates/list_topics.html:38
+#: app/templates/post/post.html:220 app/templates/search/results.html:57
#: app/templates/topic/show_topic.html:91
msgid "Explore communities"
msgstr "Communities erkunden"
@@ -1280,11 +1403,13 @@ msgstr "Communities erkunden"
#: app/templates/admin/communities.html:51 app/templates/admin/posts.html:26
#: app/templates/admin/reports.html:58 app/templates/admin/users.html:69
#: app/templates/community/community.html:92
+#: app/templates/community/community_moderate.html:80
+#: app/templates/community/community_moderate_subscribers.html:67
#: app/templates/domain/domain.html:30 app/templates/domain/domains.html:51
#: app/templates/domain/domains_blocked.html:59 app/templates/index.html:25
#: app/templates/search/results.html:23 app/templates/topic/show_topic.html:52
-#: app/templates/user/show_profile.html:72
-#: app/templates/user/show_profile.html:95
+#: app/templates/user/show_profile.html:75
+#: app/templates/user/show_profile.html:98
msgid "Previous page"
msgstr "Vorherige Seite"
@@ -1292,11 +1417,13 @@ msgstr "Vorherige Seite"
#: app/templates/admin/communities.html:56 app/templates/admin/posts.html:31
#: app/templates/admin/reports.html:63 app/templates/admin/users.html:74
#: app/templates/community/community.html:97
+#: app/templates/community/community_moderate.html:85
+#: app/templates/community/community_moderate_subscribers.html:72
#: app/templates/domain/domain.html:35 app/templates/domain/domains.html:56
#: app/templates/domain/domains_blocked.html:64 app/templates/index.html:30
#: app/templates/search/results.html:28 app/templates/topic/show_topic.html:57
-#: app/templates/user/show_profile.html:77
-#: app/templates/user/show_profile.html:100
+#: app/templates/user/show_profile.html:80
+#: app/templates/user/show_profile.html:103
msgid "Next page"
msgstr "Nächste Seite"
@@ -1304,6 +1431,12 @@ msgstr "Nächste Seite"
msgid "Active communities"
msgstr "Aktive Communities"
+#: app/templates/index.html:60 app/templates/list_communities.html:108
+#: app/templates/search/results.html:58
+#, fuzzy
+msgid "Browse topics"
+msgstr "Nach Thema suchen"
+
#: app/templates/keyboard_shortcuts.html:11
msgid "Most shortcuts are the same as what reddit has."
msgstr "Die meisten Tastaturkürzel sind die gleichen wie bei reddit."
@@ -1312,7 +1445,7 @@ msgstr "Die meisten Tastaturkürzel sind die gleichen wie bei reddit."
msgid "Navigation"
msgstr "Navigation"
-#: app/templates/community/community_mod_list.html:31
+#: app/templates/community/community_mod_list.html:33
#: app/templates/keyboard_shortcuts.html:43 app/templates/user/filters.html:31
msgid "Action"
msgstr "Aktion"
@@ -1326,8 +1459,15 @@ msgid "Downvote"
msgstr "Negativ bewerten"
#: app/templates/keyboard_shortcuts.html:55
-msgid "When viewing a list of posts actions like voting or going to a post depend on which is the current post. The current post is determined by hovering with the mouse or the J and K keys."
-msgstr "Wenn du eine Liste von Beiträgen anschaust, hängen Aktionen wie \"Bewertung\" oder \"gehen zu einem Beitrag\" davon ab, welches ist der aktuelle Beitrag ist. Der aktuelle Beitrag wird durch die Maus oder die J- und K-Taste bestimmt."
+msgid ""
+"When viewing a list of posts actions like voting or going to a post "
+"depend on which is the current post. The current post is determined by "
+"hovering with the mouse or the J and K keys."
+msgstr ""
+"Wenn du eine Liste von Beiträgen anschaust, hängen Aktionen wie "
+"\"Bewertung\" oder \"gehen zu einem Beitrag\" davon ab, welches ist der "
+"aktuelle Beitrag ist. Der aktuelle Beitrag wird durch die Maus oder die "
+"J- und K-Taste bestimmt."
#: app/templates/list_communities.html:14
msgid "All"
@@ -1383,7 +1523,7 @@ msgid "Sort by reply count"
msgstr "Nach Antwortanzahl sortieren"
#: app/templates/list_communities.html:66 app/templates/post/post.html:61
-#: app/templates/post/post.html:155
+#: app/templates/post/post.html:158
msgid "Comments"
msgstr "Kommentare"
@@ -1398,9 +1538,10 @@ msgstr "%(name)s verlassen"
#: app/templates/community/add_remote.html:32
#: app/templates/community/community.html:112
+#: app/templates/community/lookup_remote.html:21
#: app/templates/list_communities.html:82 app/templates/post/add_reply.html:48
-#: app/templates/post/continue_discussion.html:96
-#: app/templates/post/post.html:174
+#: app/templates/post/continue_discussion.html:99
+#: app/templates/post/post.html:177
msgid "Leave"
msgstr "Verlassen"
@@ -1417,10 +1558,11 @@ msgstr "%(name)s beitreten"
#: app/templates/community/add_remote.html:34
#: app/templates/community/community.html:116
+#: app/templates/community/lookup_remote.html:23
#: app/templates/list_communities.html:86
#: app/templates/list_communities.html:89 app/templates/post/add_reply.html:50
-#: app/templates/post/continue_discussion.html:98
-#: app/templates/post/post.html:176
+#: app/templates/post/continue_discussion.html:101
+#: app/templates/post/post.html:179
msgid "Join"
msgstr "Beitreten"
@@ -1429,11 +1571,11 @@ msgstr "Beitreten"
msgid "Browse %(name)s"
msgstr "%(name)s durchsuchen"
-#: app/templates/list_communities.html:106 app/templates/list_topics.html:24
+#: app/templates/list_communities.html:106 app/templates/list_topics.html:36
msgid "There are no communities yet."
msgstr "Es gibt noch keine Gemeinschaften."
-#: app/templates/list_topics.html:11
+#: app/templates/list_topics.html:25
msgid "Choose a topic"
msgstr "Thema auswählen"
@@ -1457,7 +1599,9 @@ msgstr "Beobachten"
msgid "Registration applications"
msgstr "Bewerbungen"
-#: app/templates/admin/_nav.html:13
+#: app/templates/admin/_nav.html:13 app/templates/community/community.html:181
+#: app/templates/community/community_moderate.html:15
+#: app/templates/community/community_moderate_subscribers.html:15
msgid "Moderation"
msgstr "Moderation"
@@ -1493,7 +1637,7 @@ msgstr "Ansicht"
#: app/templates/admin/approve_registrations.html:45
#: app/templates/post/post_options.html:20
#: app/templates/post/post_reply_options.html:20
-#: app/templates/user/show_profile.html:176
+#: app/templates/user/show_profile.html:179
msgid "Delete"
msgstr "Löschen"
@@ -1529,8 +1673,12 @@ msgid "Add local user"
msgstr "Lokalen Benutzer hinzufügen"
#: app/templates/auth/check_email.html:9
-msgid "We sent you an email containing a link that you need to click to enable your account."
-msgstr "Wir haben dir eine E-Mail mit einem Link geschickt, auf den du klicken musst, um dein Konto zu aktivieren."
+msgid ""
+"We sent you an email containing a link that you need to click to enable "
+"your account."
+msgstr ""
+"Wir haben dir eine E-Mail mit einem Link geschickt, auf den du klicken "
+"musst, um dein Konto zu aktivieren."
#: app/templates/auth/login.html:14
msgid "New User?"
@@ -1562,8 +1710,12 @@ msgid "Thanks for registering"
msgstr "Vielen Dank für deine Registrierung"
#: app/templates/auth/please_wait.html:9
-msgid "We are reviewing your application and will email you once it has been accepted."
-msgstr "Wir prüfen deine Bewerbung und werden dir eine E-Mail schicken, sobald sie angenommen wurde."
+msgid ""
+"We are reviewing your application and will email you once it has been "
+"accepted."
+msgstr ""
+"Wir prüfen deine Bewerbung und werden dir eine E-Mail schicken, sobald "
+"sie angenommen wurde."
#: app/templates/auth/register.html:19
msgid "Create new account"
@@ -1571,7 +1723,9 @@ msgstr "Neues Konto erstellen"
#: app/templates/auth/register.html:22
msgid "Registration is closed. Only admins can create accounts."
-msgstr "Die Registrierung ist geschlossen. Nur Administratoren können Konten erstellen."
+msgstr ""
+"Die Registrierung ist geschlossen. Nur Administratoren können Konten "
+"erstellen."
#: app/templates/auth/reset_password.html:13
#: app/templates/auth/reset_password_request.html:13
@@ -1583,8 +1737,14 @@ msgid "Please check your email inbox"
msgstr "Bitte überprüfen deinen E-Mail Posteingang"
#: app/templates/auth/validation_required.html:12
-msgid "To keep spam and bots to a managable level, we send every new account an email with a link in it that needs to be clicked to fully enable the account."
-msgstr "Um Spam und Bots auf einem verwaltbaren Level zu halten, schicken wir jedem neuen Konto eine E-Mail mit einem Link, der angeklickt werden muss, um das Konto vollständig zu aktivieren."
+msgid ""
+"To keep spam and bots to a managable level, we send every new account an "
+"email with a link in it that needs to be clicked to fully enable the "
+"account."
+msgstr ""
+"Um Spam und Bots auf einem verwaltbaren Level zu halten, schicken wir "
+"jedem neuen Konto eine E-Mail mit einem Link, der angeklickt werden muss,"
+" um das Konto vollständig zu aktivieren."
#: app/templates/chat/blocked.html:15
msgid "You have blocked this person or they have blocked you."
@@ -1616,8 +1776,12 @@ msgid "Report to moderators"
msgstr "An Moderatoren melden"
#: app/templates/chat/chat_options.html:31
-msgid "If you are reporting abuse then do not delete the conversation - moderators will not be able to read it if you delete it."
-msgstr "Wenn du Missbrauch meldest, lösche die Unterhaltung nicht - Moderatoren können sie nicht lesen, wenn du sie löschst."
+msgid ""
+"If you are reporting abuse then do not delete the conversation - "
+"moderators will not be able to read it if you delete it."
+msgstr ""
+"Wenn du Missbrauch meldest, lösche die Unterhaltung nicht - Moderatoren "
+"können sie nicht lesen, wenn du sie löschst."
#: app/templates/chat/conversation.html:37
msgid "Chat"
@@ -1626,7 +1790,7 @@ msgstr "Chatten"
#: app/templates/chat/conversation.html:42 app/templates/user/filters.html:56
#: app/templates/user/notifications.html:14 app/templates/user/people.html:14
#: app/templates/user/people.html:17 app/templates/user/show_profile.html:19
-#: app/templates/user/show_profile.html:39 app/user/routes.py:34
+#: app/templates/user/show_profile.html:39 app/user/routes.py:35
msgid "People"
msgstr "Leute"
@@ -1640,41 +1804,83 @@ msgid "Messages with: "
msgstr "Nachrichten mit: "
#: app/templates/chat/conversation.html:75
-#: app/templates/post/_post_teaser.html:80
+#: app/templates/post/_post_teaser.html:75
msgid "Options"
msgstr "Optionen"
#: app/templates/chat/denied.html:16
-msgid "You have not been using PieFed long enough to be allowed to send messages to people."
-msgstr "Du hast PieFed nicht lange genug benutzt, um Nachrichten an andere verschicken zu können."
+msgid ""
+"You have not been using PieFed long enough to be allowed to send messages"
+" to people."
+msgstr ""
+"Du hast PieFed nicht lange genug benutzt, um Nachrichten an andere "
+"verschicken zu können."
#: app/templates/chat/empty.html:13
msgid "No chats"
msgstr "Keine Chats"
#: app/templates/chat/empty.html:15
-msgid "There are no chats involving you, yet. Start a conversation using the \"Send message\" button on someone's profile."
-msgstr "Es gibt noch keine Chats, in die du involviert bist. Starte eine Unterhaltung mit dem \"Nachricht senden\"-Button auf dem Profil von jemandem."
+msgid ""
+"There are no chats involving you, yet. Start a conversation using the "
+"\"Send message\" button on someone's profile."
+msgstr ""
+"Es gibt noch keine Chats, in die du involviert bist. Starte eine "
+"Unterhaltung mit dem \"Nachricht senden\"-Button auf dem Profil von "
+"jemandem."
#: app/templates/chat/report.html:14
#, python-format
msgid "Report conversation with \"%(member_names)s\""
msgstr "Unterhaltung mit \"%(member_names)s \" melden"
-#: app/templates/community/_community_nav.html:3
-#: app/templates/community/add_post.html:11
-#: app/templates/community/community.html:108
-#: app/templates/post/add_reply.html:54
-#: app/templates/post/continue_discussion.html:102
-#: app/templates/post/post.html:170 app/templates/post/post_reply_edit.html:50
-#: app/templates/topic/show_topic.html:68
-msgid "Create post"
-msgstr "Beitrag erstellen"
+#: app/templates/community/_community_moderation_nav.html:4
+#: app/templates/community/community_edit.html:15
+#: app/templates/community/community_mod_list.html:15
+#: app/templates/post/add_reply.html:89
+#: app/templates/post/continue_discussion.html:140
+#: app/templates/post/post.html:234 app/templates/post/post_reply_edit.html:85
+#: app/templates/user/_user_nav.html:5 app/templates/user/notifications.html:57
+#: app/templates/user/show_profile.html:124
+msgid "Settings"
+msgstr "Einstellungen"
+#: app/templates/community/_community_moderation_nav.html:7
+#: app/templates/community/community_mod_list.html:16
+msgid "Moderators"
+msgstr "Moderatoren"
+
+#: app/templates/community/_community_moderation_nav.html:10
#: app/templates/community/_community_nav.html:7
msgid "Sort by hot"
msgstr "Nach Angesagt sortieren"
+#: app/templates/community/_community_moderation_nav.html:14
+#: app/templates/community/community_moderate_subscribers.html:21
+#, fuzzy
+msgid "Subscribers"
+msgstr "Abonnieren"
+
+#: app/templates/community/_community_moderation_nav.html:17
+msgid "Appeals"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:20
+msgid "Mod log"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:3
+#: app/templates/community/add_discussion_post.html:11
+#: app/templates/community/add_image_post.html:11
+#: app/templates/community/add_link_post.html:11
+#: app/templates/community/community.html:108
+#: app/templates/post/add_reply.html:54
+#: app/templates/post/continue_discussion.html:105
+#: app/templates/post/post.html:173 app/templates/post/post_reply_edit.html:50
+#: app/templates/topic/show_topic.html:68
+msgid "Create post"
+msgstr "Beitrag erstellen"
+
#: app/templates/community/_community_nav.html:10
msgid "Sort by top"
msgstr "Nach Top sortieren"
@@ -1697,27 +1903,98 @@ msgstr "Breite Kachel"
#: app/templates/community/_notification_toggle.html:5
msgid "Notify about every new post. Not advisable in high traffic communities!"
-msgstr "Benachrichtigung über jeden neuen Beitrag erhalten. Nicht ratsam in stark frequentierten Communities!"
+msgstr ""
+"Benachrichtigung über jeden neuen Beitrag erhalten. Nicht ratsam in stark"
+" frequentierten Communities!"
+
+#: app/templates/community/add_discussion_post.html:16
+#: app/templates/community/add_image_post.html:16
+#: app/templates/community/add_link_post.html:16
+#, fuzzy
+msgid "Type of post"
+msgstr "Beitrag melden"
+
+#: app/templates/community/add_discussion_post.html:19
+#: app/templates/community/add_image_post.html:19
+#: app/templates/community/add_link_post.html:19
+msgid "Start a discussion"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:19
+#: app/templates/community/add_image_post.html:19
+#: app/templates/community/add_link_post.html:19
+#, fuzzy, python-format
+msgid "Discussion"
+msgstr "Diskussion %(title)s"
+
+#: app/templates/community/add_discussion_post.html:20
+#: app/templates/community/add_image_post.html:20
+#: app/templates/community/add_link_post.html:20
+msgid "Share a link"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:20
+#: app/templates/community/add_image_post.html:20
+#: app/templates/community/add_link_post.html:20
+#, fuzzy
+msgid "Link"
+msgstr "Anmelden"
+
+#: app/templates/community/add_discussion_post.html:21
+#: app/templates/community/add_image_post.html:21
+#: app/templates/community/add_link_post.html:21
+#, fuzzy
+msgid "Share an image"
+msgstr "Nachricht senden"
+
+#: app/templates/community/add_discussion_post.html:22
+#: app/templates/community/add_image_post.html:22
+#: app/templates/community/add_link_post.html:22
+#, fuzzy
+msgid "Create a poll"
+msgstr "Beitrag erstellen"
+
+#: app/templates/community/add_discussion_post.html:22
+#: app/templates/community/add_image_post.html:22
+#: app/templates/community/add_link_post.html:22
+#, fuzzy
+msgid "Poll"
+msgstr "Leute"
+
+#: app/templates/community/add_discussion_post.html:23
+#: app/templates/community/add_image_post.html:23
+#: app/templates/community/add_link_post.html:23
+#, fuzzy
+msgid "Create an event"
+msgstr "Neues Konto erstellen"
+
+#: app/templates/community/add_discussion_post.html:23
+#: app/templates/community/add_image_post.html:23
+#: app/templates/community/add_link_post.html:23
+#, fuzzy
+msgid "Event"
+msgstr "Verlassen"
+
+#: app/templates/community/add_discussion_post.html:43
+#: app/templates/community/add_image_post.html:45
+#: app/templates/community/add_link_post.html:44
+#: app/templates/post/add_reply.html:37 app/templates/post/post.html:42
+#: app/templates/user/edit_profile.html:44
+msgid "Enable markdown editor"
+msgstr "Markdown Editor aktivieren"
+
+#: app/templates/community/add_image_post.html:30
+#: app/templates/post/post_edit_image.html:17
+msgid "Describe the image, to help visually impaired people."
+msgstr "Beschreibe das Bild, um sehbehinderten Menschen zu helfen."
#: app/templates/community/add_local.html:31
#, python-format
msgid "Only people using %(name)s can post or reply"
msgstr "Nur Personen, die %(name)s verwenden, können posten oder antworten"
-#: app/templates/community/add_post.html:44
-#: app/templates/community/add_post.html:65
-#: app/templates/community/add_post.html:88
-#: app/templates/post/add_reply.html:37 app/templates/post/post.html:42
-#: app/templates/user/edit_profile.html:44
-msgid "Enable markdown editor"
-msgstr "Markdown Editor aktivieren"
-
-#: app/templates/community/add_post.html:73
-#: app/templates/post/post_edit.html:98
-msgid "Describe the image, to help visually impaired people."
-msgstr "Beschreibe das Bild, um sehbehinderten Menschen zu helfen."
-
#: app/templates/community/add_remote.html:25
+#: app/templates/community/lookup_remote.html:14
msgid "Found a community:"
msgstr "Community gefunden:"
@@ -1742,56 +2019,45 @@ msgstr "Noch keine Beiträge in dieser Community."
#: app/templates/community/community.html:121
#: app/templates/post/add_reply.html:58
-#: app/templates/post/continue_discussion.html:106
-#: app/templates/post/post.html:181 app/templates/post/post_reply_edit.html:54
+#: app/templates/post/continue_discussion.html:109
+#: app/templates/post/post.html:184 app/templates/post/post_reply_edit.html:54
msgid "Search this community"
msgstr "Diese Community durchsuchen"
#: app/templates/community/community.html:127
#: app/templates/post/add_reply.html:64
-#: app/templates/post/continue_discussion.html:112
-#: app/templates/post/post.html:187 app/templates/post/post_reply_edit.html:60
+#: app/templates/post/continue_discussion.html:115
+#: app/templates/post/post.html:190 app/templates/post/post_reply_edit.html:60
msgid "About community"
msgstr "Ãœber diese Community"
#: app/templates/community/community.html:146
#, python-format
msgid "Only people on %(instance_name)s can post or reply in this community."
-msgstr "Nur Personen auf %(instance_name)s können in dieser Community posten oder antworten."
+msgstr ""
+"Nur Personen auf %(instance_name)s können in dieser Community posten oder"
+" antworten."
-#: app/templates/community/community.html:156 app/templates/post/post.html:205
+#: app/templates/community/community.html:156 app/templates/post/post.html:208
msgid "Related communities"
msgstr "Verwandte Communities"
-#: app/templates/community/community.html:162 app/templates/post/post.html:211
+#: app/templates/community/community.html:162 app/templates/post/post.html:214
#: app/templates/topic/show_topic.html:85
msgid "Go to community"
msgstr "Gehe zur Community"
#: app/templates/community/community.html:175
#: app/templates/post/add_reply.html:82
-#: app/templates/post/continue_discussion.html:130
-#: app/templates/post/post.html:224 app/templates/post/post_reply_edit.html:78
+#: app/templates/post/continue_discussion.html:133
+#: app/templates/post/post.html:227 app/templates/post/post_reply_edit.html:78
msgid "Community Settings"
msgstr "Community-Einstellungen"
-#: app/templates/community/community.html:178
-#: app/templates/post/add_reply.html:85
-#: app/templates/post/continue_discussion.html:133
-#: app/templates/post/post.html:227 app/templates/post/post_reply_edit.html:81
-msgid "Moderate"
-msgstr "Moderieren"
-
-#: app/templates/community/community.html:180
-#: app/templates/community/community_edit.html:15
-#: app/templates/community/community_mod_list.html:15
-#: app/templates/post/add_reply.html:86
-#: app/templates/post/continue_discussion.html:134
-#: app/templates/post/post.html:228 app/templates/post/post_reply_edit.html:82
-#: app/templates/user/_user_nav.html:5 app/templates/user/notifications.html:57
-#: app/templates/user/show_profile.html:121
-msgid "Settings"
-msgstr "Einstellungen"
+#: app/templates/community/community.html:179
+#, fuzzy
+msgid "Settings & Moderation"
+msgstr "Moderation"
#: app/templates/community/community_ban_user.html:13
#, python-format
@@ -1803,19 +2069,96 @@ msgstr "Banne \"%(user_name)s\" von %(community_name)s"
msgid "Delete \"%(community_title)s\""
msgstr "Lösche \"%(community_title)s\""
-#: app/templates/community/community_edit.html:51
-#: app/templates/community/community_mod_list.html:16
-msgid "Moderators"
-msgstr "Moderatoren"
+#: app/templates/community/community_edit.html:23
+#, fuzzy, python-format
+msgid "Edit %(community)s"
+msgstr "%(community_name)s bearbeiten"
+
+#: app/templates/community/community_edit.html:28
+#, fuzzy
+msgid "Edit and configure this community"
+msgstr "Diese Community durchsuchen"
#: app/templates/community/community_mod_list.html:24
+#, fuzzy
+msgid "See and change who moderates this community"
+msgstr "Diese Community durchsuchen"
+
+#: app/templates/community/community_mod_list.html:26
+#: app/templates/community/community_moderate.html:24
+#: app/templates/community/community_moderate_subscribers.html:24
msgid "Add moderator"
msgstr "Moderator hinzufügen"
-#: app/templates/community/community_mod_list.html:41
+#: app/templates/community/community_mod_list.html:43
msgid "Remove"
msgstr "Entfernen"
+#: app/templates/community/community_moderate.html:27
+#, python-format
+msgid "See and handle all reports made about %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:67
+msgid "Escalate"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:68
+#, fuzzy
+msgid "Resolve"
+msgstr "Entfernen"
+
+#: app/templates/community/community_moderate.html:70
+#, fuzzy
+msgid "Ignore"
+msgstr "Keine"
+
+#: app/templates/community/community_moderate.html:90
+#, fuzzy
+msgid "No reports yet"
+msgstr "Noch keine Beiträge."
+
+#: app/templates/community/community_moderate_report_escalate.html:13
+msgid "Escalate report to admins"
+msgstr ""
+
+#: app/templates/community/community_moderate_report_escalate.html:14
+msgid ""
+"For reports that could potentially involve legal issues or where you are "
+"unsure how to respond, you may prefer to let admins handle it."
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:27
+#, python-format
+msgid "See who is subscribed to %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:77
+msgid "This community has no subscribers"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:79
+#, fuzzy
+msgid "Banned People"
+msgstr "Keine blockierten Personen"
+
+#: app/templates/community/community_moderate_subscribers.html:80
+#, python-format
+msgid "See and manage who is banned from %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:116
+#: app/templates/domain/domain.html:61
+#: app/templates/domain/domains_blocked.html:46
+#: app/templates/user/show_profile.html:169
+msgid "Unban"
+msgstr "Entbannen"
+
+#: app/templates/community/community_moderate_subscribers.html:125
+#, fuzzy
+msgid "No banned people yet"
+msgstr "Keine blockierten Personen"
+
#: app/templates/domain/domain.html:14 app/templates/domain/domains.html:12
#: app/templates/domain/domains.html:21
#: app/templates/domain/domains_blocked.html:21
@@ -1843,12 +2186,6 @@ msgstr "Entsperren"
msgid "Block"
msgstr "Blockieren"
-#: app/templates/domain/domain.html:61
-#: app/templates/domain/domains_blocked.html:46
-#: app/templates/user/show_profile.html:166
-msgid "Unban"
-msgstr "Entbannen"
-
#: app/templates/domain/domain.html:65
msgid "Ban instance-wide"
msgstr "Auf ganzer Instanz bannen"
@@ -1878,11 +2215,18 @@ msgstr "Blockierte Domains mit \"%(search)s\""
#: app/templates/domain/domains_blocked.html:46
msgid "Unbanning this domain allows future posts linking to that domain."
-msgstr "Das Entsperren dieser Domain erlaubt zukünftige Beiträge, die auf diese Domain verlinken."
+msgstr ""
+"Das Entsperren dieser Domain erlaubt zukünftige Beiträge, die auf diese "
+"Domain verlinken."
#: app/templates/domain/domains_blocked.html:48
-msgid "Banning this domain will delete all posts linking to this domain and prevent future posts linking to that domain."
-msgstr "Das Sperren dieser Domain löscht alle Beiträge, die auf diese Domain verlinkt werden und verhindert zukünftige Beiträge, die auf diese Domain verlinken."
+msgid ""
+"Banning this domain will delete all posts linking to this domain and "
+"prevent future posts linking to that domain."
+msgstr ""
+"Das Sperren dieser Domain löscht alle Beiträge, die auf diese Domain "
+"verlinkt werden und verhindert zukünftige Beiträge, die auf diese Domain "
+"verlinken."
#: app/templates/errors/404.html:12
msgid "Ooops, something is broken!"
@@ -1890,7 +2234,9 @@ msgstr "Hoppla, da ist was kaputt!"
#: app/templates/errors/404.html:15
msgid "The page your browser tried to load could not be found."
-msgstr "Die Seite, die Ihr Browser zu laden versucht hat, konnte nicht gefunden werden."
+msgstr ""
+"Die Seite, die Ihr Browser zu laden versucht hat, konnte nicht gefunden "
+"werden."
#: app/templates/errors/404.html:16 app/templates/errors/500.html:16
msgid "Back"
@@ -1901,8 +2247,12 @@ msgid "An unexpected error has occurred"
msgstr "Ein unerwarteter Fehler ist aufgetreten"
#: app/templates/errors/500.html:15
-msgid "Sorry for the inconvenience! Please let us know about this, so we can repair it and make PieFed better for everyone."
-msgstr "Entschuldige bitte die Unannehmlichkeiten! Bitte teile uns dies mit, damit wir es reparieren und PieFed für alle besser machen können."
+msgid ""
+"Sorry for the inconvenience! Please let us know about this, so we can "
+"repair it and make PieFed better for everyone."
+msgstr ""
+"Entschuldige bitte die Unannehmlichkeiten! Bitte teile uns dies mit, "
+"damit wir es reparieren und PieFed für alle besser machen können."
#: app/templates/post/_comment_voting_buttons.html:3
msgid "UpVote button."
@@ -1930,6 +2280,17 @@ msgstr "Potenziell emotional abschreckender Inhalt"
msgid "Reported. Check post for issues."
msgstr "Gemeldet. Prüfen Sie den Beitrag auf Probleme."
+#: app/templates/post/_post_full.html:109
+#: app/templates/post/_post_full.html:110
+#, fuzzy
+msgid "Show cross-posts"
+msgstr "NSFW-Beiträge anzeigen"
+
+#: app/templates/post/_post_full.html:111
+#, fuzzy
+msgid "Number of cross-posts:"
+msgstr "Anzahl der Kommentare:"
+
#: app/templates/post/_post_reply_teaser.html:3
msgid "View context"
msgstr "Kontext anzeigen"
@@ -1947,8 +2308,8 @@ msgstr "Artikel lesen"
#: app/templates/post/_post_teaser.html:20
#: app/templates/post/_post_teaser.html:30
-#: app/templates/post/_post_teaser.html:74
-#: app/templates/post/_post_teaser.html:76
+#: app/templates/post/_post_teaser.html:70
+#: app/templates/post/_post_teaser.html:72
#: app/templates/post/_post_teaser_masonry.html:16
#: app/templates/post/_post_teaser_masonry.html:20
#: app/templates/post/_post_teaser_masonry.html:23
@@ -1965,12 +2326,12 @@ msgstr "Beitrag lesen"
msgid "All posts about this domain"
msgstr "Alle Beiträge zu dieser Domain"
-#: app/templates/post/_post_teaser.html:63
+#: app/templates/post/_post_teaser.html:64
#, python-format
msgid "Go to community %(name)s"
msgstr "Gehe zur Community %(name)s"
-#: app/templates/post/_post_teaser.html:71
+#: app/templates/post/_post_teaser.html:67
#: app/templates/post/_post_teaser_masonry.html:47
#: app/templates/post/_post_teaser_masonry.html:48
#: app/templates/post/_post_teaser_masonry.html:68
@@ -1978,7 +2339,7 @@ msgstr "Gehe zur Community %(name)s"
msgid "View comments"
msgstr "Kommentare anzeigen"
-#: app/templates/post/_post_teaser.html:71
+#: app/templates/post/_post_teaser.html:67
msgid "Number of comments:"
msgstr "Anzahl der Kommentare:"
@@ -2001,17 +2362,36 @@ msgid "DownVote"
msgstr "Negativ bewerten"
#: app/templates/post/add_reply.html:21 app/templates/post/post.html:23
-msgid "This post is hosted on beehaw.org which has higher standards of behaviour than most places. Be nice."
-msgstr "Dieser Beitrag wird auf der beehaw.org gehostet, die einen höheren Verhaltensstandard hat als die meisten anderen Orte. Sei nett."
+msgid ""
+"This post is hosted on beehaw.org which has higher standards of behaviour than "
+"most places. Be nice."
+msgstr ""
+"Dieser Beitrag wird auf der beehaw.org gehostet, die einen höheren Verhaltensstandard hat als die"
+" meisten anderen Orte. Sei nett."
-#: app/templates/post/continue_discussion.html:44
-#: app/templates/post/post.html:105
+#: app/templates/post/add_reply.html:86
+#: app/templates/post/continue_discussion.html:137
+#: app/templates/post/post.html:231 app/templates/post/post_reply_edit.html:82
+msgid "Moderate"
+msgstr "Moderieren"
+
+#: app/templates/post/continue_discussion.html:47
+#: app/templates/post/post.html:108
msgid "Reported. Check comment for issues."
msgstr "Gemeldet. Überprüfen Sie den Kommentar auf Probleme."
#: app/templates/post/post.html:26
-msgid "This post is hosted on lemmy.ml which will ban you for saying anything negative about China, Russia or Putin. Tread carefully."
-msgstr "Dieser Beitrag wird auf lemmy.ml gehostet, wo du möglicherweise gesperrt wirst, falls du etwas Negatives über China, Russland oder Putin sagst. Vorsicht ist geboten."
+msgid ""
+"This post is hosted on lemmy.ml which will ban you for saying anything "
+"negative about China, Russia or Putin. Tread carefully."
+msgstr ""
+"Dieser Beitrag wird auf lemmy.ml gehostet, wo du möglicherweise gesperrt "
+"wirst, falls du etwas Negatives über China, Russland oder Putin sagst. "
+"Vorsicht ist geboten."
#: app/templates/post/post.html:52
msgid "Verify your email address to comment"
@@ -2041,25 +2421,43 @@ msgstr "Zeige neueste zuerst"
msgid "Author"
msgstr "Autor"
-#: app/templates/post/post.html:101
+#: app/templates/post/post.html:104
msgid "Post creator"
msgstr "Beitrags-Ersteller"
-#: app/templates/post/post.html:102
+#: app/templates/post/post.html:105
msgid "When: "
msgstr "Wann: "
-#: app/templates/post/post.html:131
+#: app/templates/post/post.html:134
msgid "Comment options"
msgstr "Kommentaroptionen"
+#: app/templates/post/post_cross_posts.html:11
+#, fuzzy, python-format
+msgid "Cross-posts for \"%(post_title)s\""
+msgstr "Optionen für \"%(post_title)s\""
+
+#: app/templates/post/post_cross_posts.html:12
+msgid "Posts to the same url have also been created in the following communities:"
+msgstr ""
+
#: app/templates/post/post_mea_culpa.html:15
-msgid "If you wish to de-escalate the discussion on your post and now feel like it was a mistake, click the button below."
-msgstr "Wenn du die Diskussion über deinen Beitrag deeskalieren möchtest und denkst, dass es ein Fehler war, klicke auf den Button unten."
+msgid ""
+"If you wish to de-escalate the discussion on your post and now feel like "
+"it was a mistake, click the button below."
+msgstr ""
+"Wenn du die Diskussion über deinen Beitrag deeskalieren möchtest und "
+"denkst, dass es ein Fehler war, klicke auf den Button unten."
#: app/templates/post/post_mea_culpa.html:16
-msgid "No further comments will be posted and a message saying you made a mistake in this post will be displayed."
-msgstr "Es werden keine weiteren Kommentare veröffentlicht und eine Nachricht angezeigt, die besagt, dass Sie einen Fehler in diesem Beitrag gemacht haben."
+msgid ""
+"No further comments will be posted and a message saying you made a "
+"mistake in this post will be displayed."
+msgstr ""
+"Es werden keine weiteren Kommentare veröffentlicht und eine Nachricht "
+"angezeigt, die besagt, dass Sie einen Fehler in diesem Beitrag gemacht "
+"haben."
#: app/templates/post/post_mea_culpa.html:17
msgid "The effect of downvotes on your reputation score will be removed."
@@ -2077,7 +2475,9 @@ msgstr "Bearbeiten"
#: app/templates/post/post_options.html:24
msgid "I made a mistake with this post and have changed my mind about the topic"
-msgstr "Ich habe mit diesem Beitrag einen Fehler gemacht und meine Meinung zum Thema geändert"
+msgstr ""
+"Ich habe mit diesem Beitrag einen Fehler gemacht und meine Meinung zum "
+"Thema geändert"
#: app/templates/post/post_options.html:28
#, python-format
@@ -2107,8 +2507,14 @@ msgstr "Original auf %(domain)s ansehen"
#: app/templates/post/post_options.html:50
#: app/templates/post/post_reply_options.html:34
-msgid "If you want to perform more than one of these (e.g. block and report), hold down Ctrl and click, then complete the operation in the new tabs that open."
-msgstr "Wenn du mehr als eins von diesen ausführen willst (z.B. blockieren und melden), halte Strg gedrückt, klicke und schließe dann den Vorgang in den neu geöffneten Tabs ab."
+msgid ""
+"If you want to perform more than one of these (e.g. block and report), "
+"hold down Ctrl and click, then complete the operation in the new tabs "
+"that open."
+msgstr ""
+"Wenn du mehr als eins von diesen ausführen willst (z.B. blockieren und "
+"melden), halte Strg gedrückt, klicke und schließe dann den Vorgang in den"
+" neu geöffneten Tabs ab."
#: app/templates/post/post_reply_edit.html:44
msgid "Unsubscribe"
@@ -2159,24 +2565,36 @@ msgid "star wars"
msgstr "star wars"
#: app/templates/search/start.html:24
-msgid "There is an implied \"and\" here. Results will have both words somewhere in them."
-msgstr "Es gibt ein implizites \"und\" hier, Ergebnisse werden irgendwo beide Wörter enthalten."
+msgid ""
+"There is an implied \"and\" here. Results will have both words somewhere "
+"in them."
+msgstr ""
+"Es gibt ein implizites \"und\" hier, Ergebnisse werden irgendwo beide "
+"Wörter enthalten."
#: app/templates/search/start.html:27
msgid "star or wars"
msgstr "star oder wars"
#: app/templates/search/start.html:28
-msgid "This will broaden the search to include results that contain any of the words."
-msgstr "Dies wird die Suche auf Ergebnisse erweitern, die eines der Wörter enthalten."
+msgid ""
+"This will broaden the search to include results that contain any of the "
+"words."
+msgstr ""
+"Dies wird die Suche auf Ergebnisse erweitern, die eines der Wörter "
+"enthalten."
#: app/templates/search/start.html:31
msgid "star -wars"
msgstr "star -wars"
#: app/templates/search/start.html:32
-msgid "To search for things containing \"star\" but not \"wars\" you can put a - before the word you want to exclude."
-msgstr "Um nach Dingen zu suchen, die \"star\" aber nicht \"wars\" enthalten, kannst du ein - vor das Wort setzen, welches ausgeschlossen werden soll."
+msgid ""
+"To search for things containing \"star\" but not \"wars\" you can put a -"
+" before the word you want to exclude."
+msgstr ""
+"Um nach Dingen zu suchen, die \"star\" aber nicht \"wars\" enthalten, "
+"kannst du ein - vor das Wort setzen, welches ausgeschlossen werden soll."
#: app/templates/search/start.html:35
msgid "\"star wars\""
@@ -2214,7 +2632,7 @@ msgid "Post in %(name)s"
msgstr "Beitrag in %(name)s"
#: app/templates/user/_user_nav.html:8 app/templates/user/notifications.html:54
-#: app/templates/user/show_profile.html:118
+#: app/templates/user/show_profile.html:121
msgid "Profile"
msgstr "Profil"
@@ -2235,34 +2653,59 @@ msgstr "%(username)s löschen"
#: app/templates/user/delete_account.html:20
#, python-format
-msgid "You are about to permanently delete the account with the username \"%(username)s.\" This means your profile will disappear, pictures will be deleted. Text-based posts will stay but look like they are from someone named \"deleted.\""
-msgstr "Sie sind dabei, das Konto mit dem Benutzernamen \"%(username)sdauerhaft zu löschen. Das bedeutet, dass dein Profil verschwindet, Bilder werden gelöscht. Text-basierte Beiträge bleiben bestehen, aber so dargestellt, als seien sie von jemandem mit dem Namen \"gelöscht\""
+msgid ""
+"You are about to permanently delete the account with the username "
+"\"%(username)s.\" This means your profile will "
+"disappear, pictures will be deleted. Text-based posts will stay but look "
+"like they are from someone named \"deleted.\""
+msgstr ""
+"Sie sind dabei, das Konto mit dem Benutzernamen "
+"\"%(username)sdauerhaft zu löschen. Das bedeutet, dass "
+"dein Profil verschwindet, Bilder werden gelöscht. Text-basierte Beiträge "
+"bleiben bestehen, aber so dargestellt, als seien sie von jemandem mit dem"
+" Namen \"gelöscht\""
#: app/templates/user/delete_account.html:21
#, python-format
-msgid "Once you hit delete, nobody can use \"%(username)s\" as a username again. We are doing this so nobody pretends to be you."
-msgstr "Sobald du Löschen gedrückt hast, kann niemand wieder \"%(username)s\" als Benutzernamen verwenden. Wir tun dies, so dass niemand vorgeben kann, du zu sein."
+msgid ""
+"Once you hit delete, nobody can use \"%(username)s\" as a username again."
+" We are doing this so nobody pretends to be you."
+msgstr ""
+"Sobald du Löschen gedrückt hast, kann niemand wieder \"%(username)s\" als"
+" Benutzernamen verwenden. Wir tun dies, so dass niemand vorgeben kann, du"
+" zu sein."
#: app/templates/user/delete_account.html:22
-msgid "We will tell other websites (fediverse instances) that your account is gone. But it's up to them to decide what to do with any copies they have of your stuff. Some websites work differently than ours."
-msgstr "Wir werden anderen Websites (Fediverse Instanzen) mitteilen, dass dein Konto verschwunden ist. Aber es liegt an denen, zu entscheiden, wie sie mit den Kopien deiner Sachen umgehen. Einige Webseiten funktionieren anders als unsere."
+msgid ""
+"We will tell other websites (fediverse instances) that your account is "
+"gone. But it's up to them to decide what to do with any copies they have "
+"of your stuff. Some websites work differently than ours."
+msgstr ""
+"Wir werden anderen Websites (Fediverse Instanzen) mitteilen, dass dein "
+"Konto verschwunden ist. Aber es liegt an denen, zu entscheiden, wie sie "
+"mit den Kopien deiner Sachen umgehen. Einige Webseiten funktionieren "
+"anders als unsere."
#: app/templates/user/delete_account.html:23
-msgid "Remember, once you do this, there's no going back. Are you sure you want to continue?"
-msgstr "Denk daran, wenn du dies tust, gibt es kein Zurück mehr. Bist du sicher, dass du fortfahren möchtest?"
+msgid ""
+"Remember, once you do this, there's no going back. Are you sure you want "
+"to continue?"
+msgstr ""
+"Denk daran, wenn du dies tust, gibt es kein Zurück mehr. Bist du sicher, "
+"dass du fortfahren möchtest?"
#: app/templates/user/edit_filters.html:16 app/templates/user/filters.html:16
#: app/templates/user/filters.html:19
msgid "Filters"
msgstr "Filter"
-#: app/templates/user/edit_filters.html:18 app/user/routes.py:713
+#: app/templates/user/edit_filters.html:18 app/user/routes.py:729
msgid "Edit filter"
msgstr "Filter bearbeiten"
#: app/templates/user/edit_filters.html:20
#: app/templates/user/edit_filters.html:27 app/templates/user/filters.html:22
-#: app/user/routes.py:673
+#: app/user/routes.py:689
msgid "Add filter"
msgstr "Neuer Filter"
@@ -2283,8 +2726,8 @@ msgstr "Einer pro Zeile, Groß- oder Kleinschreibung spielt keine Rolle."
msgid "Stop applying this filter after this date. Optional."
msgstr "Diesen Filter nach diesem Datum nicht mehr anwenden. Optional."
-#: app/templates/user/edit_profile.html:16 app/user/routes.py:147
-#: app/user/routes.py:212
+#: app/templates/user/edit_profile.html:16 app/user/routes.py:153
+#: app/user/routes.py:218
msgid "Edit profile"
msgstr "Profil bearbeiten"
@@ -2303,8 +2746,12 @@ msgid "Unsubscribed"
msgstr "Abgemeldet"
#: app/templates/user/email_notifs_unsubscribed.html:10
-msgid "You have unsubscribed from emails about unread notifications. We might email you for other reasons, though."
-msgstr "Du hast dich von E-Mails über ungelesene Benachrichtigungen abgemeldet. Wir könnten dir jedoch aus anderen Gründen eine E-Mail senden."
+msgid ""
+"You have unsubscribed from emails about unread notifications. We might "
+"email you for other reasons, though."
+msgstr ""
+"Du hast dich von E-Mails über ungelesene Benachrichtigungen abgemeldet. "
+"Wir könnten dir jedoch aus anderen Gründen eine E-Mail senden."
#: app/templates/user/email_notifs_unsubscribed.html:11
#: app/templates/user/newsletter_unsubscribed.html:11
@@ -2312,8 +2759,13 @@ msgid "More email settings"
msgstr "Weitere E-Mail-Einstellungen"
#: app/templates/user/filters.html:25
-msgid "Filters can hide posts that contain keywords you specify, either by making them less noticeable or invisible."
-msgstr "Filter können Beiträge ausblenden, die von dir ausgewählte Stichwörter enthalten, entweder indem sie weniger auffällig oder ganz unsichtbar gemacht werden."
+msgid ""
+"Filters can hide posts that contain keywords you specify, either by "
+"making them less noticeable or invisible."
+msgstr ""
+"Filter können Beiträge ausblenden, die von dir ausgewählte Stichwörter "
+"enthalten, entweder indem sie weniger auffällig oder ganz unsichtbar "
+"gemacht werden."
#: app/templates/user/filters.html:30
msgid "Keywords"
@@ -2356,20 +2808,24 @@ msgid "No blocked instances"
msgstr "Keine blockierten Instanzen"
#: app/templates/user/newsletter_unsubscribed.html:10
-msgid "You have unsubscribed from the email newsletter. We might email you for other reasons, though."
-msgstr "Du hast den E-Mail-Newsletter abbestellt. Wir könnten dir aber aus anderen Gründen eine E-Mail senden."
+msgid ""
+"You have unsubscribed from the email newsletter. We might email you for "
+"other reasons, though."
+msgstr ""
+"Du hast den E-Mail-Newsletter abbestellt. Wir könnten dir aber aus "
+"anderen Gründen eine E-Mail senden."
#: app/templates/user/notifications.html:25
msgid "Mark all as read"
msgstr "Alle als gelesen markieren"
#: app/templates/user/notifications.html:49
-#: app/templates/user/show_profile.html:113
+#: app/templates/user/show_profile.html:116
msgid "Manage"
msgstr "Verwalten"
#: app/templates/user/notifications.html:95
-#: app/templates/user/show_profile.html:189
+#: app/templates/user/show_profile.html:192
msgid "Upvoted"
msgstr "Positiv bewertet"
@@ -2394,39 +2850,47 @@ msgstr "Nachricht mit Matrixchat senden"
msgid "Send message using Matrix"
msgstr "Nachricht mit Matrix senden"
-#: app/templates/user/show_profile.html:60
+#: app/templates/user/show_profile.html:61
+#, fuzzy
+msgid "Bot Account"
+msgstr "Konto"
+
+#: app/templates/user/show_profile.html:63
msgid "Attitude"
msgstr "Verhalten"
-#: app/templates/user/show_profile.html:60
+#: app/templates/user/show_profile.html:63
msgid "Ratio of upvotes cast to downvotes cast. Higher is more positive."
-msgstr "Verhältnis der positiven zu negativen Bewertungen. Höher bedeutet mehr positive Bewertungen."
+msgstr ""
+"Verhältnis der positiven zu negativen Bewertungen. Höher bedeutet mehr "
+"positive Bewertungen."
-#: app/templates/user/show_profile.html:69
+#: app/templates/user/show_profile.html:72
msgid "Post pagination"
msgstr "Beitrags-Seitennummerierung"
-#: app/templates/user/show_profile.html:82
+#: app/templates/user/show_profile.html:85
msgid "No posts yet."
msgstr "Noch keine Beiträge."
-#: app/templates/user/show_profile.html:92
+#: app/templates/user/show_profile.html:95
msgid "Comment pagination"
msgstr "Kommentar-Seitennummerierung"
-#: app/templates/user/show_profile.html:105
+#: app/templates/user/show_profile.html:108
msgid "No comments yet."
msgstr "Noch keine Kommentare."
-#: app/templates/user/show_profile.html:134
+#: app/templates/user/show_profile.html:137
msgid "Member of"
msgstr "Mitglied von"
-#: app/templates/user/show_profile.html:159
-msgid "Crush"
-msgstr "Zerkleinern"
+#: app/templates/user/show_profile.html:162
+#, fuzzy
+msgid "Moderate user"
+msgstr "Moderieren"
-#: app/templates/user/show_profile.html:179
+#: app/templates/user/show_profile.html:182
msgid "Ban + Purge"
msgstr "Bann + Bereinigen"
@@ -2443,13 +2907,21 @@ msgstr "Wähle einige Themen aus, an denen du interessiert bist"
msgid "Choose"
msgstr "Auswählen"
-#: app/topic/routes.py:168
-msgid "You have joined some communities relating to those interests. Find them on the Topics menu or browse the home page."
-msgstr "Du bist einigen Communities in Bezug auf diese Interessen beigetreten. Du findest sie im Themen-Menü oder durchstöbere die Startseite."
-
#: app/topic/routes.py:172
-msgid "You did not choose any topics. Would you like to choose individual communities instead?"
-msgstr "Du hast keine Themen ausgewählt. Möchtest du stattdessen einzelne Communities auswählen?"
+msgid ""
+"You have joined some communities relating to those interests. Find them "
+"on the Topics menu or browse the home page."
+msgstr ""
+"Du bist einigen Communities in Bezug auf diese Interessen beigetreten. Du"
+" findest sie im Themen-Menü oder durchstöbere die Startseite."
+
+#: app/topic/routes.py:176
+msgid ""
+"You did not choose any topics. Would you like to choose individual "
+"communities instead?"
+msgstr ""
+"Du hast keine Themen ausgewählt. Möchtest du stattdessen einzelne "
+"Communities auswählen?"
#: app/user/forms.py:13
msgid "Display name"
@@ -2479,10 +2951,18 @@ msgstr "E-Mail über verpasste Benachrichtigungen erhalten"
msgid "Use markdown editor GUI when writing"
msgstr "Benutze Markdown Editor GUI beim Schreiben"
+#: app/user/forms.py:40
+msgid "Show profile in user list"
+msgstr "Profil in der Benutzerliste anzeigen"
+
#: app/user/forms.py:41
msgid "My posts appear in search results"
msgstr "Meine Beiträge erscheinen in Suchergebnissen"
+#: app/user/forms.py:42
+msgid "Manually approve followers"
+msgstr "Follower manuell genehmigen"
+
#: app/user/forms.py:43
msgid "Import community subscriptions and user blocks from Lemmy"
msgstr "Community-Abonnements und Benutzerblockierungen von Lemmy importieren"
@@ -2539,69 +3019,102 @@ msgstr "Stichworte, die diesen Filter auslösen"
msgid "Expire after"
msgstr "Verfällt nach"
-#: app/user/routes.py:42
+#: app/user/routes.py:49
msgid "This user has been banned."
msgstr "Dieser Benutzer wurde gesperrt."
-#: app/user/routes.py:44
+#: app/user/routes.py:51
msgid "This user has been deleted."
msgstr "Dieser Benutzer wurde gelöscht."
-#: app/user/routes.py:77
+#: app/user/routes.py:83
#, python-format
msgid "Posts by %(user_name)s"
msgstr "Beiträge von %(user_name)s"
-#: app/user/routes.py:194
-msgid "Your subscriptions and blocks are being imported. If you have many it could take a few minutes."
-msgstr "Deine Abonnements und Blocks werden importiert. Wenn du viele hast, kann es ein paar Minuten dauern."
+#: app/user/routes.py:200
+msgid ""
+"Your subscriptions and blocks are being imported. If you have many it "
+"could take a few minutes."
+msgstr ""
+"Deine Abonnements und Blocks werden importiert. Wenn du viele hast, kann "
+"es ein paar Minuten dauern."
-#: app/user/routes.py:229
+#: app/user/routes.py:235
msgid "You cannot ban yourself."
msgstr "Du kannst dich nicht selbst bannen."
-#: app/user/routes.py:254
+#: app/user/routes.py:260
msgid "You cannot unban yourself."
msgstr "Du kannst dich nicht selbst entbannen."
-#: app/user/routes.py:278
+#: app/user/routes.py:284
msgid "You cannot block yourself."
msgstr "Du kannst dich nicht selbst blockieren."
-#: app/user/routes.py:307
+#: app/user/routes.py:313
msgid "You cannot unblock yourself."
msgstr "Du kannst dich nicht selbst entblocken."
-#: app/user/routes.py:352
+#: app/user/routes.py:340
+msgid ""
+"Moderators have already assessed reports regarding this person, no "
+"further reports are necessary."
+msgstr ""
+
+#: app/user/routes.py:346
+#, fuzzy, python-format
+msgid "%(user_name)s has already been reported, thank you!"
+msgstr "%(user_name)s wurde gemeldet, danke!"
+
+#: app/user/routes.py:368
#, python-format
msgid "%(user_name)s has been reported, thank you!"
msgstr "%(user_name)s wurde gemeldet, danke!"
-#: app/user/routes.py:358
+#: app/user/routes.py:374
msgid "Report user"
msgstr "Benutzer melden"
-#: app/user/routes.py:375
+#: app/user/routes.py:391
msgid "You cannot delete yourself."
msgstr "Du kannst dich nicht selbst löschen."
-#: app/user/routes.py:432
+#: app/user/routes.py:448
msgid "Account deletion in progress. Give it a few minutes."
msgstr "Account wird gelöscht. Es dauert ein paar Minuten."
-#: app/user/routes.py:437
+#: app/user/routes.py:453
msgid "Delete my account"
msgstr "Mein Konto löschen"
-#: app/user/routes.py:482
+#: app/user/routes.py:498
msgid "You cannot purge yourself."
msgstr "Du kannst dich nicht selbst bereinigen."
-#: app/user/routes.py:559
+#: app/user/routes.py:575
msgid "All notifications marked as read."
msgstr "Alle Benachrichtigungen als gelesen markiert."
-#: app/user/routes.py:730
+#: app/user/routes.py:746
msgid "Filter deleted."
msgstr "Filter gelöscht."
+#~ msgid "Allow search engines to index this profile"
+#~ msgstr "Suchmaschinen erlauben, dieses Profil zu indizieren"
+
+#~ msgid "Title is required."
+#~ msgstr "Titel ist erforderlich."
+
+#~ msgid "URL is required."
+#~ msgstr "URL ist erforderlich."
+
+#~ msgid "File is required."
+#~ msgstr "Datei ist erforderlich."
+
+#~ msgid "Poll not implemented yet."
+#~ msgstr "Umfrage noch nicht implementiert."
+
+#~ msgid "Crush"
+#~ msgstr "Zerkleinern"
+
diff --git a/app/translations/es/LC_MESSAGES/messages.po b/app/translations/es/LC_MESSAGES/messages.po
new file mode 100644
index 00000000..1915ad68
--- /dev/null
+++ b/app/translations/es/LC_MESSAGES/messages.po
@@ -0,0 +1,2962 @@
+# Spanish translations for PROJECT.
+# Copyright (C) 2024 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR , 2024.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2024-04-09 12:38+1200\n"
+"PO-Revision-Date: 2024-04-09 12:38+1200\n"
+"Last-Translator: FULL NAME \n"
+"Language: es\n"
+"Language-Team: es \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.12.1\n"
+
+#: app/__init__.py:33
+msgid "Please log in to access this page."
+msgstr ""
+
+#: app/cli.py:225 app/main/routes.py:328
+msgid "[PieFed] You have unread notifications"
+msgstr ""
+
+#: app/email.py:16
+msgid "[PieFed] Reset Your Password"
+msgstr ""
+
+#: app/email.py:26
+msgid "[PieFed] Please verify your email address"
+msgstr ""
+
+#: app/email.py:34
+msgid "Your application has been approved - welcome to PieFed"
+msgstr ""
+
+#: app/email.py:34
+msgid "Welcome to PieFed"
+msgstr ""
+
+#: app/activitypub/util.py:1280 app/post/routes.py:91 app/post/routes.py:509
+#, python-format
+msgid "Reply from %(name)s on %(post_title)s"
+msgstr ""
+
+#: app/activitypub/util.py:1679 app/post/routes.py:1053
+msgid "A post has been reported"
+msgstr ""
+
+#: app/activitypub/util.py:1700 app/post/routes.py:1187
+msgid "A comment has been reported"
+msgstr ""
+
+#: app/admin/forms.py:13 app/admin/forms.py:99 app/community/forms.py:18
+#: app/templates/community/community_mod_list.html:32
+#: app/templates/user/filters.html:29 app/templates/user/filters.html:70
+#: app/templates/user/filters.html:88 app/templates/user/filters.html:106
+#: app/templates/user/filters.html:124 app/user/forms.py:89
+msgid "Name"
+msgstr ""
+
+#: app/admin/forms.py:14
+msgid "Tagline"
+msgstr ""
+
+#: app/admin/forms.py:15
+msgid "Icon"
+msgstr ""
+
+#: app/admin/forms.py:18
+msgid "Sidebar"
+msgstr ""
+
+#: app/admin/forms.py:19
+msgid "Legal information"
+msgstr ""
+
+#: app/admin/forms.py:20 app/admin/forms.py:37 app/admin/forms.py:46
+#: app/admin/forms.py:83 app/admin/forms.py:102 app/admin/forms.py:128
+#: app/admin/forms.py:180 app/community/forms.py:56 app/community/forms.py:96
+#: app/community/forms.py:109 app/community/forms.py:129 app/user/forms.py:99
+msgid "Save"
+msgstr ""
+
+#: app/admin/forms.py:24
+msgid "Enable downvotes"
+msgstr ""
+
+#: app/admin/forms.py:25
+msgid "Allow local image posts"
+msgstr ""
+
+#: app/admin/forms.py:26
+msgid "Days to cache images from remote instances for"
+msgstr ""
+
+#: app/admin/forms.py:27
+msgid "Allow NSFW communities"
+msgstr ""
+
+#: app/admin/forms.py:28
+msgid "Allow NSFL communities and posts"
+msgstr ""
+
+#: app/admin/forms.py:29
+msgid "Only admins can create new local communities"
+msgstr ""
+
+#: app/admin/forms.py:30
+msgid "Notify admins about reports, not just moderators"
+msgstr ""
+
+#: app/admin/forms.py:31
+msgid "Open"
+msgstr ""
+
+#: app/admin/forms.py:31
+msgid "Require application"
+msgstr ""
+
+#: app/admin/forms.py:31
+msgid "Closed"
+msgstr ""
+
+#: app/admin/forms.py:32
+msgid "Registration mode"
+msgstr ""
+
+#: app/admin/forms.py:33
+msgid "Question to ask people applying for an account"
+msgstr ""
+
+#: app/admin/forms.py:34
+msgid "Block registrations from these referrers (one per line)"
+msgstr ""
+
+#: app/admin/forms.py:35
+msgid "Log ActivityPub JSON for debugging"
+msgstr ""
+
+#: app/admin/forms.py:36
+msgid "Default theme"
+msgstr ""
+
+#: app/admin/forms.py:41
+msgid "Allowlist instead of blocklist"
+msgstr ""
+
+#: app/admin/forms.py:42
+msgid "Allow federation with these instances"
+msgstr ""
+
+#: app/admin/forms.py:43
+msgid "Blocklist instead of allowlist"
+msgstr ""
+
+#: app/admin/forms.py:44
+msgid "Deny federation with these instances"
+msgstr ""
+
+#: app/admin/forms.py:45
+msgid "Discard all posts and comments with these phrases (one per line)"
+msgstr ""
+
+#: app/admin/forms.py:50 app/community/forms.py:42 app/community/forms.py:90
+#: app/community/forms.py:101 app/community/forms.py:121
+msgid "Title"
+msgstr ""
+
+#: app/admin/forms.py:51 app/admin/forms.py:100 app/community/forms.py:19
+msgid "Url"
+msgstr ""
+
+#: app/admin/forms.py:52 app/community/forms.py:20 app/community/forms.py:43
+msgid "Description"
+msgstr ""
+
+#: app/admin/forms.py:53 app/community/forms.py:21 app/community/forms.py:44
+msgid "Icon image"
+msgstr ""
+
+#: app/admin/forms.py:54 app/community/forms.py:22 app/community/forms.py:45
+msgid "Banner image"
+msgstr ""
+
+#: app/admin/forms.py:55 app/community/forms.py:23 app/community/forms.py:46
+msgid "Rules"
+msgstr ""
+
+#: app/admin/forms.py:56 app/community/forms.py:47
+msgid "Porn community"
+msgstr ""
+
+#: app/admin/forms.py:57
+msgid "Banned - no new posts accepted"
+msgstr ""
+
+#: app/admin/forms.py:58 app/community/forms.py:48
+msgid "Only accept posts from current instance"
+msgstr ""
+
+#: app/admin/forms.py:59 app/community/forms.py:49
+msgid "Only moderators can post"
+msgstr ""
+
+#: app/admin/forms.py:60 app/community/forms.py:50
+msgid "New moderators wanted"
+msgstr ""
+
+#: app/admin/forms.py:61
+msgid "Posts show on home page"
+msgstr ""
+
+#: app/admin/forms.py:62
+msgid "Posts can be popular"
+msgstr ""
+
+#: app/admin/forms.py:63
+msgid "Posts show in All list"
+msgstr ""
+
+#: app/admin/forms.py:64
+msgid "Low quality / toxic - upvotes in here don't add to reputation"
+msgstr ""
+
+#: app/admin/forms.py:65
+msgid "Forever"
+msgstr ""
+
+#: app/admin/forms.py:66
+msgid "1 week"
+msgstr ""
+
+#: app/admin/forms.py:67
+msgid "2 weeks"
+msgstr ""
+
+#: app/admin/forms.py:68
+msgid "1 month"
+msgstr ""
+
+#: app/admin/forms.py:69
+msgid "2 months"
+msgstr ""
+
+#: app/admin/forms.py:70
+msgid "3 months"
+msgstr ""
+
+#: app/admin/forms.py:71
+msgid "6 months"
+msgstr ""
+
+#: app/admin/forms.py:72
+msgid "1 year"
+msgstr ""
+
+#: app/admin/forms.py:73
+msgid "2 years"
+msgstr ""
+
+#: app/admin/forms.py:74
+msgid "5 years"
+msgstr ""
+
+#: app/admin/forms.py:75
+msgid "10 years"
+msgstr ""
+
+#: app/admin/forms.py:77
+msgid "Retain content"
+msgstr ""
+
+#: app/admin/forms.py:78 app/community/forms.py:51
+msgid "Topic"
+msgstr ""
+
+#: app/admin/forms.py:79 app/community/forms.py:52
+#: app/templates/community/_community_nav.html:23
+msgid "List"
+msgstr ""
+
+#: app/admin/forms.py:80 app/community/forms.py:53
+msgid "Masonry"
+msgstr ""
+
+#: app/admin/forms.py:81 app/community/forms.py:54
+msgid "Wide masonry"
+msgstr ""
+
+#: app/admin/forms.py:82 app/community/forms.py:55
+msgid "Layout"
+msgstr ""
+
+#: app/admin/forms.py:89 app/community/forms.py:32
+msgid "Url is required."
+msgstr ""
+
+#: app/admin/forms.py:93 app/community/forms.py:36
+msgid "- cannot be in Url. Use _ instead?"
+msgstr ""
+
+#: app/admin/forms.py:101
+msgid "Parent topic"
+msgstr ""
+
+#: app/admin/forms.py:106 app/auth/forms.py:10 app/auth/forms.py:17
+#: app/community/forms.py:60
+msgid "User name"
+msgstr ""
+
+#: app/admin/forms.py:108 app/user/forms.py:14
+msgid "Email address"
+msgstr ""
+
+#: app/admin/forms.py:109 app/auth/forms.py:11 app/auth/forms.py:20
+#: app/auth/forms.py:74
+msgid "Password"
+msgstr ""
+
+#: app/admin/forms.py:111 app/auth/forms.py:22 app/auth/forms.py:76
+msgid "Repeat password"
+msgstr ""
+
+#: app/admin/forms.py:112 app/user/forms.py:17
+msgid "Bio"
+msgstr ""
+
+#: app/admin/forms.py:113 app/user/forms.py:18
+msgid "Matrix User ID"
+msgstr ""
+
+#: app/admin/forms.py:114 app/user/forms.py:19
+msgid "Avatar image"
+msgstr ""
+
+#: app/admin/forms.py:115 app/user/forms.py:20
+msgid "Top banner image"
+msgstr ""
+
+#: app/admin/forms.py:116 app/admin/forms.py:170 app/user/forms.py:21
+msgid "This profile is a bot"
+msgstr ""
+
+#: app/admin/forms.py:117 app/admin/forms.py:171
+msgid "Email address is verified"
+msgstr ""
+
+#: app/admin/forms.py:118 app/admin/forms.py:172
+msgid "Banned"
+msgstr ""
+
+#: app/admin/forms.py:119 app/user/forms.py:34
+msgid "Subscribe to email newsletter"
+msgstr ""
+
+#: app/admin/forms.py:120 app/user/forms.py:36
+msgid "Hide posts by bots"
+msgstr ""
+
+#: app/admin/forms.py:121 app/user/forms.py:37
+msgid "Show NSFW posts"
+msgstr ""
+
+#: app/admin/forms.py:122 app/user/forms.py:38
+msgid "Show NSFL posts"
+msgstr ""
+
+#: app/admin/forms.py:123 app/admin/forms.py:173
+msgid "User"
+msgstr ""
+
+#: app/admin/forms.py:124 app/admin/forms.py:174
+msgid "Staff"
+msgstr ""
+
+#: app/admin/forms.py:125 app/admin/forms.py:175 app/admin/routes.py:32
+#: app/templates/base.html:185
+msgid "Admin"
+msgstr ""
+
+#: app/admin/forms.py:127 app/admin/forms.py:177
+msgid "Role"
+msgstr ""
+
+#: app/admin/forms.py:133 app/auth/forms.py:32
+msgid "An account with this email address already exists."
+msgstr ""
+
+#: app/admin/forms.py:137 app/auth/forms.py:36
+msgid "User names cannot contain @."
+msgstr ""
+
+#: app/admin/forms.py:141 app/auth/forms.py:40
+msgid "This username was used in the past and cannot be reused."
+msgstr ""
+
+#: app/admin/forms.py:143 app/auth/forms.py:42
+msgid "An account with this user name already exists."
+msgstr ""
+
+#: app/admin/forms.py:146 app/auth/forms.py:45
+msgid "A community with this name exists so it cannot be used for a user."
+msgstr ""
+
+#: app/admin/forms.py:153 app/admin/forms.py:166 app/auth/forms.py:52
+#: app/auth/forms.py:65
+msgid "This password is too common."
+msgstr ""
+
+#: app/admin/forms.py:163 app/auth/forms.py:62
+msgid "This password is not secure."
+msgstr ""
+
+#: app/admin/forms.py:178
+msgid "Remove avatar"
+msgstr ""
+
+#: app/admin/forms.py:179
+msgid "Remove banner"
+msgstr ""
+
+#: app/admin/forms.py:184
+msgid "Subject"
+msgstr ""
+
+#: app/admin/forms.py:185
+msgid "Body (text)"
+msgstr ""
+
+#: app/admin/forms.py:186
+msgid "Body (html)"
+msgstr ""
+
+#: app/admin/forms.py:187
+msgid "Test mode"
+msgstr ""
+
+#: app/admin/forms.py:188 app/admin/routes.py:708
+msgid "Send newsletter"
+msgstr ""
+
+#: app/admin/routes.py:60 app/templates/admin/_nav.html:4
+msgid "Site profile"
+msgstr ""
+
+#: app/admin/routes.py:108 app/templates/admin/_nav.html:5
+msgid "Misc settings"
+msgstr ""
+
+#: app/admin/routes.py:144
+msgid "Admin settings saved"
+msgstr ""
+
+#: app/admin/routes.py:155
+msgid "Federation settings"
+msgstr ""
+
+#: app/admin/routes.py:177
+msgid "ActivityPub Log"
+msgstr ""
+
+#: app/admin/routes.py:187
+msgid "Activity JSON"
+msgstr ""
+
+#: app/admin/routes.py:222 app/community/routes.py:232 app/main/routes.py:193
+#: app/post/routes.py:238 app/templates/admin/_nav.html:6
+#: app/templates/list_communities.html:51 app/templates/user/filters.html:58
+#: app/templates/user/notifications.html:66
+#: app/templates/user/show_profile.html:133
+msgid "Communities"
+msgstr ""
+
+#: app/admin/routes.py:274 app/admin/routes.py:370 app/admin/routes.py:395
+#: app/admin/routes.py:564 app/community/routes.py:808
+msgid "Saved"
+msgstr ""
+
+#: app/admin/routes.py:278
+msgid ""
+"This is a remote community - most settings here will be regularly "
+"overwritten with data from the original server."
+msgstr ""
+
+#: app/admin/routes.py:295 app/community/routes.py:820
+msgid "Edit community"
+msgstr ""
+
+#: app/admin/routes.py:314 app/community/routes.py:843
+msgid "Community deleted"
+msgstr ""
+
+#: app/admin/routes.py:348 app/community/routes.py:218 app/post/routes.py:224
+#: app/templates/admin/_nav.html:7 app/templates/base.html:137
+#: app/templates/base.html:155 app/templates/topic/show_topic.html:14
+msgid "Topics"
+msgstr ""
+
+#: app/admin/routes.py:373 app/templates/admin/topics.html:35
+msgid "Add topic"
+msgstr ""
+
+#: app/admin/routes.py:401
+msgid "Edit topic"
+msgstr ""
+
+#: app/admin/routes.py:416
+msgid "Topic deleted"
+msgstr ""
+
+#: app/admin/routes.py:418
+msgid "Cannot delete topic with communities assigned to it."
+msgstr ""
+
+#: app/admin/routes.py:445 app/templates/admin/_nav.html:8
+msgid "Users"
+msgstr ""
+
+#: app/admin/routes.py:475
+msgid "Problematic users"
+msgstr ""
+
+#: app/admin/routes.py:496
+msgid "Bad posts"
+msgstr ""
+
+#: app/admin/routes.py:529
+msgid "Registration approved."
+msgstr ""
+
+#: app/admin/routes.py:560
+msgid ""
+"Permissions are cached for 50 seconds so new admin roles won't take "
+"effect immediately."
+msgstr ""
+
+#: app/admin/routes.py:568
+msgid ""
+"This is a remote user - most settings here will be regularly overwritten "
+"with data from the original server."
+msgstr ""
+
+#: app/admin/routes.py:575
+msgid "Edit user"
+msgstr ""
+
+#: app/admin/routes.py:640
+msgid "User added"
+msgstr ""
+
+#: app/admin/routes.py:643
+msgid "Add user"
+msgstr ""
+
+#: app/admin/routes.py:667
+msgid "User deleted"
+msgstr ""
+
+#: app/admin/routes.py:690
+#: app/templates/community/_community_moderation_nav.html:11
+#: app/templates/community/community_moderate.html:21
+msgid "Reports"
+msgstr ""
+
+#: app/admin/util.py:110
+msgid "None"
+msgstr ""
+
+#: app/auth/forms.py:12
+msgid "Low bandwidth mode"
+msgstr ""
+
+#: app/auth/forms.py:13
+msgid "Log In"
+msgstr ""
+
+#: app/auth/forms.py:18 app/auth/forms.py:19 app/auth/forms.py:69
+msgid "Email"
+msgstr ""
+
+#: app/auth/forms.py:24
+msgid "Why would you like to join this site?"
+msgstr ""
+
+#: app/auth/forms.py:27 app/auth/routes.py:153 app/templates/base.html:144
+msgid "Register"
+msgstr ""
+
+#: app/auth/forms.py:70
+msgid "Request password reset"
+msgstr ""
+
+#: app/auth/forms.py:78
+msgid "Set password"
+msgstr ""
+
+#: app/auth/routes.py:29 app/auth/routes.py:32
+msgid "No account exists with that user name."
+msgstr ""
+
+#: app/auth/routes.py:36
+msgid ""
+"Invalid password. Please reset "
+"your password."
+msgstr ""
+
+#: app/auth/routes.py:39
+msgid "Invalid password"
+msgstr ""
+
+#: app/auth/routes.py:42
+msgid "You have been banned."
+msgstr ""
+
+#: app/auth/routes.py:74
+msgid "Login"
+msgstr ""
+
+#: app/auth/routes.py:100
+msgid "Sorry, you cannot use that email address"
+msgstr ""
+
+#: app/auth/routes.py:102
+msgid "Sorry, you cannot use that user name"
+msgstr ""
+
+#: app/auth/routes.py:119
+#, python-format
+msgid "Your username contained special letters so it was changed to %(name)s."
+msgstr ""
+
+#: app/auth/routes.py:158
+msgid "Account under review"
+msgstr ""
+
+#: app/auth/routes.py:163 app/templates/auth/check_email.html:8
+msgid "Check your email"
+msgstr ""
+
+#: app/auth/routes.py:174
+msgid "Sorry, you cannot use that email address."
+msgstr ""
+
+#: app/auth/routes.py:179
+msgid "Check your email for a link to reset your password."
+msgstr ""
+
+#: app/auth/routes.py:182
+msgid "No account with that email address exists"
+msgstr ""
+
+#: app/auth/routes.py:184
+msgid "Reset Password"
+msgstr ""
+
+#: app/auth/routes.py:198
+#, python-format
+msgid ""
+"Your password has been reset. Please use it to log in with user name of "
+"%(name)s."
+msgstr ""
+
+#: app/auth/routes.py:218
+msgid "Thank you for verifying your email address."
+msgstr ""
+
+#: app/auth/routes.py:220
+msgid "Email address validation failed."
+msgstr ""
+
+#: app/chat/forms.py:13
+msgid "Message"
+msgstr ""
+
+#: app/chat/forms.py:14
+msgid "Reply"
+msgstr ""
+
+#: app/chat/forms.py:18 app/post/forms.py:16 app/user/forms.py:60
+msgid "Spam"
+msgstr ""
+
+#: app/chat/forms.py:19 app/post/forms.py:16 app/user/forms.py:61
+msgid "Harassment"
+msgstr ""
+
+#: app/chat/forms.py:20 app/post/forms.py:17 app/user/forms.py:62
+msgid "Threatening violence"
+msgstr ""
+
+#: app/chat/forms.py:21 app/user/forms.py:63
+msgid "Promoting hate / genocide"
+msgstr ""
+
+#: app/chat/forms.py:22 app/post/forms.py:18 app/user/forms.py:64
+msgid "Misinformation / disinformation"
+msgstr ""
+
+#: app/chat/forms.py:23 app/post/forms.py:19 app/user/forms.py:65
+msgid "Racism, sexism, transphobia"
+msgstr ""
+
+#: app/chat/forms.py:24 app/post/forms.py:21 app/user/forms.py:68
+msgid "Minor abuse or sexualization"
+msgstr ""
+
+#: app/chat/forms.py:25 app/post/forms.py:22 app/user/forms.py:69
+msgid "Non-consensual intimate media"
+msgstr ""
+
+#: app/chat/forms.py:26 app/post/forms.py:23 app/user/forms.py:70
+msgid "Prohibited transaction"
+msgstr ""
+
+#: app/chat/forms.py:26 app/post/forms.py:23 app/user/forms.py:70
+msgid "Impersonation"
+msgstr ""
+
+#: app/chat/forms.py:27 app/post/forms.py:24 app/user/forms.py:71
+msgid "Copyright violation"
+msgstr ""
+
+#: app/chat/forms.py:27 app/post/forms.py:24 app/user/forms.py:71
+msgid "Trademark violation"
+msgstr ""
+
+#: app/chat/forms.py:28 app/post/forms.py:25 app/user/forms.py:72
+msgid "Self-harm or suicide"
+msgstr ""
+
+#: app/chat/forms.py:29 app/community/forms.py:162 app/post/forms.py:26
+#: app/user/forms.py:73
+msgid "Other"
+msgstr ""
+
+#: app/chat/forms.py:30 app/community/forms.py:81 app/community/forms.py:164
+#: app/post/forms.py:27 app/user/forms.py:74
+msgid "Reason"
+msgstr ""
+
+#: app/chat/forms.py:31 app/community/forms.py:165 app/post/forms.py:28
+#: app/user/forms.py:75
+msgid "More info"
+msgstr ""
+
+#: app/chat/forms.py:33 app/community/forms.py:167 app/post/forms.py:30
+#: app/templates/user/show_profile.html:56 app/user/forms.py:77
+msgid "Report"
+msgstr ""
+
+#: app/chat/routes.py:49
+#, python-format
+msgid "Chat with %(name)s"
+msgstr ""
+
+#: app/chat/routes.py:69
+msgid "Send"
+msgstr ""
+
+#: app/chat/routes.py:79 app/templates/chat/new_message.html:14
+#, python-format
+msgid "New message to \"%(recipient_name)s\""
+msgstr ""
+
+#: app/chat/routes.py:124
+msgid "Conversation deleted"
+msgstr ""
+
+#: app/chat/routes.py:135
+msgid "Instance blocked."
+msgstr ""
+
+#: app/chat/routes.py:165
+msgid "This conversation has been reported, thank you!"
+msgstr ""
+
+#: app/chat/routes.py:170
+msgid "Report conversation"
+msgstr ""
+
+#: app/chat/util.py:59
+#, python-format
+msgid "Message failed to send to %(name)s."
+msgstr ""
+
+#: app/chat/util.py:61
+msgid "Message sent."
+msgstr ""
+
+#: app/community/forms.py:26
+msgid "Create"
+msgstr ""
+
+#: app/community/forms.py:61
+msgid "Add"
+msgstr ""
+
+#: app/community/forms.py:65
+msgid "Amend the report description if necessary"
+msgstr ""
+
+#: app/community/forms.py:66
+msgid "Escalate report"
+msgstr ""
+
+#: app/community/forms.py:70
+msgid "Note for mod log"
+msgstr ""
+
+#: app/community/forms.py:71
+msgid "Also resolve all other reports about the same thing."
+msgstr ""
+
+#: app/community/forms.py:72
+#: app/templates/community/community_moderate_report_resolve.html:13
+msgid "Resolve report"
+msgstr ""
+
+#: app/community/forms.py:76
+msgid "Community address"
+msgstr ""
+
+#: app/community/forms.py:77 app/search/routes.py:56
+#: app/templates/base.html:198 app/templates/community/add_remote.html:13
+#: app/templates/domain/domains.html:29
+#: app/templates/domain/domains_blocked.html:29 app/templates/index.html:40
+#: app/templates/list_communities.html:36 app/templates/search/results.html:38
+msgid "Search"
+msgstr ""
+
+#: app/community/forms.py:82
+msgid "Ban until"
+msgstr ""
+
+#: app/community/forms.py:83
+msgid "Also delete all their posts"
+msgstr ""
+
+#: app/community/forms.py:84
+msgid "Also delete all their comments"
+msgstr ""
+
+#: app/community/forms.py:85
+#: app/templates/community/community_moderate_subscribers.html:56
+#: app/templates/domain/domains_blocked.html:48
+#: app/templates/user/show_profile.html:173
+msgid "Ban"
+msgstr ""
+
+#: app/community/forms.py:89 app/community/forms.py:100
+#: app/community/forms.py:120 app/templates/list_communities.html:56
+msgid "Community"
+msgstr ""
+
+#: app/community/forms.py:91 app/community/forms.py:102
+#: app/community/forms.py:123 app/post/forms.py:10
+msgid "Body"
+msgstr ""
+
+#: app/community/forms.py:92 app/community/forms.py:105
+#: app/community/forms.py:125
+msgid "Sticky"
+msgstr ""
+
+#: app/community/forms.py:93 app/community/forms.py:106
+#: app/community/forms.py:126
+msgid "NSFW"
+msgstr ""
+
+#: app/community/forms.py:94 app/community/forms.py:107
+#: app/community/forms.py:127
+msgid "Gore/gross"
+msgstr ""
+
+#: app/community/forms.py:95 app/community/forms.py:108
+#: app/community/forms.py:128 app/post/forms.py:11
+#: app/templates/post/_post_notification_toggle.html:4
+#: app/templates/post/_reply_notification_toggle.html:4
+msgid "Notify about replies"
+msgstr ""
+
+#: app/community/forms.py:103
+msgid "URL"
+msgstr ""
+
+#: app/community/forms.py:114
+#, python-format
+msgid "Links to %(domain)s are not allowed."
+msgstr ""
+
+#: app/community/forms.py:122
+msgid "Alt text"
+msgstr ""
+
+#: app/community/forms.py:124
+#: app/templates/community/add_discussion_post.html:21
+#: app/templates/community/add_image_post.html:21
+#: app/templates/community/add_link_post.html:21
+msgid "Image"
+msgstr ""
+
+#: app/community/forms.py:150
+msgid "Images cannot be posted to local communities."
+msgstr ""
+
+#: app/community/forms.py:156
+msgid "Breaks instance rules"
+msgstr ""
+
+#: app/community/forms.py:157
+msgid "Abandoned by moderators"
+msgstr ""
+
+#: app/community/forms.py:158
+msgid "Cult"
+msgstr ""
+
+#: app/community/forms.py:159
+msgid "Scam"
+msgstr ""
+
+#: app/community/forms.py:160
+msgid "Alt-right pipeline"
+msgstr ""
+
+#: app/community/forms.py:161 app/post/forms.py:17
+msgid "Hate / genocide"
+msgstr ""
+
+#: app/community/forms.py:179 app/community/routes.py:846
+msgid "Delete community"
+msgstr ""
+
+#: app/community/routes.py:79
+msgid "Your new community has been created."
+msgstr ""
+
+#: app/community/routes.py:85 app/templates/community/add_local.html:13
+#: app/templates/community/community_edit.html:25
+msgid "Create community"
+msgstr ""
+
+#: app/community/routes.py:111 app/community/routes.py:1278
+msgid "Community not found."
+msgstr ""
+
+#: app/community/routes.py:113 app/community/routes.py:1280
+msgid ""
+"Community not found. If you are searching for a nsfw community it is "
+"blocked by this instance."
+msgstr ""
+
+#: app/community/routes.py:116 app/community/routes.py:1283
+#, python-format
+msgid "That community is banned from %(site)s."
+msgstr ""
+
+#: app/community/routes.py:119
+msgid "Add remote community"
+msgstr ""
+
+#: app/community/routes.py:201 app/post/routes.py:207
+#: app/templates/base.html:130 app/templates/base.html:132
+#: app/templates/base.html:148 app/templates/base.html:150
+#: app/templates/chat/conversation.html:36
+#: app/templates/community/community_edit.html:13
+#: app/templates/community/community_mod_list.html:13
+#: app/templates/community/community_moderate.html:13
+#: app/templates/community/community_moderate_subscribers.html:13
+#: app/templates/domain/domain.html:13 app/templates/topic/show_topic.html:13
+#: app/templates/user/delete_account.html:13
+#: app/templates/user/edit_filters.html:14
+#: app/templates/user/edit_profile.html:14
+#: app/templates/user/edit_settings.html:15 app/templates/user/filters.html:14
+#: app/templates/user/notifications.html:13 app/templates/user/people.html:13
+#: app/templates/user/show_profile.html:18
+#: app/templates/user/show_profile.html:38
+msgid "Home"
+msgstr ""
+
+#: app/community/routes.py:327
+msgid "You cannot join this community"
+msgstr ""
+
+#: app/community/routes.py:343
+msgid ""
+"There was a problem while trying to communicate with remote server. If "
+"other people have already joined this community it won't matter."
+msgstr ""
+
+#: app/community/routes.py:492 app/community/routes.py:565
+#: app/community/routes.py:638
+msgid "Add post to community"
+msgstr ""
+
+#: app/community/routes.py:705 app/community/routes.py:730
+#: app/community/routes.py:732
+#, python-format
+msgid "Your post to %(name)s has been made."
+msgstr ""
+
+#: app/community/routes.py:749
+msgid "A community has been reported"
+msgstr ""
+
+#: app/community/routes.py:760
+msgid "Community has been reported, thank you!"
+msgstr ""
+
+#: app/community/routes.py:763
+msgid "Report community"
+msgstr ""
+
+#: app/community/routes.py:864
+#: app/templates/community/community_mod_list.html:22
+#, python-format
+msgid "Moderators for %(community)s"
+msgstr ""
+
+#: app/community/routes.py:889
+msgid "Moderator added"
+msgstr ""
+
+#: app/community/routes.py:893
+#, python-format
+msgid "You are now a moderator of %(name)s"
+msgstr ""
+
+#: app/community/routes.py:918
+msgid "Account not found"
+msgstr ""
+
+#: app/community/routes.py:920
+#: app/templates/community/community_add_moderator.html:13
+#, python-format
+msgid "Add moderator to %(community)s"
+msgstr ""
+
+#: app/community/routes.py:940
+msgid "Moderator removed"
+msgstr ""
+
+#: app/community/routes.py:957 app/post/routes.py:1139 app/post/routes.py:1262
+#, python-format
+msgid "Content from %(name)s will be hidden."
+msgstr ""
+
+#: app/community/routes.py:986
+#, python-format
+msgid "%(name)s has been banned."
+msgstr ""
+
+#: app/community/routes.py:993
+#, python-format
+msgid "Posts by %(name)s have been deleted."
+msgstr ""
+
+#: app/community/routes.py:999
+#, python-format
+msgid "Comments by %(name)s have been deleted."
+msgstr ""
+
+#: app/community/routes.py:1020
+msgid "Ban from community"
+msgstr ""
+
+#: app/community/routes.py:1043
+#, python-format
+msgid "%(name)s has been unbanned."
+msgstr ""
+
+#: app/community/routes.py:1108 app/community/routes.py:1142
+#, python-format
+msgid "Moderation of %(community)s"
+msgstr ""
+
+#: app/community/routes.py:1170
+msgid "Admin has been notified about this report."
+msgstr ""
+
+#: app/community/routes.py:1218
+msgid "Report resolved."
+msgstr ""
+
+#: app/community/routes.py:1256
+msgid "Report ignored."
+msgstr ""
+
+#: app/community/routes.py:1286
+msgid "Search result for remote community"
+msgstr ""
+
+#: app/domain/routes.py:113
+#, python-format
+msgid "%(name)s blocked."
+msgstr ""
+
+#: app/domain/routes.py:126
+#, python-format
+msgid "%(name)s un-blocked."
+msgstr ""
+
+#: app/domain/routes.py:139
+#, python-format
+msgid "%(name)s banned for all users and all content deleted."
+msgstr ""
+
+#: app/domain/routes.py:151
+#, python-format
+msgid "%(name)s un-banned for all users."
+msgstr ""
+
+#: app/main/routes.py:73
+msgid "Create an account to tailor this feed to your interests."
+msgstr ""
+
+#: app/main/routes.py:163 app/templates/base.html:139
+#: app/templates/base.html:157
+msgid "Browse by topic"
+msgstr ""
+
+#: app/main/routes.py:206
+msgid "Local communities"
+msgstr ""
+
+#: app/main/routes.py:221 app/templates/base.html:168
+#: app/templates/list_communities.html:19
+msgid "Joined communities"
+msgstr ""
+
+#: app/main/routes.py:354
+msgid "Please click the link in your email inbox to verify your account."
+msgstr ""
+
+#: app/post/forms.py:12
+msgid "Comment"
+msgstr ""
+
+#: app/post/forms.py:16 app/user/forms.py:59
+msgid "Breaks community rules"
+msgstr ""
+
+#: app/post/forms.py:20 app/user/forms.py:67
+msgid "Sharing personal info - doxing"
+msgstr ""
+
+#: app/post/forms.py:42 app/post/routes.py:1156
+#: app/templates/post/post_mea_culpa.html:13
+msgid "I changed my mind"
+msgstr ""
+
+#: app/post/routes.py:45
+#, python-format
+msgid "%(name)s has indicated they made a mistake in this post."
+msgstr ""
+
+#: app/post/routes.py:72 app/post/routes.py:476
+#, python-format
+msgid "You cannot reply to %(name)s"
+msgstr ""
+
+#: app/post/routes.py:82 app/post/routes.py:489
+msgid "This type of comment is not accepted, sorry."
+msgstr ""
+
+#: app/post/routes.py:446 app/post/routes.py:632
+#, python-format
+msgid "Discussing %(title)s"
+msgstr ""
+
+#: app/post/routes.py:702 app/post/routes.py:783 app/post/routes.py:865
+#: app/post/routes.py:1285 app/user/routes.py:143 app/user/routes.py:204
+#: app/user/routes.py:686 app/user/routes.py:717
+msgid "Your changes have been saved."
+msgstr ""
+
+#: app/post/routes.py:718 app/post/routes.py:800 app/post/routes.py:882
+#: app/templates/post/post_edit_discussion.html:11
+#: app/templates/post/post_edit_image.html:11
+#: app/templates/post/post_edit_link.html:11
+msgid "Edit post"
+msgstr ""
+
+#: app/post/routes.py:990
+msgid "Post deleted."
+msgstr ""
+
+#: app/post/routes.py:1040
+msgid ""
+"Moderators have already assessed reports regarding this post, no further "
+"reports are necessary."
+msgstr ""
+
+#: app/post/routes.py:1043
+msgid "Post has already been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1091
+msgid "Post has been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1096
+msgid "Report post"
+msgstr ""
+
+#: app/post/routes.py:1110 app/post/routes.py:1246
+#, python-format
+msgid "%(name)s has been blocked."
+msgstr ""
+
+#: app/post/routes.py:1126
+#, python-format
+msgid "Posts linking to %(name)s will be hidden."
+msgstr ""
+
+#: app/post/routes.py:1170
+msgid ""
+"Moderators have already assessed reports regarding this comment, no "
+"further reports are necessary."
+msgstr ""
+
+#: app/post/routes.py:1175
+msgid "Comment has already been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1226
+msgid "Comment has been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1231
+msgid "Report comment"
+msgstr ""
+
+#: app/post/routes.py:1389
+msgid "Edit comment"
+msgstr ""
+
+#: app/post/routes.py:1413
+msgid "Comment deleted."
+msgstr ""
+
+#: app/search/routes.py:49
+#, python-format
+msgid "Search results for %(q)s"
+msgstr ""
+
+#: app/templates/_home_nav.html:3 app/templates/community/_community_nav.html:8
+#: app/templates/post/post.html:66 app/user/forms.py:44
+msgid "Hot"
+msgstr ""
+
+#: app/templates/_home_nav.html:6
+#: app/templates/community/_community_nav.html:11
+#: app/templates/post/post.html:69 app/user/forms.py:45
+msgid "Top"
+msgstr ""
+
+#: app/templates/_home_nav.html:9
+#: app/templates/community/_community_nav.html:14
+#: app/templates/post/post.html:72 app/user/forms.py:46
+msgid "New"
+msgstr ""
+
+#: app/templates/_home_nav.html:12
+#: app/templates/community/_community_nav.html:17
+#: app/templates/list_communities.html:71 app/user/forms.py:47
+msgid "Active"
+msgstr ""
+
+#: app/templates/_inoculation_links.html:4
+msgid "Rational Discourse Toolkit"
+msgstr ""
+
+#: app/templates/about.html:10 app/templates/donate.html:26
+#: app/templates/index.html:67 app/templates/keyboard_shortcuts.html:63
+#: app/templates/search/results.html:65
+#, python-format
+msgid "About %(site_name)s"
+msgstr ""
+
+#: app/templates/base.html:55
+msgid "PieFed"
+msgstr ""
+
+#: app/templates/base.html:113 app/templates/base.html:189
+#: app/templates/user/notifications.html:18 app/user/routes.py:537
+msgid "Notifications"
+msgstr ""
+
+#: app/templates/base.html:133 app/templates/base.html:151
+msgid "Popular"
+msgstr ""
+
+#: app/templates/base.html:134 app/templates/base.html:152
+msgid "All posts"
+msgstr ""
+
+#: app/templates/base.html:140 app/templates/base.html:158
+#: app/templates/list_communities.html:13
+msgid "All communities"
+msgstr ""
+
+#: app/templates/auth/login.html:9 app/templates/base.html:143
+msgid "Log in"
+msgstr ""
+
+#: app/templates/base.html:145 app/templates/base.html:183
+#: app/templates/donate.html:10
+msgid "Donate"
+msgstr ""
+
+#: app/templates/base.html:161
+msgid "Moderating"
+msgstr ""
+
+#: app/templates/base.html:176
+msgid "Account"
+msgstr ""
+
+#: app/templates/base.html:178
+msgid "View profile"
+msgstr ""
+
+#: app/templates/base.html:179
+msgid "Edit profile & settings"
+msgstr ""
+
+#: app/templates/base.html:180
+msgid "Chats"
+msgstr ""
+
+#: app/templates/base.html:187
+msgid "Log out"
+msgstr ""
+
+#: app/templates/base.html:189
+#, python-format
+msgid "%(num)d unread notifications"
+msgstr ""
+
+#: app/templates/base.html:199
+msgid "Light mode"
+msgstr ""
+
+#: app/templates/base.html:200
+msgid "Dark mode"
+msgstr ""
+
+#: app/templates/base.html:228 app/templates/keyboard_shortcuts.html:10
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: app/templates/index.html:17
+msgid "No posts yet. Join some communities to see more."
+msgstr ""
+
+#: app/templates/community/community.html:168 app/templates/index.html:18
+#: app/templates/index.html:59 app/templates/list_topics.html:38
+#: app/templates/post/post.html:220 app/templates/search/results.html:57
+#: app/templates/topic/show_topic.html:91
+msgid "Explore communities"
+msgstr ""
+
+#: app/templates/admin/activities.html:54
+#: app/templates/admin/communities.html:51 app/templates/admin/posts.html:26
+#: app/templates/admin/reports.html:58 app/templates/admin/users.html:69
+#: app/templates/community/community.html:92
+#: app/templates/community/community_moderate.html:80
+#: app/templates/community/community_moderate_subscribers.html:67
+#: app/templates/domain/domain.html:30 app/templates/domain/domains.html:51
+#: app/templates/domain/domains_blocked.html:59 app/templates/index.html:25
+#: app/templates/search/results.html:23 app/templates/topic/show_topic.html:52
+#: app/templates/user/show_profile.html:75
+#: app/templates/user/show_profile.html:98
+msgid "Previous page"
+msgstr ""
+
+#: app/templates/admin/activities.html:59
+#: app/templates/admin/communities.html:56 app/templates/admin/posts.html:31
+#: app/templates/admin/reports.html:63 app/templates/admin/users.html:74
+#: app/templates/community/community.html:97
+#: app/templates/community/community_moderate.html:85
+#: app/templates/community/community_moderate_subscribers.html:72
+#: app/templates/domain/domain.html:35 app/templates/domain/domains.html:56
+#: app/templates/domain/domains_blocked.html:64 app/templates/index.html:30
+#: app/templates/search/results.html:28 app/templates/topic/show_topic.html:57
+#: app/templates/user/show_profile.html:80
+#: app/templates/user/show_profile.html:103
+msgid "Next page"
+msgstr ""
+
+#: app/templates/index.html:47 app/templates/search/results.html:45
+msgid "Active communities"
+msgstr ""
+
+#: app/templates/index.html:60 app/templates/list_communities.html:108
+#: app/templates/search/results.html:58
+msgid "Browse topics"
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:11
+msgid "Most shortcuts are the same as what reddit has."
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:14
+msgid "Navigation"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:33
+#: app/templates/keyboard_shortcuts.html:43 app/templates/user/filters.html:31
+msgid "Action"
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:46
+msgid "Upvote"
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:50
+msgid "Downvote"
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:55
+msgid ""
+"When viewing a list of posts actions like voting or going to a post "
+"depend on which is the current post. The current post is determined by "
+"hovering with the mouse or the J and K keys."
+msgstr ""
+
+#: app/templates/list_communities.html:14
+msgid "All"
+msgstr ""
+
+#: app/templates/list_communities.html:16
+msgid "Communities on this server"
+msgstr ""
+
+#: app/templates/list_communities.html:17
+msgid "Local"
+msgstr ""
+
+#: app/templates/list_communities.html:20
+#: app/templates/user/show_profile.html:59
+msgid "Joined"
+msgstr ""
+
+#: app/templates/list_communities.html:28
+msgid "Choose a topic to filter communities by"
+msgstr ""
+
+#: app/templates/list_communities.html:40
+msgid "Create local community"
+msgstr ""
+
+#: app/templates/list_communities.html:40
+msgid "Create local"
+msgstr ""
+
+#: app/templates/list_communities.html:41
+msgid "Add community from another instance"
+msgstr ""
+
+#: app/templates/list_communities.html:41
+msgid "Add remote"
+msgstr ""
+
+#: app/templates/list_communities.html:56
+msgid "Sort by name"
+msgstr ""
+
+#: app/templates/list_communities.html:61
+msgid "Sort by post count"
+msgstr ""
+
+#: app/templates/list_communities.html:61
+msgid "Posts"
+msgstr ""
+
+#: app/templates/list_communities.html:66
+msgid "Sort by reply count"
+msgstr ""
+
+#: app/templates/list_communities.html:66 app/templates/post/post.html:61
+#: app/templates/post/post.html:158
+msgid "Comments"
+msgstr ""
+
+#: app/templates/list_communities.html:71
+msgid "Sort by recent activity"
+msgstr ""
+
+#: app/templates/list_communities.html:82
+#, python-format
+msgid "Leave %(name)s"
+msgstr ""
+
+#: app/templates/community/add_remote.html:32
+#: app/templates/community/community.html:112
+#: app/templates/community/lookup_remote.html:21
+#: app/templates/list_communities.html:82 app/templates/post/add_reply.html:48
+#: app/templates/post/continue_discussion.html:99
+#: app/templates/post/post.html:177
+msgid "Leave"
+msgstr ""
+
+#: app/templates/community/community.html:114
+#: app/templates/list_communities.html:84
+msgid "Pending"
+msgstr ""
+
+#: app/templates/list_communities.html:86
+#: app/templates/list_communities.html:89
+#, python-format
+msgid "Join %(name)s"
+msgstr ""
+
+#: app/templates/community/add_remote.html:34
+#: app/templates/community/community.html:116
+#: app/templates/community/lookup_remote.html:23
+#: app/templates/list_communities.html:86
+#: app/templates/list_communities.html:89 app/templates/post/add_reply.html:50
+#: app/templates/post/continue_discussion.html:101
+#: app/templates/post/post.html:179
+msgid "Join"
+msgstr ""
+
+#: app/templates/list_communities.html:96
+#, python-format
+msgid "Browse %(name)s"
+msgstr ""
+
+#: app/templates/list_communities.html:106 app/templates/list_topics.html:36
+msgid "There are no communities yet."
+msgstr ""
+
+#: app/templates/list_topics.html:25
+msgid "Choose a topic"
+msgstr ""
+
+#: app/templates/privacy.html:10
+msgid "Privacy"
+msgstr ""
+
+#: app/templates/admin/_nav.html:2
+msgid "Admin navigation"
+msgstr ""
+
+#: app/templates/admin/_nav.html:3
+msgid "Admin home"
+msgstr ""
+
+#: app/templates/admin/_nav.html:9
+msgid "Watch"
+msgstr ""
+
+#: app/templates/admin/_nav.html:11
+msgid "Registration applications"
+msgstr ""
+
+#: app/templates/admin/_nav.html:13 app/templates/community/community.html:181
+#: app/templates/community/community_moderate.html:15
+#: app/templates/community/community_moderate_subscribers.html:15
+msgid "Moderation"
+msgstr ""
+
+#: app/templates/admin/_nav.html:14
+msgid "Federation"
+msgstr ""
+
+#: app/templates/admin/_nav.html:15
+msgid "Newsletter"
+msgstr ""
+
+#: app/templates/admin/_nav.html:16
+msgid "Activities"
+msgstr ""
+
+#: app/templates/admin/add_user.html:17
+msgid "Add new user"
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:18
+#, python-format
+msgid "When registering, people are asked \"%(question)s\"."
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:43
+msgid "Approve"
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:44
+msgid "View"
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:45
+#: app/templates/post/post_options.html:20
+#: app/templates/post/post_reply_options.html:20
+#: app/templates/user/show_profile.html:179
+msgid "Delete"
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:51
+msgid "No one is waiting to be approved."
+msgstr ""
+
+#: app/templates/admin/edit_community.html:17
+#, python-format
+msgid "Edit %(community_name)s"
+msgstr ""
+
+#: app/templates/admin/edit_community.html:43
+msgid "Will not be overwritten by remote server"
+msgstr ""
+
+#: app/templates/admin/edit_topic.html:18
+#, python-format
+msgid "Edit %(topic_name)s"
+msgstr ""
+
+#: app/templates/admin/edit_user.html:17
+#, python-format
+msgid "Edit %(user_name)s (%(display_name)s)"
+msgstr ""
+
+#: app/templates/admin/posts.html:17
+msgid "Most downvoted in the last 3 days"
+msgstr ""
+
+#: app/templates/admin/users.html:17
+msgid "Add local user"
+msgstr ""
+
+#: app/templates/auth/check_email.html:9
+msgid ""
+"We sent you an email containing a link that you need to click to enable "
+"your account."
+msgstr ""
+
+#: app/templates/auth/login.html:14
+msgid "New User?"
+msgstr ""
+
+#: app/templates/auth/login.html:14
+msgid "Register new account"
+msgstr ""
+
+#: app/templates/auth/login.html:16
+msgid "Forgot Your Password?"
+msgstr ""
+
+#: app/templates/auth/login.html:17
+msgid "Reset it"
+msgstr ""
+
+#: app/templates/auth/permission_denied.html:8
+#: app/templates/chat/blocked.html:13 app/templates/chat/denied.html:14
+msgid "Sorry"
+msgstr ""
+
+#: app/templates/auth/permission_denied.html:12
+msgid "Your account does not have access to that area."
+msgstr ""
+
+#: app/templates/auth/please_wait.html:8
+msgid "Thanks for registering"
+msgstr ""
+
+#: app/templates/auth/please_wait.html:9
+msgid ""
+"We are reviewing your application and will email you once it has been "
+"accepted."
+msgstr ""
+
+#: app/templates/auth/register.html:19
+msgid "Create new account"
+msgstr ""
+
+#: app/templates/auth/register.html:22
+msgid "Registration is closed. Only admins can create accounts."
+msgstr ""
+
+#: app/templates/auth/reset_password.html:13
+#: app/templates/auth/reset_password_request.html:13
+msgid "Reset your password"
+msgstr ""
+
+#: app/templates/auth/validation_required.html:8
+msgid "Please check your email inbox"
+msgstr ""
+
+#: app/templates/auth/validation_required.html:12
+msgid ""
+"To keep spam and bots to a managable level, we send every new account an "
+"email with a link in it that needs to be clicked to fully enable the "
+"account."
+msgstr ""
+
+#: app/templates/chat/blocked.html:15
+msgid "You have blocked this person or they have blocked you."
+msgstr ""
+
+#: app/templates/chat/chat_options.html:14
+#, python-format
+msgid "Options for conversation with \"%(member_names)s\""
+msgstr ""
+
+#: app/templates/chat/chat_options.html:17
+msgid "Delete conversation"
+msgstr ""
+
+#: app/templates/chat/chat_options.html:21
+#, python-format
+msgid "Block @%(author_name)s"
+msgstr ""
+
+#: app/templates/chat/chat_options.html:26
+#, python-format
+msgid "Block chats and posts from instance: %(name)s"
+msgstr ""
+
+#: app/templates/chat/chat_options.html:29
+#: app/templates/post/post_options.html:48
+#: app/templates/post/post_reply_options.html:32
+msgid "Report to moderators"
+msgstr ""
+
+#: app/templates/chat/chat_options.html:31
+msgid ""
+"If you are reporting abuse then do not delete the conversation - "
+"moderators will not be able to read it if you delete it."
+msgstr ""
+
+#: app/templates/chat/conversation.html:37
+msgid "Chat"
+msgstr ""
+
+#: app/templates/chat/conversation.html:42 app/templates/user/filters.html:56
+#: app/templates/user/notifications.html:14 app/templates/user/people.html:14
+#: app/templates/user/people.html:17 app/templates/user/show_profile.html:19
+#: app/templates/user/show_profile.html:39 app/user/routes.py:35
+msgid "People"
+msgstr ""
+
+#: app/templates/chat/conversation.html:59
+#, python-format
+msgid "Messages with %(name)s"
+msgstr ""
+
+#: app/templates/chat/conversation.html:60
+msgid "Messages with: "
+msgstr ""
+
+#: app/templates/chat/conversation.html:75
+#: app/templates/post/_post_teaser.html:75
+msgid "Options"
+msgstr ""
+
+#: app/templates/chat/denied.html:16
+msgid ""
+"You have not been using PieFed long enough to be allowed to send messages"
+" to people."
+msgstr ""
+
+#: app/templates/chat/empty.html:13
+msgid "No chats"
+msgstr ""
+
+#: app/templates/chat/empty.html:15
+msgid ""
+"There are no chats involving you, yet. Start a conversation using the "
+"\"Send message\" button on someone's profile."
+msgstr ""
+
+#: app/templates/chat/report.html:14
+#, python-format
+msgid "Report conversation with \"%(member_names)s\""
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:4
+#: app/templates/community/community_edit.html:15
+#: app/templates/community/community_mod_list.html:15
+#: app/templates/post/add_reply.html:89
+#: app/templates/post/continue_discussion.html:140
+#: app/templates/post/post.html:234 app/templates/post/post_reply_edit.html:85
+#: app/templates/user/_user_nav.html:5 app/templates/user/notifications.html:57
+#: app/templates/user/show_profile.html:124
+msgid "Settings"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:7
+#: app/templates/community/community_mod_list.html:16
+msgid "Moderators"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:10
+#: app/templates/community/_community_nav.html:7
+msgid "Sort by hot"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:14
+#: app/templates/community/community_moderate_subscribers.html:21
+msgid "Subscribers"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:17
+msgid "Appeals"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:20
+msgid "Mod log"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:3
+#: app/templates/community/add_discussion_post.html:11
+#: app/templates/community/add_image_post.html:11
+#: app/templates/community/add_link_post.html:11
+#: app/templates/community/community.html:108
+#: app/templates/post/add_reply.html:54
+#: app/templates/post/continue_discussion.html:105
+#: app/templates/post/post.html:173 app/templates/post/post_reply_edit.html:50
+#: app/templates/topic/show_topic.html:68
+msgid "Create post"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:10
+msgid "Sort by top"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:13
+msgid "Sort by new"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:16
+msgid "Sort by active"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:26
+msgid "Tile"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:29
+msgid "Wide tile"
+msgstr ""
+
+#: app/templates/community/_notification_toggle.html:5
+msgid "Notify about every new post. Not advisable in high traffic communities!"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:16
+#: app/templates/community/add_image_post.html:16
+#: app/templates/community/add_link_post.html:16
+msgid "Type of post"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:19
+#: app/templates/community/add_image_post.html:19
+#: app/templates/community/add_link_post.html:19
+msgid "Start a discussion"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:19
+#: app/templates/community/add_image_post.html:19
+#: app/templates/community/add_link_post.html:19
+msgid "Discussion"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:20
+#: app/templates/community/add_image_post.html:20
+#: app/templates/community/add_link_post.html:20
+msgid "Share a link"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:20
+#: app/templates/community/add_image_post.html:20
+#: app/templates/community/add_link_post.html:20
+msgid "Link"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:21
+#: app/templates/community/add_image_post.html:21
+#: app/templates/community/add_link_post.html:21
+msgid "Share an image"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:22
+#: app/templates/community/add_image_post.html:22
+#: app/templates/community/add_link_post.html:22
+msgid "Create a poll"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:22
+#: app/templates/community/add_image_post.html:22
+#: app/templates/community/add_link_post.html:22
+msgid "Poll"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:23
+#: app/templates/community/add_image_post.html:23
+#: app/templates/community/add_link_post.html:23
+msgid "Create an event"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:23
+#: app/templates/community/add_image_post.html:23
+#: app/templates/community/add_link_post.html:23
+msgid "Event"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:43
+#: app/templates/community/add_image_post.html:45
+#: app/templates/community/add_link_post.html:44
+#: app/templates/post/add_reply.html:37 app/templates/post/post.html:42
+#: app/templates/user/edit_profile.html:44
+msgid "Enable markdown editor"
+msgstr ""
+
+#: app/templates/community/add_image_post.html:30
+#: app/templates/post/post_edit_image.html:17
+msgid "Describe the image, to help visually impaired people."
+msgstr ""
+
+#: app/templates/community/add_local.html:31
+#, python-format
+msgid "Only people using %(name)s can post or reply"
+msgstr ""
+
+#: app/templates/community/add_remote.html:25
+#: app/templates/community/lookup_remote.html:14
+msgid "Found a community:"
+msgstr ""
+
+#: app/templates/community/community.html:27
+#: app/templates/community/community.html:48
+#: app/templates/community/community.html:66
+#: app/templates/post/_post_full.html:20 app/templates/post/_post_full.html:66
+#: app/templates/post/_post_teaser.html:56
+msgid "Not safe for work"
+msgstr ""
+
+#: app/templates/community/community.html:28
+#: app/templates/community/community.html:49
+#: app/templates/community/community.html:67
+msgid "Not safe for life"
+msgstr ""
+
+#: app/templates/community/community.html:76
+#: app/templates/community/community.html:84
+msgid "No posts in this community yet."
+msgstr ""
+
+#: app/templates/community/community.html:121
+#: app/templates/post/add_reply.html:58
+#: app/templates/post/continue_discussion.html:109
+#: app/templates/post/post.html:184 app/templates/post/post_reply_edit.html:54
+msgid "Search this community"
+msgstr ""
+
+#: app/templates/community/community.html:127
+#: app/templates/post/add_reply.html:64
+#: app/templates/post/continue_discussion.html:115
+#: app/templates/post/post.html:190 app/templates/post/post_reply_edit.html:60
+msgid "About community"
+msgstr ""
+
+#: app/templates/community/community.html:146
+#, python-format
+msgid "Only people on %(instance_name)s can post or reply in this community."
+msgstr ""
+
+#: app/templates/community/community.html:156 app/templates/post/post.html:208
+msgid "Related communities"
+msgstr ""
+
+#: app/templates/community/community.html:162 app/templates/post/post.html:214
+#: app/templates/topic/show_topic.html:85
+msgid "Go to community"
+msgstr ""
+
+#: app/templates/community/community.html:175
+#: app/templates/post/add_reply.html:82
+#: app/templates/post/continue_discussion.html:133
+#: app/templates/post/post.html:227 app/templates/post/post_reply_edit.html:78
+msgid "Community Settings"
+msgstr ""
+
+#: app/templates/community/community.html:179
+msgid "Settings & Moderation"
+msgstr ""
+
+#: app/templates/community/community_ban_user.html:13
+#, python-format
+msgid "Ban \"%(user_name)s\" from %(community_name)s"
+msgstr ""
+
+#: app/templates/community/community_delete.html:13
+#, python-format
+msgid "Delete \"%(community_title)s\""
+msgstr ""
+
+#: app/templates/community/community_edit.html:23
+#, python-format
+msgid "Edit %(community)s"
+msgstr ""
+
+#: app/templates/community/community_edit.html:28
+msgid "Edit and configure this community"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:24
+msgid "See and change who moderates this community"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:26
+#: app/templates/community/community_moderate.html:24
+#: app/templates/community/community_moderate_subscribers.html:24
+msgid "Add moderator"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:43
+msgid "Remove"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:27
+#, python-format
+msgid "See and handle all reports made about %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:67
+msgid "Escalate"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:68
+msgid "Resolve"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:70
+msgid "Ignore"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:90
+msgid "No reports yet"
+msgstr ""
+
+#: app/templates/community/community_moderate_report_escalate.html:13
+msgid "Escalate report to admins"
+msgstr ""
+
+#: app/templates/community/community_moderate_report_escalate.html:14
+msgid ""
+"For reports that could potentially involve legal issues or where you are "
+"unsure how to respond, you may prefer to let admins handle it."
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:27
+#, python-format
+msgid "See who is subscribed to %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:77
+msgid "This community has no subscribers"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:79
+msgid "Banned People"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:80
+#, python-format
+msgid "See and manage who is banned from %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:116
+#: app/templates/domain/domain.html:61
+#: app/templates/domain/domains_blocked.html:46
+#: app/templates/user/show_profile.html:169
+msgid "Unban"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:125
+msgid "No banned people yet"
+msgstr ""
+
+#: app/templates/domain/domain.html:14 app/templates/domain/domains.html:12
+#: app/templates/domain/domains.html:21
+#: app/templates/domain/domains_blocked.html:21
+#: app/templates/user/filters.html:60
+msgid "Domains"
+msgstr ""
+
+#: app/templates/domain/domain.html:23
+msgid "No posts in this domain yet."
+msgstr ""
+
+#: app/templates/domain/domain.html:45
+msgid "Domain management"
+msgstr ""
+
+#: app/templates/domain/domain.html:51 app/templates/user/filters.html:71
+#: app/templates/user/filters.html:76 app/templates/user/filters.html:89
+#: app/templates/user/filters.html:94 app/templates/user/filters.html:107
+#: app/templates/user/filters.html:112 app/templates/user/filters.html:125
+#: app/templates/user/filters.html:130 app/templates/user/show_profile.html:52
+msgid "Unblock"
+msgstr ""
+
+#: app/templates/domain/domain.html:55 app/templates/user/show_profile.html:54
+msgid "Block"
+msgstr ""
+
+#: app/templates/domain/domain.html:65
+msgid "Ban instance-wide"
+msgstr ""
+
+#: app/templates/domain/domains.html:14
+#, python-format
+msgid "Domains containing \"%(search)s\""
+msgstr ""
+
+#: app/templates/domain/domains.html:24
+#: app/templates/domain/domains_blocked.html:24
+msgid "Banned domains"
+msgstr ""
+
+#: app/templates/domain/domains.html:38
+msgid "How many times has something on this domain been posted"
+msgstr ""
+
+#: app/templates/domain/domains_blocked.html:12
+msgid "Blocked domains"
+msgstr ""
+
+#: app/templates/domain/domains_blocked.html:14
+#, python-format
+msgid "Blocked domains containing \"%(search)s\""
+msgstr ""
+
+#: app/templates/domain/domains_blocked.html:46
+msgid "Unbanning this domain allows future posts linking to that domain."
+msgstr ""
+
+#: app/templates/domain/domains_blocked.html:48
+msgid ""
+"Banning this domain will delete all posts linking to this domain and "
+"prevent future posts linking to that domain."
+msgstr ""
+
+#: app/templates/errors/404.html:12
+msgid "Ooops, something is broken!"
+msgstr ""
+
+#: app/templates/errors/404.html:15
+msgid "The page your browser tried to load could not be found."
+msgstr ""
+
+#: app/templates/errors/404.html:16 app/templates/errors/500.html:16
+msgid "Back"
+msgstr ""
+
+#: app/templates/errors/500.html:12
+msgid "An unexpected error has occurred"
+msgstr ""
+
+#: app/templates/errors/500.html:15
+msgid ""
+"Sorry for the inconvenience! Please let us know about this, so we can "
+"repair it and make PieFed better for everyone."
+msgstr ""
+
+#: app/templates/post/_comment_voting_buttons.html:3
+msgid "UpVote button."
+msgstr ""
+
+#: app/templates/post/_comment_voting_buttons.html:9
+msgid "Score: "
+msgstr ""
+
+#: app/templates/post/_comment_voting_buttons.html:11
+msgid "DownVote button."
+msgstr ""
+
+#: app/templates/post/_comment_voting_buttons.html:21
+msgid "Score:"
+msgstr ""
+
+#: app/templates/post/_post_full.html:21 app/templates/post/_post_full.html:67
+#: app/templates/post/_post_teaser.html:57
+msgid "Potentially emotionally scarring content"
+msgstr ""
+
+#: app/templates/post/_post_full.html:28 app/templates/post/_post_full.html:76
+#: app/templates/post/_post_teaser.html:59
+msgid "Reported. Check post for issues."
+msgstr ""
+
+#: app/templates/post/_post_full.html:109
+#: app/templates/post/_post_full.html:110
+msgid "Show cross-posts"
+msgstr ""
+
+#: app/templates/post/_post_full.html:111
+msgid "Number of cross-posts:"
+msgstr ""
+
+#: app/templates/post/_post_reply_teaser.html:3
+msgid "View context"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:6
+#: app/templates/post/_post_teaser_masonry.html:6
+msgid "Filtered: "
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:18
+#: app/templates/post/_post_teaser.html:26
+#: app/templates/post/_post_teaser.html:42
+msgid "Read article"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:20
+#: app/templates/post/_post_teaser.html:30
+#: app/templates/post/_post_teaser.html:70
+#: app/templates/post/_post_teaser.html:72
+#: app/templates/post/_post_teaser_masonry.html:16
+#: app/templates/post/_post_teaser_masonry.html:20
+#: app/templates/post/_post_teaser_masonry.html:23
+#: app/templates/post/_post_teaser_masonry.html:55
+msgid "View image"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:22
+#: app/templates/post/_post_teaser.html:34
+msgid "Read post"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:54
+msgid "All posts about this domain"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:64
+#, python-format
+msgid "Go to community %(name)s"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:67
+#: app/templates/post/_post_teaser_masonry.html:47
+#: app/templates/post/_post_teaser_masonry.html:48
+#: app/templates/post/_post_teaser_masonry.html:68
+#: app/templates/post/_post_teaser_masonry.html:69
+msgid "View comments"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:67
+msgid "Number of comments:"
+msgstr ""
+
+#: app/templates/post/_post_voting_buttons.html:3
+#, python-format
+msgid "UpVote button, %(count)d upvotes so far."
+msgstr ""
+
+#: app/templates/post/_post_voting_buttons.html:11
+#, python-format
+msgid "DownVote button, %(count)d downvotes so far."
+msgstr ""
+
+#: app/templates/post/_post_voting_buttons_masonry.html:3
+msgid "UpVote"
+msgstr ""
+
+#: app/templates/post/_post_voting_buttons_masonry.html:10
+msgid "DownVote"
+msgstr ""
+
+#: app/templates/post/add_reply.html:21 app/templates/post/post.html:23
+msgid ""
+"This post is hosted on beehaw.org which has higher standards of behaviour than "
+"most places. Be nice."
+msgstr ""
+
+#: app/templates/post/add_reply.html:86
+#: app/templates/post/continue_discussion.html:137
+#: app/templates/post/post.html:231 app/templates/post/post_reply_edit.html:82
+msgid "Moderate"
+msgstr ""
+
+#: app/templates/post/continue_discussion.html:47
+#: app/templates/post/post.html:108
+msgid "Reported. Check comment for issues."
+msgstr ""
+
+#: app/templates/post/post.html:26
+msgid ""
+"This post is hosted on lemmy.ml which will ban you for saying anything "
+"negative about China, Russia or Putin. Tread carefully."
+msgstr ""
+
+#: app/templates/post/post.html:52
+msgid "Verify your email address to comment"
+msgstr ""
+
+#: app/templates/post/post.html:55
+msgid "Log in to comment"
+msgstr ""
+
+#: app/templates/post/post.html:58
+msgid "Comments are disabled."
+msgstr ""
+
+#: app/templates/post/post.html:65
+msgid "Sort by magic"
+msgstr ""
+
+#: app/templates/post/post.html:68
+msgid "Comments with the most upvotes"
+msgstr ""
+
+#: app/templates/post/post.html:71
+msgid "Show newest first"
+msgstr ""
+
+#: app/templates/post/post.html:87
+msgid "Author"
+msgstr ""
+
+#: app/templates/post/post.html:104
+msgid "Post creator"
+msgstr ""
+
+#: app/templates/post/post.html:105
+msgid "When: "
+msgstr ""
+
+#: app/templates/post/post.html:134
+msgid "Comment options"
+msgstr ""
+
+#: app/templates/post/post_cross_posts.html:11
+#, python-format
+msgid "Cross-posts for \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/post/post_cross_posts.html:12
+msgid "Posts to the same url have also been created in the following communities:"
+msgstr ""
+
+#: app/templates/post/post_mea_culpa.html:15
+msgid ""
+"If you wish to de-escalate the discussion on your post and now feel like "
+"it was a mistake, click the button below."
+msgstr ""
+
+#: app/templates/post/post_mea_culpa.html:16
+msgid ""
+"No further comments will be posted and a message saying you made a "
+"mistake in this post will be displayed."
+msgstr ""
+
+#: app/templates/post/post_mea_culpa.html:17
+msgid "The effect of downvotes on your reputation score will be removed."
+msgstr ""
+
+#: app/templates/post/post_options.html:13
+#, python-format
+msgid "Options for \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/post/post_options.html:18
+#: app/templates/post/post_reply_options.html:18
+msgid "Edit"
+msgstr ""
+
+#: app/templates/post/post_options.html:24
+msgid "I made a mistake with this post and have changed my mind about the topic"
+msgstr ""
+
+#: app/templates/post/post_options.html:28
+#, python-format
+msgid "Block post author @%(author_name)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:31
+#, python-format
+msgid "Ban post author @%(author_name)s from
%(community_name)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:35
+#, python-format
+msgid "Block domain %(domain)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:39
+#: app/templates/post/post_reply_options.html:27
+#, python-format
+msgid "Hide every post from author's instance: %(name)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:45
+#, python-format
+msgid "View original on %(domain)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:50
+#: app/templates/post/post_reply_options.html:34
+msgid ""
+"If you want to perform more than one of these (e.g. block and report), "
+"hold down Ctrl and click, then complete the operation in the new tabs "
+"that open."
+msgstr ""
+
+#: app/templates/post/post_reply_edit.html:44
+msgid "Unsubscribe"
+msgstr ""
+
+#: app/templates/post/post_reply_edit.html:46
+msgid "Subscribe"
+msgstr ""
+
+#: app/templates/post/post_reply_options.html:13
+#, python-format
+msgid "Options for comment on \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/post/post_reply_options.html:24
+#, python-format
+msgid "Block author @%(author_name)s"
+msgstr ""
+
+#: app/templates/post/post_reply_report.html:13
+#, python-format
+msgid "Report comment on \"%(post_title)s\" by %(reply_name)s"
+msgstr ""
+
+#: app/templates/post/post_report.html:13
+#, python-format
+msgid "Report \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/search/results.html:11
+msgid "Search results for"
+msgstr ""
+
+#: app/templates/search/results.html:16
+msgid "No posts match your search."
+msgstr ""
+
+#: app/templates/search/start.html:13
+msgid "Search for posts"
+msgstr ""
+
+#: app/templates/search/start.html:20
+msgid "Example searches:"
+msgstr ""
+
+#: app/templates/search/start.html:23
+msgid "star wars"
+msgstr ""
+
+#: app/templates/search/start.html:24
+msgid ""
+"There is an implied \"and\" here. Results will have both words somewhere "
+"in them."
+msgstr ""
+
+#: app/templates/search/start.html:27
+msgid "star or wars"
+msgstr ""
+
+#: app/templates/search/start.html:28
+msgid ""
+"This will broaden the search to include results that contain any of the "
+"words."
+msgstr ""
+
+#: app/templates/search/start.html:31
+msgid "star -wars"
+msgstr ""
+
+#: app/templates/search/start.html:32
+msgid ""
+"To search for things containing \"star\" but not \"wars\" you can put a -"
+" before the word you want to exclude."
+msgstr ""
+
+#: app/templates/search/start.html:35
+msgid "\"star wars\""
+msgstr ""
+
+#: app/templates/search/start.html:36
+msgid "Results will have exactly that phrase in them."
+msgstr ""
+
+#: app/templates/topic/choose_topics.html:9
+msgid "Please choose at least 3 topics that interest you."
+msgstr ""
+
+#: app/templates/topic/show_topic.html:23
+msgid "Sub-topics"
+msgstr ""
+
+#: app/templates/topic/show_topic.html:36
+#: app/templates/topic/show_topic.html:44
+msgid "No posts in this topic yet."
+msgstr ""
+
+#: app/templates/topic/show_topic.html:79
+msgid "Topic communities"
+msgstr ""
+
+#: app/templates/topic/topic_create_post.html:9
+#, python-format
+msgid "Which community within %(topic)s to post in?"
+msgstr ""
+
+#: app/templates/topic/topic_create_post.html:17
+#, python-format
+msgid "Post in %(name)s"
+msgstr ""
+
+#: app/templates/user/_user_nav.html:8 app/templates/user/notifications.html:54
+#: app/templates/user/show_profile.html:121
+msgid "Profile"
+msgstr ""
+
+#: app/templates/user/_user_nav.html:11
+msgid "Blocks & Filters"
+msgstr ""
+
+#: app/templates/user/delete_account.html:15
+#: app/templates/user/edit_settings.html:17
+#: app/templates/user/edit_settings.html:20
+msgid "Change settings"
+msgstr ""
+
+#: app/templates/user/delete_account.html:18
+#, python-format
+msgid "Delete %(username)s"
+msgstr ""
+
+#: app/templates/user/delete_account.html:20
+#, python-format
+msgid ""
+"You are about to permanently delete the account with the username "
+"\"%(username)s.\" This means your profile will "
+"disappear, pictures will be deleted. Text-based posts will stay but look "
+"like they are from someone named \"deleted.\""
+msgstr ""
+
+#: app/templates/user/delete_account.html:21
+#, python-format
+msgid ""
+"Once you hit delete, nobody can use \"%(username)s\" as a username again."
+" We are doing this so nobody pretends to be you."
+msgstr ""
+
+#: app/templates/user/delete_account.html:22
+msgid ""
+"We will tell other websites (fediverse instances) that your account is "
+"gone. But it's up to them to decide what to do with any copies they have "
+"of your stuff. Some websites work differently than ours."
+msgstr ""
+
+#: app/templates/user/delete_account.html:23
+msgid ""
+"Remember, once you do this, there's no going back. Are you sure you want "
+"to continue?"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:16 app/templates/user/filters.html:16
+#: app/templates/user/filters.html:19
+msgid "Filters"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:18 app/user/routes.py:729
+msgid "Edit filter"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:20
+#: app/templates/user/edit_filters.html:27 app/templates/user/filters.html:22
+#: app/user/routes.py:689
+msgid "Add filter"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:25
+#, python-format
+msgid "Filter %(name)s"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:33
+msgid "Filter in these places"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:39
+msgid "One per line. Case does not matter."
+msgstr ""
+
+#: app/templates/user/edit_filters.html:41
+msgid "Stop applying this filter after this date. Optional."
+msgstr ""
+
+#: app/templates/user/edit_profile.html:16 app/user/routes.py:153
+#: app/user/routes.py:218
+msgid "Edit profile"
+msgstr ""
+
+#: app/templates/user/edit_profile.html:19
+#, python-format
+msgid "Edit profile of %(name)s"
+msgstr ""
+
+#: app/templates/user/edit_profile.html:58
+msgid "Delete account"
+msgstr ""
+
+#: app/templates/user/email_notifs_unsubscribed.html:9
+#: app/templates/user/newsletter_unsubscribed.html:9
+msgid "Unsubscribed"
+msgstr ""
+
+#: app/templates/user/email_notifs_unsubscribed.html:10
+msgid ""
+"You have unsubscribed from emails about unread notifications. We might "
+"email you for other reasons, though."
+msgstr ""
+
+#: app/templates/user/email_notifs_unsubscribed.html:11
+#: app/templates/user/newsletter_unsubscribed.html:11
+msgid "More email settings"
+msgstr ""
+
+#: app/templates/user/filters.html:25
+msgid ""
+"Filters can hide posts that contain keywords you specify, either by "
+"making them less noticeable or invisible."
+msgstr ""
+
+#: app/templates/user/filters.html:30
+msgid "Keywords"
+msgstr ""
+
+#: app/templates/user/filters.html:32
+msgid "Expires"
+msgstr ""
+
+#: app/templates/user/filters.html:39
+msgid "Invisible"
+msgstr ""
+
+#: app/templates/user/filters.html:39
+msgid "Semi-transparent"
+msgstr ""
+
+#: app/templates/user/filters.html:49
+msgid "No filters defined yet."
+msgstr ""
+
+#: app/templates/user/filters.html:62
+msgid "Instances"
+msgstr ""
+
+#: app/templates/user/filters.html:81
+msgid "No blocked people"
+msgstr ""
+
+#: app/templates/user/filters.html:99
+msgid "No blocked communities"
+msgstr ""
+
+#: app/templates/user/filters.html:117
+msgid "No blocked domains"
+msgstr ""
+
+#: app/templates/user/filters.html:135
+msgid "No blocked instances"
+msgstr ""
+
+#: app/templates/user/newsletter_unsubscribed.html:10
+msgid ""
+"You have unsubscribed from the email newsletter. We might email you for "
+"other reasons, though."
+msgstr ""
+
+#: app/templates/user/notifications.html:25
+msgid "Mark all as read"
+msgstr ""
+
+#: app/templates/user/notifications.html:49
+#: app/templates/user/show_profile.html:116
+msgid "Manage"
+msgstr ""
+
+#: app/templates/user/notifications.html:95
+#: app/templates/user/show_profile.html:192
+msgid "Upvoted"
+msgstr ""
+
+#: app/templates/user/people.html:32
+msgid "No people to show"
+msgstr ""
+
+#: app/templates/user/show_profile.html:24
+#: app/templates/user/show_profile.html:29
+msgid "Profile pic"
+msgstr ""
+
+#: app/templates/user/show_profile.html:47
+msgid "Send message"
+msgstr ""
+
+#: app/templates/user/show_profile.html:49
+msgid "Send message with matrix chat"
+msgstr ""
+
+#: app/templates/user/show_profile.html:49
+msgid "Send message using Matrix"
+msgstr ""
+
+#: app/templates/user/show_profile.html:61
+msgid "Bot Account"
+msgstr ""
+
+#: app/templates/user/show_profile.html:63
+msgid "Attitude"
+msgstr ""
+
+#: app/templates/user/show_profile.html:63
+msgid "Ratio of upvotes cast to downvotes cast. Higher is more positive."
+msgstr ""
+
+#: app/templates/user/show_profile.html:72
+msgid "Post pagination"
+msgstr ""
+
+#: app/templates/user/show_profile.html:85
+msgid "No posts yet."
+msgstr ""
+
+#: app/templates/user/show_profile.html:95
+msgid "Comment pagination"
+msgstr ""
+
+#: app/templates/user/show_profile.html:108
+msgid "No comments yet."
+msgstr ""
+
+#: app/templates/user/show_profile.html:137
+msgid "Member of"
+msgstr ""
+
+#: app/templates/user/show_profile.html:162
+msgid "Moderate user"
+msgstr ""
+
+#: app/templates/user/show_profile.html:182
+msgid "Ban + Purge"
+msgstr ""
+
+#: app/templates/user/user_report.html:13
+#, python-format
+msgid "Report \"%(user_name)s\""
+msgstr ""
+
+#: app/topic/forms.py:13
+msgid "Choose some topics you are interested in"
+msgstr ""
+
+#: app/topic/forms.py:14
+msgid "Choose"
+msgstr ""
+
+#: app/topic/routes.py:172
+msgid ""
+"You have joined some communities relating to those interests. Find them "
+"on the Topics menu or browse the home page."
+msgstr ""
+
+#: app/topic/routes.py:176
+msgid ""
+"You did not choose any topics. Would you like to choose individual "
+"communities instead?"
+msgstr ""
+
+#: app/user/forms.py:13
+msgid "Display name"
+msgstr ""
+
+#: app/user/forms.py:15
+msgid "Set new password"
+msgstr ""
+
+#: app/user/forms.py:22
+msgid "Save profile"
+msgstr ""
+
+#: app/user/forms.py:26
+msgid "That email address is already in use by another account"
+msgstr ""
+
+#: app/user/forms.py:30
+msgid "Matrix user ids start with @"
+msgstr ""
+
+#: app/user/forms.py:35
+msgid "Receive email about missed notifications"
+msgstr ""
+
+#: app/user/forms.py:39
+msgid "Use markdown editor GUI when writing"
+msgstr ""
+
+#: app/user/forms.py:40
+msgid "Show profile in user list"
+msgstr ""
+
+#: app/user/forms.py:41
+msgid "My posts appear in search results"
+msgstr ""
+
+#: app/user/forms.py:42
+msgid "Manually approve followers"
+msgstr ""
+
+#: app/user/forms.py:43
+msgid "Import community subscriptions and user blocks from Lemmy"
+msgstr ""
+
+#: app/user/forms.py:49
+msgid "By default, sort posts by"
+msgstr ""
+
+#: app/user/forms.py:50
+msgid "Theme"
+msgstr ""
+
+#: app/user/forms.py:51
+msgid "Save settings"
+msgstr ""
+
+#: app/user/forms.py:55
+msgid "Yes, delete my account"
+msgstr ""
+
+#: app/user/forms.py:66
+msgid "Malicious reporting"
+msgstr ""
+
+#: app/user/forms.py:90
+msgid "Home feed"
+msgstr ""
+
+#: app/user/forms.py:91
+msgid "Posts in communities"
+msgstr ""
+
+#: app/user/forms.py:92
+msgid "Comments on posts"
+msgstr ""
+
+#: app/user/forms.py:93
+msgid "Make semi-transparent"
+msgstr ""
+
+#: app/user/forms.py:93
+msgid "Hide completely"
+msgstr ""
+
+#: app/user/forms.py:94
+msgid "Action to take"
+msgstr ""
+
+#: app/user/forms.py:95
+msgid "Keywords that trigger this filter"
+msgstr ""
+
+#: app/user/forms.py:98
+msgid "Expire after"
+msgstr ""
+
+#: app/user/routes.py:49
+msgid "This user has been banned."
+msgstr ""
+
+#: app/user/routes.py:51
+msgid "This user has been deleted."
+msgstr ""
+
+#: app/user/routes.py:83
+#, python-format
+msgid "Posts by %(user_name)s"
+msgstr ""
+
+#: app/user/routes.py:200
+msgid ""
+"Your subscriptions and blocks are being imported. If you have many it "
+"could take a few minutes."
+msgstr ""
+
+#: app/user/routes.py:235
+msgid "You cannot ban yourself."
+msgstr ""
+
+#: app/user/routes.py:260
+msgid "You cannot unban yourself."
+msgstr ""
+
+#: app/user/routes.py:284
+msgid "You cannot block yourself."
+msgstr ""
+
+#: app/user/routes.py:313
+msgid "You cannot unblock yourself."
+msgstr ""
+
+#: app/user/routes.py:340
+msgid ""
+"Moderators have already assessed reports regarding this person, no "
+"further reports are necessary."
+msgstr ""
+
+#: app/user/routes.py:346
+#, python-format
+msgid "%(user_name)s has already been reported, thank you!"
+msgstr ""
+
+#: app/user/routes.py:368
+#, python-format
+msgid "%(user_name)s has been reported, thank you!"
+msgstr ""
+
+#: app/user/routes.py:374
+msgid "Report user"
+msgstr ""
+
+#: app/user/routes.py:391
+msgid "You cannot delete yourself."
+msgstr ""
+
+#: app/user/routes.py:448
+msgid "Account deletion in progress. Give it a few minutes."
+msgstr ""
+
+#: app/user/routes.py:453
+msgid "Delete my account"
+msgstr ""
+
+#: app/user/routes.py:498
+msgid "You cannot purge yourself."
+msgstr ""
+
+#: app/user/routes.py:575
+msgid "All notifications marked as read."
+msgstr ""
+
+#: app/user/routes.py:746
+msgid "Filter deleted."
+msgstr ""
+
diff --git a/app/translations/fr/LC_MESSAGES/messages.po b/app/translations/fr/LC_MESSAGES/messages.po
index e49a5645..d21db062 100644
--- a/app/translations/fr/LC_MESSAGES/messages.po
+++ b/app/translations/fr/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-03-17 19:06+1300\n"
+"POT-Creation-Date: 2024-04-09 12:33+1200\n"
"PO-Revision-Date: 2024-03-17 19:10+1300\n"
"Last-Translator: FULL NAME \n"
"Language: fr\n"
@@ -18,11 +18,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
-#: app/__init__.py:26
+#: app/__init__.py:33
msgid "Please log in to access this page."
msgstr ""
-#: app/cli.py:238 app/main/routes.py:300
+#: app/cli.py:225 app/main/routes.py:328
msgid "[PieFed] You have unread notifications"
msgstr ""
@@ -42,13 +42,21 @@ msgstr ""
msgid "Welcome to PieFed"
msgstr ""
-#: app/activitypub/util.py:1205 app/post/routes.py:85 app/post/routes.py:472
+#: app/activitypub/util.py:1280 app/post/routes.py:91 app/post/routes.py:509
#, python-format
msgid "Reply from %(name)s on %(post_title)s"
msgstr ""
-#: app/admin/forms.py:13 app/admin/forms.py:97 app/community/forms.py:18
-#: app/templates/community/community_mod_list.html:30
+#: app/activitypub/util.py:1679 app/post/routes.py:1053
+msgid "A post has been reported"
+msgstr ""
+
+#: app/activitypub/util.py:1700 app/post/routes.py:1187
+msgid "A comment has been reported"
+msgstr ""
+
+#: app/admin/forms.py:13 app/admin/forms.py:99 app/community/forms.py:18
+#: app/templates/community/community_mod_list.html:32
#: app/templates/user/filters.html:29 app/templates/user/filters.html:70
#: app/templates/user/filters.html:88 app/templates/user/filters.html:106
#: app/templates/user/filters.html:124 app/user/forms.py:89
@@ -71,10 +79,10 @@ msgstr ""
msgid "Legal information"
msgstr ""
-#: app/admin/forms.py:20 app/admin/forms.py:36 app/admin/forms.py:44
-#: app/admin/forms.py:81 app/admin/forms.py:100 app/admin/forms.py:126
-#: app/admin/forms.py:188 app/community/forms.py:56 app/community/forms.py:95
-#: app/user/forms.py:99
+#: app/admin/forms.py:20 app/admin/forms.py:37 app/admin/forms.py:46
+#: app/admin/forms.py:83 app/admin/forms.py:102 app/admin/forms.py:128
+#: app/admin/forms.py:180 app/community/forms.py:56 app/community/forms.py:96
+#: app/community/forms.py:109 app/community/forms.py:129 app/user/forms.py:99
msgid "Save"
msgstr ""
@@ -127,434 +135,439 @@ msgid "Question to ask people applying for an account"
msgstr ""
#: app/admin/forms.py:34
-msgid "Log ActivityPub JSON for debugging"
+msgid "Block registrations from these referrers (one per line)"
msgstr ""
#: app/admin/forms.py:35
+msgid "Log ActivityPub JSON for debugging"
+msgstr ""
+
+#: app/admin/forms.py:36
msgid "Default theme"
msgstr ""
-#: app/admin/forms.py:40
+#: app/admin/forms.py:41
msgid "Allowlist instead of blocklist"
msgstr ""
-#: app/admin/forms.py:41
+#: app/admin/forms.py:42
msgid "Allow federation with these instances"
msgstr ""
-#: app/admin/forms.py:42
+#: app/admin/forms.py:43
msgid "Blocklist instead of allowlist"
msgstr ""
-#: app/admin/forms.py:43
+#: app/admin/forms.py:44
msgid "Deny federation with these instances"
msgstr ""
-#: app/admin/forms.py:48 app/community/forms.py:42 app/community/forms.py:80
-#: app/community/forms.py:82 app/community/forms.py:86
+#: app/admin/forms.py:45
+msgid "Discard all posts and comments with these phrases (one per line)"
+msgstr ""
+
+#: app/admin/forms.py:50 app/community/forms.py:42 app/community/forms.py:90
+#: app/community/forms.py:101 app/community/forms.py:121
msgid "Title"
msgstr ""
-#: app/admin/forms.py:49 app/admin/forms.py:98 app/community/forms.py:19
+#: app/admin/forms.py:51 app/admin/forms.py:100 app/community/forms.py:19
msgid "Url"
msgstr ""
-#: app/admin/forms.py:50 app/community/forms.py:20 app/community/forms.py:43
+#: app/admin/forms.py:52 app/community/forms.py:20 app/community/forms.py:43
msgid "Description"
msgstr ""
-#: app/admin/forms.py:51 app/community/forms.py:21 app/community/forms.py:44
+#: app/admin/forms.py:53 app/community/forms.py:21 app/community/forms.py:44
msgid "Icon image"
msgstr ""
-#: app/admin/forms.py:52 app/community/forms.py:22 app/community/forms.py:45
+#: app/admin/forms.py:54 app/community/forms.py:22 app/community/forms.py:45
msgid "Banner image"
msgstr ""
-#: app/admin/forms.py:53 app/community/forms.py:23 app/community/forms.py:46
+#: app/admin/forms.py:55 app/community/forms.py:23 app/community/forms.py:46
msgid "Rules"
msgstr ""
-#: app/admin/forms.py:54 app/community/forms.py:47
+#: app/admin/forms.py:56 app/community/forms.py:47
msgid "Porn community"
msgstr ""
-#: app/admin/forms.py:55
+#: app/admin/forms.py:57
msgid "Banned - no new posts accepted"
msgstr ""
-#: app/admin/forms.py:56 app/community/forms.py:48
+#: app/admin/forms.py:58 app/community/forms.py:48
msgid "Only accept posts from current instance"
msgstr ""
-#: app/admin/forms.py:57 app/community/forms.py:49
+#: app/admin/forms.py:59 app/community/forms.py:49
msgid "Only moderators can post"
msgstr ""
-#: app/admin/forms.py:58 app/community/forms.py:50
+#: app/admin/forms.py:60 app/community/forms.py:50
msgid "New moderators wanted"
msgstr ""
-#: app/admin/forms.py:59
+#: app/admin/forms.py:61
msgid "Posts show on home page"
msgstr ""
-#: app/admin/forms.py:60
+#: app/admin/forms.py:62
msgid "Posts can be popular"
msgstr ""
-#: app/admin/forms.py:61
+#: app/admin/forms.py:63
msgid "Posts show in All list"
msgstr ""
-#: app/admin/forms.py:62
+#: app/admin/forms.py:64
msgid "Low quality / toxic - upvotes in here don't add to reputation"
msgstr ""
-#: app/admin/forms.py:63
+#: app/admin/forms.py:65
msgid "Forever"
msgstr ""
-#: app/admin/forms.py:64
+#: app/admin/forms.py:66
msgid "1 week"
msgstr ""
-#: app/admin/forms.py:65
+#: app/admin/forms.py:67
msgid "2 weeks"
msgstr ""
-#: app/admin/forms.py:66
+#: app/admin/forms.py:68
msgid "1 month"
msgstr ""
-#: app/admin/forms.py:67
+#: app/admin/forms.py:69
msgid "2 months"
msgstr ""
-#: app/admin/forms.py:68
+#: app/admin/forms.py:70
msgid "3 months"
msgstr ""
-#: app/admin/forms.py:69
+#: app/admin/forms.py:71
msgid "6 months"
msgstr ""
-#: app/admin/forms.py:70
+#: app/admin/forms.py:72
msgid "1 year"
msgstr ""
-#: app/admin/forms.py:71
+#: app/admin/forms.py:73
msgid "2 years"
msgstr ""
-#: app/admin/forms.py:72
+#: app/admin/forms.py:74
msgid "5 years"
msgstr ""
-#: app/admin/forms.py:73
+#: app/admin/forms.py:75
msgid "10 years"
msgstr ""
-#: app/admin/forms.py:75
+#: app/admin/forms.py:77
msgid "Retain content"
msgstr ""
-#: app/admin/forms.py:76 app/community/forms.py:51
+#: app/admin/forms.py:78 app/community/forms.py:51
msgid "Topic"
msgstr ""
-#: app/admin/forms.py:77 app/community/forms.py:52
+#: app/admin/forms.py:79 app/community/forms.py:52
#: app/templates/community/_community_nav.html:23
msgid "List"
msgstr ""
-#: app/admin/forms.py:78 app/community/forms.py:53
+#: app/admin/forms.py:80 app/community/forms.py:53
msgid "Masonry"
msgstr ""
-#: app/admin/forms.py:79 app/community/forms.py:54
+#: app/admin/forms.py:81 app/community/forms.py:54
msgid "Wide masonry"
msgstr ""
-#: app/admin/forms.py:80 app/community/forms.py:55
+#: app/admin/forms.py:82 app/community/forms.py:55
msgid "Layout"
msgstr ""
-#: app/admin/forms.py:87 app/community/forms.py:32
+#: app/admin/forms.py:89 app/community/forms.py:32
msgid "Url is required."
msgstr ""
-#: app/admin/forms.py:91 app/community/forms.py:36
+#: app/admin/forms.py:93 app/community/forms.py:36
msgid "- cannot be in Url. Use _ instead?"
msgstr ""
-#: app/admin/forms.py:99
+#: app/admin/forms.py:101
msgid "Parent topic"
msgstr ""
-#: app/admin/forms.py:104 app/auth/forms.py:10 app/auth/forms.py:17
+#: app/admin/forms.py:106 app/auth/forms.py:10 app/auth/forms.py:17
#: app/community/forms.py:60
msgid "User name"
msgstr ""
-#: app/admin/forms.py:106 app/admin/forms.py:169 app/user/forms.py:14
+#: app/admin/forms.py:108 app/user/forms.py:14
msgid "Email address"
msgstr ""
-#: app/admin/forms.py:107 app/auth/forms.py:11 app/auth/forms.py:20
+#: app/admin/forms.py:109 app/auth/forms.py:11 app/auth/forms.py:20
#: app/auth/forms.py:74
msgid "Password"
msgstr ""
-#: app/admin/forms.py:109 app/auth/forms.py:22 app/auth/forms.py:76
+#: app/admin/forms.py:111 app/auth/forms.py:22 app/auth/forms.py:76
msgid "Repeat password"
msgstr ""
-#: app/admin/forms.py:110 app/admin/forms.py:168 app/user/forms.py:17
+#: app/admin/forms.py:112 app/user/forms.py:17
msgid "Bio"
msgstr ""
-#: app/admin/forms.py:111 app/admin/forms.py:170 app/user/forms.py:18
+#: app/admin/forms.py:113 app/user/forms.py:18
msgid "Matrix User ID"
msgstr ""
-#: app/admin/forms.py:112 app/admin/forms.py:171 app/user/forms.py:19
+#: app/admin/forms.py:114 app/user/forms.py:19
msgid "Avatar image"
msgstr ""
-#: app/admin/forms.py:113 app/admin/forms.py:172 app/user/forms.py:20
+#: app/admin/forms.py:115 app/user/forms.py:20
msgid "Top banner image"
msgstr ""
-#: app/admin/forms.py:114 app/admin/forms.py:173 app/user/forms.py:21
+#: app/admin/forms.py:116 app/admin/forms.py:170 app/user/forms.py:21
msgid "This profile is a bot"
msgstr ""
-#: app/admin/forms.py:115 app/admin/forms.py:174
+#: app/admin/forms.py:117 app/admin/forms.py:171
msgid "Email address is verified"
msgstr ""
-#: app/admin/forms.py:116 app/admin/forms.py:175
+#: app/admin/forms.py:118 app/admin/forms.py:172
msgid "Banned"
msgstr ""
-#: app/admin/forms.py:117 app/admin/forms.py:176 app/user/forms.py:34
+#: app/admin/forms.py:119 app/user/forms.py:34
msgid "Subscribe to email newsletter"
msgstr ""
-#: app/admin/forms.py:118 app/admin/forms.py:177 app/user/forms.py:36
+#: app/admin/forms.py:120 app/user/forms.py:36
msgid "Hide posts by bots"
msgstr ""
-#: app/admin/forms.py:119 app/admin/forms.py:178 app/user/forms.py:37
+#: app/admin/forms.py:121 app/user/forms.py:37
msgid "Show NSFW posts"
msgstr ""
-#: app/admin/forms.py:120 app/admin/forms.py:179 app/user/forms.py:38
+#: app/admin/forms.py:122 app/user/forms.py:38
msgid "Show NSFL posts"
msgstr ""
-#: app/admin/forms.py:121 app/admin/forms.py:183
+#: app/admin/forms.py:123 app/admin/forms.py:173
msgid "User"
msgstr ""
-#: app/admin/forms.py:122 app/admin/forms.py:184
+#: app/admin/forms.py:124 app/admin/forms.py:174
msgid "Staff"
msgstr ""
-#: app/admin/forms.py:123 app/admin/forms.py:185 app/admin/routes.py:29
-#: app/templates/base.html:180
+#: app/admin/forms.py:125 app/admin/forms.py:175 app/admin/routes.py:32
+#: app/templates/base.html:185
msgid "Admin"
msgstr ""
-#: app/admin/forms.py:125 app/admin/forms.py:187
+#: app/admin/forms.py:127 app/admin/forms.py:177
msgid "Role"
msgstr ""
-#: app/admin/forms.py:131 app/auth/forms.py:32
+#: app/admin/forms.py:133 app/auth/forms.py:32
msgid "An account with this email address already exists."
msgstr ""
-#: app/admin/forms.py:135 app/auth/forms.py:36
+#: app/admin/forms.py:137 app/auth/forms.py:36
msgid "User names cannot contain @."
msgstr ""
-#: app/admin/forms.py:139 app/auth/forms.py:40
+#: app/admin/forms.py:141 app/auth/forms.py:40
msgid "This username was used in the past and cannot be reused."
msgstr ""
-#: app/admin/forms.py:141 app/auth/forms.py:42
+#: app/admin/forms.py:143 app/auth/forms.py:42
msgid "An account with this user name already exists."
msgstr ""
-#: app/admin/forms.py:144 app/auth/forms.py:45
+#: app/admin/forms.py:146 app/auth/forms.py:45
msgid "A community with this name exists so it cannot be used for a user."
msgstr ""
-#: app/admin/forms.py:151 app/admin/forms.py:164 app/auth/forms.py:52
+#: app/admin/forms.py:153 app/admin/forms.py:166 app/auth/forms.py:52
#: app/auth/forms.py:65
msgid "This password is too common."
msgstr ""
-#: app/admin/forms.py:161 app/auth/forms.py:62
+#: app/admin/forms.py:163 app/auth/forms.py:62
msgid "This password is not secure."
msgstr ""
-#: app/admin/forms.py:180 app/user/forms.py:40
-msgid "Show profile in user list"
+#: app/admin/forms.py:178
+msgid "Remove avatar"
msgstr ""
-#: app/admin/forms.py:181
-msgid "Allow search engines to index this profile"
+#: app/admin/forms.py:179
+msgid "Remove banner"
msgstr ""
-#: app/admin/forms.py:182 app/user/forms.py:42
-msgid "Manually approve followers"
-msgstr ""
-
-#: app/admin/forms.py:192
+#: app/admin/forms.py:184
msgid "Subject"
msgstr ""
-#: app/admin/forms.py:193
+#: app/admin/forms.py:185
msgid "Body (text)"
msgstr ""
-#: app/admin/forms.py:194
+#: app/admin/forms.py:186
msgid "Body (html)"
msgstr ""
-#: app/admin/forms.py:195
+#: app/admin/forms.py:187
msgid "Test mode"
msgstr ""
-#: app/admin/forms.py:196 app/admin/routes.py:732
+#: app/admin/forms.py:188 app/admin/routes.py:708
msgid "Send newsletter"
msgstr ""
-#: app/admin/routes.py:57 app/templates/admin/_nav.html:4
+#: app/admin/routes.py:60 app/templates/admin/_nav.html:4
msgid "Site profile"
msgstr ""
-#: app/admin/routes.py:102 app/templates/admin/_nav.html:5
+#: app/admin/routes.py:108 app/templates/admin/_nav.html:5
msgid "Misc settings"
msgstr ""
-#: app/admin/routes.py:133
+#: app/admin/routes.py:144
msgid "Admin settings saved"
msgstr ""
-#: app/admin/routes.py:143
+#: app/admin/routes.py:155
msgid "Federation settings"
msgstr ""
-#: app/admin/routes.py:165
+#: app/admin/routes.py:177
msgid "ActivityPub Log"
msgstr ""
-#: app/admin/routes.py:175
+#: app/admin/routes.py:187
msgid "Activity JSON"
msgstr ""
-#: app/admin/routes.py:210 app/community/routes.py:215 app/main/routes.py:181
-#: app/post/routes.py:211 app/templates/admin/_nav.html:6
+#: app/admin/routes.py:222 app/community/routes.py:232 app/main/routes.py:193
+#: app/post/routes.py:238 app/templates/admin/_nav.html:6
#: app/templates/list_communities.html:51 app/templates/user/filters.html:58
#: app/templates/user/notifications.html:66
-#: app/templates/user/show_profile.html:130
+#: app/templates/user/show_profile.html:133
msgid "Communities"
msgstr ""
-#: app/admin/routes.py:262 app/admin/routes.py:358 app/admin/routes.py:383
-#: app/admin/routes.py:578 app/community/routes.py:630
+#: app/admin/routes.py:274 app/admin/routes.py:370 app/admin/routes.py:395
+#: app/admin/routes.py:564 app/community/routes.py:808
msgid "Saved"
msgstr ""
-#: app/admin/routes.py:266
+#: app/admin/routes.py:278
msgid ""
"This is a remote community - most settings here will be regularly "
"overwritten with data from the original server."
msgstr ""
-#: app/admin/routes.py:283 app/community/routes.py:642
-#: app/templates/community/community_edit.html:20
+#: app/admin/routes.py:295 app/community/routes.py:820
msgid "Edit community"
msgstr ""
-#: app/admin/routes.py:302 app/community/routes.py:664
+#: app/admin/routes.py:314 app/community/routes.py:843
msgid "Community deleted"
msgstr ""
-#: app/admin/routes.py:336 app/community/routes.py:201 app/post/routes.py:197
-#: app/templates/admin/_nav.html:7 app/templates/base.html:134
-#: app/templates/base.html:152 app/templates/topic/show_topic.html:14
+#: app/admin/routes.py:348 app/community/routes.py:218 app/post/routes.py:224
+#: app/templates/admin/_nav.html:7 app/templates/base.html:137
+#: app/templates/base.html:155 app/templates/topic/show_topic.html:14
msgid "Topics"
msgstr ""
-#: app/admin/routes.py:361 app/templates/admin/topics.html:35
+#: app/admin/routes.py:373 app/templates/admin/topics.html:35
msgid "Add topic"
msgstr ""
-#: app/admin/routes.py:389
+#: app/admin/routes.py:401
msgid "Edit topic"
msgstr ""
-#: app/admin/routes.py:404
+#: app/admin/routes.py:416
msgid "Topic deleted"
msgstr ""
-#: app/admin/routes.py:406
+#: app/admin/routes.py:418
msgid "Cannot delete topic with communities assigned to it."
msgstr ""
-#: app/admin/routes.py:433 app/templates/admin/_nav.html:8
+#: app/admin/routes.py:445 app/templates/admin/_nav.html:8
msgid "Users"
msgstr ""
-#: app/admin/routes.py:463
+#: app/admin/routes.py:475
msgid "Problematic users"
msgstr ""
-#: app/admin/routes.py:484
+#: app/admin/routes.py:496
msgid "Bad posts"
msgstr ""
-#: app/admin/routes.py:517
+#: app/admin/routes.py:529
msgid "Registration approved."
msgstr ""
-#: app/admin/routes.py:574
+#: app/admin/routes.py:560
msgid ""
"Permissions are cached for 50 seconds so new admin roles won't take "
"effect immediately."
msgstr ""
-#: app/admin/routes.py:582
+#: app/admin/routes.py:568
msgid ""
"This is a remote user - most settings here will be regularly overwritten "
"with data from the original server."
msgstr ""
-#: app/admin/routes.py:599
+#: app/admin/routes.py:575
msgid "Edit user"
msgstr ""
-#: app/admin/routes.py:664
+#: app/admin/routes.py:640
msgid "User added"
msgstr ""
-#: app/admin/routes.py:667
+#: app/admin/routes.py:643
msgid "Add user"
msgstr ""
-#: app/admin/routes.py:691
+#: app/admin/routes.py:667
msgid "User deleted"
msgstr ""
-#: app/admin/routes.py:714
+#: app/admin/routes.py:690
+#: app/templates/community/_community_moderation_nav.html:11
+#: app/templates/community/community_moderate.html:21
msgid "Reports"
msgstr ""
-#: app/admin/util.py:125
+#: app/admin/util.py:110
msgid "None"
msgstr ""
@@ -574,7 +587,7 @@ msgstr ""
msgid "Why would you like to join this site?"
msgstr ""
-#: app/auth/forms.py:27 app/auth/routes.py:140 app/templates/base.html:141
+#: app/auth/forms.py:27 app/auth/routes.py:153 app/templates/base.html:144
msgid "Register"
msgstr ""
@@ -608,55 +621,55 @@ msgstr ""
msgid "Login"
msgstr ""
-#: app/auth/routes.py:97
+#: app/auth/routes.py:100
msgid "Sorry, you cannot use that email address"
msgstr ""
-#: app/auth/routes.py:99
+#: app/auth/routes.py:102
msgid "Sorry, you cannot use that user name"
msgstr ""
-#: app/auth/routes.py:106
+#: app/auth/routes.py:119
#, python-format
msgid "Your username contained special letters so it was changed to %(name)s."
msgstr ""
-#: app/auth/routes.py:145
+#: app/auth/routes.py:158
msgid "Account under review"
msgstr ""
-#: app/auth/routes.py:150 app/templates/auth/check_email.html:8
+#: app/auth/routes.py:163 app/templates/auth/check_email.html:8
msgid "Check your email"
msgstr ""
-#: app/auth/routes.py:161
+#: app/auth/routes.py:174
msgid "Sorry, you cannot use that email address."
msgstr ""
-#: app/auth/routes.py:166
+#: app/auth/routes.py:179
msgid "Check your email for a link to reset your password."
msgstr ""
-#: app/auth/routes.py:169
+#: app/auth/routes.py:182
msgid "No account with that email address exists"
msgstr ""
-#: app/auth/routes.py:171
+#: app/auth/routes.py:184
msgid "Reset Password"
msgstr ""
-#: app/auth/routes.py:185
+#: app/auth/routes.py:198
#, python-format
msgid ""
"Your password has been reset. Please use it to log in with user name of "
"%(name)s."
msgstr ""
-#: app/auth/routes.py:205
+#: app/auth/routes.py:218
msgid "Thank you for verifying your email address."
msgstr ""
-#: app/auth/routes.py:207
+#: app/auth/routes.py:220
msgid "Email address validation failed."
msgstr ""
@@ -720,22 +733,22 @@ msgstr ""
msgid "Self-harm or suicide"
msgstr ""
-#: app/chat/forms.py:29 app/community/forms.py:155 app/post/forms.py:26
+#: app/chat/forms.py:29 app/community/forms.py:162 app/post/forms.py:26
#: app/user/forms.py:73
msgid "Other"
msgstr ""
-#: app/chat/forms.py:30 app/community/forms.py:70 app/community/forms.py:157
+#: app/chat/forms.py:30 app/community/forms.py:81 app/community/forms.py:164
#: app/post/forms.py:27 app/user/forms.py:74
msgid "Reason"
msgstr ""
-#: app/chat/forms.py:31 app/community/forms.py:158 app/post/forms.py:28
+#: app/chat/forms.py:31 app/community/forms.py:165 app/post/forms.py:28
#: app/user/forms.py:75
msgid "More info"
msgstr ""
-#: app/chat/forms.py:33 app/community/forms.py:160 app/post/forms.py:30
+#: app/chat/forms.py:33 app/community/forms.py:167 app/post/forms.py:30
#: app/templates/user/show_profile.html:56 app/user/forms.py:77
msgid "Report"
msgstr ""
@@ -770,12 +783,12 @@ msgstr ""
msgid "Report conversation"
msgstr ""
-#: app/chat/util.py:58
+#: app/chat/util.py:59
#, python-format
msgid "Message failed to send to %(name)s."
msgstr ""
-#: app/chat/util.py:60
+#: app/chat/util.py:61
msgid "Message sent."
msgstr ""
@@ -788,157 +801,177 @@ msgid "Add"
msgstr ""
#: app/community/forms.py:65
+msgid "Amend the report description if necessary"
+msgstr ""
+
+#: app/community/forms.py:66
+msgid "Escalate report"
+msgstr ""
+
+#: app/community/forms.py:70
+msgid "Note for mod log"
+msgstr ""
+
+#: app/community/forms.py:71
+msgid "Also resolve all other reports about the same thing."
+msgstr ""
+
+#: app/community/forms.py:72
+#: app/templates/community/community_moderate_report_resolve.html:13
+msgid "Resolve report"
+msgstr ""
+
+#: app/community/forms.py:76
msgid "Community address"
msgstr ""
-#: app/community/forms.py:66 app/search/routes.py:52
-#: app/templates/base.html:193 app/templates/community/add_remote.html:13
+#: app/community/forms.py:77 app/search/routes.py:56
+#: app/templates/base.html:198 app/templates/community/add_remote.html:13
#: app/templates/domain/domains.html:29
#: app/templates/domain/domains_blocked.html:29 app/templates/index.html:40
#: app/templates/list_communities.html:36 app/templates/search/results.html:38
msgid "Search"
msgstr ""
-#: app/community/forms.py:71
+#: app/community/forms.py:82
msgid "Ban until"
msgstr ""
-#: app/community/forms.py:72
+#: app/community/forms.py:83
msgid "Also delete all their posts"
msgstr ""
-#: app/community/forms.py:73
+#: app/community/forms.py:84
msgid "Also delete all their comments"
msgstr ""
-#: app/community/forms.py:74 app/templates/domain/domains_blocked.html:48
-#: app/templates/user/show_profile.html:170
+#: app/community/forms.py:85
+#: app/templates/community/community_moderate_subscribers.html:56
+#: app/templates/domain/domains_blocked.html:48
+#: app/templates/user/show_profile.html:173
msgid "Ban"
msgstr ""
-#: app/community/forms.py:78 app/templates/list_communities.html:56
+#: app/community/forms.py:89 app/community/forms.py:100
+#: app/community/forms.py:120 app/templates/list_communities.html:56
msgid "Community"
msgstr ""
-#: app/community/forms.py:81 app/community/forms.py:83
-#: app/community/forms.py:88 app/post/forms.py:10
+#: app/community/forms.py:91 app/community/forms.py:102
+#: app/community/forms.py:123 app/post/forms.py:10
msgid "Body"
msgstr ""
-#: app/community/forms.py:85
-msgid "URL"
+#: app/community/forms.py:92 app/community/forms.py:105
+#: app/community/forms.py:125
+msgid "Sticky"
msgstr ""
-#: app/community/forms.py:87
-msgid "Alt text"
-msgstr ""
-
-#: app/community/forms.py:90
-msgid "Image"
-msgstr ""
-
-#: app/community/forms.py:92
+#: app/community/forms.py:93 app/community/forms.py:106
+#: app/community/forms.py:126
msgid "NSFW"
msgstr ""
-#: app/community/forms.py:93
+#: app/community/forms.py:94 app/community/forms.py:107
+#: app/community/forms.py:127
msgid "Gore/gross"
msgstr ""
-#: app/community/forms.py:94 app/post/forms.py:11
+#: app/community/forms.py:95 app/community/forms.py:108
+#: app/community/forms.py:128 app/post/forms.py:11
#: app/templates/post/_post_notification_toggle.html:4
#: app/templates/post/_reply_notification_toggle.html:4
msgid "Notify about replies"
msgstr ""
-#: app/community/forms.py:105 app/community/forms.py:109
-#: app/community/forms.py:120
-msgid "Title is required."
+#: app/community/forms.py:103
+msgid "URL"
msgstr ""
-#: app/community/forms.py:112
-msgid "URL is required."
-msgstr ""
-
-#: app/community/forms.py:116
+#: app/community/forms.py:114
#, python-format
msgid "Links to %(domain)s are not allowed."
msgstr ""
-#: app/community/forms.py:123
-msgid "File is required."
+#: app/community/forms.py:122
+msgid "Alt text"
msgstr ""
-#: app/community/forms.py:140
-msgid "Images cannot be posted to local communities."
-msgstr ""
-
-#: app/community/forms.py:142
-msgid "Poll not implemented yet."
-msgstr ""
-
-#: app/community/forms.py:149
-msgid "Breaks instance rules"
+#: app/community/forms.py:124
+#: app/templates/community/add_discussion_post.html:21
+#: app/templates/community/add_image_post.html:21
+#: app/templates/community/add_link_post.html:21
+msgid "Image"
msgstr ""
#: app/community/forms.py:150
+msgid "Images cannot be posted to local communities."
+msgstr ""
+
+#: app/community/forms.py:156
+msgid "Breaks instance rules"
+msgstr ""
+
+#: app/community/forms.py:157
msgid "Abandoned by moderators"
msgstr ""
-#: app/community/forms.py:151
+#: app/community/forms.py:158
msgid "Cult"
msgstr ""
-#: app/community/forms.py:152
+#: app/community/forms.py:159
msgid "Scam"
msgstr ""
-#: app/community/forms.py:153
+#: app/community/forms.py:160
msgid "Alt-right pipeline"
msgstr ""
-#: app/community/forms.py:154 app/post/forms.py:17
+#: app/community/forms.py:161 app/post/forms.py:17
msgid "Hate / genocide"
msgstr ""
-#: app/community/forms.py:172 app/community/routes.py:667
+#: app/community/forms.py:179 app/community/routes.py:846
msgid "Delete community"
msgstr ""
-#: app/community/routes.py:72
+#: app/community/routes.py:79
msgid "Your new community has been created."
msgstr ""
-#: app/community/routes.py:78 app/templates/community/add_local.html:13
-#: app/templates/community/community_edit.html:22
+#: app/community/routes.py:85 app/templates/community/add_local.html:13
+#: app/templates/community/community_edit.html:25
msgid "Create community"
msgstr ""
-#: app/community/routes.py:102
+#: app/community/routes.py:111 app/community/routes.py:1278
msgid "Community not found."
msgstr ""
-#: app/community/routes.py:104
+#: app/community/routes.py:113 app/community/routes.py:1280
msgid ""
"Community not found. If you are searching for a nsfw community it is "
"blocked by this instance."
msgstr ""
-#: app/community/routes.py:107
+#: app/community/routes.py:116 app/community/routes.py:1283
#, python-format
msgid "That community is banned from %(site)s."
msgstr ""
-#: app/community/routes.py:110
+#: app/community/routes.py:119
msgid "Add remote community"
msgstr ""
-#: app/community/routes.py:184 app/post/routes.py:180
-#: app/templates/base.html:127 app/templates/base.html:129
-#: app/templates/base.html:145 app/templates/base.html:147
+#: app/community/routes.py:201 app/post/routes.py:207
+#: app/templates/base.html:130 app/templates/base.html:132
+#: app/templates/base.html:148 app/templates/base.html:150
#: app/templates/chat/conversation.html:36
#: app/templates/community/community_edit.html:13
#: app/templates/community/community_mod_list.html:13
+#: app/templates/community/community_moderate.html:13
+#: app/templates/community/community_moderate_subscribers.html:13
#: app/templates/domain/domain.html:13 app/templates/topic/show_topic.html:13
#: app/templates/user/delete_account.html:13
#: app/templates/user/edit_filters.html:14
@@ -950,91 +983,118 @@ msgstr ""
msgid "Home"
msgstr ""
-#: app/community/routes.py:310
+#: app/community/routes.py:327
msgid "You cannot join this community"
msgstr ""
-#: app/community/routes.py:326
+#: app/community/routes.py:343
msgid ""
"There was a problem while trying to communicate with remote server. If "
"other people have already joined this community it won't matter."
msgstr ""
-#: app/community/routes.py:516 app/community/routes.py:540
-#: app/community/routes.py:542
+#: app/community/routes.py:492 app/community/routes.py:565
+#: app/community/routes.py:638
+msgid "Add post to community"
+msgstr ""
+
+#: app/community/routes.py:705 app/community/routes.py:730
+#: app/community/routes.py:732
#, python-format
msgid "Your post to %(name)s has been made."
msgstr ""
-#: app/community/routes.py:552
-msgid "Add post to community"
-msgstr ""
-
-#: app/community/routes.py:574
+#: app/community/routes.py:749
msgid "A community has been reported"
msgstr ""
-#: app/community/routes.py:585
+#: app/community/routes.py:760
msgid "Community has been reported, thank you!"
msgstr ""
-#: app/community/routes.py:588
+#: app/community/routes.py:763
msgid "Report community"
msgstr ""
-#: app/community/routes.py:683
-#: app/templates/community/community_mod_list.html:21
+#: app/community/routes.py:864
+#: app/templates/community/community_mod_list.html:22
#, python-format
msgid "Moderators for %(community)s"
msgstr ""
-#: app/community/routes.py:706
+#: app/community/routes.py:889
msgid "Moderator added"
msgstr ""
-#: app/community/routes.py:710
+#: app/community/routes.py:893
#, python-format
msgid "You are now a moderator of %(name)s"
msgstr ""
-#: app/community/routes.py:735
+#: app/community/routes.py:918
msgid "Account not found"
msgstr ""
-#: app/community/routes.py:737
+#: app/community/routes.py:920
#: app/templates/community/community_add_moderator.html:13
#, python-format
msgid "Add moderator to %(community)s"
msgstr ""
-#: app/community/routes.py:755
+#: app/community/routes.py:940
msgid "Moderator removed"
msgstr ""
-#: app/community/routes.py:772 app/post/routes.py:870 app/post/routes.py:962
+#: app/community/routes.py:957 app/post/routes.py:1139 app/post/routes.py:1262
#, python-format
msgid "Content from %(name)s will be hidden."
msgstr ""
-#: app/community/routes.py:792
+#: app/community/routes.py:986
#, python-format
msgid "%(name)s has been banned."
msgstr ""
-#: app/community/routes.py:799
+#: app/community/routes.py:993
#, python-format
msgid "Posts by %(name)s have been deleted."
msgstr ""
-#: app/community/routes.py:805
+#: app/community/routes.py:999
#, python-format
msgid "Comments by %(name)s have been deleted."
msgstr ""
-#: app/community/routes.py:823
+#: app/community/routes.py:1020
msgid "Ban from community"
msgstr ""
+#: app/community/routes.py:1043
+#, python-format
+msgid "%(name)s has been unbanned."
+msgstr ""
+
+#: app/community/routes.py:1108 app/community/routes.py:1142
+#, python-format
+msgid "Moderation of %(community)s"
+msgstr ""
+
+#: app/community/routes.py:1170
+msgid "Admin has been notified about this report."
+msgstr ""
+
+#: app/community/routes.py:1218
+msgid "Report resolved."
+msgstr ""
+
+#: app/community/routes.py:1256
+msgid "Report ignored."
+msgstr ""
+
+#: app/community/routes.py:1286
+msgid "Search result for remote community"
+msgstr ""
+
#: app/domain/routes.py:113
#, python-format
msgid "%(name)s blocked."
@@ -1055,25 +1115,25 @@ msgstr ""
msgid "%(name)s un-banned for all users."
msgstr ""
-#: app/main/routes.py:72
+#: app/main/routes.py:73
msgid "Create an account to tailor this feed to your interests."
msgstr ""
-#: app/main/routes.py:156 app/templates/base.html:136
-#: app/templates/base.html:154
+#: app/main/routes.py:163 app/templates/base.html:139
+#: app/templates/base.html:157
msgid "Browse by topic"
msgstr ""
-#: app/main/routes.py:194
+#: app/main/routes.py:206
msgid "Local communities"
msgstr ""
-#: app/main/routes.py:209 app/templates/base.html:163
+#: app/main/routes.py:221 app/templates/base.html:168
#: app/templates/list_communities.html:19
msgid "Joined communities"
msgstr ""
-#: app/main/routes.py:326
+#: app/main/routes.py:354
msgid "Please click the link in your email inbox to verify your account."
msgstr ""
@@ -1089,7 +1149,7 @@ msgstr ""
msgid "Sharing personal info - doxing"
msgstr ""
-#: app/post/forms.py:42 app/post/routes.py:887
+#: app/post/forms.py:42 app/post/routes.py:1156
#: app/templates/post/post_mea_culpa.html:13
msgid "I changed my mind"
msgstr ""
@@ -1099,76 +1159,92 @@ msgstr ""
msgid "%(name)s has indicated they made a mistake in this post."
msgstr ""
-#: app/post/routes.py:66 app/post/routes.py:443
+#: app/post/routes.py:72 app/post/routes.py:476
#, python-format
msgid "You cannot reply to %(name)s"
msgstr ""
-#: app/post/routes.py:76 app/post/routes.py:456
+#: app/post/routes.py:82 app/post/routes.py:489
msgid "This type of comment is not accepted, sorry."
msgstr ""
-#: app/post/routes.py:414 app/post/routes.py:579
+#: app/post/routes.py:446 app/post/routes.py:632
#, python-format
msgid "Discussing %(title)s"
msgstr ""
-#: app/post/routes.py:628 app/post/routes.py:985 app/user/routes.py:137
-#: app/user/routes.py:198 app/user/routes.py:670 app/user/routes.py:701
+#: app/post/routes.py:702 app/post/routes.py:783 app/post/routes.py:865
+#: app/post/routes.py:1285 app/user/routes.py:143 app/user/routes.py:204
+#: app/user/routes.py:686 app/user/routes.py:717
msgid "Your changes have been saved."
msgstr ""
-#: app/post/routes.py:725 app/templates/post/post_edit.html:43
+#: app/post/routes.py:718 app/post/routes.py:800 app/post/routes.py:882
+#: app/templates/post/post_edit_discussion.html:11
+#: app/templates/post/post_edit_image.html:11
+#: app/templates/post/post_edit_link.html:11
msgid "Edit post"
msgstr ""
-#: app/post/routes.py:746
+#: app/post/routes.py:990
msgid "Post deleted."
msgstr ""
-#: app/post/routes.py:804
-msgid "A post has been reported"
+#: app/post/routes.py:1040
+msgid ""
+"Moderators have already assessed reports regarding this post, no further "
+"reports are necessary."
msgstr ""
-#: app/post/routes.py:822
+#: app/post/routes.py:1043
+msgid "Post has already been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1091
msgid "Post has been reported, thank you!"
msgstr ""
-#: app/post/routes.py:827
+#: app/post/routes.py:1096
msgid "Report post"
msgstr ""
-#: app/post/routes.py:841 app/post/routes.py:946
+#: app/post/routes.py:1110 app/post/routes.py:1246
#, python-format
msgid "%(name)s has been blocked."
msgstr ""
-#: app/post/routes.py:857
+#: app/post/routes.py:1126
#, python-format
msgid "Posts linking to %(name)s will be hidden."
msgstr ""
-#: app/post/routes.py:908
-msgid "A comment has been reported"
+#: app/post/routes.py:1170
+msgid ""
+"Moderators have already assessed reports regarding this comment, no "
+"further reports are necessary."
msgstr ""
-#: app/post/routes.py:926
+#: app/post/routes.py:1175
+msgid "Comment has already been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1226
msgid "Comment has been reported, thank you!"
msgstr ""
-#: app/post/routes.py:931
+#: app/post/routes.py:1231
msgid "Report comment"
msgstr ""
-#: app/post/routes.py:1062
+#: app/post/routes.py:1389
msgid "Edit comment"
msgstr ""
-#: app/post/routes.py:1086
+#: app/post/routes.py:1413
msgid "Comment deleted."
msgstr ""
-#: app/search/routes.py:45
+#: app/search/routes.py:49
#, python-format
msgid "Search results for %(q)s"
msgstr ""
@@ -1200,92 +1276,92 @@ msgstr ""
msgid "Rational Discourse Toolkit"
msgstr ""
-#: app/templates/base.html:52
+#: app/templates/about.html:10 app/templates/donate.html:26
+#: app/templates/index.html:67 app/templates/keyboard_shortcuts.html:63
+#: app/templates/search/results.html:65
+#, python-format
+msgid "About %(site_name)s"
+msgstr ""
+
+#: app/templates/base.html:55
msgid "PieFed"
msgstr ""
-#: app/templates/base.html:110 app/templates/base.html:184
-#: app/templates/user/notifications.html:18 app/user/routes.py:521
+#: app/templates/base.html:113 app/templates/base.html:189
+#: app/templates/user/notifications.html:18 app/user/routes.py:537
msgid "Notifications"
msgstr ""
-#: app/templates/base.html:130 app/templates/base.html:148
+#: app/templates/base.html:133 app/templates/base.html:151
msgid "Popular"
msgstr ""
-#: app/templates/base.html:131 app/templates/base.html:149
+#: app/templates/base.html:134 app/templates/base.html:152
msgid "All posts"
msgstr ""
-#: app/templates/base.html:137 app/templates/base.html:155
+#: app/templates/base.html:140 app/templates/base.html:158
#: app/templates/list_communities.html:13
msgid "All communities"
msgstr ""
-#: app/templates/auth/login.html:9 app/templates/base.html:140
+#: app/templates/auth/login.html:9 app/templates/base.html:143
msgid "Log in"
msgstr ""
-#: app/templates/base.html:142 app/templates/base.html:178
+#: app/templates/base.html:145 app/templates/base.html:183
#: app/templates/donate.html:10
msgid "Donate"
msgstr ""
-#: app/templates/base.html:157
+#: app/templates/base.html:161
msgid "Moderating"
msgstr ""
-#: app/templates/base.html:171
+#: app/templates/base.html:176
msgid "Account"
msgstr ""
-#: app/templates/base.html:173
+#: app/templates/base.html:178
msgid "View profile"
msgstr ""
-#: app/templates/base.html:174
+#: app/templates/base.html:179
msgid "Edit profile & settings"
msgstr ""
-#: app/templates/base.html:175
+#: app/templates/base.html:180
msgid "Chats"
msgstr ""
-#: app/templates/base.html:182
+#: app/templates/base.html:187
msgid "Log out"
msgstr ""
-#: app/templates/base.html:184
+#: app/templates/base.html:189
#, python-format
msgid "%(num)d unread notifications"
msgstr ""
-#: app/templates/base.html:194
+#: app/templates/base.html:199
msgid "Light mode"
msgstr ""
-#: app/templates/base.html:195
+#: app/templates/base.html:200
msgid "Dark mode"
msgstr ""
-#: app/templates/base.html:223 app/templates/keyboard_shortcuts.html:10
+#: app/templates/base.html:228 app/templates/keyboard_shortcuts.html:10
msgid "Keyboard shortcuts"
msgstr ""
-#: app/templates/donate.html:26 app/templates/index.html:65
-#: app/templates/keyboard_shortcuts.html:63
-#: app/templates/search/results.html:63
-#, python-format
-msgid "About %(site_name)s"
-msgstr ""
-
#: app/templates/index.html:17
msgid "No posts yet. Join some communities to see more."
msgstr ""
#: app/templates/community/community.html:168 app/templates/index.html:18
-#: app/templates/index.html:59 app/templates/list_topics.html:26
-#: app/templates/post/post.html:217 app/templates/search/results.html:57
+#: app/templates/index.html:59 app/templates/list_topics.html:38
+#: app/templates/post/post.html:220 app/templates/search/results.html:57
#: app/templates/topic/show_topic.html:91
msgid "Explore communities"
msgstr ""
@@ -1294,11 +1370,13 @@ msgstr ""
#: app/templates/admin/communities.html:51 app/templates/admin/posts.html:26
#: app/templates/admin/reports.html:58 app/templates/admin/users.html:69
#: app/templates/community/community.html:92
+#: app/templates/community/community_moderate.html:80
+#: app/templates/community/community_moderate_subscribers.html:67
#: app/templates/domain/domain.html:30 app/templates/domain/domains.html:51
#: app/templates/domain/domains_blocked.html:59 app/templates/index.html:25
#: app/templates/search/results.html:23 app/templates/topic/show_topic.html:52
-#: app/templates/user/show_profile.html:72
-#: app/templates/user/show_profile.html:95
+#: app/templates/user/show_profile.html:75
+#: app/templates/user/show_profile.html:98
msgid "Previous page"
msgstr ""
@@ -1306,11 +1384,13 @@ msgstr ""
#: app/templates/admin/communities.html:56 app/templates/admin/posts.html:31
#: app/templates/admin/reports.html:63 app/templates/admin/users.html:74
#: app/templates/community/community.html:97
+#: app/templates/community/community_moderate.html:85
+#: app/templates/community/community_moderate_subscribers.html:72
#: app/templates/domain/domain.html:35 app/templates/domain/domains.html:56
#: app/templates/domain/domains_blocked.html:64 app/templates/index.html:30
#: app/templates/search/results.html:28 app/templates/topic/show_topic.html:57
-#: app/templates/user/show_profile.html:77
-#: app/templates/user/show_profile.html:100
+#: app/templates/user/show_profile.html:80
+#: app/templates/user/show_profile.html:103
msgid "Next page"
msgstr ""
@@ -1318,6 +1398,11 @@ msgstr ""
msgid "Active communities"
msgstr ""
+#: app/templates/index.html:60 app/templates/list_communities.html:108
+#: app/templates/search/results.html:58
+msgid "Browse topics"
+msgstr ""
+
#: app/templates/keyboard_shortcuts.html:11
msgid "Most shortcuts are the same as what reddit has."
msgstr ""
@@ -1326,7 +1411,7 @@ msgstr ""
msgid "Navigation"
msgstr ""
-#: app/templates/community/community_mod_list.html:31
+#: app/templates/community/community_mod_list.html:33
#: app/templates/keyboard_shortcuts.html:43 app/templates/user/filters.html:31
msgid "Action"
msgstr ""
@@ -1400,7 +1485,7 @@ msgid "Sort by reply count"
msgstr ""
#: app/templates/list_communities.html:66 app/templates/post/post.html:61
-#: app/templates/post/post.html:155
+#: app/templates/post/post.html:158
msgid "Comments"
msgstr ""
@@ -1415,9 +1500,10 @@ msgstr ""
#: app/templates/community/add_remote.html:32
#: app/templates/community/community.html:112
+#: app/templates/community/lookup_remote.html:21
#: app/templates/list_communities.html:82 app/templates/post/add_reply.html:48
-#: app/templates/post/continue_discussion.html:96
-#: app/templates/post/post.html:174
+#: app/templates/post/continue_discussion.html:99
+#: app/templates/post/post.html:177
msgid "Leave"
msgstr ""
@@ -1434,10 +1520,11 @@ msgstr ""
#: app/templates/community/add_remote.html:34
#: app/templates/community/community.html:116
+#: app/templates/community/lookup_remote.html:23
#: app/templates/list_communities.html:86
#: app/templates/list_communities.html:89 app/templates/post/add_reply.html:50
-#: app/templates/post/continue_discussion.html:98
-#: app/templates/post/post.html:176
+#: app/templates/post/continue_discussion.html:101
+#: app/templates/post/post.html:179
msgid "Join"
msgstr ""
@@ -1446,11 +1533,11 @@ msgstr ""
msgid "Browse %(name)s"
msgstr ""
-#: app/templates/list_communities.html:106 app/templates/list_topics.html:24
+#: app/templates/list_communities.html:106 app/templates/list_topics.html:36
msgid "There are no communities yet."
msgstr ""
-#: app/templates/list_topics.html:11
+#: app/templates/list_topics.html:25
msgid "Choose a topic"
msgstr ""
@@ -1474,7 +1561,9 @@ msgstr ""
msgid "Registration applications"
msgstr ""
-#: app/templates/admin/_nav.html:13
+#: app/templates/admin/_nav.html:13 app/templates/community/community.html:181
+#: app/templates/community/community_moderate.html:15
+#: app/templates/community/community_moderate_subscribers.html:15
msgid "Moderation"
msgstr ""
@@ -1510,7 +1599,7 @@ msgstr ""
#: app/templates/admin/approve_registrations.html:45
#: app/templates/post/post_options.html:20
#: app/templates/post/post_reply_options.html:20
-#: app/templates/user/show_profile.html:176
+#: app/templates/user/show_profile.html:179
msgid "Delete"
msgstr ""
@@ -1652,7 +1741,7 @@ msgstr ""
#: app/templates/chat/conversation.html:42 app/templates/user/filters.html:56
#: app/templates/user/notifications.html:14 app/templates/user/people.html:14
#: app/templates/user/people.html:17 app/templates/user/show_profile.html:19
-#: app/templates/user/show_profile.html:39 app/user/routes.py:34
+#: app/templates/user/show_profile.html:39 app/user/routes.py:35
msgid "People"
msgstr ""
@@ -1666,7 +1755,7 @@ msgid "Messages with: "
msgstr ""
#: app/templates/chat/conversation.html:75
-#: app/templates/post/_post_teaser.html:80
+#: app/templates/post/_post_teaser.html:75
msgid "Options"
msgstr ""
@@ -1691,20 +1780,52 @@ msgstr ""
msgid "Report conversation with \"%(member_names)s\""
msgstr ""
-#: app/templates/community/_community_nav.html:3
-#: app/templates/community/add_post.html:11
-#: app/templates/community/community.html:108
-#: app/templates/post/add_reply.html:54
-#: app/templates/post/continue_discussion.html:102
-#: app/templates/post/post.html:170 app/templates/post/post_reply_edit.html:50
-#: app/templates/topic/show_topic.html:68
-msgid "Create post"
+#: app/templates/community/_community_moderation_nav.html:4
+#: app/templates/community/community_edit.html:15
+#: app/templates/community/community_mod_list.html:15
+#: app/templates/post/add_reply.html:89
+#: app/templates/post/continue_discussion.html:140
+#: app/templates/post/post.html:234 app/templates/post/post_reply_edit.html:85
+#: app/templates/user/_user_nav.html:5 app/templates/user/notifications.html:57
+#: app/templates/user/show_profile.html:124
+msgid "Settings"
msgstr ""
+#: app/templates/community/_community_moderation_nav.html:7
+#: app/templates/community/community_mod_list.html:16
+msgid "Moderators"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:10
#: app/templates/community/_community_nav.html:7
msgid "Sort by hot"
msgstr ""
+#: app/templates/community/_community_moderation_nav.html:14
+#: app/templates/community/community_moderate_subscribers.html:21
+msgid "Subscribers"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:17
+msgid "Appeals"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:20
+msgid "Mod log"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:3
+#: app/templates/community/add_discussion_post.html:11
+#: app/templates/community/add_image_post.html:11
+#: app/templates/community/add_link_post.html:11
+#: app/templates/community/community.html:108
+#: app/templates/post/add_reply.html:54
+#: app/templates/post/continue_discussion.html:105
+#: app/templates/post/post.html:173 app/templates/post/post_reply_edit.html:50
+#: app/templates/topic/show_topic.html:68
+msgid "Create post"
+msgstr ""
+
#: app/templates/community/_community_nav.html:10
msgid "Sort by top"
msgstr ""
@@ -1729,25 +1850,86 @@ msgstr ""
msgid "Notify about every new post. Not advisable in high traffic communities!"
msgstr ""
-#: app/templates/community/add_local.html:31
-#, python-format
-msgid "Only people using %(name)s can post or reply"
+#: app/templates/community/add_discussion_post.html:16
+#: app/templates/community/add_image_post.html:16
+#: app/templates/community/add_link_post.html:16
+msgid "Type of post"
msgstr ""
-#: app/templates/community/add_post.html:44
-#: app/templates/community/add_post.html:65
-#: app/templates/community/add_post.html:88
+#: app/templates/community/add_discussion_post.html:19
+#: app/templates/community/add_image_post.html:19
+#: app/templates/community/add_link_post.html:19
+msgid "Start a discussion"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:19
+#: app/templates/community/add_image_post.html:19
+#: app/templates/community/add_link_post.html:19
+msgid "Discussion"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:20
+#: app/templates/community/add_image_post.html:20
+#: app/templates/community/add_link_post.html:20
+msgid "Share a link"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:20
+#: app/templates/community/add_image_post.html:20
+#: app/templates/community/add_link_post.html:20
+msgid "Link"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:21
+#: app/templates/community/add_image_post.html:21
+#: app/templates/community/add_link_post.html:21
+msgid "Share an image"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:22
+#: app/templates/community/add_image_post.html:22
+#: app/templates/community/add_link_post.html:22
+msgid "Create a poll"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:22
+#: app/templates/community/add_image_post.html:22
+#: app/templates/community/add_link_post.html:22
+msgid "Poll"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:23
+#: app/templates/community/add_image_post.html:23
+#: app/templates/community/add_link_post.html:23
+msgid "Create an event"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:23
+#: app/templates/community/add_image_post.html:23
+#: app/templates/community/add_link_post.html:23
+msgid "Event"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:43
+#: app/templates/community/add_image_post.html:45
+#: app/templates/community/add_link_post.html:44
#: app/templates/post/add_reply.html:37 app/templates/post/post.html:42
#: app/templates/user/edit_profile.html:44
msgid "Enable markdown editor"
msgstr ""
-#: app/templates/community/add_post.html:73
-#: app/templates/post/post_edit.html:98
+#: app/templates/community/add_image_post.html:30
+#: app/templates/post/post_edit_image.html:17
msgid "Describe the image, to help visually impaired people."
msgstr ""
+#: app/templates/community/add_local.html:31
+#, python-format
+msgid "Only people using %(name)s can post or reply"
+msgstr ""
+
#: app/templates/community/add_remote.html:25
+#: app/templates/community/lookup_remote.html:14
msgid "Found a community:"
msgstr ""
@@ -1772,15 +1954,15 @@ msgstr ""
#: app/templates/community/community.html:121
#: app/templates/post/add_reply.html:58
-#: app/templates/post/continue_discussion.html:106
-#: app/templates/post/post.html:181 app/templates/post/post_reply_edit.html:54
+#: app/templates/post/continue_discussion.html:109
+#: app/templates/post/post.html:184 app/templates/post/post_reply_edit.html:54
msgid "Search this community"
msgstr ""
#: app/templates/community/community.html:127
#: app/templates/post/add_reply.html:64
-#: app/templates/post/continue_discussion.html:112
-#: app/templates/post/post.html:187 app/templates/post/post_reply_edit.html:60
+#: app/templates/post/continue_discussion.html:115
+#: app/templates/post/post.html:190 app/templates/post/post_reply_edit.html:60
msgid "About community"
msgstr ""
@@ -1789,38 +1971,24 @@ msgstr ""
msgid "Only people on %(instance_name)s can post or reply in this community."
msgstr ""
-#: app/templates/community/community.html:156 app/templates/post/post.html:205
+#: app/templates/community/community.html:156 app/templates/post/post.html:208
msgid "Related communities"
msgstr ""
-#: app/templates/community/community.html:162 app/templates/post/post.html:211
+#: app/templates/community/community.html:162 app/templates/post/post.html:214
#: app/templates/topic/show_topic.html:85
msgid "Go to community"
msgstr ""
#: app/templates/community/community.html:175
#: app/templates/post/add_reply.html:82
-#: app/templates/post/continue_discussion.html:130
-#: app/templates/post/post.html:224 app/templates/post/post_reply_edit.html:78
+#: app/templates/post/continue_discussion.html:133
+#: app/templates/post/post.html:227 app/templates/post/post_reply_edit.html:78
msgid "Community Settings"
msgstr ""
-#: app/templates/community/community.html:178
-#: app/templates/post/add_reply.html:85
-#: app/templates/post/continue_discussion.html:133
-#: app/templates/post/post.html:227 app/templates/post/post_reply_edit.html:81
-msgid "Moderate"
-msgstr ""
-
-#: app/templates/community/community.html:180
-#: app/templates/community/community_edit.html:15
-#: app/templates/community/community_mod_list.html:15
-#: app/templates/post/add_reply.html:86
-#: app/templates/post/continue_discussion.html:134
-#: app/templates/post/post.html:228 app/templates/post/post_reply_edit.html:82
-#: app/templates/user/_user_nav.html:5 app/templates/user/notifications.html:57
-#: app/templates/user/show_profile.html:121
-msgid "Settings"
+#: app/templates/community/community.html:179
+msgid "Settings & Moderation"
msgstr ""
#: app/templates/community/community_ban_user.html:13
@@ -1833,19 +2001,89 @@ msgstr ""
msgid "Delete \"%(community_title)s\""
msgstr ""
-#: app/templates/community/community_edit.html:51
-#: app/templates/community/community_mod_list.html:16
-msgid "Moderators"
+#: app/templates/community/community_edit.html:23
+#, python-format
+msgid "Edit %(community)s"
+msgstr ""
+
+#: app/templates/community/community_edit.html:28
+msgid "Edit and configure this community"
msgstr ""
#: app/templates/community/community_mod_list.html:24
+msgid "See and change who moderates this community"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:26
+#: app/templates/community/community_moderate.html:24
+#: app/templates/community/community_moderate_subscribers.html:24
msgid "Add moderator"
msgstr ""
-#: app/templates/community/community_mod_list.html:41
+#: app/templates/community/community_mod_list.html:43
msgid "Remove"
msgstr ""
+#: app/templates/community/community_moderate.html:27
+#, python-format
+msgid "See and handle all reports made about %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:67
+msgid "Escalate"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:68
+msgid "Resolve"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:70
+msgid "Ignore"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:90
+msgid "No reports yet"
+msgstr ""
+
+#: app/templates/community/community_moderate_report_escalate.html:13
+msgid "Escalate report to admins"
+msgstr ""
+
+#: app/templates/community/community_moderate_report_escalate.html:14
+msgid ""
+"For reports that could potentially involve legal issues or where you are "
+"unsure how to respond, you may prefer to let admins handle it."
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:27
+#, python-format
+msgid "See who is subscribed to %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:77
+msgid "This community has no subscribers"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:79
+msgid "Banned People"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:80
+#, python-format
+msgid "See and manage who is banned from %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:116
+#: app/templates/domain/domain.html:61
+#: app/templates/domain/domains_blocked.html:46
+#: app/templates/user/show_profile.html:169
+msgid "Unban"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:125
+msgid "No banned people yet"
+msgstr ""
+
#: app/templates/domain/domain.html:14 app/templates/domain/domains.html:12
#: app/templates/domain/domains.html:21
#: app/templates/domain/domains_blocked.html:21
@@ -1873,12 +2111,6 @@ msgstr ""
msgid "Block"
msgstr ""
-#: app/templates/domain/domain.html:61
-#: app/templates/domain/domains_blocked.html:46
-#: app/templates/user/show_profile.html:166
-msgid "Unban"
-msgstr ""
-
#: app/templates/domain/domain.html:65
msgid "Ban instance-wide"
msgstr ""
@@ -1964,6 +2196,15 @@ msgstr ""
msgid "Reported. Check post for issues."
msgstr ""
+#: app/templates/post/_post_full.html:109
+#: app/templates/post/_post_full.html:110
+msgid "Show cross-posts"
+msgstr ""
+
+#: app/templates/post/_post_full.html:111
+msgid "Number of cross-posts:"
+msgstr ""
+
#: app/templates/post/_post_reply_teaser.html:3
msgid "View context"
msgstr ""
@@ -1981,8 +2222,8 @@ msgstr ""
#: app/templates/post/_post_teaser.html:20
#: app/templates/post/_post_teaser.html:30
-#: app/templates/post/_post_teaser.html:74
-#: app/templates/post/_post_teaser.html:76
+#: app/templates/post/_post_teaser.html:70
+#: app/templates/post/_post_teaser.html:72
#: app/templates/post/_post_teaser_masonry.html:16
#: app/templates/post/_post_teaser_masonry.html:20
#: app/templates/post/_post_teaser_masonry.html:23
@@ -1999,12 +2240,12 @@ msgstr ""
msgid "All posts about this domain"
msgstr ""
-#: app/templates/post/_post_teaser.html:63
+#: app/templates/post/_post_teaser.html:64
#, python-format
msgid "Go to community %(name)s"
msgstr ""
-#: app/templates/post/_post_teaser.html:71
+#: app/templates/post/_post_teaser.html:67
#: app/templates/post/_post_teaser_masonry.html:47
#: app/templates/post/_post_teaser_masonry.html:48
#: app/templates/post/_post_teaser_masonry.html:68
@@ -2012,7 +2253,7 @@ msgstr ""
msgid "View comments"
msgstr ""
-#: app/templates/post/_post_teaser.html:71
+#: app/templates/post/_post_teaser.html:67
msgid "Number of comments:"
msgstr ""
@@ -2042,8 +2283,14 @@ msgid ""
"most places. Be nice."
msgstr ""
-#: app/templates/post/continue_discussion.html:44
-#: app/templates/post/post.html:105
+#: app/templates/post/add_reply.html:86
+#: app/templates/post/continue_discussion.html:137
+#: app/templates/post/post.html:231 app/templates/post/post_reply_edit.html:82
+msgid "Moderate"
+msgstr ""
+
+#: app/templates/post/continue_discussion.html:47
+#: app/templates/post/post.html:108
msgid "Reported. Check comment for issues."
msgstr ""
@@ -2081,18 +2328,27 @@ msgstr ""
msgid "Author"
msgstr ""
-#: app/templates/post/post.html:101
+#: app/templates/post/post.html:104
msgid "Post creator"
msgstr ""
-#: app/templates/post/post.html:102
+#: app/templates/post/post.html:105
msgid "When: "
msgstr ""
-#: app/templates/post/post.html:131
+#: app/templates/post/post.html:134
msgid "Comment options"
msgstr ""
+#: app/templates/post/post_cross_posts.html:11
+#, python-format
+msgid "Cross-posts for \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/post/post_cross_posts.html:12
+msgid "Posts to the same url have also been created in the following communities:"
+msgstr ""
+
#: app/templates/post/post_mea_culpa.html:15
msgid ""
"If you wish to de-escalate the discussion on your post and now feel like "
@@ -2267,7 +2523,7 @@ msgid "Post in %(name)s"
msgstr ""
#: app/templates/user/_user_nav.html:8 app/templates/user/notifications.html:54
-#: app/templates/user/show_profile.html:118
+#: app/templates/user/show_profile.html:121
msgid "Profile"
msgstr ""
@@ -2320,13 +2576,13 @@ msgstr ""
msgid "Filters"
msgstr ""
-#: app/templates/user/edit_filters.html:18 app/user/routes.py:713
+#: app/templates/user/edit_filters.html:18 app/user/routes.py:729
msgid "Edit filter"
msgstr ""
#: app/templates/user/edit_filters.html:20
#: app/templates/user/edit_filters.html:27 app/templates/user/filters.html:22
-#: app/user/routes.py:673
+#: app/user/routes.py:689
msgid "Add filter"
msgstr ""
@@ -2347,8 +2603,8 @@ msgstr ""
msgid "Stop applying this filter after this date. Optional."
msgstr ""
-#: app/templates/user/edit_profile.html:16 app/user/routes.py:147
-#: app/user/routes.py:212
+#: app/templates/user/edit_profile.html:16 app/user/routes.py:153
+#: app/user/routes.py:218
msgid "Edit profile"
msgstr ""
@@ -2434,12 +2690,12 @@ msgid "Mark all as read"
msgstr ""
#: app/templates/user/notifications.html:49
-#: app/templates/user/show_profile.html:113
+#: app/templates/user/show_profile.html:116
msgid "Manage"
msgstr ""
#: app/templates/user/notifications.html:95
-#: app/templates/user/show_profile.html:189
+#: app/templates/user/show_profile.html:192
msgid "Upvoted"
msgstr ""
@@ -2464,39 +2720,43 @@ msgstr ""
msgid "Send message using Matrix"
msgstr ""
-#: app/templates/user/show_profile.html:60
+#: app/templates/user/show_profile.html:61
+msgid "Bot Account"
+msgstr ""
+
+#: app/templates/user/show_profile.html:63
msgid "Attitude"
msgstr ""
-#: app/templates/user/show_profile.html:60
+#: app/templates/user/show_profile.html:63
msgid "Ratio of upvotes cast to downvotes cast. Higher is more positive."
msgstr ""
-#: app/templates/user/show_profile.html:69
+#: app/templates/user/show_profile.html:72
msgid "Post pagination"
msgstr ""
-#: app/templates/user/show_profile.html:82
+#: app/templates/user/show_profile.html:85
msgid "No posts yet."
msgstr ""
-#: app/templates/user/show_profile.html:92
+#: app/templates/user/show_profile.html:95
msgid "Comment pagination"
msgstr ""
-#: app/templates/user/show_profile.html:105
+#: app/templates/user/show_profile.html:108
msgid "No comments yet."
msgstr ""
-#: app/templates/user/show_profile.html:134
+#: app/templates/user/show_profile.html:137
msgid "Member of"
msgstr ""
-#: app/templates/user/show_profile.html:159
-msgid "Crush"
+#: app/templates/user/show_profile.html:162
+msgid "Moderate user"
msgstr ""
-#: app/templates/user/show_profile.html:179
+#: app/templates/user/show_profile.html:182
msgid "Ban + Purge"
msgstr ""
@@ -2513,13 +2773,13 @@ msgstr ""
msgid "Choose"
msgstr ""
-#: app/topic/routes.py:168
+#: app/topic/routes.py:172
msgid ""
"You have joined some communities relating to those interests. Find them "
"on the Topics menu or browse the home page."
msgstr ""
-#: app/topic/routes.py:172
+#: app/topic/routes.py:176
msgid ""
"You did not choose any topics. Would you like to choose individual "
"communities instead?"
@@ -2553,10 +2813,18 @@ msgstr ""
msgid "Use markdown editor GUI when writing"
msgstr ""
+#: app/user/forms.py:40
+msgid "Show profile in user list"
+msgstr ""
+
#: app/user/forms.py:41
msgid "My posts appear in search results"
msgstr ""
+#: app/user/forms.py:42
+msgid "Manually approve followers"
+msgstr ""
+
#: app/user/forms.py:43
msgid "Import community subscriptions and user blocks from Lemmy"
msgstr ""
@@ -2613,71 +2881,100 @@ msgstr ""
msgid "Expire after"
msgstr ""
-#: app/user/routes.py:42
+#: app/user/routes.py:49
msgid "This user has been banned."
msgstr ""
-#: app/user/routes.py:44
+#: app/user/routes.py:51
msgid "This user has been deleted."
msgstr ""
-#: app/user/routes.py:77
+#: app/user/routes.py:83
#, python-format
msgid "Posts by %(user_name)s"
msgstr ""
-#: app/user/routes.py:194
+#: app/user/routes.py:200
msgid ""
"Your subscriptions and blocks are being imported. If you have many it "
"could take a few minutes."
msgstr ""
-#: app/user/routes.py:229
+#: app/user/routes.py:235
msgid "You cannot ban yourself."
msgstr ""
-#: app/user/routes.py:254
+#: app/user/routes.py:260
msgid "You cannot unban yourself."
msgstr ""
-#: app/user/routes.py:278
+#: app/user/routes.py:284
msgid "You cannot block yourself."
msgstr ""
-#: app/user/routes.py:307
+#: app/user/routes.py:313
msgid "You cannot unblock yourself."
msgstr ""
-#: app/user/routes.py:352
+#: app/user/routes.py:340
+msgid ""
+"Moderators have already assessed reports regarding this person, no "
+"further reports are necessary."
+msgstr ""
+
+#: app/user/routes.py:346
+#, python-format
+msgid "%(user_name)s has already been reported, thank you!"
+msgstr ""
+
+#: app/user/routes.py:368
#, python-format
msgid "%(user_name)s has been reported, thank you!"
msgstr ""
-#: app/user/routes.py:358
+#: app/user/routes.py:374
msgid "Report user"
msgstr ""
-#: app/user/routes.py:375
+#: app/user/routes.py:391
msgid "You cannot delete yourself."
msgstr ""
-#: app/user/routes.py:432
+#: app/user/routes.py:448
msgid "Account deletion in progress. Give it a few minutes."
msgstr ""
-#: app/user/routes.py:437
+#: app/user/routes.py:453
msgid "Delete my account"
msgstr ""
-#: app/user/routes.py:482
+#: app/user/routes.py:498
msgid "You cannot purge yourself."
msgstr ""
-#: app/user/routes.py:559
+#: app/user/routes.py:575
msgid "All notifications marked as read."
msgstr ""
-#: app/user/routes.py:730
+#: app/user/routes.py:746
msgid "Filter deleted."
msgstr ""
+#~ msgid "Allow search engines to index this profile"
+#~ msgstr ""
+
+#~ msgid "Title is required."
+#~ msgstr ""
+
+#~ msgid "URL is required."
+#~ msgstr ""
+
+#~ msgid "File is required."
+#~ msgstr ""
+
+#~ msgid "Poll not implemented yet."
+#~ msgstr ""
+
+#~ msgid "Crush"
+#~ msgstr ""
+
diff --git a/app/translations/ja/LC_MESSAGES/messages.po b/app/translations/ja/LC_MESSAGES/messages.po
index b375aac3..c10425fe 100644
--- a/app/translations/ja/LC_MESSAGES/messages.po
+++ b/app/translations/ja/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-03-17 19:06+1300\n"
+"POT-Creation-Date: 2024-04-09 12:33+1200\n"
"PO-Revision-Date: 2024-03-17 19:14+1300\n"
"Last-Translator: FULL NAME \n"
"Language: ja\n"
@@ -18,11 +18,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
-#: app/__init__.py:26
+#: app/__init__.py:33
msgid "Please log in to access this page."
msgstr ""
-#: app/cli.py:238 app/main/routes.py:300
+#: app/cli.py:225 app/main/routes.py:328
msgid "[PieFed] You have unread notifications"
msgstr ""
@@ -42,13 +42,21 @@ msgstr ""
msgid "Welcome to PieFed"
msgstr ""
-#: app/activitypub/util.py:1205 app/post/routes.py:85 app/post/routes.py:472
+#: app/activitypub/util.py:1280 app/post/routes.py:91 app/post/routes.py:509
#, python-format
msgid "Reply from %(name)s on %(post_title)s"
msgstr ""
-#: app/admin/forms.py:13 app/admin/forms.py:97 app/community/forms.py:18
-#: app/templates/community/community_mod_list.html:30
+#: app/activitypub/util.py:1679 app/post/routes.py:1053
+msgid "A post has been reported"
+msgstr ""
+
+#: app/activitypub/util.py:1700 app/post/routes.py:1187
+msgid "A comment has been reported"
+msgstr ""
+
+#: app/admin/forms.py:13 app/admin/forms.py:99 app/community/forms.py:18
+#: app/templates/community/community_mod_list.html:32
#: app/templates/user/filters.html:29 app/templates/user/filters.html:70
#: app/templates/user/filters.html:88 app/templates/user/filters.html:106
#: app/templates/user/filters.html:124 app/user/forms.py:89
@@ -71,10 +79,10 @@ msgstr ""
msgid "Legal information"
msgstr ""
-#: app/admin/forms.py:20 app/admin/forms.py:36 app/admin/forms.py:44
-#: app/admin/forms.py:81 app/admin/forms.py:100 app/admin/forms.py:126
-#: app/admin/forms.py:188 app/community/forms.py:56 app/community/forms.py:95
-#: app/user/forms.py:99
+#: app/admin/forms.py:20 app/admin/forms.py:37 app/admin/forms.py:46
+#: app/admin/forms.py:83 app/admin/forms.py:102 app/admin/forms.py:128
+#: app/admin/forms.py:180 app/community/forms.py:56 app/community/forms.py:96
+#: app/community/forms.py:109 app/community/forms.py:129 app/user/forms.py:99
msgid "Save"
msgstr ""
@@ -127,434 +135,439 @@ msgid "Question to ask people applying for an account"
msgstr ""
#: app/admin/forms.py:34
-msgid "Log ActivityPub JSON for debugging"
+msgid "Block registrations from these referrers (one per line)"
msgstr ""
#: app/admin/forms.py:35
+msgid "Log ActivityPub JSON for debugging"
+msgstr ""
+
+#: app/admin/forms.py:36
msgid "Default theme"
msgstr ""
-#: app/admin/forms.py:40
+#: app/admin/forms.py:41
msgid "Allowlist instead of blocklist"
msgstr ""
-#: app/admin/forms.py:41
+#: app/admin/forms.py:42
msgid "Allow federation with these instances"
msgstr ""
-#: app/admin/forms.py:42
+#: app/admin/forms.py:43
msgid "Blocklist instead of allowlist"
msgstr ""
-#: app/admin/forms.py:43
+#: app/admin/forms.py:44
msgid "Deny federation with these instances"
msgstr ""
-#: app/admin/forms.py:48 app/community/forms.py:42 app/community/forms.py:80
-#: app/community/forms.py:82 app/community/forms.py:86
+#: app/admin/forms.py:45
+msgid "Discard all posts and comments with these phrases (one per line)"
+msgstr ""
+
+#: app/admin/forms.py:50 app/community/forms.py:42 app/community/forms.py:90
+#: app/community/forms.py:101 app/community/forms.py:121
msgid "Title"
msgstr ""
-#: app/admin/forms.py:49 app/admin/forms.py:98 app/community/forms.py:19
+#: app/admin/forms.py:51 app/admin/forms.py:100 app/community/forms.py:19
msgid "Url"
msgstr ""
-#: app/admin/forms.py:50 app/community/forms.py:20 app/community/forms.py:43
+#: app/admin/forms.py:52 app/community/forms.py:20 app/community/forms.py:43
msgid "Description"
msgstr ""
-#: app/admin/forms.py:51 app/community/forms.py:21 app/community/forms.py:44
+#: app/admin/forms.py:53 app/community/forms.py:21 app/community/forms.py:44
msgid "Icon image"
msgstr ""
-#: app/admin/forms.py:52 app/community/forms.py:22 app/community/forms.py:45
+#: app/admin/forms.py:54 app/community/forms.py:22 app/community/forms.py:45
msgid "Banner image"
msgstr ""
-#: app/admin/forms.py:53 app/community/forms.py:23 app/community/forms.py:46
+#: app/admin/forms.py:55 app/community/forms.py:23 app/community/forms.py:46
msgid "Rules"
msgstr ""
-#: app/admin/forms.py:54 app/community/forms.py:47
+#: app/admin/forms.py:56 app/community/forms.py:47
msgid "Porn community"
msgstr ""
-#: app/admin/forms.py:55
+#: app/admin/forms.py:57
msgid "Banned - no new posts accepted"
msgstr ""
-#: app/admin/forms.py:56 app/community/forms.py:48
+#: app/admin/forms.py:58 app/community/forms.py:48
msgid "Only accept posts from current instance"
msgstr ""
-#: app/admin/forms.py:57 app/community/forms.py:49
+#: app/admin/forms.py:59 app/community/forms.py:49
msgid "Only moderators can post"
msgstr ""
-#: app/admin/forms.py:58 app/community/forms.py:50
+#: app/admin/forms.py:60 app/community/forms.py:50
msgid "New moderators wanted"
msgstr ""
-#: app/admin/forms.py:59
+#: app/admin/forms.py:61
msgid "Posts show on home page"
msgstr ""
-#: app/admin/forms.py:60
+#: app/admin/forms.py:62
msgid "Posts can be popular"
msgstr ""
-#: app/admin/forms.py:61
+#: app/admin/forms.py:63
msgid "Posts show in All list"
msgstr ""
-#: app/admin/forms.py:62
+#: app/admin/forms.py:64
msgid "Low quality / toxic - upvotes in here don't add to reputation"
msgstr ""
-#: app/admin/forms.py:63
+#: app/admin/forms.py:65
msgid "Forever"
msgstr ""
-#: app/admin/forms.py:64
+#: app/admin/forms.py:66
msgid "1 week"
msgstr ""
-#: app/admin/forms.py:65
+#: app/admin/forms.py:67
msgid "2 weeks"
msgstr ""
-#: app/admin/forms.py:66
+#: app/admin/forms.py:68
msgid "1 month"
msgstr ""
-#: app/admin/forms.py:67
+#: app/admin/forms.py:69
msgid "2 months"
msgstr ""
-#: app/admin/forms.py:68
+#: app/admin/forms.py:70
msgid "3 months"
msgstr ""
-#: app/admin/forms.py:69
+#: app/admin/forms.py:71
msgid "6 months"
msgstr ""
-#: app/admin/forms.py:70
+#: app/admin/forms.py:72
msgid "1 year"
msgstr ""
-#: app/admin/forms.py:71
+#: app/admin/forms.py:73
msgid "2 years"
msgstr ""
-#: app/admin/forms.py:72
+#: app/admin/forms.py:74
msgid "5 years"
msgstr ""
-#: app/admin/forms.py:73
+#: app/admin/forms.py:75
msgid "10 years"
msgstr ""
-#: app/admin/forms.py:75
+#: app/admin/forms.py:77
msgid "Retain content"
msgstr ""
-#: app/admin/forms.py:76 app/community/forms.py:51
+#: app/admin/forms.py:78 app/community/forms.py:51
msgid "Topic"
msgstr ""
-#: app/admin/forms.py:77 app/community/forms.py:52
+#: app/admin/forms.py:79 app/community/forms.py:52
#: app/templates/community/_community_nav.html:23
msgid "List"
msgstr ""
-#: app/admin/forms.py:78 app/community/forms.py:53
+#: app/admin/forms.py:80 app/community/forms.py:53
msgid "Masonry"
msgstr ""
-#: app/admin/forms.py:79 app/community/forms.py:54
+#: app/admin/forms.py:81 app/community/forms.py:54
msgid "Wide masonry"
msgstr ""
-#: app/admin/forms.py:80 app/community/forms.py:55
+#: app/admin/forms.py:82 app/community/forms.py:55
msgid "Layout"
msgstr ""
-#: app/admin/forms.py:87 app/community/forms.py:32
+#: app/admin/forms.py:89 app/community/forms.py:32
msgid "Url is required."
msgstr ""
-#: app/admin/forms.py:91 app/community/forms.py:36
+#: app/admin/forms.py:93 app/community/forms.py:36
msgid "- cannot be in Url. Use _ instead?"
msgstr ""
-#: app/admin/forms.py:99
+#: app/admin/forms.py:101
msgid "Parent topic"
msgstr ""
-#: app/admin/forms.py:104 app/auth/forms.py:10 app/auth/forms.py:17
+#: app/admin/forms.py:106 app/auth/forms.py:10 app/auth/forms.py:17
#: app/community/forms.py:60
msgid "User name"
msgstr ""
-#: app/admin/forms.py:106 app/admin/forms.py:169 app/user/forms.py:14
+#: app/admin/forms.py:108 app/user/forms.py:14
msgid "Email address"
msgstr ""
-#: app/admin/forms.py:107 app/auth/forms.py:11 app/auth/forms.py:20
+#: app/admin/forms.py:109 app/auth/forms.py:11 app/auth/forms.py:20
#: app/auth/forms.py:74
msgid "Password"
msgstr ""
-#: app/admin/forms.py:109 app/auth/forms.py:22 app/auth/forms.py:76
+#: app/admin/forms.py:111 app/auth/forms.py:22 app/auth/forms.py:76
msgid "Repeat password"
msgstr ""
-#: app/admin/forms.py:110 app/admin/forms.py:168 app/user/forms.py:17
+#: app/admin/forms.py:112 app/user/forms.py:17
msgid "Bio"
msgstr ""
-#: app/admin/forms.py:111 app/admin/forms.py:170 app/user/forms.py:18
+#: app/admin/forms.py:113 app/user/forms.py:18
msgid "Matrix User ID"
msgstr ""
-#: app/admin/forms.py:112 app/admin/forms.py:171 app/user/forms.py:19
+#: app/admin/forms.py:114 app/user/forms.py:19
msgid "Avatar image"
msgstr ""
-#: app/admin/forms.py:113 app/admin/forms.py:172 app/user/forms.py:20
+#: app/admin/forms.py:115 app/user/forms.py:20
msgid "Top banner image"
msgstr ""
-#: app/admin/forms.py:114 app/admin/forms.py:173 app/user/forms.py:21
+#: app/admin/forms.py:116 app/admin/forms.py:170 app/user/forms.py:21
msgid "This profile is a bot"
msgstr ""
-#: app/admin/forms.py:115 app/admin/forms.py:174
+#: app/admin/forms.py:117 app/admin/forms.py:171
msgid "Email address is verified"
msgstr ""
-#: app/admin/forms.py:116 app/admin/forms.py:175
+#: app/admin/forms.py:118 app/admin/forms.py:172
msgid "Banned"
msgstr ""
-#: app/admin/forms.py:117 app/admin/forms.py:176 app/user/forms.py:34
+#: app/admin/forms.py:119 app/user/forms.py:34
msgid "Subscribe to email newsletter"
msgstr ""
-#: app/admin/forms.py:118 app/admin/forms.py:177 app/user/forms.py:36
+#: app/admin/forms.py:120 app/user/forms.py:36
msgid "Hide posts by bots"
msgstr ""
-#: app/admin/forms.py:119 app/admin/forms.py:178 app/user/forms.py:37
+#: app/admin/forms.py:121 app/user/forms.py:37
msgid "Show NSFW posts"
msgstr ""
-#: app/admin/forms.py:120 app/admin/forms.py:179 app/user/forms.py:38
+#: app/admin/forms.py:122 app/user/forms.py:38
msgid "Show NSFL posts"
msgstr ""
-#: app/admin/forms.py:121 app/admin/forms.py:183
+#: app/admin/forms.py:123 app/admin/forms.py:173
msgid "User"
msgstr ""
-#: app/admin/forms.py:122 app/admin/forms.py:184
+#: app/admin/forms.py:124 app/admin/forms.py:174
msgid "Staff"
msgstr ""
-#: app/admin/forms.py:123 app/admin/forms.py:185 app/admin/routes.py:29
-#: app/templates/base.html:180
+#: app/admin/forms.py:125 app/admin/forms.py:175 app/admin/routes.py:32
+#: app/templates/base.html:185
msgid "Admin"
msgstr ""
-#: app/admin/forms.py:125 app/admin/forms.py:187
+#: app/admin/forms.py:127 app/admin/forms.py:177
msgid "Role"
msgstr ""
-#: app/admin/forms.py:131 app/auth/forms.py:32
+#: app/admin/forms.py:133 app/auth/forms.py:32
msgid "An account with this email address already exists."
msgstr ""
-#: app/admin/forms.py:135 app/auth/forms.py:36
+#: app/admin/forms.py:137 app/auth/forms.py:36
msgid "User names cannot contain @."
msgstr ""
-#: app/admin/forms.py:139 app/auth/forms.py:40
+#: app/admin/forms.py:141 app/auth/forms.py:40
msgid "This username was used in the past and cannot be reused."
msgstr ""
-#: app/admin/forms.py:141 app/auth/forms.py:42
+#: app/admin/forms.py:143 app/auth/forms.py:42
msgid "An account with this user name already exists."
msgstr ""
-#: app/admin/forms.py:144 app/auth/forms.py:45
+#: app/admin/forms.py:146 app/auth/forms.py:45
msgid "A community with this name exists so it cannot be used for a user."
msgstr ""
-#: app/admin/forms.py:151 app/admin/forms.py:164 app/auth/forms.py:52
+#: app/admin/forms.py:153 app/admin/forms.py:166 app/auth/forms.py:52
#: app/auth/forms.py:65
msgid "This password is too common."
msgstr ""
-#: app/admin/forms.py:161 app/auth/forms.py:62
+#: app/admin/forms.py:163 app/auth/forms.py:62
msgid "This password is not secure."
msgstr ""
-#: app/admin/forms.py:180 app/user/forms.py:40
-msgid "Show profile in user list"
+#: app/admin/forms.py:178
+msgid "Remove avatar"
msgstr ""
-#: app/admin/forms.py:181
-msgid "Allow search engines to index this profile"
+#: app/admin/forms.py:179
+msgid "Remove banner"
msgstr ""
-#: app/admin/forms.py:182 app/user/forms.py:42
-msgid "Manually approve followers"
-msgstr ""
-
-#: app/admin/forms.py:192
+#: app/admin/forms.py:184
msgid "Subject"
msgstr ""
-#: app/admin/forms.py:193
+#: app/admin/forms.py:185
msgid "Body (text)"
msgstr ""
-#: app/admin/forms.py:194
+#: app/admin/forms.py:186
msgid "Body (html)"
msgstr ""
-#: app/admin/forms.py:195
+#: app/admin/forms.py:187
msgid "Test mode"
msgstr ""
-#: app/admin/forms.py:196 app/admin/routes.py:732
+#: app/admin/forms.py:188 app/admin/routes.py:708
msgid "Send newsletter"
msgstr ""
-#: app/admin/routes.py:57 app/templates/admin/_nav.html:4
+#: app/admin/routes.py:60 app/templates/admin/_nav.html:4
msgid "Site profile"
msgstr ""
-#: app/admin/routes.py:102 app/templates/admin/_nav.html:5
+#: app/admin/routes.py:108 app/templates/admin/_nav.html:5
msgid "Misc settings"
msgstr ""
-#: app/admin/routes.py:133
+#: app/admin/routes.py:144
msgid "Admin settings saved"
msgstr ""
-#: app/admin/routes.py:143
+#: app/admin/routes.py:155
msgid "Federation settings"
msgstr ""
-#: app/admin/routes.py:165
+#: app/admin/routes.py:177
msgid "ActivityPub Log"
msgstr ""
-#: app/admin/routes.py:175
+#: app/admin/routes.py:187
msgid "Activity JSON"
msgstr ""
-#: app/admin/routes.py:210 app/community/routes.py:215 app/main/routes.py:181
-#: app/post/routes.py:211 app/templates/admin/_nav.html:6
+#: app/admin/routes.py:222 app/community/routes.py:232 app/main/routes.py:193
+#: app/post/routes.py:238 app/templates/admin/_nav.html:6
#: app/templates/list_communities.html:51 app/templates/user/filters.html:58
#: app/templates/user/notifications.html:66
-#: app/templates/user/show_profile.html:130
+#: app/templates/user/show_profile.html:133
msgid "Communities"
msgstr ""
-#: app/admin/routes.py:262 app/admin/routes.py:358 app/admin/routes.py:383
-#: app/admin/routes.py:578 app/community/routes.py:630
+#: app/admin/routes.py:274 app/admin/routes.py:370 app/admin/routes.py:395
+#: app/admin/routes.py:564 app/community/routes.py:808
msgid "Saved"
msgstr ""
-#: app/admin/routes.py:266
+#: app/admin/routes.py:278
msgid ""
"This is a remote community - most settings here will be regularly "
"overwritten with data from the original server."
msgstr ""
-#: app/admin/routes.py:283 app/community/routes.py:642
-#: app/templates/community/community_edit.html:20
+#: app/admin/routes.py:295 app/community/routes.py:820
msgid "Edit community"
msgstr ""
-#: app/admin/routes.py:302 app/community/routes.py:664
+#: app/admin/routes.py:314 app/community/routes.py:843
msgid "Community deleted"
msgstr ""
-#: app/admin/routes.py:336 app/community/routes.py:201 app/post/routes.py:197
-#: app/templates/admin/_nav.html:7 app/templates/base.html:134
-#: app/templates/base.html:152 app/templates/topic/show_topic.html:14
+#: app/admin/routes.py:348 app/community/routes.py:218 app/post/routes.py:224
+#: app/templates/admin/_nav.html:7 app/templates/base.html:137
+#: app/templates/base.html:155 app/templates/topic/show_topic.html:14
msgid "Topics"
msgstr ""
-#: app/admin/routes.py:361 app/templates/admin/topics.html:35
+#: app/admin/routes.py:373 app/templates/admin/topics.html:35
msgid "Add topic"
msgstr ""
-#: app/admin/routes.py:389
+#: app/admin/routes.py:401
msgid "Edit topic"
msgstr ""
-#: app/admin/routes.py:404
+#: app/admin/routes.py:416
msgid "Topic deleted"
msgstr ""
-#: app/admin/routes.py:406
+#: app/admin/routes.py:418
msgid "Cannot delete topic with communities assigned to it."
msgstr ""
-#: app/admin/routes.py:433 app/templates/admin/_nav.html:8
+#: app/admin/routes.py:445 app/templates/admin/_nav.html:8
msgid "Users"
msgstr ""
-#: app/admin/routes.py:463
+#: app/admin/routes.py:475
msgid "Problematic users"
msgstr ""
-#: app/admin/routes.py:484
+#: app/admin/routes.py:496
msgid "Bad posts"
msgstr ""
-#: app/admin/routes.py:517
+#: app/admin/routes.py:529
msgid "Registration approved."
msgstr ""
-#: app/admin/routes.py:574
+#: app/admin/routes.py:560
msgid ""
"Permissions are cached for 50 seconds so new admin roles won't take "
"effect immediately."
msgstr ""
-#: app/admin/routes.py:582
+#: app/admin/routes.py:568
msgid ""
"This is a remote user - most settings here will be regularly overwritten "
"with data from the original server."
msgstr ""
-#: app/admin/routes.py:599
+#: app/admin/routes.py:575
msgid "Edit user"
msgstr ""
-#: app/admin/routes.py:664
+#: app/admin/routes.py:640
msgid "User added"
msgstr ""
-#: app/admin/routes.py:667
+#: app/admin/routes.py:643
msgid "Add user"
msgstr ""
-#: app/admin/routes.py:691
+#: app/admin/routes.py:667
msgid "User deleted"
msgstr ""
-#: app/admin/routes.py:714
+#: app/admin/routes.py:690
+#: app/templates/community/_community_moderation_nav.html:11
+#: app/templates/community/community_moderate.html:21
msgid "Reports"
msgstr ""
-#: app/admin/util.py:125
+#: app/admin/util.py:110
msgid "None"
msgstr ""
@@ -574,7 +587,7 @@ msgstr ""
msgid "Why would you like to join this site?"
msgstr ""
-#: app/auth/forms.py:27 app/auth/routes.py:140 app/templates/base.html:141
+#: app/auth/forms.py:27 app/auth/routes.py:153 app/templates/base.html:144
msgid "Register"
msgstr ""
@@ -608,55 +621,55 @@ msgstr ""
msgid "Login"
msgstr ""
-#: app/auth/routes.py:97
+#: app/auth/routes.py:100
msgid "Sorry, you cannot use that email address"
msgstr ""
-#: app/auth/routes.py:99
+#: app/auth/routes.py:102
msgid "Sorry, you cannot use that user name"
msgstr ""
-#: app/auth/routes.py:106
+#: app/auth/routes.py:119
#, python-format
msgid "Your username contained special letters so it was changed to %(name)s."
msgstr ""
-#: app/auth/routes.py:145
+#: app/auth/routes.py:158
msgid "Account under review"
msgstr ""
-#: app/auth/routes.py:150 app/templates/auth/check_email.html:8
+#: app/auth/routes.py:163 app/templates/auth/check_email.html:8
msgid "Check your email"
msgstr ""
-#: app/auth/routes.py:161
+#: app/auth/routes.py:174
msgid "Sorry, you cannot use that email address."
msgstr ""
-#: app/auth/routes.py:166
+#: app/auth/routes.py:179
msgid "Check your email for a link to reset your password."
msgstr ""
-#: app/auth/routes.py:169
+#: app/auth/routes.py:182
msgid "No account with that email address exists"
msgstr ""
-#: app/auth/routes.py:171
+#: app/auth/routes.py:184
msgid "Reset Password"
msgstr ""
-#: app/auth/routes.py:185
+#: app/auth/routes.py:198
#, python-format
msgid ""
"Your password has been reset. Please use it to log in with user name of "
"%(name)s."
msgstr ""
-#: app/auth/routes.py:205
+#: app/auth/routes.py:218
msgid "Thank you for verifying your email address."
msgstr ""
-#: app/auth/routes.py:207
+#: app/auth/routes.py:220
msgid "Email address validation failed."
msgstr ""
@@ -720,22 +733,22 @@ msgstr ""
msgid "Self-harm or suicide"
msgstr ""
-#: app/chat/forms.py:29 app/community/forms.py:155 app/post/forms.py:26
+#: app/chat/forms.py:29 app/community/forms.py:162 app/post/forms.py:26
#: app/user/forms.py:73
msgid "Other"
msgstr ""
-#: app/chat/forms.py:30 app/community/forms.py:70 app/community/forms.py:157
+#: app/chat/forms.py:30 app/community/forms.py:81 app/community/forms.py:164
#: app/post/forms.py:27 app/user/forms.py:74
msgid "Reason"
msgstr ""
-#: app/chat/forms.py:31 app/community/forms.py:158 app/post/forms.py:28
+#: app/chat/forms.py:31 app/community/forms.py:165 app/post/forms.py:28
#: app/user/forms.py:75
msgid "More info"
msgstr ""
-#: app/chat/forms.py:33 app/community/forms.py:160 app/post/forms.py:30
+#: app/chat/forms.py:33 app/community/forms.py:167 app/post/forms.py:30
#: app/templates/user/show_profile.html:56 app/user/forms.py:77
msgid "Report"
msgstr ""
@@ -770,12 +783,12 @@ msgstr ""
msgid "Report conversation"
msgstr ""
-#: app/chat/util.py:58
+#: app/chat/util.py:59
#, python-format
msgid "Message failed to send to %(name)s."
msgstr ""
-#: app/chat/util.py:60
+#: app/chat/util.py:61
msgid "Message sent."
msgstr ""
@@ -788,157 +801,177 @@ msgid "Add"
msgstr ""
#: app/community/forms.py:65
+msgid "Amend the report description if necessary"
+msgstr ""
+
+#: app/community/forms.py:66
+msgid "Escalate report"
+msgstr ""
+
+#: app/community/forms.py:70
+msgid "Note for mod log"
+msgstr ""
+
+#: app/community/forms.py:71
+msgid "Also resolve all other reports about the same thing."
+msgstr ""
+
+#: app/community/forms.py:72
+#: app/templates/community/community_moderate_report_resolve.html:13
+msgid "Resolve report"
+msgstr ""
+
+#: app/community/forms.py:76
msgid "Community address"
msgstr ""
-#: app/community/forms.py:66 app/search/routes.py:52
-#: app/templates/base.html:193 app/templates/community/add_remote.html:13
+#: app/community/forms.py:77 app/search/routes.py:56
+#: app/templates/base.html:198 app/templates/community/add_remote.html:13
#: app/templates/domain/domains.html:29
#: app/templates/domain/domains_blocked.html:29 app/templates/index.html:40
#: app/templates/list_communities.html:36 app/templates/search/results.html:38
msgid "Search"
msgstr ""
-#: app/community/forms.py:71
+#: app/community/forms.py:82
msgid "Ban until"
msgstr ""
-#: app/community/forms.py:72
+#: app/community/forms.py:83
msgid "Also delete all their posts"
msgstr ""
-#: app/community/forms.py:73
+#: app/community/forms.py:84
msgid "Also delete all their comments"
msgstr ""
-#: app/community/forms.py:74 app/templates/domain/domains_blocked.html:48
-#: app/templates/user/show_profile.html:170
+#: app/community/forms.py:85
+#: app/templates/community/community_moderate_subscribers.html:56
+#: app/templates/domain/domains_blocked.html:48
+#: app/templates/user/show_profile.html:173
msgid "Ban"
msgstr ""
-#: app/community/forms.py:78 app/templates/list_communities.html:56
+#: app/community/forms.py:89 app/community/forms.py:100
+#: app/community/forms.py:120 app/templates/list_communities.html:56
msgid "Community"
msgstr ""
-#: app/community/forms.py:81 app/community/forms.py:83
-#: app/community/forms.py:88 app/post/forms.py:10
+#: app/community/forms.py:91 app/community/forms.py:102
+#: app/community/forms.py:123 app/post/forms.py:10
msgid "Body"
msgstr ""
-#: app/community/forms.py:85
-msgid "URL"
+#: app/community/forms.py:92 app/community/forms.py:105
+#: app/community/forms.py:125
+msgid "Sticky"
msgstr ""
-#: app/community/forms.py:87
-msgid "Alt text"
-msgstr ""
-
-#: app/community/forms.py:90
-msgid "Image"
-msgstr ""
-
-#: app/community/forms.py:92
+#: app/community/forms.py:93 app/community/forms.py:106
+#: app/community/forms.py:126
msgid "NSFW"
msgstr ""
-#: app/community/forms.py:93
+#: app/community/forms.py:94 app/community/forms.py:107
+#: app/community/forms.py:127
msgid "Gore/gross"
msgstr ""
-#: app/community/forms.py:94 app/post/forms.py:11
+#: app/community/forms.py:95 app/community/forms.py:108
+#: app/community/forms.py:128 app/post/forms.py:11
#: app/templates/post/_post_notification_toggle.html:4
#: app/templates/post/_reply_notification_toggle.html:4
msgid "Notify about replies"
msgstr ""
-#: app/community/forms.py:105 app/community/forms.py:109
-#: app/community/forms.py:120
-msgid "Title is required."
+#: app/community/forms.py:103
+msgid "URL"
msgstr ""
-#: app/community/forms.py:112
-msgid "URL is required."
-msgstr ""
-
-#: app/community/forms.py:116
+#: app/community/forms.py:114
#, python-format
msgid "Links to %(domain)s are not allowed."
msgstr ""
-#: app/community/forms.py:123
-msgid "File is required."
+#: app/community/forms.py:122
+msgid "Alt text"
msgstr ""
-#: app/community/forms.py:140
-msgid "Images cannot be posted to local communities."
-msgstr ""
-
-#: app/community/forms.py:142
-msgid "Poll not implemented yet."
-msgstr ""
-
-#: app/community/forms.py:149
-msgid "Breaks instance rules"
+#: app/community/forms.py:124
+#: app/templates/community/add_discussion_post.html:21
+#: app/templates/community/add_image_post.html:21
+#: app/templates/community/add_link_post.html:21
+msgid "Image"
msgstr ""
#: app/community/forms.py:150
+msgid "Images cannot be posted to local communities."
+msgstr ""
+
+#: app/community/forms.py:156
+msgid "Breaks instance rules"
+msgstr ""
+
+#: app/community/forms.py:157
msgid "Abandoned by moderators"
msgstr ""
-#: app/community/forms.py:151
+#: app/community/forms.py:158
msgid "Cult"
msgstr ""
-#: app/community/forms.py:152
+#: app/community/forms.py:159
msgid "Scam"
msgstr ""
-#: app/community/forms.py:153
+#: app/community/forms.py:160
msgid "Alt-right pipeline"
msgstr ""
-#: app/community/forms.py:154 app/post/forms.py:17
+#: app/community/forms.py:161 app/post/forms.py:17
msgid "Hate / genocide"
msgstr ""
-#: app/community/forms.py:172 app/community/routes.py:667
+#: app/community/forms.py:179 app/community/routes.py:846
msgid "Delete community"
msgstr ""
-#: app/community/routes.py:72
+#: app/community/routes.py:79
msgid "Your new community has been created."
msgstr ""
-#: app/community/routes.py:78 app/templates/community/add_local.html:13
-#: app/templates/community/community_edit.html:22
+#: app/community/routes.py:85 app/templates/community/add_local.html:13
+#: app/templates/community/community_edit.html:25
msgid "Create community"
msgstr ""
-#: app/community/routes.py:102
+#: app/community/routes.py:111 app/community/routes.py:1278
msgid "Community not found."
msgstr ""
-#: app/community/routes.py:104
+#: app/community/routes.py:113 app/community/routes.py:1280
msgid ""
"Community not found. If you are searching for a nsfw community it is "
"blocked by this instance."
msgstr ""
-#: app/community/routes.py:107
+#: app/community/routes.py:116 app/community/routes.py:1283
#, python-format
msgid "That community is banned from %(site)s."
msgstr ""
-#: app/community/routes.py:110
+#: app/community/routes.py:119
msgid "Add remote community"
msgstr ""
-#: app/community/routes.py:184 app/post/routes.py:180
-#: app/templates/base.html:127 app/templates/base.html:129
-#: app/templates/base.html:145 app/templates/base.html:147
+#: app/community/routes.py:201 app/post/routes.py:207
+#: app/templates/base.html:130 app/templates/base.html:132
+#: app/templates/base.html:148 app/templates/base.html:150
#: app/templates/chat/conversation.html:36
#: app/templates/community/community_edit.html:13
#: app/templates/community/community_mod_list.html:13
+#: app/templates/community/community_moderate.html:13
+#: app/templates/community/community_moderate_subscribers.html:13
#: app/templates/domain/domain.html:13 app/templates/topic/show_topic.html:13
#: app/templates/user/delete_account.html:13
#: app/templates/user/edit_filters.html:14
@@ -950,91 +983,118 @@ msgstr ""
msgid "Home"
msgstr ""
-#: app/community/routes.py:310
+#: app/community/routes.py:327
msgid "You cannot join this community"
msgstr ""
-#: app/community/routes.py:326
+#: app/community/routes.py:343
msgid ""
"There was a problem while trying to communicate with remote server. If "
"other people have already joined this community it won't matter."
msgstr ""
-#: app/community/routes.py:516 app/community/routes.py:540
-#: app/community/routes.py:542
+#: app/community/routes.py:492 app/community/routes.py:565
+#: app/community/routes.py:638
+msgid "Add post to community"
+msgstr ""
+
+#: app/community/routes.py:705 app/community/routes.py:730
+#: app/community/routes.py:732
#, python-format
msgid "Your post to %(name)s has been made."
msgstr ""
-#: app/community/routes.py:552
-msgid "Add post to community"
-msgstr ""
-
-#: app/community/routes.py:574
+#: app/community/routes.py:749
msgid "A community has been reported"
msgstr ""
-#: app/community/routes.py:585
+#: app/community/routes.py:760
msgid "Community has been reported, thank you!"
msgstr ""
-#: app/community/routes.py:588
+#: app/community/routes.py:763
msgid "Report community"
msgstr ""
-#: app/community/routes.py:683
-#: app/templates/community/community_mod_list.html:21
+#: app/community/routes.py:864
+#: app/templates/community/community_mod_list.html:22
#, python-format
msgid "Moderators for %(community)s"
msgstr ""
-#: app/community/routes.py:706
+#: app/community/routes.py:889
msgid "Moderator added"
msgstr ""
-#: app/community/routes.py:710
+#: app/community/routes.py:893
#, python-format
msgid "You are now a moderator of %(name)s"
msgstr ""
-#: app/community/routes.py:735
+#: app/community/routes.py:918
msgid "Account not found"
msgstr ""
-#: app/community/routes.py:737
+#: app/community/routes.py:920
#: app/templates/community/community_add_moderator.html:13
#, python-format
msgid "Add moderator to %(community)s"
msgstr ""
-#: app/community/routes.py:755
+#: app/community/routes.py:940
msgid "Moderator removed"
msgstr ""
-#: app/community/routes.py:772 app/post/routes.py:870 app/post/routes.py:962
+#: app/community/routes.py:957 app/post/routes.py:1139 app/post/routes.py:1262
#, python-format
msgid "Content from %(name)s will be hidden."
msgstr ""
-#: app/community/routes.py:792
+#: app/community/routes.py:986
#, python-format
msgid "%(name)s has been banned."
msgstr ""
-#: app/community/routes.py:799
+#: app/community/routes.py:993
#, python-format
msgid "Posts by %(name)s have been deleted."
msgstr ""
-#: app/community/routes.py:805
+#: app/community/routes.py:999
#, python-format
msgid "Comments by %(name)s have been deleted."
msgstr ""
-#: app/community/routes.py:823
+#: app/community/routes.py:1020
msgid "Ban from community"
msgstr ""
+#: app/community/routes.py:1043
+#, python-format
+msgid "%(name)s has been unbanned."
+msgstr ""
+
+#: app/community/routes.py:1108 app/community/routes.py:1142
+#, python-format
+msgid "Moderation of %(community)s"
+msgstr ""
+
+#: app/community/routes.py:1170
+msgid "Admin has been notified about this report."
+msgstr ""
+
+#: app/community/routes.py:1218
+msgid "Report resolved."
+msgstr ""
+
+#: app/community/routes.py:1256
+msgid "Report ignored."
+msgstr ""
+
+#: app/community/routes.py:1286
+msgid "Search result for remote community"
+msgstr ""
+
#: app/domain/routes.py:113
#, python-format
msgid "%(name)s blocked."
@@ -1055,25 +1115,25 @@ msgstr ""
msgid "%(name)s un-banned for all users."
msgstr ""
-#: app/main/routes.py:72
+#: app/main/routes.py:73
msgid "Create an account to tailor this feed to your interests."
msgstr ""
-#: app/main/routes.py:156 app/templates/base.html:136
-#: app/templates/base.html:154
+#: app/main/routes.py:163 app/templates/base.html:139
+#: app/templates/base.html:157
msgid "Browse by topic"
msgstr ""
-#: app/main/routes.py:194
+#: app/main/routes.py:206
msgid "Local communities"
msgstr ""
-#: app/main/routes.py:209 app/templates/base.html:163
+#: app/main/routes.py:221 app/templates/base.html:168
#: app/templates/list_communities.html:19
msgid "Joined communities"
msgstr ""
-#: app/main/routes.py:326
+#: app/main/routes.py:354
msgid "Please click the link in your email inbox to verify your account."
msgstr ""
@@ -1089,7 +1149,7 @@ msgstr ""
msgid "Sharing personal info - doxing"
msgstr ""
-#: app/post/forms.py:42 app/post/routes.py:887
+#: app/post/forms.py:42 app/post/routes.py:1156
#: app/templates/post/post_mea_culpa.html:13
msgid "I changed my mind"
msgstr ""
@@ -1099,76 +1159,92 @@ msgstr ""
msgid "%(name)s has indicated they made a mistake in this post."
msgstr ""
-#: app/post/routes.py:66 app/post/routes.py:443
+#: app/post/routes.py:72 app/post/routes.py:476
#, python-format
msgid "You cannot reply to %(name)s"
msgstr ""
-#: app/post/routes.py:76 app/post/routes.py:456
+#: app/post/routes.py:82 app/post/routes.py:489
msgid "This type of comment is not accepted, sorry."
msgstr ""
-#: app/post/routes.py:414 app/post/routes.py:579
+#: app/post/routes.py:446 app/post/routes.py:632
#, python-format
msgid "Discussing %(title)s"
msgstr ""
-#: app/post/routes.py:628 app/post/routes.py:985 app/user/routes.py:137
-#: app/user/routes.py:198 app/user/routes.py:670 app/user/routes.py:701
+#: app/post/routes.py:702 app/post/routes.py:783 app/post/routes.py:865
+#: app/post/routes.py:1285 app/user/routes.py:143 app/user/routes.py:204
+#: app/user/routes.py:686 app/user/routes.py:717
msgid "Your changes have been saved."
msgstr ""
-#: app/post/routes.py:725 app/templates/post/post_edit.html:43
+#: app/post/routes.py:718 app/post/routes.py:800 app/post/routes.py:882
+#: app/templates/post/post_edit_discussion.html:11
+#: app/templates/post/post_edit_image.html:11
+#: app/templates/post/post_edit_link.html:11
msgid "Edit post"
msgstr ""
-#: app/post/routes.py:746
+#: app/post/routes.py:990
msgid "Post deleted."
msgstr ""
-#: app/post/routes.py:804
-msgid "A post has been reported"
+#: app/post/routes.py:1040
+msgid ""
+"Moderators have already assessed reports regarding this post, no further "
+"reports are necessary."
msgstr ""
-#: app/post/routes.py:822
+#: app/post/routes.py:1043
+msgid "Post has already been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1091
msgid "Post has been reported, thank you!"
msgstr ""
-#: app/post/routes.py:827
+#: app/post/routes.py:1096
msgid "Report post"
msgstr ""
-#: app/post/routes.py:841 app/post/routes.py:946
+#: app/post/routes.py:1110 app/post/routes.py:1246
#, python-format
msgid "%(name)s has been blocked."
msgstr ""
-#: app/post/routes.py:857
+#: app/post/routes.py:1126
#, python-format
msgid "Posts linking to %(name)s will be hidden."
msgstr ""
-#: app/post/routes.py:908
-msgid "A comment has been reported"
+#: app/post/routes.py:1170
+msgid ""
+"Moderators have already assessed reports regarding this comment, no "
+"further reports are necessary."
msgstr ""
-#: app/post/routes.py:926
+#: app/post/routes.py:1175
+msgid "Comment has already been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1226
msgid "Comment has been reported, thank you!"
msgstr ""
-#: app/post/routes.py:931
+#: app/post/routes.py:1231
msgid "Report comment"
msgstr ""
-#: app/post/routes.py:1062
+#: app/post/routes.py:1389
msgid "Edit comment"
msgstr ""
-#: app/post/routes.py:1086
+#: app/post/routes.py:1413
msgid "Comment deleted."
msgstr ""
-#: app/search/routes.py:45
+#: app/search/routes.py:49
#, python-format
msgid "Search results for %(q)s"
msgstr ""
@@ -1200,92 +1276,92 @@ msgstr ""
msgid "Rational Discourse Toolkit"
msgstr ""
-#: app/templates/base.html:52
+#: app/templates/about.html:10 app/templates/donate.html:26
+#: app/templates/index.html:67 app/templates/keyboard_shortcuts.html:63
+#: app/templates/search/results.html:65
+#, python-format
+msgid "About %(site_name)s"
+msgstr ""
+
+#: app/templates/base.html:55
msgid "PieFed"
msgstr ""
-#: app/templates/base.html:110 app/templates/base.html:184
-#: app/templates/user/notifications.html:18 app/user/routes.py:521
+#: app/templates/base.html:113 app/templates/base.html:189
+#: app/templates/user/notifications.html:18 app/user/routes.py:537
msgid "Notifications"
msgstr ""
-#: app/templates/base.html:130 app/templates/base.html:148
+#: app/templates/base.html:133 app/templates/base.html:151
msgid "Popular"
msgstr ""
-#: app/templates/base.html:131 app/templates/base.html:149
+#: app/templates/base.html:134 app/templates/base.html:152
msgid "All posts"
msgstr ""
-#: app/templates/base.html:137 app/templates/base.html:155
+#: app/templates/base.html:140 app/templates/base.html:158
#: app/templates/list_communities.html:13
msgid "All communities"
msgstr ""
-#: app/templates/auth/login.html:9 app/templates/base.html:140
+#: app/templates/auth/login.html:9 app/templates/base.html:143
msgid "Log in"
msgstr ""
-#: app/templates/base.html:142 app/templates/base.html:178
+#: app/templates/base.html:145 app/templates/base.html:183
#: app/templates/donate.html:10
msgid "Donate"
msgstr ""
-#: app/templates/base.html:157
+#: app/templates/base.html:161
msgid "Moderating"
msgstr ""
-#: app/templates/base.html:171
+#: app/templates/base.html:176
msgid "Account"
msgstr ""
-#: app/templates/base.html:173
+#: app/templates/base.html:178
msgid "View profile"
msgstr ""
-#: app/templates/base.html:174
+#: app/templates/base.html:179
msgid "Edit profile & settings"
msgstr ""
-#: app/templates/base.html:175
+#: app/templates/base.html:180
msgid "Chats"
msgstr ""
-#: app/templates/base.html:182
+#: app/templates/base.html:187
msgid "Log out"
msgstr ""
-#: app/templates/base.html:184
+#: app/templates/base.html:189
#, python-format
msgid "%(num)d unread notifications"
msgstr ""
-#: app/templates/base.html:194
+#: app/templates/base.html:199
msgid "Light mode"
msgstr ""
-#: app/templates/base.html:195
+#: app/templates/base.html:200
msgid "Dark mode"
msgstr ""
-#: app/templates/base.html:223 app/templates/keyboard_shortcuts.html:10
+#: app/templates/base.html:228 app/templates/keyboard_shortcuts.html:10
msgid "Keyboard shortcuts"
msgstr ""
-#: app/templates/donate.html:26 app/templates/index.html:65
-#: app/templates/keyboard_shortcuts.html:63
-#: app/templates/search/results.html:63
-#, python-format
-msgid "About %(site_name)s"
-msgstr ""
-
#: app/templates/index.html:17
msgid "No posts yet. Join some communities to see more."
msgstr ""
#: app/templates/community/community.html:168 app/templates/index.html:18
-#: app/templates/index.html:59 app/templates/list_topics.html:26
-#: app/templates/post/post.html:217 app/templates/search/results.html:57
+#: app/templates/index.html:59 app/templates/list_topics.html:38
+#: app/templates/post/post.html:220 app/templates/search/results.html:57
#: app/templates/topic/show_topic.html:91
msgid "Explore communities"
msgstr ""
@@ -1294,11 +1370,13 @@ msgstr ""
#: app/templates/admin/communities.html:51 app/templates/admin/posts.html:26
#: app/templates/admin/reports.html:58 app/templates/admin/users.html:69
#: app/templates/community/community.html:92
+#: app/templates/community/community_moderate.html:80
+#: app/templates/community/community_moderate_subscribers.html:67
#: app/templates/domain/domain.html:30 app/templates/domain/domains.html:51
#: app/templates/domain/domains_blocked.html:59 app/templates/index.html:25
#: app/templates/search/results.html:23 app/templates/topic/show_topic.html:52
-#: app/templates/user/show_profile.html:72
-#: app/templates/user/show_profile.html:95
+#: app/templates/user/show_profile.html:75
+#: app/templates/user/show_profile.html:98
msgid "Previous page"
msgstr ""
@@ -1306,11 +1384,13 @@ msgstr ""
#: app/templates/admin/communities.html:56 app/templates/admin/posts.html:31
#: app/templates/admin/reports.html:63 app/templates/admin/users.html:74
#: app/templates/community/community.html:97
+#: app/templates/community/community_moderate.html:85
+#: app/templates/community/community_moderate_subscribers.html:72
#: app/templates/domain/domain.html:35 app/templates/domain/domains.html:56
#: app/templates/domain/domains_blocked.html:64 app/templates/index.html:30
#: app/templates/search/results.html:28 app/templates/topic/show_topic.html:57
-#: app/templates/user/show_profile.html:77
-#: app/templates/user/show_profile.html:100
+#: app/templates/user/show_profile.html:80
+#: app/templates/user/show_profile.html:103
msgid "Next page"
msgstr ""
@@ -1318,6 +1398,11 @@ msgstr ""
msgid "Active communities"
msgstr ""
+#: app/templates/index.html:60 app/templates/list_communities.html:108
+#: app/templates/search/results.html:58
+msgid "Browse topics"
+msgstr ""
+
#: app/templates/keyboard_shortcuts.html:11
msgid "Most shortcuts are the same as what reddit has."
msgstr ""
@@ -1326,7 +1411,7 @@ msgstr ""
msgid "Navigation"
msgstr ""
-#: app/templates/community/community_mod_list.html:31
+#: app/templates/community/community_mod_list.html:33
#: app/templates/keyboard_shortcuts.html:43 app/templates/user/filters.html:31
msgid "Action"
msgstr ""
@@ -1400,7 +1485,7 @@ msgid "Sort by reply count"
msgstr ""
#: app/templates/list_communities.html:66 app/templates/post/post.html:61
-#: app/templates/post/post.html:155
+#: app/templates/post/post.html:158
msgid "Comments"
msgstr ""
@@ -1415,9 +1500,10 @@ msgstr ""
#: app/templates/community/add_remote.html:32
#: app/templates/community/community.html:112
+#: app/templates/community/lookup_remote.html:21
#: app/templates/list_communities.html:82 app/templates/post/add_reply.html:48
-#: app/templates/post/continue_discussion.html:96
-#: app/templates/post/post.html:174
+#: app/templates/post/continue_discussion.html:99
+#: app/templates/post/post.html:177
msgid "Leave"
msgstr ""
@@ -1434,10 +1520,11 @@ msgstr ""
#: app/templates/community/add_remote.html:34
#: app/templates/community/community.html:116
+#: app/templates/community/lookup_remote.html:23
#: app/templates/list_communities.html:86
#: app/templates/list_communities.html:89 app/templates/post/add_reply.html:50
-#: app/templates/post/continue_discussion.html:98
-#: app/templates/post/post.html:176
+#: app/templates/post/continue_discussion.html:101
+#: app/templates/post/post.html:179
msgid "Join"
msgstr ""
@@ -1446,11 +1533,11 @@ msgstr ""
msgid "Browse %(name)s"
msgstr ""
-#: app/templates/list_communities.html:106 app/templates/list_topics.html:24
+#: app/templates/list_communities.html:106 app/templates/list_topics.html:36
msgid "There are no communities yet."
msgstr ""
-#: app/templates/list_topics.html:11
+#: app/templates/list_topics.html:25
msgid "Choose a topic"
msgstr ""
@@ -1474,7 +1561,9 @@ msgstr ""
msgid "Registration applications"
msgstr ""
-#: app/templates/admin/_nav.html:13
+#: app/templates/admin/_nav.html:13 app/templates/community/community.html:181
+#: app/templates/community/community_moderate.html:15
+#: app/templates/community/community_moderate_subscribers.html:15
msgid "Moderation"
msgstr ""
@@ -1510,7 +1599,7 @@ msgstr ""
#: app/templates/admin/approve_registrations.html:45
#: app/templates/post/post_options.html:20
#: app/templates/post/post_reply_options.html:20
-#: app/templates/user/show_profile.html:176
+#: app/templates/user/show_profile.html:179
msgid "Delete"
msgstr ""
@@ -1652,7 +1741,7 @@ msgstr ""
#: app/templates/chat/conversation.html:42 app/templates/user/filters.html:56
#: app/templates/user/notifications.html:14 app/templates/user/people.html:14
#: app/templates/user/people.html:17 app/templates/user/show_profile.html:19
-#: app/templates/user/show_profile.html:39 app/user/routes.py:34
+#: app/templates/user/show_profile.html:39 app/user/routes.py:35
msgid "People"
msgstr ""
@@ -1666,7 +1755,7 @@ msgid "Messages with: "
msgstr ""
#: app/templates/chat/conversation.html:75
-#: app/templates/post/_post_teaser.html:80
+#: app/templates/post/_post_teaser.html:75
msgid "Options"
msgstr ""
@@ -1691,20 +1780,52 @@ msgstr ""
msgid "Report conversation with \"%(member_names)s\""
msgstr ""
-#: app/templates/community/_community_nav.html:3
-#: app/templates/community/add_post.html:11
-#: app/templates/community/community.html:108
-#: app/templates/post/add_reply.html:54
-#: app/templates/post/continue_discussion.html:102
-#: app/templates/post/post.html:170 app/templates/post/post_reply_edit.html:50
-#: app/templates/topic/show_topic.html:68
-msgid "Create post"
+#: app/templates/community/_community_moderation_nav.html:4
+#: app/templates/community/community_edit.html:15
+#: app/templates/community/community_mod_list.html:15
+#: app/templates/post/add_reply.html:89
+#: app/templates/post/continue_discussion.html:140
+#: app/templates/post/post.html:234 app/templates/post/post_reply_edit.html:85
+#: app/templates/user/_user_nav.html:5 app/templates/user/notifications.html:57
+#: app/templates/user/show_profile.html:124
+msgid "Settings"
msgstr ""
+#: app/templates/community/_community_moderation_nav.html:7
+#: app/templates/community/community_mod_list.html:16
+msgid "Moderators"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:10
#: app/templates/community/_community_nav.html:7
msgid "Sort by hot"
msgstr ""
+#: app/templates/community/_community_moderation_nav.html:14
+#: app/templates/community/community_moderate_subscribers.html:21
+msgid "Subscribers"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:17
+msgid "Appeals"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:20
+msgid "Mod log"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:3
+#: app/templates/community/add_discussion_post.html:11
+#: app/templates/community/add_image_post.html:11
+#: app/templates/community/add_link_post.html:11
+#: app/templates/community/community.html:108
+#: app/templates/post/add_reply.html:54
+#: app/templates/post/continue_discussion.html:105
+#: app/templates/post/post.html:173 app/templates/post/post_reply_edit.html:50
+#: app/templates/topic/show_topic.html:68
+msgid "Create post"
+msgstr ""
+
#: app/templates/community/_community_nav.html:10
msgid "Sort by top"
msgstr ""
@@ -1729,25 +1850,86 @@ msgstr ""
msgid "Notify about every new post. Not advisable in high traffic communities!"
msgstr ""
-#: app/templates/community/add_local.html:31
-#, python-format
-msgid "Only people using %(name)s can post or reply"
+#: app/templates/community/add_discussion_post.html:16
+#: app/templates/community/add_image_post.html:16
+#: app/templates/community/add_link_post.html:16
+msgid "Type of post"
msgstr ""
-#: app/templates/community/add_post.html:44
-#: app/templates/community/add_post.html:65
-#: app/templates/community/add_post.html:88
+#: app/templates/community/add_discussion_post.html:19
+#: app/templates/community/add_image_post.html:19
+#: app/templates/community/add_link_post.html:19
+msgid "Start a discussion"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:19
+#: app/templates/community/add_image_post.html:19
+#: app/templates/community/add_link_post.html:19
+msgid "Discussion"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:20
+#: app/templates/community/add_image_post.html:20
+#: app/templates/community/add_link_post.html:20
+msgid "Share a link"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:20
+#: app/templates/community/add_image_post.html:20
+#: app/templates/community/add_link_post.html:20
+msgid "Link"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:21
+#: app/templates/community/add_image_post.html:21
+#: app/templates/community/add_link_post.html:21
+msgid "Share an image"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:22
+#: app/templates/community/add_image_post.html:22
+#: app/templates/community/add_link_post.html:22
+msgid "Create a poll"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:22
+#: app/templates/community/add_image_post.html:22
+#: app/templates/community/add_link_post.html:22
+msgid "Poll"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:23
+#: app/templates/community/add_image_post.html:23
+#: app/templates/community/add_link_post.html:23
+msgid "Create an event"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:23
+#: app/templates/community/add_image_post.html:23
+#: app/templates/community/add_link_post.html:23
+msgid "Event"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:43
+#: app/templates/community/add_image_post.html:45
+#: app/templates/community/add_link_post.html:44
#: app/templates/post/add_reply.html:37 app/templates/post/post.html:42
#: app/templates/user/edit_profile.html:44
msgid "Enable markdown editor"
msgstr ""
-#: app/templates/community/add_post.html:73
-#: app/templates/post/post_edit.html:98
+#: app/templates/community/add_image_post.html:30
+#: app/templates/post/post_edit_image.html:17
msgid "Describe the image, to help visually impaired people."
msgstr ""
+#: app/templates/community/add_local.html:31
+#, python-format
+msgid "Only people using %(name)s can post or reply"
+msgstr ""
+
#: app/templates/community/add_remote.html:25
+#: app/templates/community/lookup_remote.html:14
msgid "Found a community:"
msgstr ""
@@ -1772,15 +1954,15 @@ msgstr ""
#: app/templates/community/community.html:121
#: app/templates/post/add_reply.html:58
-#: app/templates/post/continue_discussion.html:106
-#: app/templates/post/post.html:181 app/templates/post/post_reply_edit.html:54
+#: app/templates/post/continue_discussion.html:109
+#: app/templates/post/post.html:184 app/templates/post/post_reply_edit.html:54
msgid "Search this community"
msgstr ""
#: app/templates/community/community.html:127
#: app/templates/post/add_reply.html:64
-#: app/templates/post/continue_discussion.html:112
-#: app/templates/post/post.html:187 app/templates/post/post_reply_edit.html:60
+#: app/templates/post/continue_discussion.html:115
+#: app/templates/post/post.html:190 app/templates/post/post_reply_edit.html:60
msgid "About community"
msgstr ""
@@ -1789,38 +1971,24 @@ msgstr ""
msgid "Only people on %(instance_name)s can post or reply in this community."
msgstr ""
-#: app/templates/community/community.html:156 app/templates/post/post.html:205
+#: app/templates/community/community.html:156 app/templates/post/post.html:208
msgid "Related communities"
msgstr ""
-#: app/templates/community/community.html:162 app/templates/post/post.html:211
+#: app/templates/community/community.html:162 app/templates/post/post.html:214
#: app/templates/topic/show_topic.html:85
msgid "Go to community"
msgstr ""
#: app/templates/community/community.html:175
#: app/templates/post/add_reply.html:82
-#: app/templates/post/continue_discussion.html:130
-#: app/templates/post/post.html:224 app/templates/post/post_reply_edit.html:78
+#: app/templates/post/continue_discussion.html:133
+#: app/templates/post/post.html:227 app/templates/post/post_reply_edit.html:78
msgid "Community Settings"
msgstr ""
-#: app/templates/community/community.html:178
-#: app/templates/post/add_reply.html:85
-#: app/templates/post/continue_discussion.html:133
-#: app/templates/post/post.html:227 app/templates/post/post_reply_edit.html:81
-msgid "Moderate"
-msgstr ""
-
-#: app/templates/community/community.html:180
-#: app/templates/community/community_edit.html:15
-#: app/templates/community/community_mod_list.html:15
-#: app/templates/post/add_reply.html:86
-#: app/templates/post/continue_discussion.html:134
-#: app/templates/post/post.html:228 app/templates/post/post_reply_edit.html:82
-#: app/templates/user/_user_nav.html:5 app/templates/user/notifications.html:57
-#: app/templates/user/show_profile.html:121
-msgid "Settings"
+#: app/templates/community/community.html:179
+msgid "Settings & Moderation"
msgstr ""
#: app/templates/community/community_ban_user.html:13
@@ -1833,19 +2001,89 @@ msgstr ""
msgid "Delete \"%(community_title)s\""
msgstr ""
-#: app/templates/community/community_edit.html:51
-#: app/templates/community/community_mod_list.html:16
-msgid "Moderators"
+#: app/templates/community/community_edit.html:23
+#, python-format
+msgid "Edit %(community)s"
+msgstr ""
+
+#: app/templates/community/community_edit.html:28
+msgid "Edit and configure this community"
msgstr ""
#: app/templates/community/community_mod_list.html:24
+msgid "See and change who moderates this community"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:26
+#: app/templates/community/community_moderate.html:24
+#: app/templates/community/community_moderate_subscribers.html:24
msgid "Add moderator"
msgstr ""
-#: app/templates/community/community_mod_list.html:41
+#: app/templates/community/community_mod_list.html:43
msgid "Remove"
msgstr ""
+#: app/templates/community/community_moderate.html:27
+#, python-format
+msgid "See and handle all reports made about %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:67
+msgid "Escalate"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:68
+msgid "Resolve"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:70
+msgid "Ignore"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:90
+msgid "No reports yet"
+msgstr ""
+
+#: app/templates/community/community_moderate_report_escalate.html:13
+msgid "Escalate report to admins"
+msgstr ""
+
+#: app/templates/community/community_moderate_report_escalate.html:14
+msgid ""
+"For reports that could potentially involve legal issues or where you are "
+"unsure how to respond, you may prefer to let admins handle it."
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:27
+#, python-format
+msgid "See who is subscribed to %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:77
+msgid "This community has no subscribers"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:79
+msgid "Banned People"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:80
+#, python-format
+msgid "See and manage who is banned from %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:116
+#: app/templates/domain/domain.html:61
+#: app/templates/domain/domains_blocked.html:46
+#: app/templates/user/show_profile.html:169
+msgid "Unban"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:125
+msgid "No banned people yet"
+msgstr ""
+
#: app/templates/domain/domain.html:14 app/templates/domain/domains.html:12
#: app/templates/domain/domains.html:21
#: app/templates/domain/domains_blocked.html:21
@@ -1873,12 +2111,6 @@ msgstr ""
msgid "Block"
msgstr ""
-#: app/templates/domain/domain.html:61
-#: app/templates/domain/domains_blocked.html:46
-#: app/templates/user/show_profile.html:166
-msgid "Unban"
-msgstr ""
-
#: app/templates/domain/domain.html:65
msgid "Ban instance-wide"
msgstr ""
@@ -1964,6 +2196,15 @@ msgstr ""
msgid "Reported. Check post for issues."
msgstr ""
+#: app/templates/post/_post_full.html:109
+#: app/templates/post/_post_full.html:110
+msgid "Show cross-posts"
+msgstr ""
+
+#: app/templates/post/_post_full.html:111
+msgid "Number of cross-posts:"
+msgstr ""
+
#: app/templates/post/_post_reply_teaser.html:3
msgid "View context"
msgstr ""
@@ -1981,8 +2222,8 @@ msgstr ""
#: app/templates/post/_post_teaser.html:20
#: app/templates/post/_post_teaser.html:30
-#: app/templates/post/_post_teaser.html:74
-#: app/templates/post/_post_teaser.html:76
+#: app/templates/post/_post_teaser.html:70
+#: app/templates/post/_post_teaser.html:72
#: app/templates/post/_post_teaser_masonry.html:16
#: app/templates/post/_post_teaser_masonry.html:20
#: app/templates/post/_post_teaser_masonry.html:23
@@ -1999,12 +2240,12 @@ msgstr ""
msgid "All posts about this domain"
msgstr ""
-#: app/templates/post/_post_teaser.html:63
+#: app/templates/post/_post_teaser.html:64
#, python-format
msgid "Go to community %(name)s"
msgstr ""
-#: app/templates/post/_post_teaser.html:71
+#: app/templates/post/_post_teaser.html:67
#: app/templates/post/_post_teaser_masonry.html:47
#: app/templates/post/_post_teaser_masonry.html:48
#: app/templates/post/_post_teaser_masonry.html:68
@@ -2012,7 +2253,7 @@ msgstr ""
msgid "View comments"
msgstr ""
-#: app/templates/post/_post_teaser.html:71
+#: app/templates/post/_post_teaser.html:67
msgid "Number of comments:"
msgstr ""
@@ -2042,8 +2283,14 @@ msgid ""
"most places. Be nice."
msgstr ""
-#: app/templates/post/continue_discussion.html:44
-#: app/templates/post/post.html:105
+#: app/templates/post/add_reply.html:86
+#: app/templates/post/continue_discussion.html:137
+#: app/templates/post/post.html:231 app/templates/post/post_reply_edit.html:82
+msgid "Moderate"
+msgstr ""
+
+#: app/templates/post/continue_discussion.html:47
+#: app/templates/post/post.html:108
msgid "Reported. Check comment for issues."
msgstr ""
@@ -2081,18 +2328,27 @@ msgstr ""
msgid "Author"
msgstr ""
-#: app/templates/post/post.html:101
+#: app/templates/post/post.html:104
msgid "Post creator"
msgstr ""
-#: app/templates/post/post.html:102
+#: app/templates/post/post.html:105
msgid "When: "
msgstr ""
-#: app/templates/post/post.html:131
+#: app/templates/post/post.html:134
msgid "Comment options"
msgstr ""
+#: app/templates/post/post_cross_posts.html:11
+#, python-format
+msgid "Cross-posts for \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/post/post_cross_posts.html:12
+msgid "Posts to the same url have also been created in the following communities:"
+msgstr ""
+
#: app/templates/post/post_mea_culpa.html:15
msgid ""
"If you wish to de-escalate the discussion on your post and now feel like "
@@ -2267,7 +2523,7 @@ msgid "Post in %(name)s"
msgstr ""
#: app/templates/user/_user_nav.html:8 app/templates/user/notifications.html:54
-#: app/templates/user/show_profile.html:118
+#: app/templates/user/show_profile.html:121
msgid "Profile"
msgstr ""
@@ -2320,13 +2576,13 @@ msgstr ""
msgid "Filters"
msgstr ""
-#: app/templates/user/edit_filters.html:18 app/user/routes.py:713
+#: app/templates/user/edit_filters.html:18 app/user/routes.py:729
msgid "Edit filter"
msgstr ""
#: app/templates/user/edit_filters.html:20
#: app/templates/user/edit_filters.html:27 app/templates/user/filters.html:22
-#: app/user/routes.py:673
+#: app/user/routes.py:689
msgid "Add filter"
msgstr ""
@@ -2347,8 +2603,8 @@ msgstr ""
msgid "Stop applying this filter after this date. Optional."
msgstr ""
-#: app/templates/user/edit_profile.html:16 app/user/routes.py:147
-#: app/user/routes.py:212
+#: app/templates/user/edit_profile.html:16 app/user/routes.py:153
+#: app/user/routes.py:218
msgid "Edit profile"
msgstr ""
@@ -2434,12 +2690,12 @@ msgid "Mark all as read"
msgstr ""
#: app/templates/user/notifications.html:49
-#: app/templates/user/show_profile.html:113
+#: app/templates/user/show_profile.html:116
msgid "Manage"
msgstr ""
#: app/templates/user/notifications.html:95
-#: app/templates/user/show_profile.html:189
+#: app/templates/user/show_profile.html:192
msgid "Upvoted"
msgstr ""
@@ -2464,39 +2720,43 @@ msgstr ""
msgid "Send message using Matrix"
msgstr ""
-#: app/templates/user/show_profile.html:60
+#: app/templates/user/show_profile.html:61
+msgid "Bot Account"
+msgstr ""
+
+#: app/templates/user/show_profile.html:63
msgid "Attitude"
msgstr ""
-#: app/templates/user/show_profile.html:60
+#: app/templates/user/show_profile.html:63
msgid "Ratio of upvotes cast to downvotes cast. Higher is more positive."
msgstr ""
-#: app/templates/user/show_profile.html:69
+#: app/templates/user/show_profile.html:72
msgid "Post pagination"
msgstr ""
-#: app/templates/user/show_profile.html:82
+#: app/templates/user/show_profile.html:85
msgid "No posts yet."
msgstr ""
-#: app/templates/user/show_profile.html:92
+#: app/templates/user/show_profile.html:95
msgid "Comment pagination"
msgstr ""
-#: app/templates/user/show_profile.html:105
+#: app/templates/user/show_profile.html:108
msgid "No comments yet."
msgstr ""
-#: app/templates/user/show_profile.html:134
+#: app/templates/user/show_profile.html:137
msgid "Member of"
msgstr ""
-#: app/templates/user/show_profile.html:159
-msgid "Crush"
+#: app/templates/user/show_profile.html:162
+msgid "Moderate user"
msgstr ""
-#: app/templates/user/show_profile.html:179
+#: app/templates/user/show_profile.html:182
msgid "Ban + Purge"
msgstr ""
@@ -2513,13 +2773,13 @@ msgstr ""
msgid "Choose"
msgstr ""
-#: app/topic/routes.py:168
+#: app/topic/routes.py:172
msgid ""
"You have joined some communities relating to those interests. Find them "
"on the Topics menu or browse the home page."
msgstr ""
-#: app/topic/routes.py:172
+#: app/topic/routes.py:176
msgid ""
"You did not choose any topics. Would you like to choose individual "
"communities instead?"
@@ -2553,10 +2813,18 @@ msgstr ""
msgid "Use markdown editor GUI when writing"
msgstr ""
+#: app/user/forms.py:40
+msgid "Show profile in user list"
+msgstr ""
+
#: app/user/forms.py:41
msgid "My posts appear in search results"
msgstr ""
+#: app/user/forms.py:42
+msgid "Manually approve followers"
+msgstr ""
+
#: app/user/forms.py:43
msgid "Import community subscriptions and user blocks from Lemmy"
msgstr ""
@@ -2613,71 +2881,100 @@ msgstr ""
msgid "Expire after"
msgstr ""
-#: app/user/routes.py:42
+#: app/user/routes.py:49
msgid "This user has been banned."
msgstr ""
-#: app/user/routes.py:44
+#: app/user/routes.py:51
msgid "This user has been deleted."
msgstr ""
-#: app/user/routes.py:77
+#: app/user/routes.py:83
#, python-format
msgid "Posts by %(user_name)s"
msgstr ""
-#: app/user/routes.py:194
+#: app/user/routes.py:200
msgid ""
"Your subscriptions and blocks are being imported. If you have many it "
"could take a few minutes."
msgstr ""
-#: app/user/routes.py:229
+#: app/user/routes.py:235
msgid "You cannot ban yourself."
msgstr ""
-#: app/user/routes.py:254
+#: app/user/routes.py:260
msgid "You cannot unban yourself."
msgstr ""
-#: app/user/routes.py:278
+#: app/user/routes.py:284
msgid "You cannot block yourself."
msgstr ""
-#: app/user/routes.py:307
+#: app/user/routes.py:313
msgid "You cannot unblock yourself."
msgstr ""
-#: app/user/routes.py:352
+#: app/user/routes.py:340
+msgid ""
+"Moderators have already assessed reports regarding this person, no "
+"further reports are necessary."
+msgstr ""
+
+#: app/user/routes.py:346
+#, python-format
+msgid "%(user_name)s has already been reported, thank you!"
+msgstr ""
+
+#: app/user/routes.py:368
#, python-format
msgid "%(user_name)s has been reported, thank you!"
msgstr ""
-#: app/user/routes.py:358
+#: app/user/routes.py:374
msgid "Report user"
msgstr ""
-#: app/user/routes.py:375
+#: app/user/routes.py:391
msgid "You cannot delete yourself."
msgstr ""
-#: app/user/routes.py:432
+#: app/user/routes.py:448
msgid "Account deletion in progress. Give it a few minutes."
msgstr ""
-#: app/user/routes.py:437
+#: app/user/routes.py:453
msgid "Delete my account"
msgstr ""
-#: app/user/routes.py:482
+#: app/user/routes.py:498
msgid "You cannot purge yourself."
msgstr ""
-#: app/user/routes.py:559
+#: app/user/routes.py:575
msgid "All notifications marked as read."
msgstr ""
-#: app/user/routes.py:730
+#: app/user/routes.py:746
msgid "Filter deleted."
msgstr ""
+#~ msgid "Allow search engines to index this profile"
+#~ msgstr ""
+
+#~ msgid "Title is required."
+#~ msgstr ""
+
+#~ msgid "URL is required."
+#~ msgstr ""
+
+#~ msgid "File is required."
+#~ msgstr ""
+
+#~ msgid "Poll not implemented yet."
+#~ msgstr ""
+
+#~ msgid "Crush"
+#~ msgstr ""
+
diff --git a/app/translations/lt/LC_MESSAGES/messages.po b/app/translations/lt/LC_MESSAGES/messages.po
new file mode 100644
index 00000000..77f7fbde
--- /dev/null
+++ b/app/translations/lt/LC_MESSAGES/messages.po
@@ -0,0 +1,2607 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: piefed\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2024-03-17 19:06+1300\n"
+"PO-Revision-Date: 2024-04-09 00:36\n"
+"Last-Translator: \n"
+"Language: lt\n"
+"Language-Team: Lithuanian\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && (n%100>19 || n%100<11) ? 0 : (n%10>=2 && n%10<=9) && (n%100>19 || n%100<11) ? 1 : n%1!=0 ? 2: 3);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.12.1\n"
+"X-Crowdin-Project: piefed\n"
+"X-Crowdin-Project-ID: 657446\n"
+"X-Crowdin-Language: lt\n"
+"X-Crowdin-File: messages.po\n"
+"X-Crowdin-File-ID: 2\n"
+
+#: app/__init__.py:26
+msgid "Please log in to access this page."
+msgstr "Kad patekti į šį puslapį, turite užsiregistruoti."
+
+#: app/cli.py:238 app/main/routes.py:300
+msgid "[PieFed] You have unread notifications"
+msgstr "[PieFed] Yra neperskaitytų pranešimų"
+
+#: app/email.py:16
+msgid "[PieFed] Reset Your Password"
+msgstr "[PieFed] Priminti slaptažodį"
+
+#: app/email.py:26
+msgid "[PieFed] Please verify your email address"
+msgstr "[PieFed] Reikalinga patikrinti el. pašto adresą"
+
+#: app/email.py:34
+msgid "Your application has been approved - welcome to PieFed"
+msgstr "Paraiška buvo patvirtinta - sveikiname prisijungus prie PieFed"
+
+#: app/email.py:34
+msgid "Welcome to PieFed"
+msgstr "Sveiki atvykę į PieFed"
+
+#: app/activitypub/util.py:1205 app/post/routes.py:85 app/post/routes.py:472
+#, python-format
+msgid "Reply from %(name)s on %(post_title)s"
+msgstr "%(name)s atsakė į %(post_title)s"
+
+#: app/admin/forms.py:13 app/admin/forms.py:97 app/community/forms.py:18
+#: app/templates/community/community_mod_list.html:30
+#: app/templates/user/filters.html:29 app/templates/user/filters.html:70
+#: app/templates/user/filters.html:88 app/templates/user/filters.html:106
+#: app/templates/user/filters.html:124 app/user/forms.py:89
+msgid "Name"
+msgstr "Vardas"
+
+#: app/admin/forms.py:14
+msgid "Tagline"
+msgstr "Å Å«kis"
+
+#: app/admin/forms.py:15
+msgid "Icon"
+msgstr "IkonÄ—lÄ—"
+
+#: app/admin/forms.py:18
+msgid "Sidebar"
+msgstr "Å oninÄ— juosta"
+
+#: app/admin/forms.py:19
+msgid "Legal information"
+msgstr "TeisinÄ— informacija"
+
+#: app/admin/forms.py:20 app/admin/forms.py:36 app/admin/forms.py:44
+#: app/admin/forms.py:81 app/admin/forms.py:100 app/admin/forms.py:126
+#: app/admin/forms.py:188 app/community/forms.py:56 app/community/forms.py:95
+#: app/user/forms.py:99
+msgid "Save"
+msgstr "IÅ¡saugoti"
+
+#: app/admin/forms.py:24
+msgid "Enable downvotes"
+msgstr "Įjungti neigiamus taškus"
+
+#: app/admin/forms.py:25
+msgid "Allow local image posts"
+msgstr "Leisti įkelti paveikslėlius į šį serverį"
+
+#: app/admin/forms.py:26
+msgid "Days to cache images from remote instances for"
+msgstr "Kiek dienų kešuoti paveikslėlius iš nuotolusių serverių"
+
+#: app/admin/forms.py:27
+msgid "Allow NSFW communities"
+msgstr "Rodyti NSFW bendruomenes"
+
+#: app/admin/forms.py:28
+msgid "Allow NSFL communities and posts"
+msgstr "Rodyti NSFL bendruomenes ir pranešimus"
+
+#: app/admin/forms.py:29
+msgid "Only admins can create new local communities"
+msgstr "Tik administratoriai gali kurti bendruomenes Å¡iame serveryje"
+
+#: app/admin/forms.py:30
+msgid "Notify admins about reports, not just moderators"
+msgstr "Siųsti skundus ir administratoriams, ne tik moderatoriams"
+
+#: app/admin/forms.py:31
+msgid "Open"
+msgstr "Atvira"
+
+#: app/admin/forms.py:31
+msgid "Require application"
+msgstr "Reikalinga paraiška"
+
+#: app/admin/forms.py:31
+msgid "Closed"
+msgstr "Uždara"
+
+#: app/admin/forms.py:32
+msgid "Registration mode"
+msgstr "Registracijos reikalavimai"
+
+#: app/admin/forms.py:33
+msgid "Question to ask people applying for an account"
+msgstr "Žmonėms, kurie nori susikurti paskyrą, užduoti šį klausimą"
+
+#: app/admin/forms.py:34
+msgid "Log ActivityPub JSON for debugging"
+msgstr ""
+
+#: app/admin/forms.py:35
+msgid "Default theme"
+msgstr "Numatytoji tema"
+
+#: app/admin/forms.py:40
+msgid "Allowlist instead of blocklist"
+msgstr ""
+
+#: app/admin/forms.py:41
+msgid "Allow federation with these instances"
+msgstr ""
+
+#: app/admin/forms.py:42
+msgid "Blocklist instead of allowlist"
+msgstr ""
+
+#: app/admin/forms.py:43
+msgid "Deny federation with these instances"
+msgstr ""
+
+#: app/admin/forms.py:48 app/community/forms.py:42 app/community/forms.py:80
+#: app/community/forms.py:82 app/community/forms.py:86
+msgid "Title"
+msgstr "Pavadinimas"
+
+#: app/admin/forms.py:49 app/admin/forms.py:98 app/community/forms.py:19
+msgid "Url"
+msgstr ""
+
+#: app/admin/forms.py:50 app/community/forms.py:20 app/community/forms.py:43
+msgid "Description"
+msgstr "Aprašymas"
+
+#: app/admin/forms.py:51 app/community/forms.py:21 app/community/forms.py:44
+msgid "Icon image"
+msgstr "Piktogramos paveikslÄ—lis"
+
+#: app/admin/forms.py:52 app/community/forms.py:22 app/community/forms.py:45
+msgid "Banner image"
+msgstr "Banerio paveiksliukas"
+
+#: app/admin/forms.py:53 app/community/forms.py:23 app/community/forms.py:46
+msgid "Rules"
+msgstr "TaisyklÄ—s"
+
+#: app/admin/forms.py:54 app/community/forms.py:47
+msgid "Porn community"
+msgstr ""
+
+#: app/admin/forms.py:55
+msgid "Banned - no new posts accepted"
+msgstr ""
+
+#: app/admin/forms.py:56 app/community/forms.py:48
+msgid "Only accept posts from current instance"
+msgstr ""
+
+#: app/admin/forms.py:57 app/community/forms.py:49
+msgid "Only moderators can post"
+msgstr ""
+
+#: app/admin/forms.py:58 app/community/forms.py:50
+msgid "New moderators wanted"
+msgstr ""
+
+#: app/admin/forms.py:59
+msgid "Posts show on home page"
+msgstr ""
+
+#: app/admin/forms.py:60
+msgid "Posts can be popular"
+msgstr ""
+
+#: app/admin/forms.py:61
+msgid "Posts show in All list"
+msgstr ""
+
+#: app/admin/forms.py:62
+msgid "Low quality / toxic - upvotes in here don't add to reputation"
+msgstr ""
+
+#: app/admin/forms.py:63
+msgid "Forever"
+msgstr ""
+
+#: app/admin/forms.py:64
+msgid "1 week"
+msgstr ""
+
+#: app/admin/forms.py:65
+msgid "2 weeks"
+msgstr ""
+
+#: app/admin/forms.py:66
+msgid "1 month"
+msgstr ""
+
+#: app/admin/forms.py:67
+msgid "2 months"
+msgstr ""
+
+#: app/admin/forms.py:68
+msgid "3 months"
+msgstr ""
+
+#: app/admin/forms.py:69
+msgid "6 months"
+msgstr ""
+
+#: app/admin/forms.py:70
+msgid "1 year"
+msgstr ""
+
+#: app/admin/forms.py:71
+msgid "2 years"
+msgstr ""
+
+#: app/admin/forms.py:72
+msgid "5 years"
+msgstr ""
+
+#: app/admin/forms.py:73
+msgid "10 years"
+msgstr ""
+
+#: app/admin/forms.py:75
+msgid "Retain content"
+msgstr ""
+
+#: app/admin/forms.py:76 app/community/forms.py:51
+msgid "Topic"
+msgstr ""
+
+#: app/admin/forms.py:77 app/community/forms.py:52
+#: app/templates/community/_community_nav.html:23
+msgid "List"
+msgstr ""
+
+#: app/admin/forms.py:78 app/community/forms.py:53
+msgid "Masonry"
+msgstr ""
+
+#: app/admin/forms.py:79 app/community/forms.py:54
+msgid "Wide masonry"
+msgstr ""
+
+#: app/admin/forms.py:80 app/community/forms.py:55
+msgid "Layout"
+msgstr "IÅ¡dÄ—stymas"
+
+#: app/admin/forms.py:87 app/community/forms.py:32
+msgid "Url is required."
+msgstr ""
+
+#: app/admin/forms.py:91 app/community/forms.py:36
+msgid "- cannot be in Url. Use _ instead?"
+msgstr ""
+
+#: app/admin/forms.py:99
+msgid "Parent topic"
+msgstr ""
+
+#: app/admin/forms.py:104 app/auth/forms.py:10 app/auth/forms.py:17
+#: app/community/forms.py:60
+msgid "User name"
+msgstr "Vartotojo vardas"
+
+#: app/admin/forms.py:106 app/admin/forms.py:169 app/user/forms.py:14
+msgid "Email address"
+msgstr "El. pašto adresas"
+
+#: app/admin/forms.py:107 app/auth/forms.py:11 app/auth/forms.py:20
+#: app/auth/forms.py:74
+msgid "Password"
+msgstr "Slaptažodis"
+
+#: app/admin/forms.py:109 app/auth/forms.py:22 app/auth/forms.py:76
+msgid "Repeat password"
+msgstr "Pakartokite slaptažodį"
+
+#: app/admin/forms.py:110 app/admin/forms.py:168 app/user/forms.py:17
+msgid "Bio"
+msgstr "Biografija"
+
+#: app/admin/forms.py:111 app/admin/forms.py:170 app/user/forms.py:18
+msgid "Matrix User ID"
+msgstr ""
+
+#: app/admin/forms.py:112 app/admin/forms.py:171 app/user/forms.py:19
+msgid "Avatar image"
+msgstr ""
+
+#: app/admin/forms.py:113 app/admin/forms.py:172 app/user/forms.py:20
+msgid "Top banner image"
+msgstr "Reklaminio skydelio paveiksliukas"
+
+#: app/admin/forms.py:114 app/admin/forms.py:173 app/user/forms.py:21
+msgid "This profile is a bot"
+msgstr ""
+
+#: app/admin/forms.py:115 app/admin/forms.py:174
+msgid "Email address is verified"
+msgstr ""
+
+#: app/admin/forms.py:116 app/admin/forms.py:175
+msgid "Banned"
+msgstr ""
+
+#: app/admin/forms.py:117 app/admin/forms.py:176 app/user/forms.py:34
+msgid "Subscribe to email newsletter"
+msgstr ""
+
+#: app/admin/forms.py:118 app/admin/forms.py:177 app/user/forms.py:36
+msgid "Hide posts by bots"
+msgstr ""
+
+#: app/admin/forms.py:119 app/admin/forms.py:178 app/user/forms.py:37
+msgid "Show NSFW posts"
+msgstr ""
+
+#: app/admin/forms.py:120 app/admin/forms.py:179 app/user/forms.py:38
+msgid "Show NSFL posts"
+msgstr ""
+
+#: app/admin/forms.py:121 app/admin/forms.py:183
+msgid "User"
+msgstr ""
+
+#: app/admin/forms.py:122 app/admin/forms.py:184
+msgid "Staff"
+msgstr ""
+
+#: app/admin/forms.py:123 app/admin/forms.py:185 app/admin/routes.py:29
+#: app/templates/base.html:180
+msgid "Admin"
+msgstr ""
+
+#: app/admin/forms.py:125 app/admin/forms.py:187
+msgid "Role"
+msgstr ""
+
+#: app/admin/forms.py:131 app/auth/forms.py:32
+msgid "An account with this email address already exists."
+msgstr ""
+
+#: app/admin/forms.py:135 app/auth/forms.py:36
+msgid "User names cannot contain @."
+msgstr ""
+
+#: app/admin/forms.py:139 app/auth/forms.py:40
+msgid "This username was used in the past and cannot be reused."
+msgstr ""
+
+#: app/admin/forms.py:141 app/auth/forms.py:42
+msgid "An account with this user name already exists."
+msgstr ""
+
+#: app/admin/forms.py:144 app/auth/forms.py:45
+msgid "A community with this name exists so it cannot be used for a user."
+msgstr ""
+
+#: app/admin/forms.py:151 app/admin/forms.py:164 app/auth/forms.py:52
+#: app/auth/forms.py:65
+msgid "This password is too common."
+msgstr ""
+
+#: app/admin/forms.py:161 app/auth/forms.py:62
+msgid "This password is not secure."
+msgstr ""
+
+#: app/admin/forms.py:180 app/user/forms.py:40
+msgid "Show profile in user list"
+msgstr ""
+
+#: app/admin/forms.py:181
+msgid "Allow search engines to index this profile"
+msgstr ""
+
+#: app/admin/forms.py:182 app/user/forms.py:42
+msgid "Manually approve followers"
+msgstr ""
+
+#: app/admin/forms.py:192
+msgid "Subject"
+msgstr ""
+
+#: app/admin/forms.py:193
+msgid "Body (text)"
+msgstr ""
+
+#: app/admin/forms.py:194
+msgid "Body (html)"
+msgstr ""
+
+#: app/admin/forms.py:195
+msgid "Test mode"
+msgstr ""
+
+#: app/admin/forms.py:196 app/admin/routes.py:732
+msgid "Send newsletter"
+msgstr ""
+
+#: app/admin/routes.py:57 app/templates/admin/_nav.html:4
+msgid "Site profile"
+msgstr ""
+
+#: app/admin/routes.py:102 app/templates/admin/_nav.html:5
+msgid "Misc settings"
+msgstr ""
+
+#: app/admin/routes.py:133
+msgid "Admin settings saved"
+msgstr ""
+
+#: app/admin/routes.py:143
+msgid "Federation settings"
+msgstr ""
+
+#: app/admin/routes.py:165
+msgid "ActivityPub Log"
+msgstr ""
+
+#: app/admin/routes.py:175
+msgid "Activity JSON"
+msgstr ""
+
+#: app/admin/routes.py:210 app/community/routes.py:215 app/main/routes.py:181
+#: app/post/routes.py:211 app/templates/admin/_nav.html:6
+#: app/templates/list_communities.html:51 app/templates/user/filters.html:58
+#: app/templates/user/notifications.html:66
+#: app/templates/user/show_profile.html:130
+msgid "Communities"
+msgstr ""
+
+#: app/admin/routes.py:262 app/admin/routes.py:358 app/admin/routes.py:383
+#: app/admin/routes.py:578 app/community/routes.py:630
+msgid "Saved"
+msgstr ""
+
+#: app/admin/routes.py:266
+msgid "This is a remote community - most settings here will be regularly overwritten with data from the original server."
+msgstr ""
+
+#: app/admin/routes.py:283 app/community/routes.py:642
+#: app/templates/community/community_edit.html:20
+msgid "Edit community"
+msgstr ""
+
+#: app/admin/routes.py:302 app/community/routes.py:664
+msgid "Community deleted"
+msgstr ""
+
+#: app/admin/routes.py:336 app/community/routes.py:201 app/post/routes.py:197
+#: app/templates/admin/_nav.html:7 app/templates/base.html:134
+#: app/templates/base.html:152 app/templates/topic/show_topic.html:14
+msgid "Topics"
+msgstr ""
+
+#: app/admin/routes.py:361 app/templates/admin/topics.html:35
+msgid "Add topic"
+msgstr ""
+
+#: app/admin/routes.py:389
+msgid "Edit topic"
+msgstr ""
+
+#: app/admin/routes.py:404
+msgid "Topic deleted"
+msgstr ""
+
+#: app/admin/routes.py:406
+msgid "Cannot delete topic with communities assigned to it."
+msgstr ""
+
+#: app/admin/routes.py:433 app/templates/admin/_nav.html:8
+msgid "Users"
+msgstr ""
+
+#: app/admin/routes.py:463
+msgid "Problematic users"
+msgstr ""
+
+#: app/admin/routes.py:484
+msgid "Bad posts"
+msgstr ""
+
+#: app/admin/routes.py:517
+msgid "Registration approved."
+msgstr ""
+
+#: app/admin/routes.py:574
+msgid "Permissions are cached for 50 seconds so new admin roles won't take effect immediately."
+msgstr ""
+
+#: app/admin/routes.py:582
+msgid "This is a remote user - most settings here will be regularly overwritten with data from the original server."
+msgstr ""
+
+#: app/admin/routes.py:599
+msgid "Edit user"
+msgstr ""
+
+#: app/admin/routes.py:664
+msgid "User added"
+msgstr ""
+
+#: app/admin/routes.py:667
+msgid "Add user"
+msgstr ""
+
+#: app/admin/routes.py:691
+msgid "User deleted"
+msgstr "Naudotojas ištrintas"
+
+#: app/admin/routes.py:714
+msgid "Reports"
+msgstr "Pranešimai"
+
+#: app/admin/util.py:125
+msgid "None"
+msgstr ""
+
+#: app/auth/forms.py:12
+msgid "Low bandwidth mode"
+msgstr ""
+
+#: app/auth/forms.py:13
+msgid "Log In"
+msgstr ""
+
+#: app/auth/forms.py:18 app/auth/forms.py:19 app/auth/forms.py:69
+msgid "Email"
+msgstr ""
+
+#: app/auth/forms.py:24
+msgid "Why would you like to join this site?"
+msgstr ""
+
+#: app/auth/forms.py:27 app/auth/routes.py:140 app/templates/base.html:141
+msgid "Register"
+msgstr ""
+
+#: app/auth/forms.py:70
+msgid "Request password reset"
+msgstr "Prašykite nustatyti slaptažodį iš naujo"
+
+#: app/auth/forms.py:78
+msgid "Set password"
+msgstr "Nustatykite slaptažodį"
+
+#: app/auth/routes.py:29 app/auth/routes.py:32
+msgid "No account exists with that user name."
+msgstr ""
+
+#: app/auth/routes.py:36
+msgid "Invalid password. Please reset your password."
+msgstr ""
+
+#: app/auth/routes.py:39
+msgid "Invalid password"
+msgstr ""
+
+#: app/auth/routes.py:42
+msgid "You have been banned."
+msgstr ""
+
+#: app/auth/routes.py:74
+msgid "Login"
+msgstr ""
+
+#: app/auth/routes.py:97
+msgid "Sorry, you cannot use that email address"
+msgstr ""
+
+#: app/auth/routes.py:99
+msgid "Sorry, you cannot use that user name"
+msgstr ""
+
+#: app/auth/routes.py:106
+#, python-format
+msgid "Your username contained special letters so it was changed to %(name)s."
+msgstr ""
+
+#: app/auth/routes.py:145
+msgid "Account under review"
+msgstr ""
+
+#: app/auth/routes.py:150 app/templates/auth/check_email.html:8
+msgid "Check your email"
+msgstr ""
+
+#: app/auth/routes.py:161
+msgid "Sorry, you cannot use that email address."
+msgstr ""
+
+#: app/auth/routes.py:166
+msgid "Check your email for a link to reset your password."
+msgstr ""
+
+#: app/auth/routes.py:169
+msgid "No account with that email address exists"
+msgstr ""
+
+#: app/auth/routes.py:171
+msgid "Reset Password"
+msgstr ""
+
+#: app/auth/routes.py:185
+#, python-format
+msgid "Your password has been reset. Please use it to log in with user name of %(name)s."
+msgstr ""
+
+#: app/auth/routes.py:205
+msgid "Thank you for verifying your email address."
+msgstr ""
+
+#: app/auth/routes.py:207
+msgid "Email address validation failed."
+msgstr ""
+
+#: app/chat/forms.py:13
+msgid "Message"
+msgstr ""
+
+#: app/chat/forms.py:14
+msgid "Reply"
+msgstr ""
+
+#: app/chat/forms.py:18 app/post/forms.py:16 app/user/forms.py:60
+msgid "Spam"
+msgstr ""
+
+#: app/chat/forms.py:19 app/post/forms.py:16 app/user/forms.py:61
+msgid "Harassment"
+msgstr ""
+
+#: app/chat/forms.py:20 app/post/forms.py:17 app/user/forms.py:62
+msgid "Threatening violence"
+msgstr ""
+
+#: app/chat/forms.py:21 app/user/forms.py:63
+msgid "Promoting hate / genocide"
+msgstr ""
+
+#: app/chat/forms.py:22 app/post/forms.py:18 app/user/forms.py:64
+msgid "Misinformation / disinformation"
+msgstr ""
+
+#: app/chat/forms.py:23 app/post/forms.py:19 app/user/forms.py:65
+msgid "Racism, sexism, transphobia"
+msgstr ""
+
+#: app/chat/forms.py:24 app/post/forms.py:21 app/user/forms.py:68
+msgid "Minor abuse or sexualization"
+msgstr ""
+
+#: app/chat/forms.py:25 app/post/forms.py:22 app/user/forms.py:69
+msgid "Non-consensual intimate media"
+msgstr ""
+
+#: app/chat/forms.py:26 app/post/forms.py:23 app/user/forms.py:70
+msgid "Prohibited transaction"
+msgstr ""
+
+#: app/chat/forms.py:26 app/post/forms.py:23 app/user/forms.py:70
+msgid "Impersonation"
+msgstr ""
+
+#: app/chat/forms.py:27 app/post/forms.py:24 app/user/forms.py:71
+msgid "Copyright violation"
+msgstr ""
+
+#: app/chat/forms.py:27 app/post/forms.py:24 app/user/forms.py:71
+msgid "Trademark violation"
+msgstr ""
+
+#: app/chat/forms.py:28 app/post/forms.py:25 app/user/forms.py:72
+msgid "Self-harm or suicide"
+msgstr ""
+
+#: app/chat/forms.py:29 app/community/forms.py:155 app/post/forms.py:26
+#: app/user/forms.py:73
+msgid "Other"
+msgstr ""
+
+#: app/chat/forms.py:30 app/community/forms.py:70 app/community/forms.py:157
+#: app/post/forms.py:27 app/user/forms.py:74
+msgid "Reason"
+msgstr ""
+
+#: app/chat/forms.py:31 app/community/forms.py:158 app/post/forms.py:28
+#: app/user/forms.py:75
+msgid "More info"
+msgstr ""
+
+#: app/chat/forms.py:33 app/community/forms.py:160 app/post/forms.py:30
+#: app/templates/user/show_profile.html:56 app/user/forms.py:77
+msgid "Report"
+msgstr ""
+
+#: app/chat/routes.py:49
+#, python-format
+msgid "Chat with %(name)s"
+msgstr ""
+
+#: app/chat/routes.py:69
+msgid "Send"
+msgstr ""
+
+#: app/chat/routes.py:79 app/templates/chat/new_message.html:14
+#, python-format
+msgid "New message to \"%(recipient_name)s\""
+msgstr ""
+
+#: app/chat/routes.py:124
+msgid "Conversation deleted"
+msgstr ""
+
+#: app/chat/routes.py:135
+msgid "Instance blocked."
+msgstr ""
+
+#: app/chat/routes.py:165
+msgid "This conversation has been reported, thank you!"
+msgstr ""
+
+#: app/chat/routes.py:170
+msgid "Report conversation"
+msgstr ""
+
+#: app/chat/util.py:58
+#, python-format
+msgid "Message failed to send to %(name)s."
+msgstr ""
+
+#: app/chat/util.py:60
+msgid "Message sent."
+msgstr ""
+
+#: app/community/forms.py:26
+msgid "Create"
+msgstr ""
+
+#: app/community/forms.py:61
+msgid "Add"
+msgstr ""
+
+#: app/community/forms.py:65
+msgid "Community address"
+msgstr ""
+
+#: app/community/forms.py:66 app/search/routes.py:52
+#: app/templates/base.html:193 app/templates/community/add_remote.html:13
+#: app/templates/domain/domains.html:29
+#: app/templates/domain/domains_blocked.html:29 app/templates/index.html:40
+#: app/templates/list_communities.html:36 app/templates/search/results.html:38
+msgid "Search"
+msgstr ""
+
+#: app/community/forms.py:71
+msgid "Ban until"
+msgstr ""
+
+#: app/community/forms.py:72
+msgid "Also delete all their posts"
+msgstr ""
+
+#: app/community/forms.py:73
+msgid "Also delete all their comments"
+msgstr ""
+
+#: app/community/forms.py:74 app/templates/domain/domains_blocked.html:48
+#: app/templates/user/show_profile.html:170
+msgid "Ban"
+msgstr ""
+
+#: app/community/forms.py:78 app/templates/list_communities.html:56
+msgid "Community"
+msgstr ""
+
+#: app/community/forms.py:81 app/community/forms.py:83
+#: app/community/forms.py:88 app/post/forms.py:10
+msgid "Body"
+msgstr ""
+
+#: app/community/forms.py:85
+msgid "URL"
+msgstr ""
+
+#: app/community/forms.py:87
+msgid "Alt text"
+msgstr ""
+
+#: app/community/forms.py:90
+msgid "Image"
+msgstr ""
+
+#: app/community/forms.py:92
+msgid "NSFW"
+msgstr ""
+
+#: app/community/forms.py:93
+msgid "Gore/gross"
+msgstr ""
+
+#: app/community/forms.py:94 app/post/forms.py:11
+#: app/templates/post/_post_notification_toggle.html:4
+#: app/templates/post/_reply_notification_toggle.html:4
+msgid "Notify about replies"
+msgstr ""
+
+#: app/community/forms.py:105 app/community/forms.py:109
+#: app/community/forms.py:120
+msgid "Title is required."
+msgstr ""
+
+#: app/community/forms.py:112
+msgid "URL is required."
+msgstr ""
+
+#: app/community/forms.py:116
+#, python-format
+msgid "Links to %(domain)s are not allowed."
+msgstr ""
+
+#: app/community/forms.py:123
+msgid "File is required."
+msgstr ""
+
+#: app/community/forms.py:140
+msgid "Images cannot be posted to local communities."
+msgstr ""
+
+#: app/community/forms.py:142
+msgid "Poll not implemented yet."
+msgstr ""
+
+#: app/community/forms.py:149
+msgid "Breaks instance rules"
+msgstr ""
+
+#: app/community/forms.py:150
+msgid "Abandoned by moderators"
+msgstr ""
+
+#: app/community/forms.py:151
+msgid "Cult"
+msgstr ""
+
+#: app/community/forms.py:152
+msgid "Scam"
+msgstr ""
+
+#: app/community/forms.py:153
+msgid "Alt-right pipeline"
+msgstr ""
+
+#: app/community/forms.py:154 app/post/forms.py:17
+msgid "Hate / genocide"
+msgstr ""
+
+#: app/community/forms.py:172 app/community/routes.py:667
+msgid "Delete community"
+msgstr ""
+
+#: app/community/routes.py:72
+msgid "Your new community has been created."
+msgstr ""
+
+#: app/community/routes.py:78 app/templates/community/add_local.html:13
+#: app/templates/community/community_edit.html:22
+msgid "Create community"
+msgstr ""
+
+#: app/community/routes.py:102
+msgid "Community not found."
+msgstr ""
+
+#: app/community/routes.py:104
+msgid "Community not found. If you are searching for a nsfw community it is blocked by this instance."
+msgstr ""
+
+#: app/community/routes.py:107
+#, python-format
+msgid "That community is banned from %(site)s."
+msgstr ""
+
+#: app/community/routes.py:110
+msgid "Add remote community"
+msgstr ""
+
+#: app/community/routes.py:184 app/post/routes.py:180
+#: app/templates/base.html:127 app/templates/base.html:129
+#: app/templates/base.html:145 app/templates/base.html:147
+#: app/templates/chat/conversation.html:36
+#: app/templates/community/community_edit.html:13
+#: app/templates/community/community_mod_list.html:13
+#: app/templates/domain/domain.html:13 app/templates/topic/show_topic.html:13
+#: app/templates/user/delete_account.html:13
+#: app/templates/user/edit_filters.html:14
+#: app/templates/user/edit_profile.html:14
+#: app/templates/user/edit_settings.html:15 app/templates/user/filters.html:14
+#: app/templates/user/notifications.html:13 app/templates/user/people.html:13
+#: app/templates/user/show_profile.html:18
+#: app/templates/user/show_profile.html:38
+msgid "Home"
+msgstr ""
+
+#: app/community/routes.py:310
+msgid "You cannot join this community"
+msgstr ""
+
+#: app/community/routes.py:326
+msgid "There was a problem while trying to communicate with remote server. If other people have already joined this community it won't matter."
+msgstr ""
+
+#: app/community/routes.py:516 app/community/routes.py:540
+#: app/community/routes.py:542
+#, python-format
+msgid "Your post to %(name)s has been made."
+msgstr ""
+
+#: app/community/routes.py:552
+msgid "Add post to community"
+msgstr ""
+
+#: app/community/routes.py:574
+msgid "A community has been reported"
+msgstr ""
+
+#: app/community/routes.py:585
+msgid "Community has been reported, thank you!"
+msgstr ""
+
+#: app/community/routes.py:588
+msgid "Report community"
+msgstr ""
+
+#: app/community/routes.py:683
+#: app/templates/community/community_mod_list.html:21
+#, python-format
+msgid "Moderators for %(community)s"
+msgstr ""
+
+#: app/community/routes.py:706
+msgid "Moderator added"
+msgstr ""
+
+#: app/community/routes.py:710
+#, python-format
+msgid "You are now a moderator of %(name)s"
+msgstr ""
+
+#: app/community/routes.py:735
+msgid "Account not found"
+msgstr ""
+
+#: app/community/routes.py:737
+#: app/templates/community/community_add_moderator.html:13
+#, python-format
+msgid "Add moderator to %(community)s"
+msgstr ""
+
+#: app/community/routes.py:755
+msgid "Moderator removed"
+msgstr ""
+
+#: app/community/routes.py:772 app/post/routes.py:870 app/post/routes.py:962
+#, python-format
+msgid "Content from %(name)s will be hidden."
+msgstr ""
+
+#: app/community/routes.py:792
+#, python-format
+msgid "%(name)s has been banned."
+msgstr ""
+
+#: app/community/routes.py:799
+#, python-format
+msgid "Posts by %(name)s have been deleted."
+msgstr ""
+
+#: app/community/routes.py:805
+#, python-format
+msgid "Comments by %(name)s have been deleted."
+msgstr ""
+
+#: app/community/routes.py:823
+msgid "Ban from community"
+msgstr ""
+
+#: app/domain/routes.py:113
+#, python-format
+msgid "%(name)s blocked."
+msgstr ""
+
+#: app/domain/routes.py:126
+#, python-format
+msgid "%(name)s un-blocked."
+msgstr ""
+
+#: app/domain/routes.py:139
+#, python-format
+msgid "%(name)s banned for all users and all content deleted."
+msgstr ""
+
+#: app/domain/routes.py:151
+#, python-format
+msgid "%(name)s un-banned for all users."
+msgstr ""
+
+#: app/main/routes.py:72
+msgid "Create an account to tailor this feed to your interests."
+msgstr ""
+
+#: app/main/routes.py:156 app/templates/base.html:136
+#: app/templates/base.html:154
+msgid "Browse by topic"
+msgstr ""
+
+#: app/main/routes.py:194
+msgid "Local communities"
+msgstr ""
+
+#: app/main/routes.py:209 app/templates/base.html:163
+#: app/templates/list_communities.html:19
+msgid "Joined communities"
+msgstr ""
+
+#: app/main/routes.py:326
+msgid "Please click the link in your email inbox to verify your account."
+msgstr ""
+
+#: app/post/forms.py:12
+msgid "Comment"
+msgstr ""
+
+#: app/post/forms.py:16 app/user/forms.py:59
+msgid "Breaks community rules"
+msgstr ""
+
+#: app/post/forms.py:20 app/user/forms.py:67
+msgid "Sharing personal info - doxing"
+msgstr ""
+
+#: app/post/forms.py:42 app/post/routes.py:887
+#: app/templates/post/post_mea_culpa.html:13
+msgid "I changed my mind"
+msgstr ""
+
+#: app/post/routes.py:45
+#, python-format
+msgid "%(name)s has indicated they made a mistake in this post."
+msgstr ""
+
+#: app/post/routes.py:66 app/post/routes.py:443
+#, python-format
+msgid "You cannot reply to %(name)s"
+msgstr ""
+
+#: app/post/routes.py:76 app/post/routes.py:456
+msgid "This type of comment is not accepted, sorry."
+msgstr ""
+
+#: app/post/routes.py:414 app/post/routes.py:579
+#, python-format
+msgid "Discussing %(title)s"
+msgstr ""
+
+#: app/post/routes.py:628 app/post/routes.py:985 app/user/routes.py:137
+#: app/user/routes.py:198 app/user/routes.py:670 app/user/routes.py:701
+msgid "Your changes have been saved."
+msgstr ""
+
+#: app/post/routes.py:725 app/templates/post/post_edit.html:43
+msgid "Edit post"
+msgstr ""
+
+#: app/post/routes.py:746
+msgid "Post deleted."
+msgstr ""
+
+#: app/post/routes.py:804
+msgid "A post has been reported"
+msgstr ""
+
+#: app/post/routes.py:822
+msgid "Post has been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:827
+msgid "Report post"
+msgstr ""
+
+#: app/post/routes.py:841 app/post/routes.py:946
+#, python-format
+msgid "%(name)s has been blocked."
+msgstr ""
+
+#: app/post/routes.py:857
+#, python-format
+msgid "Posts linking to %(name)s will be hidden."
+msgstr ""
+
+#: app/post/routes.py:908
+msgid "A comment has been reported"
+msgstr ""
+
+#: app/post/routes.py:926
+msgid "Comment has been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:931
+msgid "Report comment"
+msgstr ""
+
+#: app/post/routes.py:1062
+msgid "Edit comment"
+msgstr ""
+
+#: app/post/routes.py:1086
+msgid "Comment deleted."
+msgstr ""
+
+#: app/search/routes.py:45
+#, python-format
+msgid "Search results for %(q)s"
+msgstr ""
+
+#: app/templates/_home_nav.html:3 app/templates/community/_community_nav.html:8
+#: app/templates/post/post.html:66 app/user/forms.py:44
+msgid "Hot"
+msgstr ""
+
+#: app/templates/_home_nav.html:6
+#: app/templates/community/_community_nav.html:11
+#: app/templates/post/post.html:69 app/user/forms.py:45
+msgid "Top"
+msgstr ""
+
+#: app/templates/_home_nav.html:9
+#: app/templates/community/_community_nav.html:14
+#: app/templates/post/post.html:72 app/user/forms.py:46
+msgid "New"
+msgstr ""
+
+#: app/templates/_home_nav.html:12
+#: app/templates/community/_community_nav.html:17
+#: app/templates/list_communities.html:71 app/user/forms.py:47
+msgid "Active"
+msgstr ""
+
+#: app/templates/_inoculation_links.html:4
+msgid "Rational Discourse Toolkit"
+msgstr ""
+
+#: app/templates/base.html:52
+msgid "PieFed"
+msgstr ""
+
+#: app/templates/base.html:110 app/templates/base.html:184
+#: app/templates/user/notifications.html:18 app/user/routes.py:521
+msgid "Notifications"
+msgstr ""
+
+#: app/templates/base.html:130 app/templates/base.html:148
+msgid "Popular"
+msgstr ""
+
+#: app/templates/base.html:131 app/templates/base.html:149
+msgid "All posts"
+msgstr ""
+
+#: app/templates/base.html:137 app/templates/base.html:155
+#: app/templates/list_communities.html:13
+msgid "All communities"
+msgstr ""
+
+#: app/templates/auth/login.html:9 app/templates/base.html:140
+msgid "Log in"
+msgstr ""
+
+#: app/templates/base.html:142 app/templates/base.html:178
+#: app/templates/donate.html:10
+msgid "Donate"
+msgstr ""
+
+#: app/templates/base.html:157
+msgid "Moderating"
+msgstr ""
+
+#: app/templates/base.html:171
+msgid "Account"
+msgstr ""
+
+#: app/templates/base.html:173
+msgid "View profile"
+msgstr ""
+
+#: app/templates/base.html:174
+msgid "Edit profile & settings"
+msgstr ""
+
+#: app/templates/base.html:175
+msgid "Chats"
+msgstr ""
+
+#: app/templates/base.html:182
+msgid "Log out"
+msgstr ""
+
+#: app/templates/base.html:184
+#, python-format
+msgid "%(num)d unread notifications"
+msgstr ""
+
+#: app/templates/base.html:194
+msgid "Light mode"
+msgstr ""
+
+#: app/templates/base.html:195
+msgid "Dark mode"
+msgstr ""
+
+#: app/templates/base.html:223 app/templates/keyboard_shortcuts.html:10
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: app/templates/donate.html:26 app/templates/index.html:65
+#: app/templates/keyboard_shortcuts.html:63
+#: app/templates/search/results.html:63
+#, python-format
+msgid "About %(site_name)s"
+msgstr ""
+
+#: app/templates/index.html:17
+msgid "No posts yet. Join some communities to see more."
+msgstr ""
+
+#: app/templates/community/community.html:168 app/templates/index.html:18
+#: app/templates/index.html:59 app/templates/list_topics.html:26
+#: app/templates/post/post.html:217 app/templates/search/results.html:57
+#: app/templates/topic/show_topic.html:91
+msgid "Explore communities"
+msgstr ""
+
+#: app/templates/admin/activities.html:54
+#: app/templates/admin/communities.html:51 app/templates/admin/posts.html:26
+#: app/templates/admin/reports.html:58 app/templates/admin/users.html:69
+#: app/templates/community/community.html:92
+#: app/templates/domain/domain.html:30 app/templates/domain/domains.html:51
+#: app/templates/domain/domains_blocked.html:59 app/templates/index.html:25
+#: app/templates/search/results.html:23 app/templates/topic/show_topic.html:52
+#: app/templates/user/show_profile.html:72
+#: app/templates/user/show_profile.html:95
+msgid "Previous page"
+msgstr ""
+
+#: app/templates/admin/activities.html:59
+#: app/templates/admin/communities.html:56 app/templates/admin/posts.html:31
+#: app/templates/admin/reports.html:63 app/templates/admin/users.html:74
+#: app/templates/community/community.html:97
+#: app/templates/domain/domain.html:35 app/templates/domain/domains.html:56
+#: app/templates/domain/domains_blocked.html:64 app/templates/index.html:30
+#: app/templates/search/results.html:28 app/templates/topic/show_topic.html:57
+#: app/templates/user/show_profile.html:77
+#: app/templates/user/show_profile.html:100
+msgid "Next page"
+msgstr ""
+
+#: app/templates/index.html:47 app/templates/search/results.html:45
+msgid "Active communities"
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:11
+msgid "Most shortcuts are the same as what reddit has."
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:14
+msgid "Navigation"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:31
+#: app/templates/keyboard_shortcuts.html:43 app/templates/user/filters.html:31
+msgid "Action"
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:46
+msgid "Upvote"
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:50
+msgid "Downvote"
+msgstr ""
+
+#: app/templates/keyboard_shortcuts.html:55
+msgid "When viewing a list of posts actions like voting or going to a post depend on which is the current post. The current post is determined by hovering with the mouse or the J and K keys."
+msgstr ""
+
+#: app/templates/list_communities.html:14
+msgid "All"
+msgstr ""
+
+#: app/templates/list_communities.html:16
+msgid "Communities on this server"
+msgstr ""
+
+#: app/templates/list_communities.html:17
+msgid "Local"
+msgstr ""
+
+#: app/templates/list_communities.html:20
+#: app/templates/user/show_profile.html:59
+msgid "Joined"
+msgstr ""
+
+#: app/templates/list_communities.html:28
+msgid "Choose a topic to filter communities by"
+msgstr ""
+
+#: app/templates/list_communities.html:40
+msgid "Create local community"
+msgstr ""
+
+#: app/templates/list_communities.html:40
+msgid "Create local"
+msgstr ""
+
+#: app/templates/list_communities.html:41
+msgid "Add community from another instance"
+msgstr ""
+
+#: app/templates/list_communities.html:41
+msgid "Add remote"
+msgstr ""
+
+#: app/templates/list_communities.html:56
+msgid "Sort by name"
+msgstr ""
+
+#: app/templates/list_communities.html:61
+msgid "Sort by post count"
+msgstr ""
+
+#: app/templates/list_communities.html:61
+msgid "Posts"
+msgstr ""
+
+#: app/templates/list_communities.html:66
+msgid "Sort by reply count"
+msgstr ""
+
+#: app/templates/list_communities.html:66 app/templates/post/post.html:61
+#: app/templates/post/post.html:155
+msgid "Comments"
+msgstr ""
+
+#: app/templates/list_communities.html:71
+msgid "Sort by recent activity"
+msgstr ""
+
+#: app/templates/list_communities.html:82
+#, python-format
+msgid "Leave %(name)s"
+msgstr ""
+
+#: app/templates/community/add_remote.html:32
+#: app/templates/community/community.html:112
+#: app/templates/list_communities.html:82 app/templates/post/add_reply.html:48
+#: app/templates/post/continue_discussion.html:96
+#: app/templates/post/post.html:174
+msgid "Leave"
+msgstr ""
+
+#: app/templates/community/community.html:114
+#: app/templates/list_communities.html:84
+msgid "Pending"
+msgstr ""
+
+#: app/templates/list_communities.html:86
+#: app/templates/list_communities.html:89
+#, python-format
+msgid "Join %(name)s"
+msgstr ""
+
+#: app/templates/community/add_remote.html:34
+#: app/templates/community/community.html:116
+#: app/templates/list_communities.html:86
+#: app/templates/list_communities.html:89 app/templates/post/add_reply.html:50
+#: app/templates/post/continue_discussion.html:98
+#: app/templates/post/post.html:176
+msgid "Join"
+msgstr ""
+
+#: app/templates/list_communities.html:96
+#, python-format
+msgid "Browse %(name)s"
+msgstr ""
+
+#: app/templates/list_communities.html:106 app/templates/list_topics.html:24
+msgid "There are no communities yet."
+msgstr ""
+
+#: app/templates/list_topics.html:11
+msgid "Choose a topic"
+msgstr ""
+
+#: app/templates/privacy.html:10
+msgid "Privacy"
+msgstr ""
+
+#: app/templates/admin/_nav.html:2
+msgid "Admin navigation"
+msgstr ""
+
+#: app/templates/admin/_nav.html:3
+msgid "Admin home"
+msgstr ""
+
+#: app/templates/admin/_nav.html:9
+msgid "Watch"
+msgstr ""
+
+#: app/templates/admin/_nav.html:11
+msgid "Registration applications"
+msgstr ""
+
+#: app/templates/admin/_nav.html:13
+msgid "Moderation"
+msgstr ""
+
+#: app/templates/admin/_nav.html:14
+msgid "Federation"
+msgstr ""
+
+#: app/templates/admin/_nav.html:15
+msgid "Newsletter"
+msgstr ""
+
+#: app/templates/admin/_nav.html:16
+msgid "Activities"
+msgstr ""
+
+#: app/templates/admin/add_user.html:17
+msgid "Add new user"
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:18
+#, python-format
+msgid "When registering, people are asked \"%(question)s\"."
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:43
+msgid "Approve"
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:44
+msgid "View"
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:45
+#: app/templates/post/post_options.html:20
+#: app/templates/post/post_reply_options.html:20
+#: app/templates/user/show_profile.html:176
+msgid "Delete"
+msgstr ""
+
+#: app/templates/admin/approve_registrations.html:51
+msgid "No one is waiting to be approved."
+msgstr ""
+
+#: app/templates/admin/edit_community.html:17
+#, python-format
+msgid "Edit %(community_name)s"
+msgstr ""
+
+#: app/templates/admin/edit_community.html:43
+msgid "Will not be overwritten by remote server"
+msgstr ""
+
+#: app/templates/admin/edit_topic.html:18
+#, python-format
+msgid "Edit %(topic_name)s"
+msgstr ""
+
+#: app/templates/admin/edit_user.html:17
+#, python-format
+msgid "Edit %(user_name)s (%(display_name)s)"
+msgstr ""
+
+#: app/templates/admin/posts.html:17
+msgid "Most downvoted in the last 3 days"
+msgstr ""
+
+#: app/templates/admin/users.html:17
+msgid "Add local user"
+msgstr ""
+
+#: app/templates/auth/check_email.html:9
+msgid "We sent you an email containing a link that you need to click to enable your account."
+msgstr ""
+
+#: app/templates/auth/login.html:14
+msgid "New User?"
+msgstr ""
+
+#: app/templates/auth/login.html:14
+msgid "Register new account"
+msgstr ""
+
+#: app/templates/auth/login.html:16
+msgid "Forgot Your Password?"
+msgstr ""
+
+#: app/templates/auth/login.html:17
+msgid "Reset it"
+msgstr ""
+
+#: app/templates/auth/permission_denied.html:8
+#: app/templates/chat/blocked.html:13 app/templates/chat/denied.html:14
+msgid "Sorry"
+msgstr ""
+
+#: app/templates/auth/permission_denied.html:12
+msgid "Your account does not have access to that area."
+msgstr ""
+
+#: app/templates/auth/please_wait.html:8
+msgid "Thanks for registering"
+msgstr ""
+
+#: app/templates/auth/please_wait.html:9
+msgid "We are reviewing your application and will email you once it has been accepted."
+msgstr ""
+
+#: app/templates/auth/register.html:19
+msgid "Create new account"
+msgstr ""
+
+#: app/templates/auth/register.html:22
+msgid "Registration is closed. Only admins can create accounts."
+msgstr ""
+
+#: app/templates/auth/reset_password.html:13
+#: app/templates/auth/reset_password_request.html:13
+msgid "Reset your password"
+msgstr ""
+
+#: app/templates/auth/validation_required.html:8
+msgid "Please check your email inbox"
+msgstr ""
+
+#: app/templates/auth/validation_required.html:12
+msgid "To keep spam and bots to a managable level, we send every new account an email with a link in it that needs to be clicked to fully enable the account."
+msgstr ""
+
+#: app/templates/chat/blocked.html:15
+msgid "You have blocked this person or they have blocked you."
+msgstr ""
+
+#: app/templates/chat/chat_options.html:14
+#, python-format
+msgid "Options for conversation with \"%(member_names)s\""
+msgstr ""
+
+#: app/templates/chat/chat_options.html:17
+msgid "Delete conversation"
+msgstr ""
+
+#: app/templates/chat/chat_options.html:21
+#, python-format
+msgid "Block @%(author_name)s"
+msgstr ""
+
+#: app/templates/chat/chat_options.html:26
+#, python-format
+msgid "Block chats and posts from instance: %(name)s"
+msgstr ""
+
+#: app/templates/chat/chat_options.html:29
+#: app/templates/post/post_options.html:48
+#: app/templates/post/post_reply_options.html:32
+msgid "Report to moderators"
+msgstr ""
+
+#: app/templates/chat/chat_options.html:31
+msgid "If you are reporting abuse then do not delete the conversation - moderators will not be able to read it if you delete it."
+msgstr ""
+
+#: app/templates/chat/conversation.html:37
+msgid "Chat"
+msgstr ""
+
+#: app/templates/chat/conversation.html:42 app/templates/user/filters.html:56
+#: app/templates/user/notifications.html:14 app/templates/user/people.html:14
+#: app/templates/user/people.html:17 app/templates/user/show_profile.html:19
+#: app/templates/user/show_profile.html:39 app/user/routes.py:34
+msgid "People"
+msgstr ""
+
+#: app/templates/chat/conversation.html:59
+#, python-format
+msgid "Messages with %(name)s"
+msgstr ""
+
+#: app/templates/chat/conversation.html:60
+msgid "Messages with: "
+msgstr ""
+
+#: app/templates/chat/conversation.html:75
+#: app/templates/post/_post_teaser.html:80
+msgid "Options"
+msgstr ""
+
+#: app/templates/chat/denied.html:16
+msgid "You have not been using PieFed long enough to be allowed to send messages to people."
+msgstr ""
+
+#: app/templates/chat/empty.html:13
+msgid "No chats"
+msgstr ""
+
+#: app/templates/chat/empty.html:15
+msgid "There are no chats involving you, yet. Start a conversation using the \"Send message\" button on someone's profile."
+msgstr ""
+
+#: app/templates/chat/report.html:14
+#, python-format
+msgid "Report conversation with \"%(member_names)s\""
+msgstr ""
+
+#: app/templates/community/_community_nav.html:3
+#: app/templates/community/add_post.html:11
+#: app/templates/community/community.html:108
+#: app/templates/post/add_reply.html:54
+#: app/templates/post/continue_discussion.html:102
+#: app/templates/post/post.html:170 app/templates/post/post_reply_edit.html:50
+#: app/templates/topic/show_topic.html:68
+msgid "Create post"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:7
+msgid "Sort by hot"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:10
+msgid "Sort by top"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:13
+msgid "Sort by new"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:16
+msgid "Sort by active"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:26
+msgid "Tile"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:29
+msgid "Wide tile"
+msgstr ""
+
+#: app/templates/community/_notification_toggle.html:5
+msgid "Notify about every new post. Not advisable in high traffic communities!"
+msgstr ""
+
+#: app/templates/community/add_local.html:31
+#, python-format
+msgid "Only people using %(name)s can post or reply"
+msgstr ""
+
+#: app/templates/community/add_post.html:44
+#: app/templates/community/add_post.html:65
+#: app/templates/community/add_post.html:88
+#: app/templates/post/add_reply.html:37 app/templates/post/post.html:42
+#: app/templates/user/edit_profile.html:44
+msgid "Enable markdown editor"
+msgstr ""
+
+#: app/templates/community/add_post.html:73
+#: app/templates/post/post_edit.html:98
+msgid "Describe the image, to help visually impaired people."
+msgstr ""
+
+#: app/templates/community/add_remote.html:25
+msgid "Found a community:"
+msgstr ""
+
+#: app/templates/community/community.html:27
+#: app/templates/community/community.html:48
+#: app/templates/community/community.html:66
+#: app/templates/post/_post_full.html:20 app/templates/post/_post_full.html:66
+#: app/templates/post/_post_teaser.html:56
+msgid "Not safe for work"
+msgstr ""
+
+#: app/templates/community/community.html:28
+#: app/templates/community/community.html:49
+#: app/templates/community/community.html:67
+msgid "Not safe for life"
+msgstr ""
+
+#: app/templates/community/community.html:76
+#: app/templates/community/community.html:84
+msgid "No posts in this community yet."
+msgstr ""
+
+#: app/templates/community/community.html:121
+#: app/templates/post/add_reply.html:58
+#: app/templates/post/continue_discussion.html:106
+#: app/templates/post/post.html:181 app/templates/post/post_reply_edit.html:54
+msgid "Search this community"
+msgstr ""
+
+#: app/templates/community/community.html:127
+#: app/templates/post/add_reply.html:64
+#: app/templates/post/continue_discussion.html:112
+#: app/templates/post/post.html:187 app/templates/post/post_reply_edit.html:60
+msgid "About community"
+msgstr ""
+
+#: app/templates/community/community.html:146
+#, python-format
+msgid "Only people on %(instance_name)s can post or reply in this community."
+msgstr ""
+
+#: app/templates/community/community.html:156 app/templates/post/post.html:205
+msgid "Related communities"
+msgstr ""
+
+#: app/templates/community/community.html:162 app/templates/post/post.html:211
+#: app/templates/topic/show_topic.html:85
+msgid "Go to community"
+msgstr ""
+
+#: app/templates/community/community.html:175
+#: app/templates/post/add_reply.html:82
+#: app/templates/post/continue_discussion.html:130
+#: app/templates/post/post.html:224 app/templates/post/post_reply_edit.html:78
+msgid "Community Settings"
+msgstr ""
+
+#: app/templates/community/community.html:178
+#: app/templates/post/add_reply.html:85
+#: app/templates/post/continue_discussion.html:133
+#: app/templates/post/post.html:227 app/templates/post/post_reply_edit.html:81
+msgid "Moderate"
+msgstr ""
+
+#: app/templates/community/community.html:180
+#: app/templates/community/community_edit.html:15
+#: app/templates/community/community_mod_list.html:15
+#: app/templates/post/add_reply.html:86
+#: app/templates/post/continue_discussion.html:134
+#: app/templates/post/post.html:228 app/templates/post/post_reply_edit.html:82
+#: app/templates/user/_user_nav.html:5 app/templates/user/notifications.html:57
+#: app/templates/user/show_profile.html:121
+msgid "Settings"
+msgstr ""
+
+#: app/templates/community/community_ban_user.html:13
+#, python-format
+msgid "Ban \"%(user_name)s\" from %(community_name)s"
+msgstr ""
+
+#: app/templates/community/community_delete.html:13
+#, python-format
+msgid "Delete \"%(community_title)s\""
+msgstr ""
+
+#: app/templates/community/community_edit.html:51
+#: app/templates/community/community_mod_list.html:16
+msgid "Moderators"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:24
+msgid "Add moderator"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:41
+msgid "Remove"
+msgstr ""
+
+#: app/templates/domain/domain.html:14 app/templates/domain/domains.html:12
+#: app/templates/domain/domains.html:21
+#: app/templates/domain/domains_blocked.html:21
+#: app/templates/user/filters.html:60
+msgid "Domains"
+msgstr ""
+
+#: app/templates/domain/domain.html:23
+msgid "No posts in this domain yet."
+msgstr ""
+
+#: app/templates/domain/domain.html:45
+msgid "Domain management"
+msgstr ""
+
+#: app/templates/domain/domain.html:51 app/templates/user/filters.html:71
+#: app/templates/user/filters.html:76 app/templates/user/filters.html:89
+#: app/templates/user/filters.html:94 app/templates/user/filters.html:107
+#: app/templates/user/filters.html:112 app/templates/user/filters.html:125
+#: app/templates/user/filters.html:130 app/templates/user/show_profile.html:52
+msgid "Unblock"
+msgstr ""
+
+#: app/templates/domain/domain.html:55 app/templates/user/show_profile.html:54
+msgid "Block"
+msgstr ""
+
+#: app/templates/domain/domain.html:61
+#: app/templates/domain/domains_blocked.html:46
+#: app/templates/user/show_profile.html:166
+msgid "Unban"
+msgstr ""
+
+#: app/templates/domain/domain.html:65
+msgid "Ban instance-wide"
+msgstr ""
+
+#: app/templates/domain/domains.html:14
+#, python-format
+msgid "Domains containing \"%(search)s\""
+msgstr ""
+
+#: app/templates/domain/domains.html:24
+#: app/templates/domain/domains_blocked.html:24
+msgid "Banned domains"
+msgstr ""
+
+#: app/templates/domain/domains.html:38
+msgid "How many times has something on this domain been posted"
+msgstr ""
+
+#: app/templates/domain/domains_blocked.html:12
+msgid "Blocked domains"
+msgstr ""
+
+#: app/templates/domain/domains_blocked.html:14
+#, python-format
+msgid "Blocked domains containing \"%(search)s\""
+msgstr ""
+
+#: app/templates/domain/domains_blocked.html:46
+msgid "Unbanning this domain allows future posts linking to that domain."
+msgstr ""
+
+#: app/templates/domain/domains_blocked.html:48
+msgid "Banning this domain will delete all posts linking to this domain and prevent future posts linking to that domain."
+msgstr ""
+
+#: app/templates/errors/404.html:12
+msgid "Ooops, something is broken!"
+msgstr ""
+
+#: app/templates/errors/404.html:15
+msgid "The page your browser tried to load could not be found."
+msgstr ""
+
+#: app/templates/errors/404.html:16 app/templates/errors/500.html:16
+msgid "Back"
+msgstr ""
+
+#: app/templates/errors/500.html:12
+msgid "An unexpected error has occurred"
+msgstr ""
+
+#: app/templates/errors/500.html:15
+msgid "Sorry for the inconvenience! Please let us know about this, so we can repair it and make PieFed better for everyone."
+msgstr ""
+
+#: app/templates/post/_comment_voting_buttons.html:3
+msgid "UpVote button."
+msgstr ""
+
+#: app/templates/post/_comment_voting_buttons.html:9
+msgid "Score: "
+msgstr ""
+
+#: app/templates/post/_comment_voting_buttons.html:11
+msgid "DownVote button."
+msgstr ""
+
+#: app/templates/post/_comment_voting_buttons.html:21
+msgid "Score:"
+msgstr ""
+
+#: app/templates/post/_post_full.html:21 app/templates/post/_post_full.html:67
+#: app/templates/post/_post_teaser.html:57
+msgid "Potentially emotionally scarring content"
+msgstr ""
+
+#: app/templates/post/_post_full.html:28 app/templates/post/_post_full.html:76
+#: app/templates/post/_post_teaser.html:59
+msgid "Reported. Check post for issues."
+msgstr ""
+
+#: app/templates/post/_post_reply_teaser.html:3
+msgid "View context"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:6
+#: app/templates/post/_post_teaser_masonry.html:6
+msgid "Filtered: "
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:18
+#: app/templates/post/_post_teaser.html:26
+#: app/templates/post/_post_teaser.html:42
+msgid "Read article"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:20
+#: app/templates/post/_post_teaser.html:30
+#: app/templates/post/_post_teaser.html:74
+#: app/templates/post/_post_teaser.html:76
+#: app/templates/post/_post_teaser_masonry.html:16
+#: app/templates/post/_post_teaser_masonry.html:20
+#: app/templates/post/_post_teaser_masonry.html:23
+#: app/templates/post/_post_teaser_masonry.html:55
+msgid "View image"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:22
+#: app/templates/post/_post_teaser.html:34
+msgid "Read post"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:54
+msgid "All posts about this domain"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:63
+#, python-format
+msgid "Go to community %(name)s"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:71
+#: app/templates/post/_post_teaser_masonry.html:47
+#: app/templates/post/_post_teaser_masonry.html:48
+#: app/templates/post/_post_teaser_masonry.html:68
+#: app/templates/post/_post_teaser_masonry.html:69
+msgid "View comments"
+msgstr ""
+
+#: app/templates/post/_post_teaser.html:71
+msgid "Number of comments:"
+msgstr ""
+
+#: app/templates/post/_post_voting_buttons.html:3
+#, python-format
+msgid "UpVote button, %(count)d upvotes so far."
+msgstr ""
+
+#: app/templates/post/_post_voting_buttons.html:11
+#, python-format
+msgid "DownVote button, %(count)d downvotes so far."
+msgstr ""
+
+#: app/templates/post/_post_voting_buttons_masonry.html:3
+msgid "UpVote"
+msgstr ""
+
+#: app/templates/post/_post_voting_buttons_masonry.html:10
+msgid "DownVote"
+msgstr ""
+
+#: app/templates/post/add_reply.html:21 app/templates/post/post.html:23
+msgid "This post is hosted on beehaw.org which has higher standards of behaviour than most places. Be nice."
+msgstr ""
+
+#: app/templates/post/continue_discussion.html:44
+#: app/templates/post/post.html:105
+msgid "Reported. Check comment for issues."
+msgstr ""
+
+#: app/templates/post/post.html:26
+msgid "This post is hosted on lemmy.ml which will ban you for saying anything negative about China, Russia or Putin. Tread carefully."
+msgstr ""
+
+#: app/templates/post/post.html:52
+msgid "Verify your email address to comment"
+msgstr ""
+
+#: app/templates/post/post.html:55
+msgid "Log in to comment"
+msgstr ""
+
+#: app/templates/post/post.html:58
+msgid "Comments are disabled."
+msgstr ""
+
+#: app/templates/post/post.html:65
+msgid "Sort by magic"
+msgstr ""
+
+#: app/templates/post/post.html:68
+msgid "Comments with the most upvotes"
+msgstr ""
+
+#: app/templates/post/post.html:71
+msgid "Show newest first"
+msgstr ""
+
+#: app/templates/post/post.html:87
+msgid "Author"
+msgstr ""
+
+#: app/templates/post/post.html:101
+msgid "Post creator"
+msgstr ""
+
+#: app/templates/post/post.html:102
+msgid "When: "
+msgstr ""
+
+#: app/templates/post/post.html:131
+msgid "Comment options"
+msgstr ""
+
+#: app/templates/post/post_mea_culpa.html:15
+msgid "If you wish to de-escalate the discussion on your post and now feel like it was a mistake, click the button below."
+msgstr ""
+
+#: app/templates/post/post_mea_culpa.html:16
+msgid "No further comments will be posted and a message saying you made a mistake in this post will be displayed."
+msgstr ""
+
+#: app/templates/post/post_mea_culpa.html:17
+msgid "The effect of downvotes on your reputation score will be removed."
+msgstr ""
+
+#: app/templates/post/post_options.html:13
+#, python-format
+msgid "Options for \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/post/post_options.html:18
+#: app/templates/post/post_reply_options.html:18
+msgid "Edit"
+msgstr ""
+
+#: app/templates/post/post_options.html:24
+msgid "I made a mistake with this post and have changed my mind about the topic"
+msgstr ""
+
+#: app/templates/post/post_options.html:28
+#, python-format
+msgid "Block post author @%(author_name)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:31
+#, python-format
+msgid "Ban post author @%(author_name)s from
%(community_name)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:35
+#, python-format
+msgid "Block domain %(domain)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:39
+#: app/templates/post/post_reply_options.html:27
+#, python-format
+msgid "Hide every post from author's instance: %(name)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:45
+#, python-format
+msgid "View original on %(domain)s"
+msgstr ""
+
+#: app/templates/post/post_options.html:50
+#: app/templates/post/post_reply_options.html:34
+msgid "If you want to perform more than one of these (e.g. block and report), hold down Ctrl and click, then complete the operation in the new tabs that open."
+msgstr ""
+
+#: app/templates/post/post_reply_edit.html:44
+msgid "Unsubscribe"
+msgstr ""
+
+#: app/templates/post/post_reply_edit.html:46
+msgid "Subscribe"
+msgstr ""
+
+#: app/templates/post/post_reply_options.html:13
+#, python-format
+msgid "Options for comment on \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/post/post_reply_options.html:24
+#, python-format
+msgid "Block author @%(author_name)s"
+msgstr ""
+
+#: app/templates/post/post_reply_report.html:13
+#, python-format
+msgid "Report comment on \"%(post_title)s\" by %(reply_name)s"
+msgstr ""
+
+#: app/templates/post/post_report.html:13
+#, python-format
+msgid "Report \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/search/results.html:11
+msgid "Search results for"
+msgstr ""
+
+#: app/templates/search/results.html:16
+msgid "No posts match your search."
+msgstr ""
+
+#: app/templates/search/start.html:13
+msgid "Search for posts"
+msgstr ""
+
+#: app/templates/search/start.html:20
+msgid "Example searches:"
+msgstr ""
+
+#: app/templates/search/start.html:23
+msgid "star wars"
+msgstr ""
+
+#: app/templates/search/start.html:24
+msgid "There is an implied \"and\" here. Results will have both words somewhere in them."
+msgstr ""
+
+#: app/templates/search/start.html:27
+msgid "star or wars"
+msgstr ""
+
+#: app/templates/search/start.html:28
+msgid "This will broaden the search to include results that contain any of the words."
+msgstr ""
+
+#: app/templates/search/start.html:31
+msgid "star -wars"
+msgstr ""
+
+#: app/templates/search/start.html:32
+msgid "To search for things containing \"star\" but not \"wars\" you can put a - before the word you want to exclude."
+msgstr ""
+
+#: app/templates/search/start.html:35
+msgid "\"star wars\""
+msgstr ""
+
+#: app/templates/search/start.html:36
+msgid "Results will have exactly that phrase in them."
+msgstr ""
+
+#: app/templates/topic/choose_topics.html:9
+msgid "Please choose at least 3 topics that interest you."
+msgstr ""
+
+#: app/templates/topic/show_topic.html:23
+msgid "Sub-topics"
+msgstr ""
+
+#: app/templates/topic/show_topic.html:36
+#: app/templates/topic/show_topic.html:44
+msgid "No posts in this topic yet."
+msgstr ""
+
+#: app/templates/topic/show_topic.html:79
+msgid "Topic communities"
+msgstr ""
+
+#: app/templates/topic/topic_create_post.html:9
+#, python-format
+msgid "Which community within %(topic)s to post in?"
+msgstr ""
+
+#: app/templates/topic/topic_create_post.html:17
+#, python-format
+msgid "Post in %(name)s"
+msgstr ""
+
+#: app/templates/user/_user_nav.html:8 app/templates/user/notifications.html:54
+#: app/templates/user/show_profile.html:118
+msgid "Profile"
+msgstr ""
+
+#: app/templates/user/_user_nav.html:11
+msgid "Blocks & Filters"
+msgstr ""
+
+#: app/templates/user/delete_account.html:15
+#: app/templates/user/edit_settings.html:17
+#: app/templates/user/edit_settings.html:20
+msgid "Change settings"
+msgstr ""
+
+#: app/templates/user/delete_account.html:18
+#, python-format
+msgid "Delete %(username)s"
+msgstr ""
+
+#: app/templates/user/delete_account.html:20
+#, python-format
+msgid "You are about to permanently delete the account with the username \"%(username)s.\" This means your profile will disappear, pictures will be deleted. Text-based posts will stay but look like they are from someone named \"deleted.\""
+msgstr ""
+
+#: app/templates/user/delete_account.html:21
+#, python-format
+msgid "Once you hit delete, nobody can use \"%(username)s\" as a username again. We are doing this so nobody pretends to be you."
+msgstr ""
+
+#: app/templates/user/delete_account.html:22
+msgid "We will tell other websites (fediverse instances) that your account is gone. But it's up to them to decide what to do with any copies they have of your stuff. Some websites work differently than ours."
+msgstr ""
+
+#: app/templates/user/delete_account.html:23
+msgid "Remember, once you do this, there's no going back. Are you sure you want to continue?"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:16 app/templates/user/filters.html:16
+#: app/templates/user/filters.html:19
+msgid "Filters"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:18 app/user/routes.py:713
+msgid "Edit filter"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:20
+#: app/templates/user/edit_filters.html:27 app/templates/user/filters.html:22
+#: app/user/routes.py:673
+msgid "Add filter"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:25
+#, python-format
+msgid "Filter %(name)s"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:33
+msgid "Filter in these places"
+msgstr ""
+
+#: app/templates/user/edit_filters.html:39
+msgid "One per line. Case does not matter."
+msgstr ""
+
+#: app/templates/user/edit_filters.html:41
+msgid "Stop applying this filter after this date. Optional."
+msgstr ""
+
+#: app/templates/user/edit_profile.html:16 app/user/routes.py:147
+#: app/user/routes.py:212
+msgid "Edit profile"
+msgstr ""
+
+#: app/templates/user/edit_profile.html:19
+#, python-format
+msgid "Edit profile of %(name)s"
+msgstr ""
+
+#: app/templates/user/edit_profile.html:58
+msgid "Delete account"
+msgstr ""
+
+#: app/templates/user/email_notifs_unsubscribed.html:9
+#: app/templates/user/newsletter_unsubscribed.html:9
+msgid "Unsubscribed"
+msgstr ""
+
+#: app/templates/user/email_notifs_unsubscribed.html:10
+msgid "You have unsubscribed from emails about unread notifications. We might email you for other reasons, though."
+msgstr ""
+
+#: app/templates/user/email_notifs_unsubscribed.html:11
+#: app/templates/user/newsletter_unsubscribed.html:11
+msgid "More email settings"
+msgstr ""
+
+#: app/templates/user/filters.html:25
+msgid "Filters can hide posts that contain keywords you specify, either by making them less noticeable or invisible."
+msgstr ""
+
+#: app/templates/user/filters.html:30
+msgid "Keywords"
+msgstr ""
+
+#: app/templates/user/filters.html:32
+msgid "Expires"
+msgstr ""
+
+#: app/templates/user/filters.html:39
+msgid "Invisible"
+msgstr ""
+
+#: app/templates/user/filters.html:39
+msgid "Semi-transparent"
+msgstr ""
+
+#: app/templates/user/filters.html:49
+msgid "No filters defined yet."
+msgstr ""
+
+#: app/templates/user/filters.html:62
+msgid "Instances"
+msgstr ""
+
+#: app/templates/user/filters.html:81
+msgid "No blocked people"
+msgstr ""
+
+#: app/templates/user/filters.html:99
+msgid "No blocked communities"
+msgstr ""
+
+#: app/templates/user/filters.html:117
+msgid "No blocked domains"
+msgstr ""
+
+#: app/templates/user/filters.html:135
+msgid "No blocked instances"
+msgstr ""
+
+#: app/templates/user/newsletter_unsubscribed.html:10
+msgid "You have unsubscribed from the email newsletter. We might email you for other reasons, though."
+msgstr ""
+
+#: app/templates/user/notifications.html:25
+msgid "Mark all as read"
+msgstr ""
+
+#: app/templates/user/notifications.html:49
+#: app/templates/user/show_profile.html:113
+msgid "Manage"
+msgstr ""
+
+#: app/templates/user/notifications.html:95
+#: app/templates/user/show_profile.html:189
+msgid "Upvoted"
+msgstr ""
+
+#: app/templates/user/people.html:32
+msgid "No people to show"
+msgstr ""
+
+#: app/templates/user/show_profile.html:24
+#: app/templates/user/show_profile.html:29
+msgid "Profile pic"
+msgstr ""
+
+#: app/templates/user/show_profile.html:47
+msgid "Send message"
+msgstr ""
+
+#: app/templates/user/show_profile.html:49
+msgid "Send message with matrix chat"
+msgstr ""
+
+#: app/templates/user/show_profile.html:49
+msgid "Send message using Matrix"
+msgstr ""
+
+#: app/templates/user/show_profile.html:60
+msgid "Attitude"
+msgstr ""
+
+#: app/templates/user/show_profile.html:60
+msgid "Ratio of upvotes cast to downvotes cast. Higher is more positive."
+msgstr ""
+
+#: app/templates/user/show_profile.html:69
+msgid "Post pagination"
+msgstr ""
+
+#: app/templates/user/show_profile.html:82
+msgid "No posts yet."
+msgstr ""
+
+#: app/templates/user/show_profile.html:92
+msgid "Comment pagination"
+msgstr ""
+
+#: app/templates/user/show_profile.html:105
+msgid "No comments yet."
+msgstr ""
+
+#: app/templates/user/show_profile.html:134
+msgid "Member of"
+msgstr ""
+
+#: app/templates/user/show_profile.html:159
+msgid "Crush"
+msgstr ""
+
+#: app/templates/user/show_profile.html:179
+msgid "Ban + Purge"
+msgstr ""
+
+#: app/templates/user/user_report.html:13
+#, python-format
+msgid "Report \"%(user_name)s\""
+msgstr ""
+
+#: app/topic/forms.py:13
+msgid "Choose some topics you are interested in"
+msgstr ""
+
+#: app/topic/forms.py:14
+msgid "Choose"
+msgstr ""
+
+#: app/topic/routes.py:168
+msgid "You have joined some communities relating to those interests. Find them on the Topics menu or browse the home page."
+msgstr ""
+
+#: app/topic/routes.py:172
+msgid "You did not choose any topics. Would you like to choose individual communities instead?"
+msgstr ""
+
+#: app/user/forms.py:13
+msgid "Display name"
+msgstr ""
+
+#: app/user/forms.py:15
+msgid "Set new password"
+msgstr ""
+
+#: app/user/forms.py:22
+msgid "Save profile"
+msgstr ""
+
+#: app/user/forms.py:26
+msgid "That email address is already in use by another account"
+msgstr ""
+
+#: app/user/forms.py:30
+msgid "Matrix user ids start with @"
+msgstr ""
+
+#: app/user/forms.py:35
+msgid "Receive email about missed notifications"
+msgstr ""
+
+#: app/user/forms.py:39
+msgid "Use markdown editor GUI when writing"
+msgstr ""
+
+#: app/user/forms.py:41
+msgid "My posts appear in search results"
+msgstr ""
+
+#: app/user/forms.py:43
+msgid "Import community subscriptions and user blocks from Lemmy"
+msgstr ""
+
+#: app/user/forms.py:49
+msgid "By default, sort posts by"
+msgstr ""
+
+#: app/user/forms.py:50
+msgid "Theme"
+msgstr ""
+
+#: app/user/forms.py:51
+msgid "Save settings"
+msgstr ""
+
+#: app/user/forms.py:55
+msgid "Yes, delete my account"
+msgstr ""
+
+#: app/user/forms.py:66
+msgid "Malicious reporting"
+msgstr ""
+
+#: app/user/forms.py:90
+msgid "Home feed"
+msgstr ""
+
+#: app/user/forms.py:91
+msgid "Posts in communities"
+msgstr ""
+
+#: app/user/forms.py:92
+msgid "Comments on posts"
+msgstr ""
+
+#: app/user/forms.py:93
+msgid "Make semi-transparent"
+msgstr ""
+
+#: app/user/forms.py:93
+msgid "Hide completely"
+msgstr ""
+
+#: app/user/forms.py:94
+msgid "Action to take"
+msgstr ""
+
+#: app/user/forms.py:95
+msgid "Keywords that trigger this filter"
+msgstr ""
+
+#: app/user/forms.py:98
+msgid "Expire after"
+msgstr ""
+
+#: app/user/routes.py:42
+msgid "This user has been banned."
+msgstr ""
+
+#: app/user/routes.py:44
+msgid "This user has been deleted."
+msgstr ""
+
+#: app/user/routes.py:77
+#, python-format
+msgid "Posts by %(user_name)s"
+msgstr ""
+
+#: app/user/routes.py:194
+msgid "Your subscriptions and blocks are being imported. If you have many it could take a few minutes."
+msgstr ""
+
+#: app/user/routes.py:229
+msgid "You cannot ban yourself."
+msgstr ""
+
+#: app/user/routes.py:254
+msgid "You cannot unban yourself."
+msgstr ""
+
+#: app/user/routes.py:278
+msgid "You cannot block yourself."
+msgstr ""
+
+#: app/user/routes.py:307
+msgid "You cannot unblock yourself."
+msgstr ""
+
+#: app/user/routes.py:352
+#, python-format
+msgid "%(user_name)s has been reported, thank you!"
+msgstr ""
+
+#: app/user/routes.py:358
+msgid "Report user"
+msgstr ""
+
+#: app/user/routes.py:375
+msgid "You cannot delete yourself."
+msgstr ""
+
+#: app/user/routes.py:432
+msgid "Account deletion in progress. Give it a few minutes."
+msgstr ""
+
+#: app/user/routes.py:437
+msgid "Delete my account"
+msgstr ""
+
+#: app/user/routes.py:482
+msgid "You cannot purge yourself."
+msgstr ""
+
+#: app/user/routes.py:559
+msgid "All notifications marked as read."
+msgstr ""
+
+#: app/user/routes.py:730
+msgid "Filter deleted."
+msgstr ""
+
diff --git a/app/translations/pt/LC_MESSAGES/messages.po b/app/translations/pt/LC_MESSAGES/messages.po
index 030a3e78..f65665b0 100644
--- a/app/translations/pt/LC_MESSAGES/messages.po
+++ b/app/translations/pt/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-03-17 19:06+1300\n"
+"POT-Creation-Date: 2024-04-09 12:33+1200\n"
"PO-Revision-Date: 2024-03-17 19:10+1300\n"
"Last-Translator: FULL NAME \n"
"Language: pt\n"
@@ -18,11 +18,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
-#: app/__init__.py:26
+#: app/__init__.py:33
msgid "Please log in to access this page."
msgstr ""
-#: app/cli.py:238 app/main/routes.py:300
+#: app/cli.py:225 app/main/routes.py:328
msgid "[PieFed] You have unread notifications"
msgstr ""
@@ -42,13 +42,21 @@ msgstr ""
msgid "Welcome to PieFed"
msgstr ""
-#: app/activitypub/util.py:1205 app/post/routes.py:85 app/post/routes.py:472
+#: app/activitypub/util.py:1280 app/post/routes.py:91 app/post/routes.py:509
#, python-format
msgid "Reply from %(name)s on %(post_title)s"
msgstr ""
-#: app/admin/forms.py:13 app/admin/forms.py:97 app/community/forms.py:18
-#: app/templates/community/community_mod_list.html:30
+#: app/activitypub/util.py:1679 app/post/routes.py:1053
+msgid "A post has been reported"
+msgstr ""
+
+#: app/activitypub/util.py:1700 app/post/routes.py:1187
+msgid "A comment has been reported"
+msgstr ""
+
+#: app/admin/forms.py:13 app/admin/forms.py:99 app/community/forms.py:18
+#: app/templates/community/community_mod_list.html:32
#: app/templates/user/filters.html:29 app/templates/user/filters.html:70
#: app/templates/user/filters.html:88 app/templates/user/filters.html:106
#: app/templates/user/filters.html:124 app/user/forms.py:89
@@ -71,10 +79,10 @@ msgstr ""
msgid "Legal information"
msgstr ""
-#: app/admin/forms.py:20 app/admin/forms.py:36 app/admin/forms.py:44
-#: app/admin/forms.py:81 app/admin/forms.py:100 app/admin/forms.py:126
-#: app/admin/forms.py:188 app/community/forms.py:56 app/community/forms.py:95
-#: app/user/forms.py:99
+#: app/admin/forms.py:20 app/admin/forms.py:37 app/admin/forms.py:46
+#: app/admin/forms.py:83 app/admin/forms.py:102 app/admin/forms.py:128
+#: app/admin/forms.py:180 app/community/forms.py:56 app/community/forms.py:96
+#: app/community/forms.py:109 app/community/forms.py:129 app/user/forms.py:99
msgid "Save"
msgstr ""
@@ -127,434 +135,439 @@ msgid "Question to ask people applying for an account"
msgstr ""
#: app/admin/forms.py:34
-msgid "Log ActivityPub JSON for debugging"
+msgid "Block registrations from these referrers (one per line)"
msgstr ""
#: app/admin/forms.py:35
+msgid "Log ActivityPub JSON for debugging"
+msgstr ""
+
+#: app/admin/forms.py:36
msgid "Default theme"
msgstr ""
-#: app/admin/forms.py:40
+#: app/admin/forms.py:41
msgid "Allowlist instead of blocklist"
msgstr ""
-#: app/admin/forms.py:41
+#: app/admin/forms.py:42
msgid "Allow federation with these instances"
msgstr ""
-#: app/admin/forms.py:42
+#: app/admin/forms.py:43
msgid "Blocklist instead of allowlist"
msgstr ""
-#: app/admin/forms.py:43
+#: app/admin/forms.py:44
msgid "Deny federation with these instances"
msgstr ""
-#: app/admin/forms.py:48 app/community/forms.py:42 app/community/forms.py:80
-#: app/community/forms.py:82 app/community/forms.py:86
+#: app/admin/forms.py:45
+msgid "Discard all posts and comments with these phrases (one per line)"
+msgstr ""
+
+#: app/admin/forms.py:50 app/community/forms.py:42 app/community/forms.py:90
+#: app/community/forms.py:101 app/community/forms.py:121
msgid "Title"
msgstr ""
-#: app/admin/forms.py:49 app/admin/forms.py:98 app/community/forms.py:19
+#: app/admin/forms.py:51 app/admin/forms.py:100 app/community/forms.py:19
msgid "Url"
msgstr ""
-#: app/admin/forms.py:50 app/community/forms.py:20 app/community/forms.py:43
+#: app/admin/forms.py:52 app/community/forms.py:20 app/community/forms.py:43
msgid "Description"
msgstr ""
-#: app/admin/forms.py:51 app/community/forms.py:21 app/community/forms.py:44
+#: app/admin/forms.py:53 app/community/forms.py:21 app/community/forms.py:44
msgid "Icon image"
msgstr ""
-#: app/admin/forms.py:52 app/community/forms.py:22 app/community/forms.py:45
+#: app/admin/forms.py:54 app/community/forms.py:22 app/community/forms.py:45
msgid "Banner image"
msgstr ""
-#: app/admin/forms.py:53 app/community/forms.py:23 app/community/forms.py:46
+#: app/admin/forms.py:55 app/community/forms.py:23 app/community/forms.py:46
msgid "Rules"
msgstr ""
-#: app/admin/forms.py:54 app/community/forms.py:47
+#: app/admin/forms.py:56 app/community/forms.py:47
msgid "Porn community"
msgstr ""
-#: app/admin/forms.py:55
+#: app/admin/forms.py:57
msgid "Banned - no new posts accepted"
msgstr ""
-#: app/admin/forms.py:56 app/community/forms.py:48
+#: app/admin/forms.py:58 app/community/forms.py:48
msgid "Only accept posts from current instance"
msgstr ""
-#: app/admin/forms.py:57 app/community/forms.py:49
+#: app/admin/forms.py:59 app/community/forms.py:49
msgid "Only moderators can post"
msgstr ""
-#: app/admin/forms.py:58 app/community/forms.py:50
+#: app/admin/forms.py:60 app/community/forms.py:50
msgid "New moderators wanted"
msgstr ""
-#: app/admin/forms.py:59
+#: app/admin/forms.py:61
msgid "Posts show on home page"
msgstr ""
-#: app/admin/forms.py:60
+#: app/admin/forms.py:62
msgid "Posts can be popular"
msgstr ""
-#: app/admin/forms.py:61
+#: app/admin/forms.py:63
msgid "Posts show in All list"
msgstr ""
-#: app/admin/forms.py:62
+#: app/admin/forms.py:64
msgid "Low quality / toxic - upvotes in here don't add to reputation"
msgstr ""
-#: app/admin/forms.py:63
+#: app/admin/forms.py:65
msgid "Forever"
msgstr ""
-#: app/admin/forms.py:64
+#: app/admin/forms.py:66
msgid "1 week"
msgstr ""
-#: app/admin/forms.py:65
+#: app/admin/forms.py:67
msgid "2 weeks"
msgstr ""
-#: app/admin/forms.py:66
+#: app/admin/forms.py:68
msgid "1 month"
msgstr ""
-#: app/admin/forms.py:67
+#: app/admin/forms.py:69
msgid "2 months"
msgstr ""
-#: app/admin/forms.py:68
+#: app/admin/forms.py:70
msgid "3 months"
msgstr ""
-#: app/admin/forms.py:69
+#: app/admin/forms.py:71
msgid "6 months"
msgstr ""
-#: app/admin/forms.py:70
+#: app/admin/forms.py:72
msgid "1 year"
msgstr ""
-#: app/admin/forms.py:71
+#: app/admin/forms.py:73
msgid "2 years"
msgstr ""
-#: app/admin/forms.py:72
+#: app/admin/forms.py:74
msgid "5 years"
msgstr ""
-#: app/admin/forms.py:73
+#: app/admin/forms.py:75
msgid "10 years"
msgstr ""
-#: app/admin/forms.py:75
+#: app/admin/forms.py:77
msgid "Retain content"
msgstr ""
-#: app/admin/forms.py:76 app/community/forms.py:51
+#: app/admin/forms.py:78 app/community/forms.py:51
msgid "Topic"
msgstr ""
-#: app/admin/forms.py:77 app/community/forms.py:52
+#: app/admin/forms.py:79 app/community/forms.py:52
#: app/templates/community/_community_nav.html:23
msgid "List"
msgstr ""
-#: app/admin/forms.py:78 app/community/forms.py:53
+#: app/admin/forms.py:80 app/community/forms.py:53
msgid "Masonry"
msgstr ""
-#: app/admin/forms.py:79 app/community/forms.py:54
+#: app/admin/forms.py:81 app/community/forms.py:54
msgid "Wide masonry"
msgstr ""
-#: app/admin/forms.py:80 app/community/forms.py:55
+#: app/admin/forms.py:82 app/community/forms.py:55
msgid "Layout"
msgstr ""
-#: app/admin/forms.py:87 app/community/forms.py:32
+#: app/admin/forms.py:89 app/community/forms.py:32
msgid "Url is required."
msgstr ""
-#: app/admin/forms.py:91 app/community/forms.py:36
+#: app/admin/forms.py:93 app/community/forms.py:36
msgid "- cannot be in Url. Use _ instead?"
msgstr ""
-#: app/admin/forms.py:99
+#: app/admin/forms.py:101
msgid "Parent topic"
msgstr ""
-#: app/admin/forms.py:104 app/auth/forms.py:10 app/auth/forms.py:17
+#: app/admin/forms.py:106 app/auth/forms.py:10 app/auth/forms.py:17
#: app/community/forms.py:60
msgid "User name"
msgstr ""
-#: app/admin/forms.py:106 app/admin/forms.py:169 app/user/forms.py:14
+#: app/admin/forms.py:108 app/user/forms.py:14
msgid "Email address"
msgstr ""
-#: app/admin/forms.py:107 app/auth/forms.py:11 app/auth/forms.py:20
+#: app/admin/forms.py:109 app/auth/forms.py:11 app/auth/forms.py:20
#: app/auth/forms.py:74
msgid "Password"
msgstr ""
-#: app/admin/forms.py:109 app/auth/forms.py:22 app/auth/forms.py:76
+#: app/admin/forms.py:111 app/auth/forms.py:22 app/auth/forms.py:76
msgid "Repeat password"
msgstr ""
-#: app/admin/forms.py:110 app/admin/forms.py:168 app/user/forms.py:17
+#: app/admin/forms.py:112 app/user/forms.py:17
msgid "Bio"
msgstr ""
-#: app/admin/forms.py:111 app/admin/forms.py:170 app/user/forms.py:18
+#: app/admin/forms.py:113 app/user/forms.py:18
msgid "Matrix User ID"
msgstr ""
-#: app/admin/forms.py:112 app/admin/forms.py:171 app/user/forms.py:19
+#: app/admin/forms.py:114 app/user/forms.py:19
msgid "Avatar image"
msgstr ""
-#: app/admin/forms.py:113 app/admin/forms.py:172 app/user/forms.py:20
+#: app/admin/forms.py:115 app/user/forms.py:20
msgid "Top banner image"
msgstr ""
-#: app/admin/forms.py:114 app/admin/forms.py:173 app/user/forms.py:21
+#: app/admin/forms.py:116 app/admin/forms.py:170 app/user/forms.py:21
msgid "This profile is a bot"
msgstr ""
-#: app/admin/forms.py:115 app/admin/forms.py:174
+#: app/admin/forms.py:117 app/admin/forms.py:171
msgid "Email address is verified"
msgstr ""
-#: app/admin/forms.py:116 app/admin/forms.py:175
+#: app/admin/forms.py:118 app/admin/forms.py:172
msgid "Banned"
msgstr ""
-#: app/admin/forms.py:117 app/admin/forms.py:176 app/user/forms.py:34
+#: app/admin/forms.py:119 app/user/forms.py:34
msgid "Subscribe to email newsletter"
msgstr ""
-#: app/admin/forms.py:118 app/admin/forms.py:177 app/user/forms.py:36
+#: app/admin/forms.py:120 app/user/forms.py:36
msgid "Hide posts by bots"
msgstr ""
-#: app/admin/forms.py:119 app/admin/forms.py:178 app/user/forms.py:37
+#: app/admin/forms.py:121 app/user/forms.py:37
msgid "Show NSFW posts"
msgstr ""
-#: app/admin/forms.py:120 app/admin/forms.py:179 app/user/forms.py:38
+#: app/admin/forms.py:122 app/user/forms.py:38
msgid "Show NSFL posts"
msgstr ""
-#: app/admin/forms.py:121 app/admin/forms.py:183
+#: app/admin/forms.py:123 app/admin/forms.py:173
msgid "User"
msgstr ""
-#: app/admin/forms.py:122 app/admin/forms.py:184
+#: app/admin/forms.py:124 app/admin/forms.py:174
msgid "Staff"
msgstr ""
-#: app/admin/forms.py:123 app/admin/forms.py:185 app/admin/routes.py:29
-#: app/templates/base.html:180
+#: app/admin/forms.py:125 app/admin/forms.py:175 app/admin/routes.py:32
+#: app/templates/base.html:185
msgid "Admin"
msgstr ""
-#: app/admin/forms.py:125 app/admin/forms.py:187
+#: app/admin/forms.py:127 app/admin/forms.py:177
msgid "Role"
msgstr ""
-#: app/admin/forms.py:131 app/auth/forms.py:32
+#: app/admin/forms.py:133 app/auth/forms.py:32
msgid "An account with this email address already exists."
msgstr ""
-#: app/admin/forms.py:135 app/auth/forms.py:36
+#: app/admin/forms.py:137 app/auth/forms.py:36
msgid "User names cannot contain @."
msgstr ""
-#: app/admin/forms.py:139 app/auth/forms.py:40
+#: app/admin/forms.py:141 app/auth/forms.py:40
msgid "This username was used in the past and cannot be reused."
msgstr ""
-#: app/admin/forms.py:141 app/auth/forms.py:42
+#: app/admin/forms.py:143 app/auth/forms.py:42
msgid "An account with this user name already exists."
msgstr ""
-#: app/admin/forms.py:144 app/auth/forms.py:45
+#: app/admin/forms.py:146 app/auth/forms.py:45
msgid "A community with this name exists so it cannot be used for a user."
msgstr ""
-#: app/admin/forms.py:151 app/admin/forms.py:164 app/auth/forms.py:52
+#: app/admin/forms.py:153 app/admin/forms.py:166 app/auth/forms.py:52
#: app/auth/forms.py:65
msgid "This password is too common."
msgstr ""
-#: app/admin/forms.py:161 app/auth/forms.py:62
+#: app/admin/forms.py:163 app/auth/forms.py:62
msgid "This password is not secure."
msgstr ""
-#: app/admin/forms.py:180 app/user/forms.py:40
-msgid "Show profile in user list"
+#: app/admin/forms.py:178
+msgid "Remove avatar"
msgstr ""
-#: app/admin/forms.py:181
-msgid "Allow search engines to index this profile"
+#: app/admin/forms.py:179
+msgid "Remove banner"
msgstr ""
-#: app/admin/forms.py:182 app/user/forms.py:42
-msgid "Manually approve followers"
-msgstr ""
-
-#: app/admin/forms.py:192
+#: app/admin/forms.py:184
msgid "Subject"
msgstr ""
-#: app/admin/forms.py:193
+#: app/admin/forms.py:185
msgid "Body (text)"
msgstr ""
-#: app/admin/forms.py:194
+#: app/admin/forms.py:186
msgid "Body (html)"
msgstr ""
-#: app/admin/forms.py:195
+#: app/admin/forms.py:187
msgid "Test mode"
msgstr ""
-#: app/admin/forms.py:196 app/admin/routes.py:732
+#: app/admin/forms.py:188 app/admin/routes.py:708
msgid "Send newsletter"
msgstr ""
-#: app/admin/routes.py:57 app/templates/admin/_nav.html:4
+#: app/admin/routes.py:60 app/templates/admin/_nav.html:4
msgid "Site profile"
msgstr ""
-#: app/admin/routes.py:102 app/templates/admin/_nav.html:5
+#: app/admin/routes.py:108 app/templates/admin/_nav.html:5
msgid "Misc settings"
msgstr ""
-#: app/admin/routes.py:133
+#: app/admin/routes.py:144
msgid "Admin settings saved"
msgstr ""
-#: app/admin/routes.py:143
+#: app/admin/routes.py:155
msgid "Federation settings"
msgstr ""
-#: app/admin/routes.py:165
+#: app/admin/routes.py:177
msgid "ActivityPub Log"
msgstr ""
-#: app/admin/routes.py:175
+#: app/admin/routes.py:187
msgid "Activity JSON"
msgstr ""
-#: app/admin/routes.py:210 app/community/routes.py:215 app/main/routes.py:181
-#: app/post/routes.py:211 app/templates/admin/_nav.html:6
+#: app/admin/routes.py:222 app/community/routes.py:232 app/main/routes.py:193
+#: app/post/routes.py:238 app/templates/admin/_nav.html:6
#: app/templates/list_communities.html:51 app/templates/user/filters.html:58
#: app/templates/user/notifications.html:66
-#: app/templates/user/show_profile.html:130
+#: app/templates/user/show_profile.html:133
msgid "Communities"
msgstr ""
-#: app/admin/routes.py:262 app/admin/routes.py:358 app/admin/routes.py:383
-#: app/admin/routes.py:578 app/community/routes.py:630
+#: app/admin/routes.py:274 app/admin/routes.py:370 app/admin/routes.py:395
+#: app/admin/routes.py:564 app/community/routes.py:808
msgid "Saved"
msgstr ""
-#: app/admin/routes.py:266
+#: app/admin/routes.py:278
msgid ""
"This is a remote community - most settings here will be regularly "
"overwritten with data from the original server."
msgstr ""
-#: app/admin/routes.py:283 app/community/routes.py:642
-#: app/templates/community/community_edit.html:20
+#: app/admin/routes.py:295 app/community/routes.py:820
msgid "Edit community"
msgstr ""
-#: app/admin/routes.py:302 app/community/routes.py:664
+#: app/admin/routes.py:314 app/community/routes.py:843
msgid "Community deleted"
msgstr ""
-#: app/admin/routes.py:336 app/community/routes.py:201 app/post/routes.py:197
-#: app/templates/admin/_nav.html:7 app/templates/base.html:134
-#: app/templates/base.html:152 app/templates/topic/show_topic.html:14
+#: app/admin/routes.py:348 app/community/routes.py:218 app/post/routes.py:224
+#: app/templates/admin/_nav.html:7 app/templates/base.html:137
+#: app/templates/base.html:155 app/templates/topic/show_topic.html:14
msgid "Topics"
msgstr ""
-#: app/admin/routes.py:361 app/templates/admin/topics.html:35
+#: app/admin/routes.py:373 app/templates/admin/topics.html:35
msgid "Add topic"
msgstr ""
-#: app/admin/routes.py:389
+#: app/admin/routes.py:401
msgid "Edit topic"
msgstr ""
-#: app/admin/routes.py:404
+#: app/admin/routes.py:416
msgid "Topic deleted"
msgstr ""
-#: app/admin/routes.py:406
+#: app/admin/routes.py:418
msgid "Cannot delete topic with communities assigned to it."
msgstr ""
-#: app/admin/routes.py:433 app/templates/admin/_nav.html:8
+#: app/admin/routes.py:445 app/templates/admin/_nav.html:8
msgid "Users"
msgstr ""
-#: app/admin/routes.py:463
+#: app/admin/routes.py:475
msgid "Problematic users"
msgstr ""
-#: app/admin/routes.py:484
+#: app/admin/routes.py:496
msgid "Bad posts"
msgstr ""
-#: app/admin/routes.py:517
+#: app/admin/routes.py:529
msgid "Registration approved."
msgstr ""
-#: app/admin/routes.py:574
+#: app/admin/routes.py:560
msgid ""
"Permissions are cached for 50 seconds so new admin roles won't take "
"effect immediately."
msgstr ""
-#: app/admin/routes.py:582
+#: app/admin/routes.py:568
msgid ""
"This is a remote user - most settings here will be regularly overwritten "
"with data from the original server."
msgstr ""
-#: app/admin/routes.py:599
+#: app/admin/routes.py:575
msgid "Edit user"
msgstr ""
-#: app/admin/routes.py:664
+#: app/admin/routes.py:640
msgid "User added"
msgstr ""
-#: app/admin/routes.py:667
+#: app/admin/routes.py:643
msgid "Add user"
msgstr ""
-#: app/admin/routes.py:691
+#: app/admin/routes.py:667
msgid "User deleted"
msgstr ""
-#: app/admin/routes.py:714
+#: app/admin/routes.py:690
+#: app/templates/community/_community_moderation_nav.html:11
+#: app/templates/community/community_moderate.html:21
msgid "Reports"
msgstr ""
-#: app/admin/util.py:125
+#: app/admin/util.py:110
msgid "None"
msgstr ""
@@ -574,7 +587,7 @@ msgstr ""
msgid "Why would you like to join this site?"
msgstr ""
-#: app/auth/forms.py:27 app/auth/routes.py:140 app/templates/base.html:141
+#: app/auth/forms.py:27 app/auth/routes.py:153 app/templates/base.html:144
msgid "Register"
msgstr ""
@@ -608,55 +621,55 @@ msgstr ""
msgid "Login"
msgstr ""
-#: app/auth/routes.py:97
+#: app/auth/routes.py:100
msgid "Sorry, you cannot use that email address"
msgstr ""
-#: app/auth/routes.py:99
+#: app/auth/routes.py:102
msgid "Sorry, you cannot use that user name"
msgstr ""
-#: app/auth/routes.py:106
+#: app/auth/routes.py:119
#, python-format
msgid "Your username contained special letters so it was changed to %(name)s."
msgstr ""
-#: app/auth/routes.py:145
+#: app/auth/routes.py:158
msgid "Account under review"
msgstr ""
-#: app/auth/routes.py:150 app/templates/auth/check_email.html:8
+#: app/auth/routes.py:163 app/templates/auth/check_email.html:8
msgid "Check your email"
msgstr ""
-#: app/auth/routes.py:161
+#: app/auth/routes.py:174
msgid "Sorry, you cannot use that email address."
msgstr ""
-#: app/auth/routes.py:166
+#: app/auth/routes.py:179
msgid "Check your email for a link to reset your password."
msgstr ""
-#: app/auth/routes.py:169
+#: app/auth/routes.py:182
msgid "No account with that email address exists"
msgstr ""
-#: app/auth/routes.py:171
+#: app/auth/routes.py:184
msgid "Reset Password"
msgstr ""
-#: app/auth/routes.py:185
+#: app/auth/routes.py:198
#, python-format
msgid ""
"Your password has been reset. Please use it to log in with user name of "
"%(name)s."
msgstr ""
-#: app/auth/routes.py:205
+#: app/auth/routes.py:218
msgid "Thank you for verifying your email address."
msgstr ""
-#: app/auth/routes.py:207
+#: app/auth/routes.py:220
msgid "Email address validation failed."
msgstr ""
@@ -720,22 +733,22 @@ msgstr ""
msgid "Self-harm or suicide"
msgstr ""
-#: app/chat/forms.py:29 app/community/forms.py:155 app/post/forms.py:26
+#: app/chat/forms.py:29 app/community/forms.py:162 app/post/forms.py:26
#: app/user/forms.py:73
msgid "Other"
msgstr ""
-#: app/chat/forms.py:30 app/community/forms.py:70 app/community/forms.py:157
+#: app/chat/forms.py:30 app/community/forms.py:81 app/community/forms.py:164
#: app/post/forms.py:27 app/user/forms.py:74
msgid "Reason"
msgstr ""
-#: app/chat/forms.py:31 app/community/forms.py:158 app/post/forms.py:28
+#: app/chat/forms.py:31 app/community/forms.py:165 app/post/forms.py:28
#: app/user/forms.py:75
msgid "More info"
msgstr ""
-#: app/chat/forms.py:33 app/community/forms.py:160 app/post/forms.py:30
+#: app/chat/forms.py:33 app/community/forms.py:167 app/post/forms.py:30
#: app/templates/user/show_profile.html:56 app/user/forms.py:77
msgid "Report"
msgstr ""
@@ -770,12 +783,12 @@ msgstr ""
msgid "Report conversation"
msgstr ""
-#: app/chat/util.py:58
+#: app/chat/util.py:59
#, python-format
msgid "Message failed to send to %(name)s."
msgstr ""
-#: app/chat/util.py:60
+#: app/chat/util.py:61
msgid "Message sent."
msgstr ""
@@ -788,157 +801,177 @@ msgid "Add"
msgstr ""
#: app/community/forms.py:65
+msgid "Amend the report description if necessary"
+msgstr ""
+
+#: app/community/forms.py:66
+msgid "Escalate report"
+msgstr ""
+
+#: app/community/forms.py:70
+msgid "Note for mod log"
+msgstr ""
+
+#: app/community/forms.py:71
+msgid "Also resolve all other reports about the same thing."
+msgstr ""
+
+#: app/community/forms.py:72
+#: app/templates/community/community_moderate_report_resolve.html:13
+msgid "Resolve report"
+msgstr ""
+
+#: app/community/forms.py:76
msgid "Community address"
msgstr ""
-#: app/community/forms.py:66 app/search/routes.py:52
-#: app/templates/base.html:193 app/templates/community/add_remote.html:13
+#: app/community/forms.py:77 app/search/routes.py:56
+#: app/templates/base.html:198 app/templates/community/add_remote.html:13
#: app/templates/domain/domains.html:29
#: app/templates/domain/domains_blocked.html:29 app/templates/index.html:40
#: app/templates/list_communities.html:36 app/templates/search/results.html:38
msgid "Search"
msgstr ""
-#: app/community/forms.py:71
+#: app/community/forms.py:82
msgid "Ban until"
msgstr ""
-#: app/community/forms.py:72
+#: app/community/forms.py:83
msgid "Also delete all their posts"
msgstr ""
-#: app/community/forms.py:73
+#: app/community/forms.py:84
msgid "Also delete all their comments"
msgstr ""
-#: app/community/forms.py:74 app/templates/domain/domains_blocked.html:48
-#: app/templates/user/show_profile.html:170
+#: app/community/forms.py:85
+#: app/templates/community/community_moderate_subscribers.html:56
+#: app/templates/domain/domains_blocked.html:48
+#: app/templates/user/show_profile.html:173
msgid "Ban"
msgstr ""
-#: app/community/forms.py:78 app/templates/list_communities.html:56
+#: app/community/forms.py:89 app/community/forms.py:100
+#: app/community/forms.py:120 app/templates/list_communities.html:56
msgid "Community"
msgstr ""
-#: app/community/forms.py:81 app/community/forms.py:83
-#: app/community/forms.py:88 app/post/forms.py:10
+#: app/community/forms.py:91 app/community/forms.py:102
+#: app/community/forms.py:123 app/post/forms.py:10
msgid "Body"
msgstr ""
-#: app/community/forms.py:85
-msgid "URL"
+#: app/community/forms.py:92 app/community/forms.py:105
+#: app/community/forms.py:125
+msgid "Sticky"
msgstr ""
-#: app/community/forms.py:87
-msgid "Alt text"
-msgstr ""
-
-#: app/community/forms.py:90
-msgid "Image"
-msgstr ""
-
-#: app/community/forms.py:92
+#: app/community/forms.py:93 app/community/forms.py:106
+#: app/community/forms.py:126
msgid "NSFW"
msgstr ""
-#: app/community/forms.py:93
+#: app/community/forms.py:94 app/community/forms.py:107
+#: app/community/forms.py:127
msgid "Gore/gross"
msgstr ""
-#: app/community/forms.py:94 app/post/forms.py:11
+#: app/community/forms.py:95 app/community/forms.py:108
+#: app/community/forms.py:128 app/post/forms.py:11
#: app/templates/post/_post_notification_toggle.html:4
#: app/templates/post/_reply_notification_toggle.html:4
msgid "Notify about replies"
msgstr ""
-#: app/community/forms.py:105 app/community/forms.py:109
-#: app/community/forms.py:120
-msgid "Title is required."
+#: app/community/forms.py:103
+msgid "URL"
msgstr ""
-#: app/community/forms.py:112
-msgid "URL is required."
-msgstr ""
-
-#: app/community/forms.py:116
+#: app/community/forms.py:114
#, python-format
msgid "Links to %(domain)s are not allowed."
msgstr ""
-#: app/community/forms.py:123
-msgid "File is required."
+#: app/community/forms.py:122
+msgid "Alt text"
msgstr ""
-#: app/community/forms.py:140
-msgid "Images cannot be posted to local communities."
-msgstr ""
-
-#: app/community/forms.py:142
-msgid "Poll not implemented yet."
-msgstr ""
-
-#: app/community/forms.py:149
-msgid "Breaks instance rules"
+#: app/community/forms.py:124
+#: app/templates/community/add_discussion_post.html:21
+#: app/templates/community/add_image_post.html:21
+#: app/templates/community/add_link_post.html:21
+msgid "Image"
msgstr ""
#: app/community/forms.py:150
+msgid "Images cannot be posted to local communities."
+msgstr ""
+
+#: app/community/forms.py:156
+msgid "Breaks instance rules"
+msgstr ""
+
+#: app/community/forms.py:157
msgid "Abandoned by moderators"
msgstr ""
-#: app/community/forms.py:151
+#: app/community/forms.py:158
msgid "Cult"
msgstr ""
-#: app/community/forms.py:152
+#: app/community/forms.py:159
msgid "Scam"
msgstr ""
-#: app/community/forms.py:153
+#: app/community/forms.py:160
msgid "Alt-right pipeline"
msgstr ""
-#: app/community/forms.py:154 app/post/forms.py:17
+#: app/community/forms.py:161 app/post/forms.py:17
msgid "Hate / genocide"
msgstr ""
-#: app/community/forms.py:172 app/community/routes.py:667
+#: app/community/forms.py:179 app/community/routes.py:846
msgid "Delete community"
msgstr ""
-#: app/community/routes.py:72
+#: app/community/routes.py:79
msgid "Your new community has been created."
msgstr ""
-#: app/community/routes.py:78 app/templates/community/add_local.html:13
-#: app/templates/community/community_edit.html:22
+#: app/community/routes.py:85 app/templates/community/add_local.html:13
+#: app/templates/community/community_edit.html:25
msgid "Create community"
msgstr ""
-#: app/community/routes.py:102
+#: app/community/routes.py:111 app/community/routes.py:1278
msgid "Community not found."
msgstr ""
-#: app/community/routes.py:104
+#: app/community/routes.py:113 app/community/routes.py:1280
msgid ""
"Community not found. If you are searching for a nsfw community it is "
"blocked by this instance."
msgstr ""
-#: app/community/routes.py:107
+#: app/community/routes.py:116 app/community/routes.py:1283
#, python-format
msgid "That community is banned from %(site)s."
msgstr ""
-#: app/community/routes.py:110
+#: app/community/routes.py:119
msgid "Add remote community"
msgstr ""
-#: app/community/routes.py:184 app/post/routes.py:180
-#: app/templates/base.html:127 app/templates/base.html:129
-#: app/templates/base.html:145 app/templates/base.html:147
+#: app/community/routes.py:201 app/post/routes.py:207
+#: app/templates/base.html:130 app/templates/base.html:132
+#: app/templates/base.html:148 app/templates/base.html:150
#: app/templates/chat/conversation.html:36
#: app/templates/community/community_edit.html:13
#: app/templates/community/community_mod_list.html:13
+#: app/templates/community/community_moderate.html:13
+#: app/templates/community/community_moderate_subscribers.html:13
#: app/templates/domain/domain.html:13 app/templates/topic/show_topic.html:13
#: app/templates/user/delete_account.html:13
#: app/templates/user/edit_filters.html:14
@@ -950,91 +983,118 @@ msgstr ""
msgid "Home"
msgstr ""
-#: app/community/routes.py:310
+#: app/community/routes.py:327
msgid "You cannot join this community"
msgstr ""
-#: app/community/routes.py:326
+#: app/community/routes.py:343
msgid ""
"There was a problem while trying to communicate with remote server. If "
"other people have already joined this community it won't matter."
msgstr ""
-#: app/community/routes.py:516 app/community/routes.py:540
-#: app/community/routes.py:542
+#: app/community/routes.py:492 app/community/routes.py:565
+#: app/community/routes.py:638
+msgid "Add post to community"
+msgstr ""
+
+#: app/community/routes.py:705 app/community/routes.py:730
+#: app/community/routes.py:732
#, python-format
msgid "Your post to %(name)s has been made."
msgstr ""
-#: app/community/routes.py:552
-msgid "Add post to community"
-msgstr ""
-
-#: app/community/routes.py:574
+#: app/community/routes.py:749
msgid "A community has been reported"
msgstr ""
-#: app/community/routes.py:585
+#: app/community/routes.py:760
msgid "Community has been reported, thank you!"
msgstr ""
-#: app/community/routes.py:588
+#: app/community/routes.py:763
msgid "Report community"
msgstr ""
-#: app/community/routes.py:683
-#: app/templates/community/community_mod_list.html:21
+#: app/community/routes.py:864
+#: app/templates/community/community_mod_list.html:22
#, python-format
msgid "Moderators for %(community)s"
msgstr ""
-#: app/community/routes.py:706
+#: app/community/routes.py:889
msgid "Moderator added"
msgstr ""
-#: app/community/routes.py:710
+#: app/community/routes.py:893
#, python-format
msgid "You are now a moderator of %(name)s"
msgstr ""
-#: app/community/routes.py:735
+#: app/community/routes.py:918
msgid "Account not found"
msgstr ""
-#: app/community/routes.py:737
+#: app/community/routes.py:920
#: app/templates/community/community_add_moderator.html:13
#, python-format
msgid "Add moderator to %(community)s"
msgstr ""
-#: app/community/routes.py:755
+#: app/community/routes.py:940
msgid "Moderator removed"
msgstr ""
-#: app/community/routes.py:772 app/post/routes.py:870 app/post/routes.py:962
+#: app/community/routes.py:957 app/post/routes.py:1139 app/post/routes.py:1262
#, python-format
msgid "Content from %(name)s will be hidden."
msgstr ""
-#: app/community/routes.py:792
+#: app/community/routes.py:986
#, python-format
msgid "%(name)s has been banned."
msgstr ""
-#: app/community/routes.py:799
+#: app/community/routes.py:993
#, python-format
msgid "Posts by %(name)s have been deleted."
msgstr ""
-#: app/community/routes.py:805
+#: app/community/routes.py:999
#, python-format
msgid "Comments by %(name)s have been deleted."
msgstr ""
-#: app/community/routes.py:823
+#: app/community/routes.py:1020
msgid "Ban from community"
msgstr ""
+#: app/community/routes.py:1043
+#, python-format
+msgid "%(name)s has been unbanned."
+msgstr ""
+
+#: app/community/routes.py:1108 app/community/routes.py:1142
+#, python-format
+msgid "Moderation of %(community)s"
+msgstr ""
+
+#: app/community/routes.py:1170
+msgid "Admin has been notified about this report."
+msgstr ""
+
+#: app/community/routes.py:1218
+msgid "Report resolved."
+msgstr ""
+
+#: app/community/routes.py:1256
+msgid "Report ignored."
+msgstr ""
+
+#: app/community/routes.py:1286
+msgid "Search result for remote community"
+msgstr ""
+
#: app/domain/routes.py:113
#, python-format
msgid "%(name)s blocked."
@@ -1055,25 +1115,25 @@ msgstr ""
msgid "%(name)s un-banned for all users."
msgstr ""
-#: app/main/routes.py:72
+#: app/main/routes.py:73
msgid "Create an account to tailor this feed to your interests."
msgstr ""
-#: app/main/routes.py:156 app/templates/base.html:136
-#: app/templates/base.html:154
+#: app/main/routes.py:163 app/templates/base.html:139
+#: app/templates/base.html:157
msgid "Browse by topic"
msgstr ""
-#: app/main/routes.py:194
+#: app/main/routes.py:206
msgid "Local communities"
msgstr ""
-#: app/main/routes.py:209 app/templates/base.html:163
+#: app/main/routes.py:221 app/templates/base.html:168
#: app/templates/list_communities.html:19
msgid "Joined communities"
msgstr ""
-#: app/main/routes.py:326
+#: app/main/routes.py:354
msgid "Please click the link in your email inbox to verify your account."
msgstr ""
@@ -1089,7 +1149,7 @@ msgstr ""
msgid "Sharing personal info - doxing"
msgstr ""
-#: app/post/forms.py:42 app/post/routes.py:887
+#: app/post/forms.py:42 app/post/routes.py:1156
#: app/templates/post/post_mea_culpa.html:13
msgid "I changed my mind"
msgstr ""
@@ -1099,76 +1159,92 @@ msgstr ""
msgid "%(name)s has indicated they made a mistake in this post."
msgstr ""
-#: app/post/routes.py:66 app/post/routes.py:443
+#: app/post/routes.py:72 app/post/routes.py:476
#, python-format
msgid "You cannot reply to %(name)s"
msgstr ""
-#: app/post/routes.py:76 app/post/routes.py:456
+#: app/post/routes.py:82 app/post/routes.py:489
msgid "This type of comment is not accepted, sorry."
msgstr ""
-#: app/post/routes.py:414 app/post/routes.py:579
+#: app/post/routes.py:446 app/post/routes.py:632
#, python-format
msgid "Discussing %(title)s"
msgstr ""
-#: app/post/routes.py:628 app/post/routes.py:985 app/user/routes.py:137
-#: app/user/routes.py:198 app/user/routes.py:670 app/user/routes.py:701
+#: app/post/routes.py:702 app/post/routes.py:783 app/post/routes.py:865
+#: app/post/routes.py:1285 app/user/routes.py:143 app/user/routes.py:204
+#: app/user/routes.py:686 app/user/routes.py:717
msgid "Your changes have been saved."
msgstr ""
-#: app/post/routes.py:725 app/templates/post/post_edit.html:43
+#: app/post/routes.py:718 app/post/routes.py:800 app/post/routes.py:882
+#: app/templates/post/post_edit_discussion.html:11
+#: app/templates/post/post_edit_image.html:11
+#: app/templates/post/post_edit_link.html:11
msgid "Edit post"
msgstr ""
-#: app/post/routes.py:746
+#: app/post/routes.py:990
msgid "Post deleted."
msgstr ""
-#: app/post/routes.py:804
-msgid "A post has been reported"
+#: app/post/routes.py:1040
+msgid ""
+"Moderators have already assessed reports regarding this post, no further "
+"reports are necessary."
msgstr ""
-#: app/post/routes.py:822
+#: app/post/routes.py:1043
+msgid "Post has already been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1091
msgid "Post has been reported, thank you!"
msgstr ""
-#: app/post/routes.py:827
+#: app/post/routes.py:1096
msgid "Report post"
msgstr ""
-#: app/post/routes.py:841 app/post/routes.py:946
+#: app/post/routes.py:1110 app/post/routes.py:1246
#, python-format
msgid "%(name)s has been blocked."
msgstr ""
-#: app/post/routes.py:857
+#: app/post/routes.py:1126
#, python-format
msgid "Posts linking to %(name)s will be hidden."
msgstr ""
-#: app/post/routes.py:908
-msgid "A comment has been reported"
+#: app/post/routes.py:1170
+msgid ""
+"Moderators have already assessed reports regarding this comment, no "
+"further reports are necessary."
msgstr ""
-#: app/post/routes.py:926
+#: app/post/routes.py:1175
+msgid "Comment has already been reported, thank you!"
+msgstr ""
+
+#: app/post/routes.py:1226
msgid "Comment has been reported, thank you!"
msgstr ""
-#: app/post/routes.py:931
+#: app/post/routes.py:1231
msgid "Report comment"
msgstr ""
-#: app/post/routes.py:1062
+#: app/post/routes.py:1389
msgid "Edit comment"
msgstr ""
-#: app/post/routes.py:1086
+#: app/post/routes.py:1413
msgid "Comment deleted."
msgstr ""
-#: app/search/routes.py:45
+#: app/search/routes.py:49
#, python-format
msgid "Search results for %(q)s"
msgstr ""
@@ -1200,92 +1276,92 @@ msgstr ""
msgid "Rational Discourse Toolkit"
msgstr ""
-#: app/templates/base.html:52
+#: app/templates/about.html:10 app/templates/donate.html:26
+#: app/templates/index.html:67 app/templates/keyboard_shortcuts.html:63
+#: app/templates/search/results.html:65
+#, python-format
+msgid "About %(site_name)s"
+msgstr ""
+
+#: app/templates/base.html:55
msgid "PieFed"
msgstr ""
-#: app/templates/base.html:110 app/templates/base.html:184
-#: app/templates/user/notifications.html:18 app/user/routes.py:521
+#: app/templates/base.html:113 app/templates/base.html:189
+#: app/templates/user/notifications.html:18 app/user/routes.py:537
msgid "Notifications"
msgstr ""
-#: app/templates/base.html:130 app/templates/base.html:148
+#: app/templates/base.html:133 app/templates/base.html:151
msgid "Popular"
msgstr ""
-#: app/templates/base.html:131 app/templates/base.html:149
+#: app/templates/base.html:134 app/templates/base.html:152
msgid "All posts"
msgstr ""
-#: app/templates/base.html:137 app/templates/base.html:155
+#: app/templates/base.html:140 app/templates/base.html:158
#: app/templates/list_communities.html:13
msgid "All communities"
msgstr ""
-#: app/templates/auth/login.html:9 app/templates/base.html:140
+#: app/templates/auth/login.html:9 app/templates/base.html:143
msgid "Log in"
msgstr ""
-#: app/templates/base.html:142 app/templates/base.html:178
+#: app/templates/base.html:145 app/templates/base.html:183
#: app/templates/donate.html:10
msgid "Donate"
msgstr ""
-#: app/templates/base.html:157
+#: app/templates/base.html:161
msgid "Moderating"
msgstr ""
-#: app/templates/base.html:171
+#: app/templates/base.html:176
msgid "Account"
msgstr ""
-#: app/templates/base.html:173
+#: app/templates/base.html:178
msgid "View profile"
msgstr ""
-#: app/templates/base.html:174
+#: app/templates/base.html:179
msgid "Edit profile & settings"
msgstr ""
-#: app/templates/base.html:175
+#: app/templates/base.html:180
msgid "Chats"
msgstr ""
-#: app/templates/base.html:182
+#: app/templates/base.html:187
msgid "Log out"
msgstr ""
-#: app/templates/base.html:184
+#: app/templates/base.html:189
#, python-format
msgid "%(num)d unread notifications"
msgstr ""
-#: app/templates/base.html:194
+#: app/templates/base.html:199
msgid "Light mode"
msgstr ""
-#: app/templates/base.html:195
+#: app/templates/base.html:200
msgid "Dark mode"
msgstr ""
-#: app/templates/base.html:223 app/templates/keyboard_shortcuts.html:10
+#: app/templates/base.html:228 app/templates/keyboard_shortcuts.html:10
msgid "Keyboard shortcuts"
msgstr ""
-#: app/templates/donate.html:26 app/templates/index.html:65
-#: app/templates/keyboard_shortcuts.html:63
-#: app/templates/search/results.html:63
-#, python-format
-msgid "About %(site_name)s"
-msgstr ""
-
#: app/templates/index.html:17
msgid "No posts yet. Join some communities to see more."
msgstr ""
#: app/templates/community/community.html:168 app/templates/index.html:18
-#: app/templates/index.html:59 app/templates/list_topics.html:26
-#: app/templates/post/post.html:217 app/templates/search/results.html:57
+#: app/templates/index.html:59 app/templates/list_topics.html:38
+#: app/templates/post/post.html:220 app/templates/search/results.html:57
#: app/templates/topic/show_topic.html:91
msgid "Explore communities"
msgstr ""
@@ -1294,11 +1370,13 @@ msgstr ""
#: app/templates/admin/communities.html:51 app/templates/admin/posts.html:26
#: app/templates/admin/reports.html:58 app/templates/admin/users.html:69
#: app/templates/community/community.html:92
+#: app/templates/community/community_moderate.html:80
+#: app/templates/community/community_moderate_subscribers.html:67
#: app/templates/domain/domain.html:30 app/templates/domain/domains.html:51
#: app/templates/domain/domains_blocked.html:59 app/templates/index.html:25
#: app/templates/search/results.html:23 app/templates/topic/show_topic.html:52
-#: app/templates/user/show_profile.html:72
-#: app/templates/user/show_profile.html:95
+#: app/templates/user/show_profile.html:75
+#: app/templates/user/show_profile.html:98
msgid "Previous page"
msgstr ""
@@ -1306,11 +1384,13 @@ msgstr ""
#: app/templates/admin/communities.html:56 app/templates/admin/posts.html:31
#: app/templates/admin/reports.html:63 app/templates/admin/users.html:74
#: app/templates/community/community.html:97
+#: app/templates/community/community_moderate.html:85
+#: app/templates/community/community_moderate_subscribers.html:72
#: app/templates/domain/domain.html:35 app/templates/domain/domains.html:56
#: app/templates/domain/domains_blocked.html:64 app/templates/index.html:30
#: app/templates/search/results.html:28 app/templates/topic/show_topic.html:57
-#: app/templates/user/show_profile.html:77
-#: app/templates/user/show_profile.html:100
+#: app/templates/user/show_profile.html:80
+#: app/templates/user/show_profile.html:103
msgid "Next page"
msgstr ""
@@ -1318,6 +1398,11 @@ msgstr ""
msgid "Active communities"
msgstr ""
+#: app/templates/index.html:60 app/templates/list_communities.html:108
+#: app/templates/search/results.html:58
+msgid "Browse topics"
+msgstr ""
+
#: app/templates/keyboard_shortcuts.html:11
msgid "Most shortcuts are the same as what reddit has."
msgstr ""
@@ -1326,7 +1411,7 @@ msgstr ""
msgid "Navigation"
msgstr ""
-#: app/templates/community/community_mod_list.html:31
+#: app/templates/community/community_mod_list.html:33
#: app/templates/keyboard_shortcuts.html:43 app/templates/user/filters.html:31
msgid "Action"
msgstr ""
@@ -1400,7 +1485,7 @@ msgid "Sort by reply count"
msgstr ""
#: app/templates/list_communities.html:66 app/templates/post/post.html:61
-#: app/templates/post/post.html:155
+#: app/templates/post/post.html:158
msgid "Comments"
msgstr ""
@@ -1415,9 +1500,10 @@ msgstr ""
#: app/templates/community/add_remote.html:32
#: app/templates/community/community.html:112
+#: app/templates/community/lookup_remote.html:21
#: app/templates/list_communities.html:82 app/templates/post/add_reply.html:48
-#: app/templates/post/continue_discussion.html:96
-#: app/templates/post/post.html:174
+#: app/templates/post/continue_discussion.html:99
+#: app/templates/post/post.html:177
msgid "Leave"
msgstr ""
@@ -1434,10 +1520,11 @@ msgstr ""
#: app/templates/community/add_remote.html:34
#: app/templates/community/community.html:116
+#: app/templates/community/lookup_remote.html:23
#: app/templates/list_communities.html:86
#: app/templates/list_communities.html:89 app/templates/post/add_reply.html:50
-#: app/templates/post/continue_discussion.html:98
-#: app/templates/post/post.html:176
+#: app/templates/post/continue_discussion.html:101
+#: app/templates/post/post.html:179
msgid "Join"
msgstr ""
@@ -1446,11 +1533,11 @@ msgstr ""
msgid "Browse %(name)s"
msgstr ""
-#: app/templates/list_communities.html:106 app/templates/list_topics.html:24
+#: app/templates/list_communities.html:106 app/templates/list_topics.html:36
msgid "There are no communities yet."
msgstr ""
-#: app/templates/list_topics.html:11
+#: app/templates/list_topics.html:25
msgid "Choose a topic"
msgstr ""
@@ -1474,7 +1561,9 @@ msgstr ""
msgid "Registration applications"
msgstr ""
-#: app/templates/admin/_nav.html:13
+#: app/templates/admin/_nav.html:13 app/templates/community/community.html:181
+#: app/templates/community/community_moderate.html:15
+#: app/templates/community/community_moderate_subscribers.html:15
msgid "Moderation"
msgstr ""
@@ -1510,7 +1599,7 @@ msgstr ""
#: app/templates/admin/approve_registrations.html:45
#: app/templates/post/post_options.html:20
#: app/templates/post/post_reply_options.html:20
-#: app/templates/user/show_profile.html:176
+#: app/templates/user/show_profile.html:179
msgid "Delete"
msgstr ""
@@ -1652,7 +1741,7 @@ msgstr ""
#: app/templates/chat/conversation.html:42 app/templates/user/filters.html:56
#: app/templates/user/notifications.html:14 app/templates/user/people.html:14
#: app/templates/user/people.html:17 app/templates/user/show_profile.html:19
-#: app/templates/user/show_profile.html:39 app/user/routes.py:34
+#: app/templates/user/show_profile.html:39 app/user/routes.py:35
msgid "People"
msgstr ""
@@ -1666,7 +1755,7 @@ msgid "Messages with: "
msgstr ""
#: app/templates/chat/conversation.html:75
-#: app/templates/post/_post_teaser.html:80
+#: app/templates/post/_post_teaser.html:75
msgid "Options"
msgstr ""
@@ -1691,20 +1780,52 @@ msgstr ""
msgid "Report conversation with \"%(member_names)s\""
msgstr ""
-#: app/templates/community/_community_nav.html:3
-#: app/templates/community/add_post.html:11
-#: app/templates/community/community.html:108
-#: app/templates/post/add_reply.html:54
-#: app/templates/post/continue_discussion.html:102
-#: app/templates/post/post.html:170 app/templates/post/post_reply_edit.html:50
-#: app/templates/topic/show_topic.html:68
-msgid "Create post"
+#: app/templates/community/_community_moderation_nav.html:4
+#: app/templates/community/community_edit.html:15
+#: app/templates/community/community_mod_list.html:15
+#: app/templates/post/add_reply.html:89
+#: app/templates/post/continue_discussion.html:140
+#: app/templates/post/post.html:234 app/templates/post/post_reply_edit.html:85
+#: app/templates/user/_user_nav.html:5 app/templates/user/notifications.html:57
+#: app/templates/user/show_profile.html:124
+msgid "Settings"
msgstr ""
+#: app/templates/community/_community_moderation_nav.html:7
+#: app/templates/community/community_mod_list.html:16
+msgid "Moderators"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:10
#: app/templates/community/_community_nav.html:7
msgid "Sort by hot"
msgstr ""
+#: app/templates/community/_community_moderation_nav.html:14
+#: app/templates/community/community_moderate_subscribers.html:21
+msgid "Subscribers"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:17
+msgid "Appeals"
+msgstr ""
+
+#: app/templates/community/_community_moderation_nav.html:20
+msgid "Mod log"
+msgstr ""
+
+#: app/templates/community/_community_nav.html:3
+#: app/templates/community/add_discussion_post.html:11
+#: app/templates/community/add_image_post.html:11
+#: app/templates/community/add_link_post.html:11
+#: app/templates/community/community.html:108
+#: app/templates/post/add_reply.html:54
+#: app/templates/post/continue_discussion.html:105
+#: app/templates/post/post.html:173 app/templates/post/post_reply_edit.html:50
+#: app/templates/topic/show_topic.html:68
+msgid "Create post"
+msgstr ""
+
#: app/templates/community/_community_nav.html:10
msgid "Sort by top"
msgstr ""
@@ -1729,25 +1850,86 @@ msgstr ""
msgid "Notify about every new post. Not advisable in high traffic communities!"
msgstr ""
-#: app/templates/community/add_local.html:31
-#, python-format
-msgid "Only people using %(name)s can post or reply"
+#: app/templates/community/add_discussion_post.html:16
+#: app/templates/community/add_image_post.html:16
+#: app/templates/community/add_link_post.html:16
+msgid "Type of post"
msgstr ""
-#: app/templates/community/add_post.html:44
-#: app/templates/community/add_post.html:65
-#: app/templates/community/add_post.html:88
+#: app/templates/community/add_discussion_post.html:19
+#: app/templates/community/add_image_post.html:19
+#: app/templates/community/add_link_post.html:19
+msgid "Start a discussion"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:19
+#: app/templates/community/add_image_post.html:19
+#: app/templates/community/add_link_post.html:19
+msgid "Discussion"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:20
+#: app/templates/community/add_image_post.html:20
+#: app/templates/community/add_link_post.html:20
+msgid "Share a link"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:20
+#: app/templates/community/add_image_post.html:20
+#: app/templates/community/add_link_post.html:20
+msgid "Link"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:21
+#: app/templates/community/add_image_post.html:21
+#: app/templates/community/add_link_post.html:21
+msgid "Share an image"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:22
+#: app/templates/community/add_image_post.html:22
+#: app/templates/community/add_link_post.html:22
+msgid "Create a poll"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:22
+#: app/templates/community/add_image_post.html:22
+#: app/templates/community/add_link_post.html:22
+msgid "Poll"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:23
+#: app/templates/community/add_image_post.html:23
+#: app/templates/community/add_link_post.html:23
+msgid "Create an event"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:23
+#: app/templates/community/add_image_post.html:23
+#: app/templates/community/add_link_post.html:23
+msgid "Event"
+msgstr ""
+
+#: app/templates/community/add_discussion_post.html:43
+#: app/templates/community/add_image_post.html:45
+#: app/templates/community/add_link_post.html:44
#: app/templates/post/add_reply.html:37 app/templates/post/post.html:42
#: app/templates/user/edit_profile.html:44
msgid "Enable markdown editor"
msgstr ""
-#: app/templates/community/add_post.html:73
-#: app/templates/post/post_edit.html:98
+#: app/templates/community/add_image_post.html:30
+#: app/templates/post/post_edit_image.html:17
msgid "Describe the image, to help visually impaired people."
msgstr ""
+#: app/templates/community/add_local.html:31
+#, python-format
+msgid "Only people using %(name)s can post or reply"
+msgstr ""
+
#: app/templates/community/add_remote.html:25
+#: app/templates/community/lookup_remote.html:14
msgid "Found a community:"
msgstr ""
@@ -1772,15 +1954,15 @@ msgstr ""
#: app/templates/community/community.html:121
#: app/templates/post/add_reply.html:58
-#: app/templates/post/continue_discussion.html:106
-#: app/templates/post/post.html:181 app/templates/post/post_reply_edit.html:54
+#: app/templates/post/continue_discussion.html:109
+#: app/templates/post/post.html:184 app/templates/post/post_reply_edit.html:54
msgid "Search this community"
msgstr ""
#: app/templates/community/community.html:127
#: app/templates/post/add_reply.html:64
-#: app/templates/post/continue_discussion.html:112
-#: app/templates/post/post.html:187 app/templates/post/post_reply_edit.html:60
+#: app/templates/post/continue_discussion.html:115
+#: app/templates/post/post.html:190 app/templates/post/post_reply_edit.html:60
msgid "About community"
msgstr ""
@@ -1789,38 +1971,24 @@ msgstr ""
msgid "Only people on %(instance_name)s can post or reply in this community."
msgstr ""
-#: app/templates/community/community.html:156 app/templates/post/post.html:205
+#: app/templates/community/community.html:156 app/templates/post/post.html:208
msgid "Related communities"
msgstr ""
-#: app/templates/community/community.html:162 app/templates/post/post.html:211
+#: app/templates/community/community.html:162 app/templates/post/post.html:214
#: app/templates/topic/show_topic.html:85
msgid "Go to community"
msgstr ""
#: app/templates/community/community.html:175
#: app/templates/post/add_reply.html:82
-#: app/templates/post/continue_discussion.html:130
-#: app/templates/post/post.html:224 app/templates/post/post_reply_edit.html:78
+#: app/templates/post/continue_discussion.html:133
+#: app/templates/post/post.html:227 app/templates/post/post_reply_edit.html:78
msgid "Community Settings"
msgstr ""
-#: app/templates/community/community.html:178
-#: app/templates/post/add_reply.html:85
-#: app/templates/post/continue_discussion.html:133
-#: app/templates/post/post.html:227 app/templates/post/post_reply_edit.html:81
-msgid "Moderate"
-msgstr ""
-
-#: app/templates/community/community.html:180
-#: app/templates/community/community_edit.html:15
-#: app/templates/community/community_mod_list.html:15
-#: app/templates/post/add_reply.html:86
-#: app/templates/post/continue_discussion.html:134
-#: app/templates/post/post.html:228 app/templates/post/post_reply_edit.html:82
-#: app/templates/user/_user_nav.html:5 app/templates/user/notifications.html:57
-#: app/templates/user/show_profile.html:121
-msgid "Settings"
+#: app/templates/community/community.html:179
+msgid "Settings & Moderation"
msgstr ""
#: app/templates/community/community_ban_user.html:13
@@ -1833,19 +2001,89 @@ msgstr ""
msgid "Delete \"%(community_title)s\""
msgstr ""
-#: app/templates/community/community_edit.html:51
-#: app/templates/community/community_mod_list.html:16
-msgid "Moderators"
+#: app/templates/community/community_edit.html:23
+#, python-format
+msgid "Edit %(community)s"
+msgstr ""
+
+#: app/templates/community/community_edit.html:28
+msgid "Edit and configure this community"
msgstr ""
#: app/templates/community/community_mod_list.html:24
+msgid "See and change who moderates this community"
+msgstr ""
+
+#: app/templates/community/community_mod_list.html:26
+#: app/templates/community/community_moderate.html:24
+#: app/templates/community/community_moderate_subscribers.html:24
msgid "Add moderator"
msgstr ""
-#: app/templates/community/community_mod_list.html:41
+#: app/templates/community/community_mod_list.html:43
msgid "Remove"
msgstr ""
+#: app/templates/community/community_moderate.html:27
+#, python-format
+msgid "See and handle all reports made about %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:67
+msgid "Escalate"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:68
+msgid "Resolve"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:70
+msgid "Ignore"
+msgstr ""
+
+#: app/templates/community/community_moderate.html:90
+msgid "No reports yet"
+msgstr ""
+
+#: app/templates/community/community_moderate_report_escalate.html:13
+msgid "Escalate report to admins"
+msgstr ""
+
+#: app/templates/community/community_moderate_report_escalate.html:14
+msgid ""
+"For reports that could potentially involve legal issues or where you are "
+"unsure how to respond, you may prefer to let admins handle it."
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:27
+#, python-format
+msgid "See who is subscribed to %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:77
+msgid "This community has no subscribers"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:79
+msgid "Banned People"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:80
+#, python-format
+msgid "See and manage who is banned from %(community)s"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:116
+#: app/templates/domain/domain.html:61
+#: app/templates/domain/domains_blocked.html:46
+#: app/templates/user/show_profile.html:169
+msgid "Unban"
+msgstr ""
+
+#: app/templates/community/community_moderate_subscribers.html:125
+msgid "No banned people yet"
+msgstr ""
+
#: app/templates/domain/domain.html:14 app/templates/domain/domains.html:12
#: app/templates/domain/domains.html:21
#: app/templates/domain/domains_blocked.html:21
@@ -1873,12 +2111,6 @@ msgstr ""
msgid "Block"
msgstr ""
-#: app/templates/domain/domain.html:61
-#: app/templates/domain/domains_blocked.html:46
-#: app/templates/user/show_profile.html:166
-msgid "Unban"
-msgstr ""
-
#: app/templates/domain/domain.html:65
msgid "Ban instance-wide"
msgstr ""
@@ -1964,6 +2196,15 @@ msgstr ""
msgid "Reported. Check post for issues."
msgstr ""
+#: app/templates/post/_post_full.html:109
+#: app/templates/post/_post_full.html:110
+msgid "Show cross-posts"
+msgstr ""
+
+#: app/templates/post/_post_full.html:111
+msgid "Number of cross-posts:"
+msgstr ""
+
#: app/templates/post/_post_reply_teaser.html:3
msgid "View context"
msgstr ""
@@ -1981,8 +2222,8 @@ msgstr ""
#: app/templates/post/_post_teaser.html:20
#: app/templates/post/_post_teaser.html:30
-#: app/templates/post/_post_teaser.html:74
-#: app/templates/post/_post_teaser.html:76
+#: app/templates/post/_post_teaser.html:70
+#: app/templates/post/_post_teaser.html:72
#: app/templates/post/_post_teaser_masonry.html:16
#: app/templates/post/_post_teaser_masonry.html:20
#: app/templates/post/_post_teaser_masonry.html:23
@@ -1999,12 +2240,12 @@ msgstr ""
msgid "All posts about this domain"
msgstr ""
-#: app/templates/post/_post_teaser.html:63
+#: app/templates/post/_post_teaser.html:64
#, python-format
msgid "Go to community %(name)s"
msgstr ""
-#: app/templates/post/_post_teaser.html:71
+#: app/templates/post/_post_teaser.html:67
#: app/templates/post/_post_teaser_masonry.html:47
#: app/templates/post/_post_teaser_masonry.html:48
#: app/templates/post/_post_teaser_masonry.html:68
@@ -2012,7 +2253,7 @@ msgstr ""
msgid "View comments"
msgstr ""
-#: app/templates/post/_post_teaser.html:71
+#: app/templates/post/_post_teaser.html:67
msgid "Number of comments:"
msgstr ""
@@ -2042,8 +2283,14 @@ msgid ""
"most places. Be nice."
msgstr ""
-#: app/templates/post/continue_discussion.html:44
-#: app/templates/post/post.html:105
+#: app/templates/post/add_reply.html:86
+#: app/templates/post/continue_discussion.html:137
+#: app/templates/post/post.html:231 app/templates/post/post_reply_edit.html:82
+msgid "Moderate"
+msgstr ""
+
+#: app/templates/post/continue_discussion.html:47
+#: app/templates/post/post.html:108
msgid "Reported. Check comment for issues."
msgstr ""
@@ -2081,18 +2328,27 @@ msgstr ""
msgid "Author"
msgstr ""
-#: app/templates/post/post.html:101
+#: app/templates/post/post.html:104
msgid "Post creator"
msgstr ""
-#: app/templates/post/post.html:102
+#: app/templates/post/post.html:105
msgid "When: "
msgstr ""
-#: app/templates/post/post.html:131
+#: app/templates/post/post.html:134
msgid "Comment options"
msgstr ""
+#: app/templates/post/post_cross_posts.html:11
+#, python-format
+msgid "Cross-posts for \"%(post_title)s\""
+msgstr ""
+
+#: app/templates/post/post_cross_posts.html:12
+msgid "Posts to the same url have also been created in the following communities:"
+msgstr ""
+
#: app/templates/post/post_mea_culpa.html:15
msgid ""
"If you wish to de-escalate the discussion on your post and now feel like "
@@ -2267,7 +2523,7 @@ msgid "Post in %(name)s"
msgstr ""
#: app/templates/user/_user_nav.html:8 app/templates/user/notifications.html:54
-#: app/templates/user/show_profile.html:118
+#: app/templates/user/show_profile.html:121
msgid "Profile"
msgstr ""
@@ -2320,13 +2576,13 @@ msgstr ""
msgid "Filters"
msgstr ""
-#: app/templates/user/edit_filters.html:18 app/user/routes.py:713
+#: app/templates/user/edit_filters.html:18 app/user/routes.py:729
msgid "Edit filter"
msgstr ""
#: app/templates/user/edit_filters.html:20
#: app/templates/user/edit_filters.html:27 app/templates/user/filters.html:22
-#: app/user/routes.py:673
+#: app/user/routes.py:689
msgid "Add filter"
msgstr ""
@@ -2347,8 +2603,8 @@ msgstr ""
msgid "Stop applying this filter after this date. Optional."
msgstr ""
-#: app/templates/user/edit_profile.html:16 app/user/routes.py:147
-#: app/user/routes.py:212
+#: app/templates/user/edit_profile.html:16 app/user/routes.py:153
+#: app/user/routes.py:218
msgid "Edit profile"
msgstr ""
@@ -2434,12 +2690,12 @@ msgid "Mark all as read"
msgstr ""
#: app/templates/user/notifications.html:49
-#: app/templates/user/show_profile.html:113
+#: app/templates/user/show_profile.html:116
msgid "Manage"
msgstr ""
#: app/templates/user/notifications.html:95
-#: app/templates/user/show_profile.html:189
+#: app/templates/user/show_profile.html:192
msgid "Upvoted"
msgstr ""
@@ -2464,39 +2720,43 @@ msgstr ""
msgid "Send message using Matrix"
msgstr ""
-#: app/templates/user/show_profile.html:60
+#: app/templates/user/show_profile.html:61
+msgid "Bot Account"
+msgstr ""
+
+#: app/templates/user/show_profile.html:63
msgid "Attitude"
msgstr ""
-#: app/templates/user/show_profile.html:60
+#: app/templates/user/show_profile.html:63
msgid "Ratio of upvotes cast to downvotes cast. Higher is more positive."
msgstr ""
-#: app/templates/user/show_profile.html:69
+#: app/templates/user/show_profile.html:72
msgid "Post pagination"
msgstr ""
-#: app/templates/user/show_profile.html:82
+#: app/templates/user/show_profile.html:85
msgid "No posts yet."
msgstr ""
-#: app/templates/user/show_profile.html:92
+#: app/templates/user/show_profile.html:95
msgid "Comment pagination"
msgstr ""
-#: app/templates/user/show_profile.html:105
+#: app/templates/user/show_profile.html:108
msgid "No comments yet."
msgstr ""
-#: app/templates/user/show_profile.html:134
+#: app/templates/user/show_profile.html:137
msgid "Member of"
msgstr ""
-#: app/templates/user/show_profile.html:159
-msgid "Crush"
+#: app/templates/user/show_profile.html:162
+msgid "Moderate user"
msgstr ""
-#: app/templates/user/show_profile.html:179
+#: app/templates/user/show_profile.html:182
msgid "Ban + Purge"
msgstr ""
@@ -2513,13 +2773,13 @@ msgstr ""
msgid "Choose"
msgstr ""
-#: app/topic/routes.py:168
+#: app/topic/routes.py:172
msgid ""
"You have joined some communities relating to those interests. Find them "
"on the Topics menu or browse the home page."
msgstr ""
-#: app/topic/routes.py:172
+#: app/topic/routes.py:176
msgid ""
"You did not choose any topics. Would you like to choose individual "
"communities instead?"
@@ -2553,10 +2813,18 @@ msgstr ""
msgid "Use markdown editor GUI when writing"
msgstr ""
+#: app/user/forms.py:40
+msgid "Show profile in user list"
+msgstr ""
+
#: app/user/forms.py:41
msgid "My posts appear in search results"
msgstr ""
+#: app/user/forms.py:42
+msgid "Manually approve followers"
+msgstr ""
+
#: app/user/forms.py:43
msgid "Import community subscriptions and user blocks from Lemmy"
msgstr ""
@@ -2613,71 +2881,100 @@ msgstr ""
msgid "Expire after"
msgstr ""
-#: app/user/routes.py:42
+#: app/user/routes.py:49
msgid "This user has been banned."
msgstr ""
-#: app/user/routes.py:44
+#: app/user/routes.py:51
msgid "This user has been deleted."
msgstr ""
-#: app/user/routes.py:77
+#: app/user/routes.py:83
#, python-format
msgid "Posts by %(user_name)s"
msgstr ""
-#: app/user/routes.py:194
+#: app/user/routes.py:200
msgid ""
"Your subscriptions and blocks are being imported. If you have many it "
"could take a few minutes."
msgstr ""
-#: app/user/routes.py:229
+#: app/user/routes.py:235
msgid "You cannot ban yourself."
msgstr ""
-#: app/user/routes.py:254
+#: app/user/routes.py:260
msgid "You cannot unban yourself."
msgstr ""
-#: app/user/routes.py:278
+#: app/user/routes.py:284
msgid "You cannot block yourself."
msgstr ""
-#: app/user/routes.py:307
+#: app/user/routes.py:313
msgid "You cannot unblock yourself."
msgstr ""
-#: app/user/routes.py:352
+#: app/user/routes.py:340
+msgid ""
+"Moderators have already assessed reports regarding this person, no "
+"further reports are necessary."
+msgstr ""
+
+#: app/user/routes.py:346
+#, python-format
+msgid "%(user_name)s has already been reported, thank you!"
+msgstr ""
+
+#: app/user/routes.py:368
#, python-format
msgid "%(user_name)s has been reported, thank you!"
msgstr ""
-#: app/user/routes.py:358
+#: app/user/routes.py:374
msgid "Report user"
msgstr ""
-#: app/user/routes.py:375
+#: app/user/routes.py:391
msgid "You cannot delete yourself."
msgstr ""
-#: app/user/routes.py:432
+#: app/user/routes.py:448
msgid "Account deletion in progress. Give it a few minutes."
msgstr ""
-#: app/user/routes.py:437
+#: app/user/routes.py:453
msgid "Delete my account"
msgstr ""
-#: app/user/routes.py:482
+#: app/user/routes.py:498
msgid "You cannot purge yourself."
msgstr ""
-#: app/user/routes.py:559
+#: app/user/routes.py:575
msgid "All notifications marked as read."
msgstr ""
-#: app/user/routes.py:730
+#: app/user/routes.py:746
msgid "Filter deleted."
msgstr ""
+#~ msgid "Allow search engines to index this profile"
+#~ msgstr ""
+
+#~ msgid "Title is required."
+#~ msgstr ""
+
+#~ msgid "URL is required."
+#~ msgstr ""
+
+#~ msgid "File is required."
+#~ msgstr ""
+
+#~ msgid "Poll not implemented yet."
+#~ msgstr ""
+
+#~ msgid "Crush"
+#~ msgstr ""
+
From c0371dddc6e5bdec9e2296a050a5ccf6a1e64730 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 13:12:10 +1200
Subject: [PATCH 21/50] reproduce issue #146
---
app/main/routes.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/main/routes.py b/app/main/routes.py
index 9df40e6c..e1accd8f 100644
--- a/app/main/routes.py
+++ b/app/main/routes.py
@@ -294,7 +294,10 @@ def list_files(directory):
@bp.route('/test')
def test():
- return ''
+
+ md = "::: spoiler I'm all for ya having fun and your right to hurt yourself.\n\nI am a former racer, commuter, and professional Buyer for a chain of bike shops. I'm also disabled from the crash involving the 6th and 7th cars that have hit me in the last 170k+ miles of riding. I only barely survived what I simplify as a \"broken neck and back.\" Cars making U-turns are what will get you if you ride long enough, \n\nespecially commuting. It will look like just another person turning in front of you, you'll compensate like usual, and before your brain can even register what is really happening, what was your normal escape route will close and you're going to crash really hard. It is the only kind of crash that your intuition is useless against.\n:::"
+
+ return markdown_to_html(md)
users_to_notify = User.query.join(Notification, User.id == Notification.user_id).filter(
User.ap_id == None,
From 4e3e4096810fb272aa2dd62795edf7699cbad8c1 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 19:04:46 +1200
Subject: [PATCH 22/50] avoid AttributeError on 404s in /static/*
---
app/utils.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/utils.py b/app/utils.py
index e5ebe888..d6f63ed9 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -796,7 +796,7 @@ def current_theme():
else:
return g.site.default_theme if g.site.default_theme is not None else ''
else:
- return g.site.default_theme if g.site.default_theme is not None else ''
+ return ''
def theme_list():
From b08b64f2657f636431775bbd3d8bf286f51d499a Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 19:07:20 +1200
Subject: [PATCH 23/50] fix german token
---
app/translations/de/LC_MESSAGES/messages.po | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/translations/de/LC_MESSAGES/messages.po b/app/translations/de/LC_MESSAGES/messages.po
index b73fd030..910db215 100644
--- a/app/translations/de/LC_MESSAGES/messages.po
+++ b/app/translations/de/LC_MESSAGES/messages.po
@@ -2072,7 +2072,7 @@ msgstr "Lösche \"%(community_title)s\""
#: app/templates/community/community_edit.html:23
#, fuzzy, python-format
msgid "Edit %(community)s"
-msgstr "%(community_name)s bearbeiten"
+msgstr "%(community)s bearbeiten"
#: app/templates/community/community_edit.html:28
#, fuzzy
From e29d4659e6aff3159d1aa103f25f26c7417d5cdc Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 19:09:58 +1200
Subject: [PATCH 24/50] chat options bugfix
---
app/chat/routes.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/chat/routes.py b/app/chat/routes.py
index f5185b7a..f2408d48 100644
--- a/app/chat/routes.py
+++ b/app/chat/routes.py
@@ -105,7 +105,7 @@ def empty():
@login_required
def chat_options(conversation_id):
conversation = Conversation.query.get_or_404(conversation_id)
- if current_user.is_admin() or current_user.is_member(current_user):
+ if current_user.is_admin() or conversation.is_member(current_user):
return render_template('chat/chat_options.html', conversation=conversation,
moderating_communities=moderating_communities(current_user.get_id()),
joined_communities=joined_communities(current_user.get_id()),
From 12e6e55cb4dbb2b3681a3c54f19b16576b63cd5f Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 19:16:11 +1200
Subject: [PATCH 25/50] avoid "list.remove(x): x not in list"
---
app/activitypub/util.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/activitypub/util.py b/app/activitypub/util.py
index 3e2bb810..30181631 100644
--- a/app/activitypub/util.py
+++ b/app/activitypub/util.py
@@ -1549,7 +1549,7 @@ def update_post_from_activity(post: Post, request_json: dict):
old_cross_posts = Post.query.filter(Post.id.in_(post.cross_posts)).all()
post.cross_posts.clear()
for ocp in old_cross_posts:
- if ocp.cross_posts is not None:
+ if ocp.cross_posts is not None and post.id in ocp.cross_posts:
ocp.cross_posts.remove(post.id)
if post is not None:
From 15c628903dd46ec103d011eff3060b0a96994b66 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 19:23:19 +1200
Subject: [PATCH 26/50] avoid AttributeError when instance inbox is not
populated
---
app/activitypub/util.py | 4 ++++
app/utils.py | 2 ++
2 files changed, 6 insertions(+)
diff --git a/app/activitypub/util.py b/app/activitypub/util.py
index 30181631..7f1e7c47 100644
--- a/app/activitypub/util.py
+++ b/app/activitypub/util.py
@@ -223,6 +223,8 @@ def banned_user_agents():
@cache.memoize(150)
def instance_blocked(host: str) -> bool: # see also utils.instance_banned()
+ if host is None or host == '':
+ return True
host = host.lower()
if 'https://' in host or 'http://' in host:
host = urlparse(host).hostname
@@ -232,6 +234,8 @@ def instance_blocked(host: str) -> bool: # see also utils.instance_banned
@cache.memoize(150)
def instance_allowed(host: str) -> bool:
+ if host is None or host == '':
+ return True
host = host.lower()
if 'https://' in host or 'http://' in host:
host = urlparse(host).hostname
diff --git a/app/utils.py b/app/utils.py
index d6f63ed9..0fc26581 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -451,6 +451,8 @@ def user_ip_banned() -> bool:
@cache.memoize(timeout=30)
def instance_banned(domain: str) -> bool: # see also activitypub.util.instance_blocked()
+ if domain is None or domain == '':
+ return False
banned = BannedInstances.query.filter_by(domain=domain).first()
return banned is not None
From 2729539d8c6b4c574e1c29aae4376613fe88495e Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 19:27:42 +1200
Subject: [PATCH 27/50] only attach image to post if post was successfully
created
---
app/activitypub/util.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/activitypub/util.py b/app/activitypub/util.py
index 7f1e7c47..f6563c1e 100644
--- a/app/activitypub/util.py
+++ b/app/activitypub/util.py
@@ -706,12 +706,12 @@ def post_json_to_model(activity_log, post_json, user, community) -> Post:
if not domain.banned:
domain.post_count += 1
post.domain = domain
- if 'image' in post_json and post.image is None:
- image = File(source_url=post_json['image']['url'])
- db.session.add(image)
- post.image = image
if post is not None:
+ if 'image' in post_json and post.image is None:
+ image = File(source_url=post_json['image']['url'])
+ db.session.add(image)
+ post.image = image
db.session.add(post)
community.post_count += 1
activity_log.result = 'success'
From f777f97006503699ef1ada4e20c5e0b1f25a695e Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 19:43:56 +1200
Subject: [PATCH 28/50] block various bots using robots.txt
---
app/templates/robots.txt | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/app/templates/robots.txt b/app/templates/robots.txt
index 6052c31e..47d45da5 100644
--- a/app/templates/robots.txt
+++ b/app/templates/robots.txt
@@ -12,3 +12,18 @@ User-Agent: *
Disallow: /d/
Disallow: /static/media/users/
Disallow: /post/*/options
+
+User-agent: GPTBot
+Disallow: /
+
+User-agent: AhrefsBot
+Disallow: /
+
+User-agent: SemrushBot
+Disallow: /
+
+User-agent: DotBot
+Disallow: /
+
+User-agent: SeznamBot
+Disallow: /
From 758d8e79c04e265b2ef859a18e1e2a3ad59e89d6 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Tue, 9 Apr 2024 19:55:31 +1200
Subject: [PATCH 29/50] bugfix
---
app/community/routes.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/community/routes.py b/app/community/routes.py
index cb96ebea..88325be6 100644
--- a/app/community/routes.py
+++ b/app/community/routes.py
@@ -436,7 +436,7 @@ def join_then_add(actor):
db.session.commit()
flash('You joined ' + community.title)
if not community.user_is_banned(current_user):
- return redirect(url_for('community.add_post', actor=community.link()))
+ return redirect(url_for('community.add_discussion_post', actor=community.link()))
else:
abort(401)
From 2d6e17509253f810a80c02ced636f55d68ea13ee Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Wed, 10 Apr 2024 08:43:34 +1200
Subject: [PATCH 30/50] remove 404 handler
a lot of 404s are just images in /static/* and it doesn't make sense to waste cpu cycles presenting a nice page. Also rendering a page requires populating g.site which means hitting the DB.
---
app/errors/handlers.py | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/errors/handlers.py b/app/errors/handlers.py
index 4a40ad9e..eaa52bc1 100644
--- a/app/errors/handlers.py
+++ b/app/errors/handlers.py
@@ -3,9 +3,11 @@ from app import db
from app.errors import bp
-@bp.app_errorhandler(404)
-def not_found_error(error):
- return render_template('errors/404.html'), 404
+# 404 error handler removed because a lot of 404s are just images in /static/* and it doesn't make sense to waste cpu cycles presenting a nice page.
+# Also rendering a page requires populating g.site which means hitting the DB.
+# @bp.app_errorhandler(404)
+# def not_found_error(error):
+# return render_template('errors/404.html'), 404
@bp.app_errorhandler(500)
From 9d1f1a9f1491da185cf78cbcfe75351f8b0f5d5b Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Wed, 10 Apr 2024 08:48:31 +1200
Subject: [PATCH 31/50] avoid missing site variable
---
app/utils.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/utils.py b/app/utils.py
index 0fc26581..e00d0890 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -796,7 +796,11 @@ def current_theme():
if current_user.theme is not None and current_user.theme != '':
return current_user.theme
else:
- return g.site.default_theme if g.site.default_theme is not None else ''
+ if hasattr(g, 'site'):
+ site = g.site
+ else:
+ site = Site.query.get(1)
+ return site.default_theme if site.default_theme is not None else ''
else:
return ''
From 66628c6033018b086211b1799f086ffd5fb585d2 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Wed, 10 Apr 2024 18:00:59 +1200
Subject: [PATCH 32/50] piped.video links on all youtube posts
---
app/templates/post/_post_full.html | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/templates/post/_post_full.html b/app/templates/post/_post_full.html
index ebbdb807..b0d1c618 100644
--- a/app/templates/post/_post_full.html
+++ b/app/templates/post/_post_full.html
@@ -85,6 +85,7 @@
{% endif %}
{% if 'youtube.com' in post.url %}
+ {{ _('Watch on piped.video') }}
{% endif %}
{% elif post.type == POST_TYPE_IMAGE %}
From 7b162792ee9d4b85a55b1576fb3cc286deb2274d Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Thu, 11 Apr 2024 12:50:26 +1200
Subject: [PATCH 33/50] increase rows of text entry fields
---
app/community/forms.py | 6 +++---
app/post/forms.py | 2 +-
app/user/forms.py | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/community/forms.py b/app/community/forms.py
index 99bb0ffd..480ec26b 100644
--- a/app/community/forms.py
+++ b/app/community/forms.py
@@ -88,7 +88,7 @@ class BanUserCommunityForm(FlaskForm):
class CreateDiscussionForm(FlaskForm):
communities = SelectField(_l('Community'), validators=[DataRequired()], coerce=int)
discussion_title = StringField(_l('Title'), validators=[DataRequired(), Length(min=3, max=255)])
- discussion_body = TextAreaField(_l('Body'), validators=[Optional(), Length(min=3, max=5000)])
+ discussion_body = TextAreaField(_l('Body'), validators=[Optional(), Length(min=3, max=5000)], render_kw={'rows': 5})
sticky = BooleanField(_l('Sticky'))
nsfw = BooleanField(_l('NSFW'))
nsfl = BooleanField(_l('Gore/gross'))
@@ -99,7 +99,7 @@ class CreateDiscussionForm(FlaskForm):
class CreateLinkForm(FlaskForm):
communities = SelectField(_l('Community'), validators=[DataRequired()], coerce=int)
link_title = StringField(_l('Title'), validators=[DataRequired(), Length(min=3, max=255)])
- link_body = TextAreaField(_l('Body'), validators=[Optional(), Length(min=3, max=5000)])
+ link_body = TextAreaField(_l('Body'), validators=[Optional(), Length(min=3, max=5000)], render_kw={'rows': 5})
link_url = StringField(_l('URL'), validators=[DataRequired(), Regexp(r'^https?://', message='Submitted links need to start with "http://"" or "https://"')],
render_kw={'placeholder': 'https://...'})
sticky = BooleanField(_l('Sticky'))
@@ -120,7 +120,7 @@ class CreateImageForm(FlaskForm):
communities = SelectField(_l('Community'), validators=[DataRequired()], coerce=int)
image_title = StringField(_l('Title'), validators=[DataRequired(), Length(min=3, max=255)])
image_alt_text = StringField(_l('Alt text'), validators=[Optional(), Length(min=3, max=255)])
- image_body = TextAreaField(_l('Body'), validators=[Optional(), Length(min=3, max=5000)])
+ image_body = TextAreaField(_l('Body'), validators=[Optional(), Length(min=3, max=5000)], render_kw={'rows': 5})
image_file = FileField(_('Image'), validators=[DataRequired()])
sticky = BooleanField(_l('Sticky'))
nsfw = BooleanField(_l('NSFW'))
diff --git a/app/post/forms.py b/app/post/forms.py
index bf85d6c7..dde138d9 100644
--- a/app/post/forms.py
+++ b/app/post/forms.py
@@ -7,7 +7,7 @@ from app.utils import MultiCheckboxField
class NewReplyForm(FlaskForm):
- body = TextAreaField(_l('Body'), render_kw={'placeholder': 'What are your thoughts?', 'rows': 3}, validators={DataRequired(), Length(min=3, max=5000)})
+ body = TextAreaField(_l('Body'), render_kw={'placeholder': 'What are your thoughts?', 'rows': 5}, validators={DataRequired(), Length(min=3, max=5000)})
notify_author = BooleanField(_l('Notify about replies'))
submit = SubmitField(_l('Comment'))
diff --git a/app/user/forms.py b/app/user/forms.py
index d80760fb..ee1bb6b4 100644
--- a/app/user/forms.py
+++ b/app/user/forms.py
@@ -14,7 +14,7 @@ class ProfileForm(FlaskForm):
email = EmailField(_l('Email address'), validators=[Email(), DataRequired(), Length(min=5, max=255)])
password_field = PasswordField(_l('Set new password'), validators=[Optional(), Length(min=1, max=50)],
render_kw={"autocomplete": 'new-password'})
- about = TextAreaField(_l('Bio'), validators=[Optional(), Length(min=3, max=5000)])
+ about = TextAreaField(_l('Bio'), validators=[Optional(), Length(min=3, max=5000)], render_kw={'rows': 5})
matrixuserid = StringField(_l('Matrix User ID'), validators=[Optional(), Length(max=255)], render_kw={'autocomplete': 'off'})
profile_file = FileField(_('Avatar image'))
banner_file = FileField(_('Top banner image'))
From bd6c71d8bb18f9afc3fc2618fcaf9dac77d31a40 Mon Sep 17 00:00:00 2001
From: rimu <3310831+rimu@users.noreply.github.com>
Date: Thu, 11 Apr 2024 14:04:57 +1200
Subject: [PATCH 34/50] show if a piece of content has already been voted on
---
app/community/routes.py | 11 +++-
app/main/routes.py | 16 +++++-
app/post/routes.py | 53 ++++++++++++++-----
.../post/_comment_voting_buttons.html | 4 +-
app/templates/post/_post_voting_buttons.html | 4 +-
.../post/_post_voting_buttons_masonry.html | 4 +-
app/utils.py | 35 ++++++++++++
pyfedi.py | 4 +-
8 files changed, 109 insertions(+), 22 deletions(-)
diff --git a/app/community/routes.py b/app/community/routes.py
index 88325be6..96b53bdb 100644
--- a/app/community/routes.py
+++ b/app/community/routes.py
@@ -30,7 +30,7 @@ from app.utils import get_setting, render_template, allowlist_html, markdown_to_
shorten_string, gibberish, community_membership, ap_datetime, \
request_etag_matches, return_304, instance_banned, can_create_post, can_upvote, can_downvote, user_filters_posts, \
joined_communities, moderating_communities, blocked_domains, mimetype_from_url, blocked_instances, \
- community_moderators, communities_banned_from, show_ban_message
+ community_moderators, communities_banned_from, show_ban_message, recently_upvoted_posts, recently_downvoted_posts
from feedgen.feed import FeedGenerator
from datetime import timezone, timedelta
@@ -241,12 +241,21 @@ def show_community(community: Community):
prev_url = url_for('activitypub.community_profile', actor=community.ap_id if community.ap_id is not None else community.name,
page=posts.prev_num, sort=sort, layout=post_layout) if posts.has_prev and page != 1 else None
+ # Voting history
+ if current_user.is_authenticated:
+ recently_upvoted = recently_upvoted_posts(current_user.id)
+ recently_downvoted = recently_downvoted_posts(current_user.id)
+ else:
+ recently_upvoted = []
+ recently_downvoted = []
+
return render_template('community/community.html', community=community, title=community.title, breadcrumbs=breadcrumbs,
is_moderator=is_moderator, is_owner=is_owner, is_admin=is_admin, mods=mod_list, posts=posts, description=description,
og_image=og_image, POST_TYPE_IMAGE=POST_TYPE_IMAGE, POST_TYPE_LINK=POST_TYPE_LINK, SUBSCRIPTION_PENDING=SUBSCRIPTION_PENDING,
SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER, SUBSCRIPTION_OWNER=SUBSCRIPTION_OWNER, SUBSCRIPTION_MODERATOR=SUBSCRIPTION_MODERATOR,
etag=f"{community.id}{sort}{post_layout}_{hash(community.last_active)}", related_communities=related_communities,
next_url=next_url, prev_url=prev_url, low_bandwidth=low_bandwidth,
+ recently_upvoted=recently_upvoted, recently_downvoted=recently_downvoted,
rss_feed=f"https://{current_app.config['SERVER_NAME']}/community/{community.link()}/feed", rss_feed_name=f"{community.title} on PieFed",
content_filters=content_filters, moderating_communities=moderating_communities(current_user.get_id()),
joined_communities=joined_communities(current_user.get_id()), sort=sort,
diff --git a/app/main/routes.py b/app/main/routes.py
index e1accd8f..09e1a6f0 100644
--- a/app/main/routes.py
+++ b/app/main/routes.py
@@ -25,7 +25,7 @@ from sqlalchemy_searchable import search
from app.utils import render_template, get_setting, gibberish, request_etag_matches, return_304, blocked_domains, \
ap_datetime, ip_address, retrieve_block_list, shorten_string, markdown_to_text, user_filters_home, \
joined_communities, moderating_communities, parse_page, theme_list, get_request, markdown_to_html, allowlist_html, \
- blocked_instances, communities_banned_from, topic_tree
+ blocked_instances, communities_banned_from, topic_tree, recently_upvoted_posts, recently_downvoted_posts
from app.models import Community, CommunityMember, Post, Site, User, utcnow, Domain, Topic, File, Instance, \
InstanceRole, Notification
from PIL import Image
@@ -140,9 +140,18 @@ def home_page(type, sort):
active_communities = active_communities.filter(Community.id.not_in(banned_from))
active_communities = active_communities.order_by(desc(Community.last_active)).limit(5).all()
+ # Voting history
+ if current_user.is_authenticated:
+ recently_upvoted = recently_upvoted_posts(current_user.id)
+ recently_downvoted = recently_downvoted_posts(current_user.id)
+ else:
+ recently_upvoted = []
+ recently_downvoted = []
+
return render_template('index.html', posts=posts, active_communities=active_communities, show_post_community=True,
POST_TYPE_IMAGE=POST_TYPE_IMAGE, POST_TYPE_LINK=POST_TYPE_LINK,
- low_bandwidth=low_bandwidth,
+ low_bandwidth=low_bandwidth, recently_upvoted=recently_upvoted,
+ recently_downvoted=recently_downvoted,
SUBSCRIPTION_PENDING=SUBSCRIPTION_PENDING, SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER,
etag=f"{type}_{sort}_{hash(str(g.site.last_active))}", next_url=next_url, prev_url=prev_url,
#rss_feed=f"https://{current_app.config['SERVER_NAME']}/feed",
@@ -294,6 +303,9 @@ def list_files(directory):
@bp.route('/test')
def test():
+ x = recently_upvoted_posts(1)
+
+ return x
md = "::: spoiler I'm all for ya having fun and your right to hurt yourself.\n\nI am a former racer, commuter, and professional Buyer for a chain of bike shops. I'm also disabled from the crash involving the 6th and 7th cars that have hit me in the last 170k+ miles of riding. I only barely survived what I simplify as a \"broken neck and back.\" Cars making U-turns are what will get you if you ride long enough, \n\nespecially commuting. It will look like just another person turning in front of you, you'll compensate like usual, and before your brain can even register what is really happening, what was your normal escape route will close and you're going to crash really hard. It is the only kind of crash that your intuition is useless against.\n:::"
diff --git a/app/post/routes.py b/app/post/routes.py
index 9e1dd406..c3f72e3d 100644
--- a/app/post/routes.py
+++ b/app/post/routes.py
@@ -24,7 +24,8 @@ from app.utils import get_setting, render_template, allowlist_html, markdown_to_
shorten_string, markdown_to_text, gibberish, ap_datetime, return_304, \
request_etag_matches, ip_address, user_ip_banned, instance_banned, can_downvote, can_upvote, post_ranking, \
reply_already_exists, reply_is_just_link_to_gif_reaction, confidence, moderating_communities, joined_communities, \
- blocked_instances, blocked_domains, community_moderators, blocked_phrases, show_ban_message
+ blocked_instances, blocked_domains, community_moderators, blocked_phrases, show_ban_message, recently_upvoted_posts, \
+ recently_downvoted_posts, recently_upvoted_post_replies, recently_downvoted_post_replies
def show_post(post_id: int):
@@ -239,12 +240,26 @@ def show_post(post_id: int):
breadcrumb.url = '/communities'
breadcrumbs.append(breadcrumb)
+ # Voting history
+ if current_user.is_authenticated:
+ recently_upvoted = recently_upvoted_posts(current_user.id)
+ recently_downvoted = recently_downvoted_posts(current_user.id)
+ recently_upvoted_replies = recently_upvoted_post_replies(current_user.id)
+ recently_downvoted_replies = recently_downvoted_post_replies(current_user.id)
+ else:
+ recently_upvoted = []
+ recently_downvoted = []
+ recently_upvoted_replies = []
+ recently_downvoted_replies = []
+
response = render_template('post/post.html', title=post.title, post=post, is_moderator=is_moderator, community=post.community,
breadcrumbs=breadcrumbs, related_communities=related_communities, mods=mod_list,
canonical=post.ap_id, form=form, replies=replies, THREAD_CUTOFF_DEPTH=constants.THREAD_CUTOFF_DEPTH,
description=description, og_image=og_image, POST_TYPE_IMAGE=constants.POST_TYPE_IMAGE,
POST_TYPE_LINK=constants.POST_TYPE_LINK, POST_TYPE_ARTICLE=constants.POST_TYPE_ARTICLE,
noindex=not post.author.indexable,
+ recently_upvoted=recently_upvoted, recently_downvoted=recently_downvoted,
+ recently_upvoted_replies=recently_upvoted_replies, recently_downvoted_replies=recently_downvoted_replies,
etag=f"{post.id}{sort}_{hash(post.last_active)}", markdown_editor=current_user.is_authenticated and current_user.markdown_editor,
low_bandwidth=request.cookies.get('low_bandwidth', '0') == '1', SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER,
moderating_communities=moderating_communities(current_user.get_id()),
@@ -259,7 +274,6 @@ def show_post(post_id: int):
@login_required
@validation_required
def post_vote(post_id: int, vote_direction):
- upvoted_class = downvoted_class = ''
post = Post.query.get_or_404(post_id)
existing_vote = PostVote.query.filter_by(user_id=current_user.id, post_id=post.id).first()
if existing_vote:
@@ -275,7 +289,6 @@ def post_vote(post_id: int, vote_direction):
post.up_votes -= 1
post.down_votes += 1
post.score -= 2
- downvoted_class = 'voted_down'
else: # previous vote was down
if vote_direction == 'downvote': # new vote is also down, so remove it
db.session.delete(existing_vote)
@@ -286,18 +299,15 @@ def post_vote(post_id: int, vote_direction):
post.up_votes += 1
post.down_votes -= 1
post.score += 2
- upvoted_class = 'voted_up'
else:
if vote_direction == 'upvote':
effect = 1
post.up_votes += 1
post.score += 1
- upvoted_class = 'voted_up'
else:
effect = -1
post.down_votes += 1
post.score -= 1
- downvoted_class = 'voted_down'
vote = PostVote(user_id=current_user.id, post_id=post.id, author_id=post.author.id,
effect=effect)
# upvotes do not increase reputation in low quality communities
@@ -346,17 +356,25 @@ def post_vote(post_id: int, vote_direction):
current_user.recalculate_attitude()
db.session.commit()
post.flush_cache()
+
+ recently_upvoted = []
+ recently_downvoted = []
+ if vote_direction == 'upvote':
+ recently_upvoted = [post_id]
+ elif vote_direction == 'downvote':
+ recently_downvoted = [post_id]
+ cache.delete_memoized(recently_upvoted_posts, current_user.id)
+ cache.delete_memoized(recently_downvoted_posts, current_user.id)
+
template = 'post/_post_voting_buttons.html' if request.args.get('style', '') == '' else 'post/_post_voting_buttons_masonry.html'
- return render_template(template, post=post, community=post.community,
- upvoted_class=upvoted_class,
- downvoted_class=downvoted_class)
+ return render_template(template, post=post, community=post.community, recently_upvoted=recently_upvoted,
+ recently_downvoted=recently_downvoted)
@bp.route('/comment//', methods=['POST'])
@login_required
@validation_required
def comment_vote(comment_id, vote_direction):
- upvoted_class = downvoted_class = ''
comment = PostReply.query.get_or_404(comment_id)
existing_vote = PostReplyVote.query.filter_by(user_id=current_user.id, post_reply_id=comment.id).first()
if existing_vote:
@@ -423,9 +441,20 @@ def comment_vote(comment_id, vote_direction):
db.session.commit()
comment.post.flush_cache()
+
+ recently_upvoted = []
+ recently_downvoted = []
+ if vote_direction == 'upvote':
+ recently_upvoted = [comment_id]
+ elif vote_direction == 'downvote':
+ recently_downvoted = [comment_id]
+ cache.delete_memoized(recently_upvoted_post_replies, current_user.id)
+ cache.delete_memoized(recently_downvoted_post_replies, current_user.id)
+
return render_template('post/_comment_voting_buttons.html', comment=comment,
- upvoted_class=upvoted_class,
- downvoted_class=downvoted_class, community=comment.community)
+ recently_upvoted_replies=recently_upvoted,
+ recently_downvoted_replies=recently_downvoted,
+ community=comment.community)
@bp.route('/post//comment/')
diff --git a/app/templates/post/_comment_voting_buttons.html b/app/templates/post/_comment_voting_buttons.html
index 3677d0e3..1435942d 100644
--- a/app/templates/post/_comment_voting_buttons.html
+++ b/app/templates/post/_comment_voting_buttons.html
@@ -1,6 +1,6 @@
{% if current_user.is_authenticated and current_user.verified %}
{% if can_upvote(current_user, community) %}
-