-
+
{% trans "Software:" %}
{% for error in form.application_type.errors %}
{{ error | escape }}
{% endfor %}
-
-
+
{% trans "Notes:" %}
-
+
{% trans "Save" %}
diff --git a/bookwyrm/templates/settings/federation.html b/bookwyrm/templates/settings/federation.html
index bf1986725..e0a9ba73a 100644
--- a/bookwyrm/templates/settings/federation.html
+++ b/bookwyrm/templates/settings/federation.html
@@ -1,13 +1,13 @@
{% extends 'settings/admin_layout.html' %}
{% load i18n %}
-{% block title %}{% trans "Federated Servers" %}{% endblock %}
+{% block title %}{% trans "Federated Instances" %}{% endblock %}
-{% block header %}{% trans "Federated Servers" %}{% endblock %}
+{% block header %}{% trans "Federated Instances" %}{% endblock %}
{% block edit-button %}
-
- {% trans "Add server" %}
+
+ {% trans "Add instance" %}
{% endblock %}
@@ -16,7 +16,7 @@
{% url 'settings-federation' as url %}
- {% trans "Server name" as text %}
+ {% trans "Instance name" as text %}
{% include 'snippets/table-sort-header.html' with field="server_name" sort=sort text=text %}
diff --git a/bookwyrm/templates/settings/server_blocklist.html b/bookwyrm/templates/settings/server_blocklist.html
index 0de49acd7..171cf1339 100644
--- a/bookwyrm/templates/settings/server_blocklist.html
+++ b/bookwyrm/templates/settings/server_blocklist.html
@@ -1,10 +1,10 @@
{% extends 'settings/admin_layout.html' %}
{% load i18n %}
-{% block title %}{% trans "Add server" %}{% endblock %}
+{% block title %}{% trans "Add instance" %}{% endblock %}
{% block header %}
{% trans "Import Blocklist" %}
-{% trans "Back to server list" %}
+{% trans "Back to instance list" %}
{% endblock %}
{% block panel %}
@@ -17,7 +17,7 @@
{% url 'settings-add-federated-server' as url %}
- {% trans "Add server" %}
+ {% trans "Add instance" %}
@@ -51,7 +51,7 @@
[
{
- "instance": "example.server.com",
+ "instance": "example.instance.com",
"url": "https://link.to.more/info"
},
...
diff --git a/bookwyrm/templates/settings/site.html b/bookwyrm/templates/settings/site.html
index 1b9424527..d36371a41 100644
--- a/bookwyrm/templates/settings/site.html
+++ b/bookwyrm/templates/settings/site.html
@@ -11,23 +11,23 @@
{% csrf_token %}
{% trans "Instance Info" %}
-
+
{% trans "Instance Name:" %}
{{ site_form.name }}
-
+
{% trans "Tagline:" %}
{{ site_form.instance_tagline }}
-
+
{% trans "Instance description:" %}
{{ site_form.instance_description }}
-
+
{% trans "Code of conduct:" %}
{{ site_form.code_of_conduct }}
-
+
{% trans "Privacy Policy:" %}
{{ site_form.privacy_policy }}
@@ -57,19 +57,19 @@
- {% trans "Remote server" as text %}
+ {% trans "Remote instance" as text %}
{% include 'snippets/table-sort-header.html' with field="federated_server__server_name" sort=sort text=text %}
diff --git a/bookwyrm/templates/user_admin/user_moderation_actions.html b/bookwyrm/templates/user_admin/user_moderation_actions.html
index 816e787a2..e4460a687 100644
--- a/bookwyrm/templates/user_admin/user_moderation_actions.html
+++ b/bookwyrm/templates/user_admin/user_moderation_actions.html
@@ -1,6 +1,12 @@
{% load i18n %}
+ {% if not user.is_active and user.deactivation_reason == "self_deletion" %}
+
+ {% trans "Permanently deleted" %}
+
+ {% else %}
{% trans "Actions" %}
+
+
{% if user.local %}
{% endif %}
+
+ {% endif %}
diff --git a/bookwyrm/templates/widgets/clearable_file_input_with_warning.html b/bookwyrm/templates/widgets/clearable_file_input_with_warning.html
new file mode 100644
index 000000000..e4906cb9a
--- /dev/null
+++ b/bookwyrm/templates/widgets/clearable_file_input_with_warning.html
@@ -0,0 +1,24 @@
+{% load i18n %}
+{% load utilities %}
+
+{% if widget.is_initial %}
+
+ {{ widget.initial_text }}:
+ {{ widget.value|truncatepath:10 }}
+
+{% if not widget.required %}
+
+
+
+ {{ widget.clear_checkbox_label }}
+ {% endif %}
+
+
+{{ widget.input_text }}:
+{% else %}
+
+{% endif %}
+
+ {% trans "File exceeds maximum size: 10MB" %}
+
+
diff --git a/bookwyrm/templatetags/utilities.py b/bookwyrm/templatetags/utilities.py
index 68befa54a..23b6685d6 100644
--- a/bookwyrm/templatetags/utilities.py
+++ b/bookwyrm/templatetags/utilities.py
@@ -1,6 +1,8 @@
""" template filters for really common utilities """
+import os
from uuid import uuid4
from django import template
+from django.utils.translation import gettext_lazy as _
register = template.Library()
@@ -19,13 +21,16 @@ def get_user_identifier(user):
@register.filter(name="book_title")
-def get_title(book):
+def get_title(book, too_short=5):
"""display the subtitle if the title is short"""
if not book:
return ""
title = book.title
- if len(title) < 6 and book.subtitle:
- title = "{:s}: {:s}".format(title, book.subtitle)
+ if len(title) <= too_short and book.subtitle:
+ title = _("%(title)s: %(subtitle)s") % {
+ "title": title,
+ "subtitle": book.subtitle,
+ }
return title
@@ -33,3 +38,15 @@ def get_title(book):
def comparison_bool(str1, str2):
"""idk why I need to write a tag for this, it reutrns a bool"""
return str1 == str2
+
+
+@register.filter(is_safe=True)
+def truncatepath(value, arg):
+ """Truncate a path by removing all directories except the first and truncating ."""
+ path = os.path.normpath(value.name)
+ path_list = path.split(os.sep)
+ try:
+ length = int(arg)
+ except ValueError: # invalid literal for int()
+ return path_list[-1] # Fail silently.
+ return "%s/…%s" % (path_list[0], path_list[-1][-length:])
diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py
index a14c515ee..f8d49abc3 100644
--- a/bookwyrm/tests/models/test_status_model.py
+++ b/bookwyrm/tests/models/test_status_model.py
@@ -16,6 +16,7 @@ from bookwyrm import activitypub, models, settings
# pylint: disable=too-many-public-methods
@patch("bookwyrm.models.Status.broadcast")
@patch("bookwyrm.activitystreams.ActivityStream.add_status")
+@patch("bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores")
class Status(TestCase):
"""lotta types of statuses"""
@@ -393,7 +394,8 @@ class Status(TestCase):
user=self.local_user, notification_type="GLORB"
)
- def test_create_broadcast(self, _, broadcast_mock):
+ # pylint: disable=unused-argument
+ def test_create_broadcast(self, one, two, broadcast_mock, *_):
"""should send out two verions of a status on create"""
models.Comment.objects.create(
content="hi", user=self.local_user, book=self.book
diff --git a/bookwyrm/tests/test_templatetags.py b/bookwyrm/tests/test_templatetags.py
index 9a215cadf..2e10d9308 100644
--- a/bookwyrm/tests/test_templatetags.py
+++ b/bookwyrm/tests/test_templatetags.py
@@ -16,6 +16,7 @@ from bookwyrm.templatetags import (
@patch("bookwyrm.activitystreams.ActivityStream.add_status")
+@patch("bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores")
class TemplateTags(TestCase):
"""lotta different things here"""
@@ -40,29 +41,29 @@ class TemplateTags(TestCase):
with patch("bookwyrm.preview_images.generate_edition_preview_image_task.delay"):
self.book = models.Edition.objects.create(title="Test Book")
- def test_get_user_rating(self, _):
+ def test_get_user_rating(self, *_):
"""get a user's most recent rating of a book"""
with patch("bookwyrm.preview_images.generate_edition_preview_image_task.delay"):
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
models.Review.objects.create(user=self.user, book=self.book, rating=3)
self.assertEqual(bookwyrm_tags.get_user_rating(self.book, self.user), 3)
- def test_get_user_rating_doesnt_exist(self, _):
+ def test_get_user_rating_doesnt_exist(self, *_):
"""there is no rating available"""
self.assertEqual(bookwyrm_tags.get_user_rating(self.book, self.user), 0)
- def test_get_user_identifer_local(self, _):
+ def test_get_user_identifer_local(self, *_):
"""fall back to the simplest uid available"""
self.assertNotEqual(self.user.username, self.user.localname)
self.assertEqual(utilities.get_user_identifier(self.user), "mouse")
- def test_get_user_identifer_remote(self, _):
+ def test_get_user_identifer_remote(self, *_):
"""for a remote user, should be their full username"""
self.assertEqual(
utilities.get_user_identifier(self.remote_user), "rat@example.com"
)
- def test_get_replies(self, _):
+ def test_get_replies(self, *_):
"""direct replies to a status"""
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
with patch(
@@ -93,7 +94,7 @@ class TemplateTags(TestCase):
self.assertTrue(second_child in replies)
self.assertFalse(third_child in replies)
- def test_get_parent(self, _):
+ def test_get_parent(self, *_):
"""get the reply parent of a status"""
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
with patch(
@@ -110,7 +111,7 @@ class TemplateTags(TestCase):
self.assertEqual(result, parent)
self.assertIsInstance(result, models.Review)
- def test_get_user_liked(self, _):
+ def test_get_user_liked(self, *_):
"""did a user like a status"""
with patch("bookwyrm.preview_images.generate_edition_preview_image_task.delay"):
status = models.Review.objects.create(user=self.remote_user, book=self.book)
@@ -120,7 +121,7 @@ class TemplateTags(TestCase):
models.Favorite.objects.create(user=self.user, status=status)
self.assertTrue(interaction.get_user_liked(self.user, status))
- def test_get_user_boosted(self, _):
+ def test_get_user_boosted(self, *_):
"""did a user boost a status"""
with patch("bookwyrm.preview_images.generate_edition_preview_image_task.delay"):
status = models.Review.objects.create(user=self.remote_user, book=self.book)
@@ -130,7 +131,7 @@ class TemplateTags(TestCase):
models.Boost.objects.create(user=self.user, boosted_status=status)
self.assertTrue(interaction.get_user_boosted(self.user, status))
- def test_get_boosted(self, _):
+ def test_get_boosted(self, *_):
"""load a boosted status"""
with patch("bookwyrm.preview_images.generate_edition_preview_image_task.delay"):
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
@@ -144,7 +145,7 @@ class TemplateTags(TestCase):
self.assertIsInstance(boosted, models.Review)
self.assertEqual(boosted, status)
- def test_get_book_description(self, _):
+ def test_get_book_description(self, *_):
"""grab it from the edition or the parent"""
with patch("bookwyrm.preview_images.generate_edition_preview_image_task.delay"):
work = models.Work.objects.create(title="Test Work")
@@ -161,12 +162,12 @@ class TemplateTags(TestCase):
self.book.save()
self.assertEqual(bookwyrm_tags.get_book_description(self.book), "hello")
- def test_get_uuid(self, _):
+ def test_get_uuid(self, *_):
"""uuid functionality"""
uuid = utilities.get_uuid("hi")
self.assertTrue(re.match(r"hi[A-Za-z0-9\-]", uuid))
- def test_get_markdown(self, _):
+ def test_get_markdown(self, *_):
"""mardown format data"""
result = markdown.get_markdown("_hi_")
self.assertEqual(result, "
hi
")
@@ -174,13 +175,13 @@ class TemplateTags(TestCase):
result = markdown.get_markdown("
_hi_ ")
self.assertEqual(result, "
hi
")
- def test_get_mentions(self, _):
+ def test_get_mentions(self, *_):
"""list of people mentioned"""
status = models.Status.objects.create(content="hi", user=self.remote_user)
result = status_display.get_mentions(status, self.user)
self.assertEqual(result, "@rat@example.com ")
- def test_related_status(self, _):
+ def test_related_status(self, *_):
"""gets the subclass model for a notification status"""
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
status = models.Status.objects.create(content="hi", user=self.user)
diff --git a/bookwyrm/tests/views/inbox/test_inbox_announce.py b/bookwyrm/tests/views/inbox/test_inbox_announce.py
index 4815c6895..43900e339 100644
--- a/bookwyrm/tests/views/inbox/test_inbox_announce.py
+++ b/bookwyrm/tests/views/inbox/test_inbox_announce.py
@@ -54,7 +54,8 @@ class InboxActivities(TestCase):
models.SiteSettings.objects.create()
@patch("bookwyrm.activitystreams.ActivityStream.add_status")
- def test_boost(self, redis_mock):
+ @patch("bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores")
+ def test_boost(self, redis_mock, _):
"""boost a status"""
self.assertEqual(models.Notification.objects.count(), 0)
activity = {
@@ -84,7 +85,8 @@ class InboxActivities(TestCase):
@responses.activate
@patch("bookwyrm.activitystreams.ActivityStream.add_status")
- def test_boost_remote_status(self, redis_mock):
+ @patch("bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores")
+ def test_boost_remote_status(self, redis_mock, _):
"""boost a status from a remote server"""
with patch("bookwyrm.preview_images.generate_edition_preview_image_task.delay"):
work = models.Work.objects.create(title="work title")
@@ -157,12 +159,13 @@ class InboxActivities(TestCase):
views.inbox.activity_task(activity)
self.assertEqual(models.Boost.objects.count(), 0)
- def test_unboost(self):
+ @patch("bookwyrm.activitystreams.ActivityStream.add_status")
+ @patch("bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores")
+ def test_unboost(self, *_):
"""undo a boost"""
- with patch("bookwyrm.activitystreams.ActivityStream.add_status"):
- boost = models.Boost.objects.create(
- boosted_status=self.status, user=self.remote_user
- )
+ boost = models.Boost.objects.create(
+ boosted_status=self.status, user=self.remote_user
+ )
activity = {
"type": "Undo",
"actor": "hi",
@@ -179,11 +182,7 @@ class InboxActivities(TestCase):
"published": "Mon, 25 May 2020 19:31:20 GMT",
},
}
- with patch(
- "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores"
- ) as redis_mock:
- views.inbox.activity_task(activity)
- self.assertTrue(redis_mock.called)
+ views.inbox.activity_task(activity)
self.assertFalse(models.Boost.objects.exists())
def test_unboost_unknown_boost(self):
diff --git a/bookwyrm/tests/views/test_edit_user.py b/bookwyrm/tests/views/test_edit_user.py
new file mode 100644
index 000000000..e3b9d4635
--- /dev/null
+++ b/bookwyrm/tests/views/test_edit_user.py
@@ -0,0 +1,150 @@
+""" test for app action functionality """
+import json
+import pathlib
+from unittest.mock import patch
+from PIL import Image
+
+from django.contrib.auth.models import AnonymousUser
+from django.contrib.sessions.middleware import SessionMiddleware
+from django.core.files.base import ContentFile
+from django.core.files.uploadedfile import SimpleUploadedFile
+from django.template.response import TemplateResponse
+from django.test import TestCase
+from django.test.client import RequestFactory
+
+from bookwyrm import forms, models, views
+
+
+class EditUserViews(TestCase):
+ """view user and edit profile"""
+
+ def setUp(self):
+ """we need basic test data and mocks"""
+ self.factory = RequestFactory()
+ self.local_user = models.User.objects.create_user(
+ "mouse@local.com",
+ "mouse@mouse.mouse",
+ "password",
+ local=True,
+ localname="mouse",
+ )
+ self.rat = models.User.objects.create_user(
+ "rat@local.com", "rat@rat.rat", "password", local=True, localname="rat"
+ )
+ self.book = models.Edition.objects.create(title="test")
+ with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
+ models.ShelfBook.objects.create(
+ book=self.book,
+ user=self.local_user,
+ shelf=self.local_user.shelf_set.first(),
+ )
+
+ models.SiteSettings.objects.create()
+ self.anonymous_user = AnonymousUser
+ self.anonymous_user.is_authenticated = False
+
+ def test_edit_user_page(self):
+ """there are so many views, this just makes sure it LOADS"""
+ view = views.EditUser.as_view()
+ request = self.factory.get("")
+ request.user = self.local_user
+ result = view(request)
+ self.assertIsInstance(result, TemplateResponse)
+ result.render()
+ self.assertEqual(result.status_code, 200)
+
+ def test_edit_user(self):
+ """use a form to update a user"""
+ view = views.EditUser.as_view()
+ form = forms.EditUserForm(instance=self.local_user)
+ form.data["name"] = "New Name"
+ form.data["email"] = "wow@email.com"
+ form.data["preferred_timezone"] = "UTC"
+ request = self.factory.post("", form.data)
+ request.user = self.local_user
+
+ self.assertIsNone(self.local_user.name)
+ with patch(
+ "bookwyrm.models.activitypub_mixin.broadcast_task.delay"
+ ) as delay_mock:
+ view(request)
+ self.assertEqual(delay_mock.call_count, 1)
+ self.assertEqual(self.local_user.name, "New Name")
+ self.assertEqual(self.local_user.email, "wow@email.com")
+
+ def test_edit_user_avatar(self):
+ """use a form to update a user"""
+ view = views.EditUser.as_view()
+ form = forms.EditUserForm(instance=self.local_user)
+ form.data["name"] = "New Name"
+ form.data["email"] = "wow@email.com"
+ form.data["preferred_timezone"] = "UTC"
+ image_file = pathlib.Path(__file__).parent.joinpath(
+ "../../static/images/no_cover.jpg"
+ )
+ form.data["avatar"] = SimpleUploadedFile(
+ image_file, open(image_file, "rb").read(), content_type="image/jpeg"
+ )
+ request = self.factory.post("", form.data)
+ request.user = self.local_user
+
+ with patch(
+ "bookwyrm.models.activitypub_mixin.broadcast_task.delay"
+ ) as delay_mock:
+ view(request)
+ self.assertEqual(delay_mock.call_count, 1)
+ self.assertEqual(self.local_user.name, "New Name")
+ self.assertEqual(self.local_user.email, "wow@email.com")
+ self.assertIsNotNone(self.local_user.avatar)
+ self.assertEqual(self.local_user.avatar.width, 120)
+ self.assertEqual(self.local_user.avatar.height, 120)
+
+ def test_crop_avatar(self):
+ """reduce that image size"""
+ image_file = pathlib.Path(__file__).parent.joinpath(
+ "../../static/images/no_cover.jpg"
+ )
+ image = Image.open(image_file)
+
+ result = views.edit_user.crop_avatar(image)
+ self.assertIsInstance(result, ContentFile)
+ image_result = Image.open(result)
+ self.assertEqual(image_result.size, (120, 120))
+
+ def test_delete_user_page(self):
+ """there are so many views, this just makes sure it LOADS"""
+ view = views.DeleteUser.as_view()
+ request = self.factory.get("")
+ request.user = self.local_user
+ result = view(request)
+ self.assertIsInstance(result, TemplateResponse)
+ result.render()
+ self.assertEqual(result.status_code, 200)
+
+ def test_delete_user(self):
+ """use a form to update a user"""
+ view = views.DeleteUser.as_view()
+ form = forms.DeleteUserForm()
+ form.data["password"] = "password"
+ request = self.factory.post("", form.data)
+ request.user = self.local_user
+ middleware = SessionMiddleware()
+ middleware.process_request(request)
+ request.session.save()
+
+ self.assertIsNone(self.local_user.name)
+ with patch(
+ "bookwyrm.models.activitypub_mixin.broadcast_task.delay"
+ ) as delay_mock:
+ view(request)
+ self.assertEqual(delay_mock.call_count, 1)
+ activity = json.loads(delay_mock.call_args[0][1])
+ self.assertEqual(activity["type"], "Delete")
+ self.assertEqual(activity["actor"], self.local_user.remote_id)
+ self.assertEqual(
+ activity["cc"][0], "https://www.w3.org/ns/activitystreams#Public"
+ )
+
+ self.local_user.refresh_from_db()
+ self.assertFalse(self.local_user.is_active)
+ self.assertEqual(self.local_user.deactivation_reason, "self_deletion")
diff --git a/bookwyrm/tests/views/test_interaction.py b/bookwyrm/tests/views/test_interaction.py
index cb974dcdb..1661676cb 100644
--- a/bookwyrm/tests/views/test_interaction.py
+++ b/bookwyrm/tests/views/test_interaction.py
@@ -8,6 +8,7 @@ from bookwyrm import models, views
@patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay")
+@patch("bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores")
class InteractionViews(TestCase):
"""viewing and creating statuses"""
@@ -42,7 +43,7 @@ class InteractionViews(TestCase):
parent_work=work,
)
- def test_favorite(self, _):
+ def test_favorite(self, *_):
"""create and broadcast faving a status"""
view = views.Favorite.as_view()
request = self.factory.post("")
@@ -60,7 +61,7 @@ class InteractionViews(TestCase):
self.assertEqual(notification.user, self.local_user)
self.assertEqual(notification.related_user, self.remote_user)
- def test_unfavorite(self, _):
+ def test_unfavorite(self, *_):
"""unfav a status"""
view = views.Unfavorite.as_view()
request = self.factory.post("")
@@ -77,7 +78,7 @@ class InteractionViews(TestCase):
self.assertEqual(models.Favorite.objects.count(), 0)
self.assertEqual(models.Notification.objects.count(), 0)
- def test_boost(self, _):
+ def test_boost(self, *_):
"""boost a status"""
view = views.Boost.as_view()
request = self.factory.post("")
@@ -99,7 +100,7 @@ class InteractionViews(TestCase):
self.assertEqual(notification.related_user, self.remote_user)
self.assertEqual(notification.related_status, status)
- def test_self_boost(self, _):
+ def test_self_boost(self, *_):
"""boost your own status"""
view = views.Boost.as_view()
request = self.factory.post("")
@@ -123,7 +124,7 @@ class InteractionViews(TestCase):
self.assertFalse(models.Notification.objects.exists())
- def test_boost_unlisted(self, _):
+ def test_boost_unlisted(self, *_):
"""boost a status"""
view = views.Boost.as_view()
request = self.factory.post("")
@@ -138,7 +139,7 @@ class InteractionViews(TestCase):
boost = models.Boost.objects.get()
self.assertEqual(boost.privacy, "unlisted")
- def test_boost_private(self, _):
+ def test_boost_private(self, *_):
"""boost a status"""
view = views.Boost.as_view()
request = self.factory.post("")
@@ -151,7 +152,7 @@ class InteractionViews(TestCase):
view(request, status.id)
self.assertFalse(models.Boost.objects.exists())
- def test_boost_twice(self, _):
+ def test_boost_twice(self, *_):
"""boost a status"""
view = views.Boost.as_view()
request = self.factory.post("")
@@ -163,13 +164,17 @@ class InteractionViews(TestCase):
view(request, status.id)
self.assertEqual(models.Boost.objects.count(), 1)
- def test_unboost(self, _):
+ @patch("bookwyrm.activitystreams.ActivityStream.add_status")
+ def test_unboost(self, *_):
"""undo a boost"""
view = views.Unboost.as_view()
request = self.factory.post("")
request.user = self.remote_user
- with patch("bookwyrm.activitystreams.ActivityStream.add_status"):
- status = models.Status.objects.create(user=self.local_user, content="hi")
+ status = models.Status.objects.create(user=self.local_user, content="hi")
+
+ with patch(
+ "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores"
+ ):
views.Boost.as_view()(request, status.id)
self.assertEqual(models.Boost.objects.count(), 1)
diff --git a/bookwyrm/tests/views/test_reading.py b/bookwyrm/tests/views/test_reading.py
index 1ffdde732..ec0d1339b 100644
--- a/bookwyrm/tests/views/test_reading.py
+++ b/bookwyrm/tests/views/test_reading.py
@@ -58,7 +58,7 @@ class ReadingViews(TestCase):
)
request.user = self.local_user
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
- views.start_reading(request, self.book.id)
+ views.ReadingStatus.as_view()(request, "start", self.book.id)
self.assertEqual(shelf.books.get(), self.book)
@@ -88,7 +88,7 @@ class ReadingViews(TestCase):
request = self.factory.post("")
request.user = self.local_user
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
- views.start_reading(request, self.book.id)
+ views.ReadingStatus.as_view()(request, "start", self.book.id)
self.assertFalse(to_read_shelf.books.exists())
self.assertEqual(shelf.books.get(), self.book)
@@ -114,7 +114,7 @@ class ReadingViews(TestCase):
request.user = self.local_user
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
- views.finish_reading(request, self.book.id)
+ views.ReadingStatus.as_view()(request, "finish", self.book.id)
self.assertEqual(shelf.books.get(), self.book)
diff --git a/bookwyrm/tests/views/test_readthrough.py b/bookwyrm/tests/views/test_readthrough.py
index a0050a82d..ed4795700 100644
--- a/bookwyrm/tests/views/test_readthrough.py
+++ b/bookwyrm/tests/views/test_readthrough.py
@@ -35,7 +35,7 @@ class ReadThrough(TestCase):
self.assertEqual(self.edition.readthrough_set.count(), 0)
self.client.post(
- "/start-reading/{}".format(self.edition.id),
+ "/reading-status/start/{}".format(self.edition.id),
{
"start_date": "2020-11-27",
},
@@ -56,10 +56,9 @@ class ReadThrough(TestCase):
self.assertEqual(self.edition.readthrough_set.count(), 0)
self.client.post(
- "/start-reading/{}".format(self.edition.id),
+ "/reading-status/start/{}".format(self.edition.id),
{
"start_date": "2020-11-27",
- "progress": 50,
},
)
@@ -68,15 +67,8 @@ class ReadThrough(TestCase):
self.assertEqual(
readthroughs[0].start_date, datetime(2020, 11, 27, tzinfo=timezone.utc)
)
- self.assertEqual(readthroughs[0].progress, 50)
self.assertEqual(readthroughs[0].finish_date, None)
- progress_updates = readthroughs[0].progressupdate_set.all()
- self.assertEqual(len(progress_updates), 1)
- self.assertEqual(progress_updates[0].mode, models.ProgressMode.PAGE)
- self.assertEqual(progress_updates[0].progress, 50)
- self.assertEqual(delay_mock.call_count, 1)
-
# Update progress
self.client.post(
"/edit-readthrough",
@@ -89,9 +81,9 @@ class ReadThrough(TestCase):
progress_updates = (
readthroughs[0].progressupdate_set.order_by("updated_date").all()
)
- self.assertEqual(len(progress_updates), 2)
- self.assertEqual(progress_updates[1].mode, models.ProgressMode.PAGE)
- self.assertEqual(progress_updates[1].progress, 100)
+ self.assertEqual(len(progress_updates), 1)
+ self.assertEqual(progress_updates[0].mode, models.ProgressMode.PAGE)
+ self.assertEqual(progress_updates[0].progress, 100)
# Edit doesn't publish anything
self.assertEqual(delay_mock.call_count, 1)
diff --git a/bookwyrm/tests/views/test_user.py b/bookwyrm/tests/views/test_user.py
index 27607f790..49f297330 100644
--- a/bookwyrm/tests/views/test_user.py
+++ b/bookwyrm/tests/views/test_user.py
@@ -1,17 +1,13 @@
""" test for app action functionality """
-import pathlib
from unittest.mock import patch
-from PIL import Image
from django.contrib.auth.models import AnonymousUser
-from django.core.files.base import ContentFile
-from django.core.files.uploadedfile import SimpleUploadedFile
from django.http.response import Http404
from django.template.response import TemplateResponse
from django.test import TestCase
from django.test.client import RequestFactory
-from bookwyrm import forms, models, views
+from bookwyrm import models, views
from bookwyrm.activitypub import ActivitypubResponse
@@ -139,74 +135,4 @@ class UserViews(TestCase):
with patch("bookwyrm.views.user.is_api_request") as is_api:
is_api.return_value = False
with self.assertRaises(Http404):
- view(request, "rat")
-
- def test_edit_user_page(self):
- """there are so many views, this just makes sure it LOADS"""
- view = views.EditUser.as_view()
- request = self.factory.get("")
- request.user = self.local_user
- result = view(request)
- self.assertIsInstance(result, TemplateResponse)
- result.render()
- self.assertEqual(result.status_code, 200)
-
- def test_edit_user(self):
- """use a form to update a user"""
- view = views.EditUser.as_view()
- form = forms.EditUserForm(instance=self.local_user)
- form.data["name"] = "New Name"
- form.data["email"] = "wow@email.com"
- form.data["preferred_timezone"] = "UTC"
- request = self.factory.post("", form.data)
- request.user = self.local_user
-
- self.assertIsNone(self.local_user.name)
- with patch("bookwyrm.preview_images.generate_user_preview_image_task.delay"):
- with patch(
- "bookwyrm.models.activitypub_mixin.broadcast_task.delay"
- ) as delay_mock:
- view(request)
- self.assertEqual(delay_mock.call_count, 1)
- self.assertEqual(self.local_user.name, "New Name")
- self.assertEqual(self.local_user.email, "wow@email.com")
-
- def test_edit_user_avatar(self):
- """use a form to update a user"""
- view = views.EditUser.as_view()
- form = forms.EditUserForm(instance=self.local_user)
- form.data["name"] = "New Name"
- form.data["email"] = "wow@email.com"
- form.data["preferred_timezone"] = "UTC"
- image_file = pathlib.Path(__file__).parent.joinpath(
- "../../static/images/no_cover.jpg"
- )
- form.data["avatar"] = SimpleUploadedFile(
- image_file, open(image_file, "rb").read(), content_type="image/jpeg"
- )
- request = self.factory.post("", form.data)
- request.user = self.local_user
-
- with patch("bookwyrm.preview_images.generate_user_preview_image_task.delay"):
- with patch(
- "bookwyrm.models.activitypub_mixin.broadcast_task.delay"
- ) as delay_mock:
- view(request)
- self.assertEqual(delay_mock.call_count, 1)
- self.assertEqual(self.local_user.name, "New Name")
- self.assertEqual(self.local_user.email, "wow@email.com")
- self.assertIsNotNone(self.local_user.avatar)
- self.assertEqual(self.local_user.avatar.width, 120)
- self.assertEqual(self.local_user.avatar.height, 120)
-
- def test_crop_avatar(self):
- """reduce that image size"""
- image_file = pathlib.Path(__file__).parent.joinpath(
- "../../static/images/no_cover.jpg"
- )
- image = Image.open(image_file)
-
- result = views.user.crop_avatar(image)
- self.assertIsInstance(result, ContentFile)
- image_result = Image.open(result)
- self.assertEqual(image_result.size, (120, 120))
+ view(request, "rat")
\ No newline at end of file
diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py
index cca9396f7..bfdcd9fc0 100644
--- a/bookwyrm/urls.py
+++ b/bookwyrm/urls.py
@@ -223,7 +223,7 @@ urlpatterns = [
re_path(
r"^list/(?P
\d+)/curate/?$", views.Curate.as_view(), name="list-curate"
),
- # Uyser books
+ # User books
re_path(r"%s/books/?$" % user_path, views.Shelf.as_view(), name="user-shelves"),
re_path(
r"^%s/(helf|books)/(?P[\w-]+)(.json)?/?$" % user_path,
@@ -253,6 +253,7 @@ urlpatterns = [
views.ChangePassword.as_view(),
name="prefs-password",
),
+ re_path(r"^preferences/delete/?$", views.DeleteUser.as_view(), name="prefs-delete"),
re_path(r"^preferences/block/?$", views.Block.as_view(), name="prefs-block"),
re_path(r"^block/(?P\d+)/?$", views.Block.as_view()),
re_path(r"^unblock/(?P\d+)/?$", views.unblock),
@@ -315,8 +316,12 @@ urlpatterns = [
re_path(r"^delete-readthrough/?$", views.delete_readthrough),
re_path(r"^create-readthrough/?$", views.create_readthrough),
re_path(r"^delete-progressupdate/?$", views.delete_progressupdate),
- re_path(r"^start-reading/(?P\d+)/?$", views.start_reading),
- re_path(r"^finish-reading/(?P\d+)/?$", views.finish_reading),
+ # shelve actions
+ re_path(
+ r"^reading-status/(?Pwant|start|finish)/(?P\d+)/?$",
+ views.ReadingStatus.as_view(),
+ name="reading-status",
+ ),
# following
re_path(r"^follow/?$", views.follow, name="follow"),
re_path(r"^unfollow/?$", views.unfollow, name="unfollow"),
diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py
index 8bfaa7dac..41bb64e54 100644
--- a/bookwyrm/views/__init__.py
+++ b/bookwyrm/views/__init__.py
@@ -6,6 +6,7 @@ from .block import Block, unblock
from .books import Book, EditBook, ConfirmEditBook, Editions
from .books import upload_cover, add_description, switch_edition, resolve_book
from .directory import Directory
+from .edit_user import EditUser, DeleteUser
from .federation import Federation, FederatedServer
from .federation import AddFederatedServer, ImportServerBlocklist
from .federation import block_server, unblock_server
@@ -24,8 +25,9 @@ from .landing import About, Home, Discover
from .list import Lists, List, Curate, UserLists
from .notifications import Notifications
from .outbox import Outbox
-from .reading import edit_readthrough, create_readthrough, delete_readthrough
-from .reading import start_reading, finish_reading, delete_progressupdate
+from .reading import edit_readthrough, create_readthrough
+from .reading import delete_readthrough, delete_progressupdate
+from .reading import ReadingStatus
from .reports import Report, Reports, make_report, resolve_report, suspend_user
from .rss_feed import RssFeed
from .password import PasswordResetRequest, PasswordReset, ChangePassword
@@ -36,6 +38,6 @@ from .shelf import shelve, unshelve
from .site import Site
from .status import CreateStatus, DeleteStatus, DeleteAndRedraft
from .updates import get_notification_count, get_unread_status_count
-from .user import User, EditUser, Followers, Following
+from .user import User, Followers, Following
from .user_admin import UserAdmin, UserAdminList
from .wellknown import *
diff --git a/bookwyrm/views/edit_user.py b/bookwyrm/views/edit_user.py
new file mode 100644
index 000000000..c74b00c9d
--- /dev/null
+++ b/bookwyrm/views/edit_user.py
@@ -0,0 +1,113 @@
+""" edit or delete ones own account"""
+from io import BytesIO
+from uuid import uuid4
+from PIL import Image
+
+from django.contrib.auth import logout
+from django.contrib.auth.decorators import login_required
+from django.core.files.base import ContentFile
+from django.shortcuts import redirect
+from django.template.response import TemplateResponse
+from django.utils.decorators import method_decorator
+from django.views import View
+
+from bookwyrm import forms, models
+
+
+# pylint: disable=no-self-use
+@method_decorator(login_required, name="dispatch")
+class EditUser(View):
+ """edit user view"""
+
+ def get(self, request):
+ """edit profile page for a user"""
+ data = {
+ "form": forms.EditUserForm(instance=request.user),
+ "user": request.user,
+ }
+ return TemplateResponse(request, "preferences/edit_user.html", data)
+
+ def post(self, request):
+ """les get fancy with images"""
+ form = forms.EditUserForm(request.POST, request.FILES, instance=request.user)
+ if not form.is_valid():
+ data = {"form": form, "user": request.user}
+ return TemplateResponse(request, "preferences/edit_user.html", data)
+
+ user = save_user_form(form)
+
+ return redirect(user.local_path)
+
+
+# pylint: disable=no-self-use
+@method_decorator(login_required, name="dispatch")
+class DeleteUser(View):
+ """delete user view"""
+
+ def get(self, request):
+ """delete page for a user"""
+ data = {
+ "form": forms.DeleteUserForm(),
+ "user": request.user,
+ }
+ return TemplateResponse(request, "preferences/delete_user.html", data)
+
+ def post(self, request):
+ """les get fancy with images"""
+ form = forms.DeleteUserForm(request.POST, instance=request.user)
+ form.is_valid()
+ # idk why but I couldn't get check_password to work on request.user
+ user = models.User.objects.get(id=request.user.id)
+ if form.is_valid() and user.check_password(form.cleaned_data["password"]):
+ user.deactivation_reason = "self_deletion"
+ user.delete()
+ logout(request)
+ return redirect("/")
+
+ form.errors["password"] = ["Invalid password"]
+ data = {"form": form, "user": request.user}
+ return TemplateResponse(request, "preferences/delete_user.html", data)
+
+
+def save_user_form(form):
+ """special handling for the user form"""
+ user = form.save(commit=False)
+
+ if "avatar" in form.files:
+ # crop and resize avatar upload
+ image = Image.open(form.files["avatar"])
+ image = crop_avatar(image)
+
+ # set the name to a hash
+ extension = form.files["avatar"].name.split(".")[-1]
+ filename = "%s.%s" % (uuid4(), extension)
+ user.avatar.save(filename, image, save=False)
+ user.save()
+ return user
+
+
+def crop_avatar(image):
+ """reduce the size and make an avatar square"""
+ target_size = 120
+ width, height = image.size
+ thumbnail_scale = (
+ height / (width / target_size)
+ if height > width
+ else width / (height / target_size)
+ )
+ image.thumbnail([thumbnail_scale, thumbnail_scale])
+ width, height = image.size
+
+ width_diff = width - target_size
+ height_diff = height - target_size
+ cropped = image.crop(
+ (
+ int(width_diff / 2),
+ int(height_diff / 2),
+ int(width - (width_diff / 2)),
+ int(height - (height_diff / 2)),
+ )
+ )
+ output = BytesIO()
+ cropped.save(output, format=image.format)
+ return ContentFile(output.getvalue())
diff --git a/bookwyrm/views/get_started.py b/bookwyrm/views/get_started.py
index 7eae94831..7f6151728 100644
--- a/bookwyrm/views/get_started.py
+++ b/bookwyrm/views/get_started.py
@@ -14,7 +14,7 @@ from django.views import View
from bookwyrm import forms, models
from bookwyrm.connectors import connector_manager
from .helpers import get_suggested_users
-from .user import save_user_form
+from .edit_user import save_user_form
# pylint: disable= no-self-use
diff --git a/bookwyrm/views/import_data.py b/bookwyrm/views/import_data.py
index 62dcce73b..b2b88a2eb 100644
--- a/bookwyrm/views/import_data.py
+++ b/bookwyrm/views/import_data.py
@@ -78,13 +78,15 @@ class ImportStatus(View):
def get(self, request, job_id):
"""status of an import job"""
- job = models.ImportJob.objects.get(id=job_id)
+ job = get_object_or_404(models.ImportJob, id=job_id)
if job.user != request.user:
raise PermissionDenied
+
try:
task = app.AsyncResult(job.task_id)
except ValueError:
task = None
+
items = job.items.order_by("index").all()
failed_items = [i for i in items if i.fail_reason]
items = [i for i in items if not i.fail_reason]
diff --git a/bookwyrm/views/invite.py b/bookwyrm/views/invite.py
index 92f930f45..3b9fd17c5 100644
--- a/bookwyrm/views/invite.py
+++ b/bookwyrm/views/invite.py
@@ -37,8 +37,12 @@ class ManageInvites(View):
PAGE_LENGTH,
)
+ page = paginated.get_page(request.GET.get("page"))
data = {
- "invites": paginated.get_page(request.GET.get("page")),
+ "invites": page,
+ "page_range": paginated.get_elided_page_range(
+ page.number, on_each_side=2, on_ends=1
+ ),
"form": forms.CreateInviteForm(),
}
return TemplateResponse(request, "settings/manage_invites.html", data)
@@ -118,15 +122,16 @@ class ManageInviteRequests(View):
reduce(operator.or_, (Q(**f) for f in filters))
).distinct()
- paginated = Paginator(
- requests,
- PAGE_LENGTH,
- )
+ paginated = Paginator(requests, PAGE_LENGTH)
+ page = paginated.get_page(request.GET.get("page"))
data = {
"ignored": ignored,
"count": paginated.count,
- "requests": paginated.get_page(request.GET.get("page")),
+ "requests": page,
+ "page_range": paginated.get_elided_page_range(
+ page.number, on_each_side=2, on_ends=1
+ ),
"sort": sort,
}
return TemplateResponse(request, "settings/manage_invite_requests.html", data)
diff --git a/bookwyrm/views/reading.py b/bookwyrm/views/reading.py
index 65ca717d4..1c897ab38 100644
--- a/bookwyrm/views/reading.py
+++ b/bookwyrm/views/reading.py
@@ -7,95 +7,79 @@ from dateutil.parser import ParserError
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseBadRequest, HttpResponseNotFound
from django.shortcuts import get_object_or_404, redirect
+from django.template.response import TemplateResponse
+from django.utils.decorators import method_decorator
+from django.views import View
from django.views.decorators.http import require_POST
from bookwyrm import models
from .helpers import get_edition, handle_reading_status
-from .shelf import handle_unshelve
-# pylint: disable= no-self-use
-@login_required
-@require_POST
-def start_reading(request, book_id):
- """begin reading a book"""
- book = get_edition(book_id)
- reading_shelf = models.Shelf.objects.filter(
- identifier=models.Shelf.READING, user=request.user
- ).first()
+@method_decorator(login_required, name="dispatch")
+# pylint: disable=no-self-use
+class ReadingStatus(View):
+ """consider reading a book"""
- # create a readthrough
- readthrough = update_readthrough(request, book=book)
- if readthrough:
- readthrough.save()
+ def get(self, request, status, book_id):
+ """modal page"""
+ book = get_edition(book_id)
+ template = {
+ "want": "want.html",
+ "start": "start.html",
+ "finish": "finish.html",
+ }.get(status)
+ if not template:
+ return HttpResponseNotFound()
+ return TemplateResponse(request, f"reading_progress/{template}", {"book": book})
- # create a progress update if we have a page
- readthrough.create_update()
+ def post(self, request, status, book_id):
+ """desire a book"""
+ identifier = {
+ "want": models.Shelf.TO_READ,
+ "start": models.Shelf.READING,
+ "finish": models.Shelf.READ_FINISHED,
+ }.get(status)
+ if not identifier:
+ return HttpResponseBadRequest()
- current_status_shelfbook = (
- models.ShelfBook.objects.select_related("shelf")
- .filter(
- shelf__identifier__in=models.Shelf.READ_STATUS_IDENTIFIERS,
- user=request.user,
- book=book,
+ desired_shelf = models.Shelf.objects.filter(
+ identifier=identifier, user=request.user
+ ).first()
+
+ book = get_edition(book_id)
+
+ current_status_shelfbook = (
+ models.ShelfBook.objects.select_related("shelf")
+ .filter(
+ shelf__identifier__in=models.Shelf.READ_STATUS_IDENTIFIERS,
+ user=request.user,
+ book=book,
+ )
+ .first()
)
- .first()
- )
- if current_status_shelfbook is not None:
- if current_status_shelfbook.shelf.identifier != models.Shelf.READING:
- handle_unshelve(book, current_status_shelfbook.shelf)
- else: # It already was on the shelf
- return redirect(request.headers.get("Referer", "/"))
+ if current_status_shelfbook is not None:
+ if current_status_shelfbook.shelf.identifier != desired_shelf.identifier:
+ current_status_shelfbook.delete()
+ else: # It already was on the shelf
+ return redirect(request.headers.get("Referer", "/"))
- models.ShelfBook.objects.create(book=book, shelf=reading_shelf, user=request.user)
-
- # post about it (if you want)
- if request.POST.get("post-status"):
- privacy = request.POST.get("privacy")
- handle_reading_status(request.user, reading_shelf, book, privacy)
-
- return redirect(request.headers.get("Referer", "/"))
-
-
-@login_required
-@require_POST
-def finish_reading(request, book_id):
- """a user completed a book, yay"""
- book = get_edition(book_id)
- finished_read_shelf = models.Shelf.objects.filter(
- identifier=models.Shelf.READ_FINISHED, user=request.user
- ).first()
-
- # update or create a readthrough
- readthrough = update_readthrough(request, book=book)
- if readthrough:
- readthrough.save()
-
- current_status_shelfbook = (
- models.ShelfBook.objects.select_related("shelf")
- .filter(
- shelf__identifier__in=models.Shelf.READ_STATUS_IDENTIFIERS,
- user=request.user,
- book=book,
+ models.ShelfBook.objects.create(
+ book=book, shelf=desired_shelf, user=request.user
)
- .first()
- )
- if current_status_shelfbook is not None:
- if current_status_shelfbook.shelf.identifier != models.Shelf.READ_FINISHED:
- handle_unshelve(book, current_status_shelfbook.shelf)
- else: # It already was on the shelf
- return redirect(request.headers.get("Referer", "/"))
- models.ShelfBook.objects.create(
- book=book, shelf=finished_read_shelf, user=request.user
- )
+ if desired_shelf.identifier != models.Shelf.TO_READ:
+ # update or create a readthrough
+ readthrough = update_readthrough(request, book=book)
+ if readthrough:
+ readthrough.save()
- # post about it (if you want)
- if request.POST.get("post-status"):
- privacy = request.POST.get("privacy")
- handle_reading_status(request.user, finished_read_shelf, book, privacy)
+ # post about it (if you want)
+ if request.POST.get("post-status"):
+ privacy = request.POST.get("privacy")
+ handle_reading_status(request.user, desired_shelf, book, privacy)
- return redirect(request.headers.get("Referer", "/"))
+ return redirect(request.headers.get("Referer", "/"))
@login_required
diff --git a/bookwyrm/views/shelf.py b/bookwyrm/views/shelf.py
index 538a8e343..17efec686 100644
--- a/bookwyrm/views/shelf.py
+++ b/bookwyrm/views/shelf.py
@@ -20,7 +20,7 @@ from .helpers import is_api_request, get_edition, get_user_from_username
from .helpers import handle_reading_status, privacy_filter
-# pylint: disable= no-self-use
+# pylint: disable=no-self-use
class Shelf(View):
"""shelf page"""
@@ -178,11 +178,6 @@ def shelve(request):
models.ShelfBook.objects.create(
book=book, shelf=desired_shelf, user=request.user
)
- if desired_shelf.identifier == models.Shelf.TO_READ and request.POST.get(
- "post-status"
- ):
- privacy = request.POST.get("privacy") or desired_shelf.privacy
- handle_reading_status(request.user, desired_shelf, book, privacy=privacy)
else:
try:
models.ShelfBook.objects.create(
@@ -206,7 +201,6 @@ def unshelve(request):
return redirect(request.headers.get("Referer", "/"))
-# pylint: disable=unused-argument
def handle_unshelve(book, shelf):
"""unshelve a book"""
row = models.ShelfBook.objects.get(book=book, shelf=shelf)
diff --git a/bookwyrm/views/user.py b/bookwyrm/views/user.py
index d186fe97f..f62913a93 100644
--- a/bookwyrm/views/user.py
+++ b/bookwyrm/views/user.py
@@ -1,25 +1,17 @@
""" non-interactive pages """
-from io import BytesIO
-from uuid import uuid4
-from PIL import Image
-
-from django.contrib.auth.decorators import login_required
-from django.core.files.base import ContentFile
from django.core.paginator import Paginator
-from django.shortcuts import redirect
from django.template.response import TemplateResponse
from django.utils import timezone
-from django.utils.decorators import method_decorator
from django.views import View
-from bookwyrm import forms, models
+from bookwyrm import models
from bookwyrm.activitypub import ActivitypubResponse
from bookwyrm.settings import PAGE_LENGTH
from .helpers import get_user_from_username, is_api_request
from .helpers import privacy_filter
-# pylint: disable= no-self-use
+# pylint: disable=no-self-use
class User(View):
"""user profile page"""
@@ -122,71 +114,3 @@ class Following(View):
"follow_list": paginated.get_page(request.GET.get("page")),
}
return TemplateResponse(request, "user/relationships/following.html", data)
-
-
-@method_decorator(login_required, name="dispatch")
-class EditUser(View):
- """edit user view"""
-
- def get(self, request):
- """edit profile page for a user"""
- data = {
- "form": forms.EditUserForm(instance=request.user),
- "user": request.user,
- }
- return TemplateResponse(request, "preferences/edit_user.html", data)
-
- def post(self, request):
- """les get fancy with images"""
- form = forms.EditUserForm(request.POST, request.FILES, instance=request.user)
- if not form.is_valid():
- data = {"form": form, "user": request.user}
- return TemplateResponse(request, "preferences/edit_user.html", data)
-
- user = save_user_form(form)
-
- return redirect(user.local_path)
-
-
-def save_user_form(form):
- """special handling for the user form"""
- user = form.save(commit=False)
-
- if "avatar" in form.files:
- # crop and resize avatar upload
- image = Image.open(form.files["avatar"])
- image = crop_avatar(image)
-
- # set the name to a hash
- extension = form.files["avatar"].name.split(".")[-1]
- filename = "%s.%s" % (uuid4(), extension)
- user.avatar.save(filename, image, save=False)
- user.save()
- return user
-
-
-def crop_avatar(image):
- """reduce the size and make an avatar square"""
- target_size = 120
- width, height = image.size
- thumbnail_scale = (
- height / (width / target_size)
- if height > width
- else width / (height / target_size)
- )
- image.thumbnail([thumbnail_scale, thumbnail_scale])
- width, height = image.size
-
- width_diff = width - target_size
- height_diff = height - target_size
- cropped = image.crop(
- (
- int(width_diff / 2),
- int(height_diff / 2),
- int(width - (width_diff / 2)),
- int(height - (height_diff / 2)),
- )
- )
- output = BytesIO()
- cropped.save(output, format=image.format)
- return ContentFile(output.getvalue())
diff --git a/bw-dev b/bw-dev
index 5ef049f12..cd3321ade 100755
--- a/bw-dev
+++ b/bw-dev
@@ -84,13 +84,13 @@ case "$CMD" in
runweb coverage run --source='.' --omit="*/test*,celerywyrm*,bookwyrm/migrations/*" manage.py test "$@"
;;
pytest)
- runweb pytest --no-cov-on-fail "$@"
+ execweb pytest --no-cov-on-fail "$@"
;;
collectstatic)
runweb python manage.py collectstatic --no-input
;;
makemessages)
- runweb django-admin makemessages --no-wrap --ignore=venv $@
+ runweb django-admin makemessages --no-wrap --ignore=venv --all $@
;;
compilemessages)
runweb django-admin compilemessages --ignore venv $@
diff --git a/celerywyrm/settings.py b/celerywyrm/settings.py
index e4fa73ca2..107a39572 100644
--- a/celerywyrm/settings.py
+++ b/celerywyrm/settings.py
@@ -1,10 +1,10 @@
""" bookwyrm settings and configuration """
from bookwyrm.settings import *
-CELERY_BROKER_URL = env("CELERY_BROKER")
+CELERY_BROKER_URL = CELERY_BROKER
CELERY_ACCEPT_CONTENT = ["json"]
CELERY_TASK_SERIALIZER = "json"
-CELERY_RESULT_BACKEND = "redis"
+FLOWER_PORT = env("FLOWER_PORT")
INSTALLED_APPS = INSTALLED_APPS + [
"celerywyrm",
diff --git a/docker-compose.yml b/docker-compose.yml
index 18f836502..49d02e706 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -74,10 +74,10 @@ services:
restart: on-failure
flower:
build: .
- command: flower --port=${FLOWER_PORT}
+ command: flower -A celerywyrm
env_file: .env
- environment:
- - CELERY_BROKER_URL=${CELERY_BROKER}
+ volumes:
+ - .:/app
networks:
- main
depends_on:
diff --git a/locale/de_DE/LC_MESSAGES/django.mo b/locale/de_DE/LC_MESSAGES/django.mo
index 089ac656a..dde00be62 100644
Binary files a/locale/de_DE/LC_MESSAGES/django.mo and b/locale/de_DE/LC_MESSAGES/django.mo differ
diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po
index 40f770b56..3125d147c 100644
--- a/locale/de_DE/LC_MESSAGES/django.po
+++ b/locale/de_DE/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-20 14:40-0700\n"
+"POT-Creation-Date: 2021-06-06 20:52+0000\n"
"PO-Revision-Date: 2021-03-02 17:19-0800\n"
"Last-Translator: Mouse Reeve \n"
"Language-Team: English \n"
@@ -62,12 +62,12 @@ msgid "Book Title"
msgstr "Titel"
#: bookwyrm/forms.py:301 bookwyrm/templates/snippets/create_status_form.html:34
-#: bookwyrm/templates/user/shelf/shelf.html:84
-#: bookwyrm/templates/user/shelf/shelf.html:115
+#: bookwyrm/templates/user/shelf/shelf.html:85
+#: bookwyrm/templates/user/shelf/shelf.html:116
msgid "Rating"
msgstr ""
-#: bookwyrm/forms.py:303 bookwyrm/templates/lists/list.html:101
+#: bookwyrm/forms.py:303 bookwyrm/templates/lists/list.html:107
msgid "Sort By"
msgstr ""
@@ -83,41 +83,41 @@ msgstr "Zu lesen angefangen"
msgid "Descending"
msgstr "Zu lesen angefangen"
-#: bookwyrm/models/fields.py:24
+#: bookwyrm/models/fields.py:25
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s ist keine gültige remote_id"
-#: bookwyrm/models/fields.py:33 bookwyrm/models/fields.py:42
+#: bookwyrm/models/fields.py:34 bookwyrm/models/fields.py:43
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s ist kein gültiger Username"
-#: bookwyrm/models/fields.py:165 bookwyrm/templates/layout.html:155
+#: bookwyrm/models/fields.py:166 bookwyrm/templates/layout.html:152
msgid "username"
msgstr "Username"
-#: bookwyrm/models/fields.py:170
+#: bookwyrm/models/fields.py:171
msgid "A user with that username already exists."
msgstr "Dieser Benutzename ist bereits vergeben."
-#: bookwyrm/settings.py:155
+#: bookwyrm/settings.py:156
msgid "English"
msgstr "Englisch"
-#: bookwyrm/settings.py:156
+#: bookwyrm/settings.py:157
msgid "German"
msgstr "Deutsch"
-#: bookwyrm/settings.py:157
+#: bookwyrm/settings.py:158
msgid "Spanish"
msgstr "Spanisch"
-#: bookwyrm/settings.py:158
+#: bookwyrm/settings.py:159
msgid "French"
msgstr "Französisch"
-#: bookwyrm/settings.py:159
+#: bookwyrm/settings.py:160
msgid "Simplified Chinese"
msgstr "Vereinfachtes Chinesisch"
@@ -266,7 +266,7 @@ msgstr ""
#: bookwyrm/templates/book/edit_book.html:263
#: bookwyrm/templates/lists/form.html:42
#: bookwyrm/templates/preferences/edit_user.html:70
-#: bookwyrm/templates/settings/announcement_form.html:65
+#: bookwyrm/templates/settings/announcement_form.html:69
#: bookwyrm/templates/settings/edit_server.html:68
#: bookwyrm/templates/settings/federated_server.html:98
#: bookwyrm/templates/settings/site.html:97
@@ -398,7 +398,7 @@ msgstr "Themen"
msgid "Places"
msgstr "Orte"
-#: bookwyrm/templates/book/book.html:276 bookwyrm/templates/layout.html:64
+#: bookwyrm/templates/book/book.html:276 bookwyrm/templates/layout.html:61
#: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:25
#: bookwyrm/templates/search/layout.html:50
@@ -414,7 +414,7 @@ msgstr "Zur Liste"
#: bookwyrm/templates/book/book.html:297
#: bookwyrm/templates/book/cover_modal.html:31
-#: bookwyrm/templates/lists/list.html:164
+#: bookwyrm/templates/lists/list.html:179
msgid "Add"
msgstr "Hinzufügen"
@@ -559,7 +559,7 @@ msgid "John Doe, Jane Smith"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:183
-#: bookwyrm/templates/user/shelf/shelf.html:77
+#: bookwyrm/templates/user/shelf/shelf.html:78
msgid "Cover"
msgstr ""
@@ -688,7 +688,7 @@ msgstr "Föderiert"
#: bookwyrm/templates/directory/directory.html:4
#: bookwyrm/templates/directory/directory.html:9
-#: bookwyrm/templates/layout.html:92
+#: bookwyrm/templates/layout.html:64
msgid "Directory"
msgstr ""
@@ -902,7 +902,7 @@ msgid "Direct Messages with %(username)s "
msgstr "Direktnachrichten mit %(username)s "
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/layout.html:87
+#: bookwyrm/templates/layout.html:92
msgid "Direct Messages"
msgstr "Direktnachrichten"
@@ -960,7 +960,6 @@ msgid "Updates"
msgstr ""
#: bookwyrm/templates/feed/feed_layout.html:10
-#: bookwyrm/templates/layout.html:58
#: bookwyrm/templates/user/shelf/books_header.html:3
msgid "Your books"
msgstr "Deine Bücher"
@@ -1022,7 +1021,7 @@ msgid "What are you reading?"
msgstr "Zu lesen angefangen"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/lists/list.html:120
+#: bookwyrm/templates/lists/list.html:135
msgid "Search for a book"
msgstr "Nach einem Buch suchen"
@@ -1042,7 +1041,7 @@ msgstr ""
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/layout.html:37 bookwyrm/templates/layout.html:38
-#: bookwyrm/templates/lists/list.html:124
+#: bookwyrm/templates/lists/list.html:139
#: bookwyrm/templates/search/layout.html:4
#: bookwyrm/templates/search/layout.html:9
msgid "Search"
@@ -1061,7 +1060,7 @@ msgid "Popular on %(site_name)s"
msgstr "Über %(site_name)s"
#: bookwyrm/templates/get_started/books.html:58
-#: bookwyrm/templates/lists/list.html:137
+#: bookwyrm/templates/lists/list.html:152
msgid "No books found"
msgstr "Keine Bücher gefunden"
@@ -1184,7 +1183,7 @@ msgid "%(username)s's %(year)s Books"
msgstr "%(username)ss %(year)s Bücher"
#: bookwyrm/templates/import.html:5 bookwyrm/templates/import.html:9
-#: bookwyrm/templates/layout.html:97
+#: bookwyrm/templates/user/shelf/shelf.html:40
msgid "Import Books"
msgstr "Bücher importieren"
@@ -1271,14 +1270,14 @@ msgstr "Buch"
#: bookwyrm/templates/import_status.html:114
#: bookwyrm/templates/snippets/create_status_form.html:13
-#: bookwyrm/templates/user/shelf/shelf.html:78
-#: bookwyrm/templates/user/shelf/shelf.html:98
+#: bookwyrm/templates/user/shelf/shelf.html:79
+#: bookwyrm/templates/user/shelf/shelf.html:99
msgid "Title"
msgstr "Titel"
#: bookwyrm/templates/import_status.html:117
-#: bookwyrm/templates/user/shelf/shelf.html:79
-#: bookwyrm/templates/user/shelf/shelf.html:101
+#: bookwyrm/templates/user/shelf/shelf.html:80
+#: bookwyrm/templates/user/shelf/shelf.html:102
msgid "Author"
msgstr "Autor*in"
@@ -1320,15 +1319,21 @@ msgstr "Suche nach Buch oder Benutzer*in"
msgid "Main navigation menu"
msgstr "Navigationshauptmenü"
-#: bookwyrm/templates/layout.html:61
+#: bookwyrm/templates/layout.html:58
msgid "Feed"
msgstr ""
-#: bookwyrm/templates/layout.html:102
+#: bookwyrm/templates/layout.html:87
+#, fuzzy
+#| msgid "Your books"
+msgid "Your Books"
+msgstr "Deine Bücher"
+
+#: bookwyrm/templates/layout.html:97
msgid "Settings"
msgstr "Einstellungen"
-#: bookwyrm/templates/layout.html:111
+#: bookwyrm/templates/layout.html:106
#: bookwyrm/templates/settings/admin_layout.html:31
#: bookwyrm/templates/settings/manage_invite_requests.html:15
#: bookwyrm/templates/settings/manage_invites.html:3
@@ -1336,45 +1341,47 @@ msgstr "Einstellungen"
msgid "Invites"
msgstr "Einladungen"
-#: bookwyrm/templates/layout.html:118
+#: bookwyrm/templates/layout.html:113
msgid "Admin"
msgstr ""
-#: bookwyrm/templates/layout.html:125
+#: bookwyrm/templates/layout.html:120
msgid "Log out"
msgstr "Abmelden"
-#: bookwyrm/templates/layout.html:133 bookwyrm/templates/layout.html:134
+#: bookwyrm/templates/layout.html:128 bookwyrm/templates/layout.html:129
#: bookwyrm/templates/notifications.html:6
#: bookwyrm/templates/notifications.html:11
msgid "Notifications"
msgstr "Benachrichtigungen"
-#: bookwyrm/templates/layout.html:154 bookwyrm/templates/layout.html:158
+#: bookwyrm/templates/layout.html:151 bookwyrm/templates/layout.html:155
#: bookwyrm/templates/login.html:17
#: bookwyrm/templates/snippets/register_form.html:4
msgid "Username:"
msgstr ""
-#: bookwyrm/templates/layout.html:159
+#: bookwyrm/templates/layout.html:156
msgid "password"
msgstr "Passwort"
-#: bookwyrm/templates/layout.html:160 bookwyrm/templates/login.html:36
+#: bookwyrm/templates/layout.html:157 bookwyrm/templates/login.html:36
msgid "Forgot your password?"
msgstr "Passwort vergessen?"
-#: bookwyrm/templates/layout.html:163 bookwyrm/templates/login.html:10
+#: bookwyrm/templates/layout.html:160 bookwyrm/templates/login.html:10
#: bookwyrm/templates/login.html:33
msgid "Log in"
msgstr "Anmelden"
-#: bookwyrm/templates/layout.html:171
+#: bookwyrm/templates/layout.html:168
msgid "Join"
msgstr ""
#: bookwyrm/templates/layout.html:206
-msgid "About this server"
+#, fuzzy
+#| msgid "About this server"
+msgid "About this instance"
msgstr "Über diesen Server"
#: bookwyrm/templates/layout.html:210
@@ -1438,7 +1445,7 @@ msgid "Discard"
msgstr "Ablehnen"
#: bookwyrm/templates/lists/edit_form.html:5
-#: bookwyrm/templates/lists/list_layout.html:17
+#: bookwyrm/templates/lists/list_layout.html:16
msgid "Edit List"
msgstr "Liste bearbeiten"
@@ -1487,63 +1494,64 @@ msgstr "Alle können Bücher hinzufügen"
msgid "This list is currently empty"
msgstr "Diese Liste ist momentan leer"
-#: bookwyrm/templates/lists/list.html:65
+#: bookwyrm/templates/lists/list.html:66
#, fuzzy, python-format
#| msgid "Direct Messages with %(username)s "
msgid "Added by %(username)s "
msgstr "Direktnachrichten mit %(username)s "
-#: bookwyrm/templates/lists/list.html:77
-#, fuzzy
-#| msgid "Started"
-msgid "Set"
-msgstr "Gestartet"
-
-#: bookwyrm/templates/lists/list.html:80
+#: bookwyrm/templates/lists/list.html:74
#, fuzzy
#| msgid "List curation:"
msgid "List position"
msgstr "Listenkuratierung:"
-#: bookwyrm/templates/lists/list.html:86
+#: bookwyrm/templates/lists/list.html:81
+#, fuzzy
+#| msgid "Started"
+msgid "Set"
+msgstr "Gestartet"
+
+#: bookwyrm/templates/lists/list.html:89
#: bookwyrm/templates/snippets/shelf_selector.html:26
msgid "Remove"
msgstr "Entfernen"
-#: bookwyrm/templates/lists/list.html:99 bookwyrm/templates/lists/list.html:111
+#: bookwyrm/templates/lists/list.html:103
+#: bookwyrm/templates/lists/list.html:120
#, fuzzy
#| msgid "Your Lists"
msgid "Sort List"
msgstr "Deine Listen"
-#: bookwyrm/templates/lists/list.html:105
+#: bookwyrm/templates/lists/list.html:113
#, fuzzy
#| msgid "List curation:"
msgid "Direction"
msgstr "Listenkuratierung:"
-#: bookwyrm/templates/lists/list.html:116
+#: bookwyrm/templates/lists/list.html:127
msgid "Add Books"
msgstr "Bücher hinzufügen"
-#: bookwyrm/templates/lists/list.html:116
+#: bookwyrm/templates/lists/list.html:129
msgid "Suggest Books"
msgstr "Bücher vorschlagen"
-#: bookwyrm/templates/lists/list.html:125
+#: bookwyrm/templates/lists/list.html:140
msgid "search"
msgstr "suchen"
-#: bookwyrm/templates/lists/list.html:131
+#: bookwyrm/templates/lists/list.html:146
msgid "Clear search"
msgstr "Suche leeren"
-#: bookwyrm/templates/lists/list.html:136
+#: bookwyrm/templates/lists/list.html:151
#, python-format
msgid "No books found matching the query \"%(query)s\""
msgstr "Keine passenden Bücher zu \"%(query)s\" gefunden"
-#: bookwyrm/templates/lists/list.html:164
+#: bookwyrm/templates/lists/list.html:179
msgid "Suggest"
msgstr "Vorschlagen"
@@ -1643,7 +1651,7 @@ msgstr "Lösen"
#: bookwyrm/templates/moderation/reports.html:6
#, fuzzy, python-format
#| msgid "Lists: %(username)s"
-msgid "Reports: %(server_name)s"
+msgid "Reports: %(instance_name)s"
msgstr "Listen: %(username)s"
#: bookwyrm/templates/moderation/reports.html:8
@@ -1657,7 +1665,7 @@ msgstr "Aktuelle Importe"
#: bookwyrm/templates/moderation/reports.html:14
#, fuzzy, python-format
#| msgid "Lists: %(username)s"
-msgid "Reports: %(server_name)s "
+msgid "Reports: %(instance_name)s "
msgstr "Listen: %(username)s"
#: bookwyrm/templates/moderation/reports.html:28
@@ -1863,6 +1871,26 @@ msgstr "Profil"
msgid "Relationships"
msgstr "Beziehungen"
+#: bookwyrm/templates/rss/title.html:5
+#: bookwyrm/templates/snippets/status/status_header.html:35
+msgid "rated"
+msgstr ""
+
+#: bookwyrm/templates/rss/title.html:7
+#: bookwyrm/templates/snippets/status/status_header.html:37
+msgid "reviewed"
+msgstr "bewertete"
+
+#: bookwyrm/templates/rss/title.html:9
+#: bookwyrm/templates/snippets/status/status_header.html:39
+msgid "commented on"
+msgstr "kommentierte"
+
+#: bookwyrm/templates/rss/title.html:11
+#: bookwyrm/templates/snippets/status/status_header.html:41
+msgid "quoted"
+msgstr "zitierte"
+
#: bookwyrm/templates/search/book.html:64
#, fuzzy
#| msgid "Show results from other catalogues"
@@ -1922,7 +1950,9 @@ msgstr "Nutzer*innen verwalten"
#: bookwyrm/templates/settings/admin_layout.html:39
#: bookwyrm/templates/settings/federation.html:3
#: bookwyrm/templates/settings/federation.html:5
-msgid "Federated Servers"
+#, fuzzy
+#| msgid "Federated Servers"
+msgid "Federated Instances"
msgstr "Föderierende Server"
#: bookwyrm/templates/settings/admin_layout.html:44
@@ -1976,6 +2006,7 @@ msgid "Back to list"
msgstr "Zurück zu den Meldungen"
#: bookwyrm/templates/settings/announcement.html:11
+#: bookwyrm/templates/settings/announcement_form.html:6
#, fuzzy
#| msgid "Announcements"
msgid "Edit Announcement"
@@ -2017,7 +2048,7 @@ msgstr "Geburtsdatum:"
msgid "Active:"
msgstr "Aktivität"
-#: bookwyrm/templates/settings/announcement_form.html:5
+#: bookwyrm/templates/settings/announcement_form.html:8
#: bookwyrm/templates/settings/announcements.html:8
#, fuzzy
#| msgid "Announcements"
@@ -2076,15 +2107,15 @@ msgstr "Aktivität"
#: bookwyrm/templates/settings/server_blocklist.html:3
#: bookwyrm/templates/settings/server_blocklist.html:20
#, fuzzy
-#| msgid "Add cover"
-msgid "Add server"
-msgstr "Cover hinzufügen"
+#| msgid "Instance Name:"
+msgid "Add instance"
+msgstr "Instanzname"
#: bookwyrm/templates/settings/edit_server.html:7
#: bookwyrm/templates/settings/server_blocklist.html:7
#, fuzzy
#| msgid "Back to reports"
-msgid "Back to server list"
+msgid "Back to instance list"
msgstr "Zurück zu den Meldungen"
#: bookwyrm/templates/settings/edit_server.html:16
@@ -2213,8 +2244,10 @@ msgstr ""
#: bookwyrm/templates/settings/federation.html:19
#: bookwyrm/templates/user_admin/server_filter.html:5
-msgid "Server name"
-msgstr "Servername"
+#, fuzzy
+#| msgid "Instance Name:"
+msgid "Instance name"
+msgstr "Instanzname"
#: bookwyrm/templates/settings/federation.html:23
#, fuzzy
@@ -2353,7 +2386,7 @@ msgid "Import Blocklist"
msgstr "Bücher importieren"
#: bookwyrm/templates/settings/server_blocklist.html:26
-#: bookwyrm/templates/snippets/goal_progress.html:5
+#: bookwyrm/templates/snippets/goal_progress.html:7
msgid "Success!"
msgstr "Erfolg!"
@@ -2446,15 +2479,15 @@ msgstr "Cover hinzufügen"
msgid "%(title)s by "
msgstr "%(title)s von "
-#: bookwyrm/templates/snippets/boost_button.html:9
-#: bookwyrm/templates/snippets/boost_button.html:10
+#: bookwyrm/templates/snippets/boost_button.html:20
+#: bookwyrm/templates/snippets/boost_button.html:21
#, fuzzy
#| msgid "boosted"
msgid "Boost"
msgstr "teilt"
-#: bookwyrm/templates/snippets/boost_button.html:16
-#: bookwyrm/templates/snippets/boost_button.html:17
+#: bookwyrm/templates/snippets/boost_button.html:33
+#: bookwyrm/templates/snippets/boost_button.html:34
#, fuzzy
#| msgid "Un-boost status"
msgid "Un-boost"
@@ -2554,13 +2587,13 @@ msgstr "Diese Lesedaten löschen?"
msgid "You are deleting this readthrough and its %(count)s associated progress updates."
msgstr "Du löscht diesen Leseforschritt und %(count)s zugehörige Fortschrittsupdates."
-#: bookwyrm/templates/snippets/fav_button.html:9
-#: bookwyrm/templates/snippets/fav_button.html:11
+#: bookwyrm/templates/snippets/fav_button.html:10
+#: bookwyrm/templates/snippets/fav_button.html:12
msgid "Like"
msgstr ""
-#: bookwyrm/templates/snippets/fav_button.html:17
#: bookwyrm/templates/snippets/fav_button.html:18
+#: bookwyrm/templates/snippets/fav_button.html:19
#, fuzzy
#| msgid "Un-like status"
msgid "Un-like"
@@ -2609,6 +2642,14 @@ msgstr "Annehmen"
msgid "No rating"
msgstr "Kein Rating"
+#: bookwyrm/templates/snippets/form_rate_stars.html:44
+#: bookwyrm/templates/snippets/stars.html:7
+#, python-format
+msgid "%(rating)s star"
+msgid_plural "%(rating)s stars"
+msgstr[0] ""
+msgstr[1] ""
+
#: bookwyrm/templates/snippets/generated_status/goal.html:1
#, python-format
msgid "set a goal to read %(counter)s book in %(year)s"
@@ -2664,17 +2705,17 @@ msgstr "Posten"
msgid "Set goal"
msgstr "Ziel setzen"
-#: bookwyrm/templates/snippets/goal_progress.html:7
+#: bookwyrm/templates/snippets/goal_progress.html:9
#, python-format
msgid "%(percent)s%% complete!"
msgstr "%(percent)s%% komplett!"
-#: bookwyrm/templates/snippets/goal_progress.html:10
+#: bookwyrm/templates/snippets/goal_progress.html:12
#, python-format
msgid "You've read %(read_count)s of %(goal_count)s books ."
msgstr "Du hast %(read_count)s von %(goal_count)s Büchern gelesen."
-#: bookwyrm/templates/snippets/goal_progress.html:12
+#: bookwyrm/templates/snippets/goal_progress.html:14
#, python-format
msgid "%(username)s has read %(read_count)s of %(goal_count)s books ."
msgstr "%(username)s hat %(read_count)s von %(goal_count)s Büchern gelesen."
@@ -2787,26 +2828,6 @@ msgstr "Registrieren"
msgid "Report"
msgstr "Importieren"
-#: bookwyrm/templates/snippets/rss_title.html:5
-#: bookwyrm/templates/snippets/status/status_header.html:35
-msgid "rated"
-msgstr ""
-
-#: bookwyrm/templates/snippets/rss_title.html:7
-#: bookwyrm/templates/snippets/status/status_header.html:37
-msgid "reviewed"
-msgstr "bewertete"
-
-#: bookwyrm/templates/snippets/rss_title.html:9
-#: bookwyrm/templates/snippets/status/status_header.html:39
-msgid "commented on"
-msgstr "kommentierte"
-
-#: bookwyrm/templates/snippets/rss_title.html:11
-#: bookwyrm/templates/snippets/status/status_header.html:41
-msgid "quoted"
-msgstr "zitierte"
-
#: bookwyrm/templates/snippets/search_result_text.html:36
msgid "Import book"
msgstr "Buch importieren"
@@ -2989,7 +3010,7 @@ msgstr "Regal bearbeiten"
msgid "Update shelf"
msgstr "Regal aktualisieren"
-#: bookwyrm/templates/user/shelf/shelf.html:25 bookwyrm/views/shelf.py:51
+#: bookwyrm/templates/user/shelf/shelf.html:25 bookwyrm/views/shelf.py:56
#, fuzzy
#| msgid "books"
msgid "All books"
@@ -2999,30 +3020,30 @@ msgstr "Bücher"
msgid "Create shelf"
msgstr "Regal erstellen"
-#: bookwyrm/templates/user/shelf/shelf.html:61
+#: bookwyrm/templates/user/shelf/shelf.html:62
msgid "Edit shelf"
msgstr "Regal bearbeiten"
-#: bookwyrm/templates/user/shelf/shelf.html:80
-#: bookwyrm/templates/user/shelf/shelf.html:104
+#: bookwyrm/templates/user/shelf/shelf.html:81
+#: bookwyrm/templates/user/shelf/shelf.html:105
msgid "Shelved"
msgstr "Ins Regal gestellt"
-#: bookwyrm/templates/user/shelf/shelf.html:81
-#: bookwyrm/templates/user/shelf/shelf.html:108
+#: bookwyrm/templates/user/shelf/shelf.html:82
+#: bookwyrm/templates/user/shelf/shelf.html:109
msgid "Started"
msgstr "Gestartet"
-#: bookwyrm/templates/user/shelf/shelf.html:82
-#: bookwyrm/templates/user/shelf/shelf.html:111
+#: bookwyrm/templates/user/shelf/shelf.html:83
+#: bookwyrm/templates/user/shelf/shelf.html:112
msgid "Finished"
msgstr "Abgeschlossen"
-#: bookwyrm/templates/user/shelf/shelf.html:137
+#: bookwyrm/templates/user/shelf/shelf.html:138
msgid "This shelf is empty."
msgstr "Dieses Regal ist leer."
-#: bookwyrm/templates/user/shelf/shelf.html:143
+#: bookwyrm/templates/user/shelf/shelf.html:144
msgid "Delete shelf"
msgstr "Regal löschen"
@@ -3084,9 +3105,10 @@ msgid "Back to users"
msgstr "Zurück zu den Meldungen"
#: bookwyrm/templates/user_admin/user_admin.html:7
-#, python-format
-msgid "Users: %(server_name)s "
-msgstr ""
+#, fuzzy, python-format
+#| msgid "Lists: %(username)s"
+msgid "Users: %(instance_name)s "
+msgstr "Listen: %(username)s"
#: bookwyrm/templates/user_admin/user_admin.html:22
#: bookwyrm/templates/user_admin/username_filter.html:5
@@ -3107,9 +3129,9 @@ msgstr ""
#: bookwyrm/templates/user_admin/user_admin.html:38
#, fuzzy
-#| msgid "Remove"
-msgid "Remote server"
-msgstr "Entfernen"
+#| msgid "Instance Name:"
+msgid "Remote instance"
+msgstr "Instanzname"
#: bookwyrm/templates/user_admin/user_admin.html:47
#, fuzzy
@@ -3158,6 +3180,10 @@ msgstr ""
msgid "Access level:"
msgstr ""
+#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:3
+msgid "File exceeds maximum size: 10MB"
+msgstr ""
+
#: bookwyrm/views/import_data.py:67
#, fuzzy
#| msgid "Email address:"
@@ -3175,6 +3201,27 @@ msgstr "Dieser Benutzename ist bereits vergeben."
msgid "A password reset link sent to %s"
msgstr ""
+#, fuzzy
+#~| msgid "Lists: %(username)s"
+#~ msgid "Reports: %(server_name)s "
+#~ msgstr "Listen: %(username)s"
+
+#~ msgid "Federated Servers"
+#~ msgstr "Föderierende Server"
+
+#~ msgid "Server name"
+#~ msgstr "Servername"
+
+#, fuzzy
+#~| msgid "Add cover"
+#~ msgid "Add server"
+#~ msgstr "Cover hinzufügen"
+
+#, fuzzy
+#~| msgid "Remove"
+#~ msgid "Remote server"
+#~ msgstr "Entfernen"
+
#, fuzzy
#~| msgid "Book"
#~ msgid "BookWyrm\\"
@@ -3225,12 +3272,12 @@ msgstr ""
#~ msgid "Enter a number."
#~ msgstr "Seriennummer:"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "A user with that username already exists."
#~ msgid "%(model_name)s with this %(field_labels)s already exists."
#~ msgstr "Dieser Benutzename ist bereits vergeben."
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(value)s is not a valid remote_id"
#~ msgid "Value %(value)r is not a valid choice."
#~ msgstr "%(value)s ist keine gültige remote_id"
@@ -3240,7 +3287,7 @@ msgstr ""
#~ msgid "This field cannot be null."
#~ msgstr "Dieses Regal ist leer."
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "A user with that username already exists."
#~ msgid "%(model_name)s with this %(field_label)s already exists."
#~ msgstr "Dieser Benutzename ist bereits vergeben."
@@ -3250,7 +3297,7 @@ msgstr ""
#~ msgid "Comma-separated integers"
#~ msgstr "Keine aktiven Einladungen"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(value)s is not a valid username"
#~ msgid "“%(value)s” value must be a decimal number."
#~ msgstr "%(value)s ist kein gültiger Username"
@@ -3270,7 +3317,7 @@ msgstr ""
#~ msgid "Email address"
#~ msgstr "E-Mail Adresse"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(value)s is not a valid username"
#~ msgid "“%(value)s” value must be a float."
#~ msgstr "%(value)s ist kein gültiger Username"
@@ -3300,7 +3347,7 @@ msgstr ""
#~ msgid "Positive small integer"
#~ msgstr "Keine aktiven Einladungen"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(value)s is not a valid username"
#~ msgid "“%(value)s” is not a valid UUID."
#~ msgstr "%(value)s ist kein gültiger Username"
@@ -3315,12 +3362,12 @@ msgstr ""
#~ msgid "One-to-one relationship"
#~ msgstr "Beziehungen"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "Relationships"
#~ msgid "%(from)s-%(to)s relationship"
#~ msgstr "Beziehungen"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "Relationships"
#~ msgid "%(from)s-%(to)s relationships"
#~ msgstr "Beziehungen"
@@ -3375,7 +3422,7 @@ msgstr ""
#~ msgid "Enter a valid UUID."
#~ msgstr "E-Mail Adresse"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(value)s is not a valid username"
#~ msgid "“%(pk)s” is not a valid value."
#~ msgstr "%(value)s ist kein gültiger Username"
@@ -3439,12 +3486,12 @@ msgstr ""
#~ msgid "This is not a valid IPv6 address."
#~ msgstr "E-Mail Adresse"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "No books found matching the query \"%(query)s\""
#~ msgid "No %(verbose_name)s found matching the query"
#~ msgstr "Keine passenden Bücher zu \"%(query)s\" gefunden"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(value)s is not a valid username"
#~ msgid "“%(path)s” does not exist"
#~ msgstr "%(value)s ist kein gültiger Username"
@@ -3463,11 +3510,9 @@ msgstr ""
#~ msgid "Matching Users"
#~ msgstr "Passende Nutzer*innen"
-#, python-format
#~ msgid "Set a reading goal for %(year)s"
#~ msgstr "Leseziel für %(year)s setzen"
-#, python-format
#~ msgid "by %(author)s"
#~ msgstr "von %(author)s"
@@ -3477,17 +3522,17 @@ msgstr ""
#~ msgid "Reactivate user"
#~ msgstr "Nutzer:in reaktivieren"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "Direct Messages with %(username)s "
#~ msgid "replied to %(username)s's review "
#~ msgstr "Direktnachrichten mit %(username)s "
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "replied to your status "
#~ msgid "replied to %(username)s's comment "
#~ msgstr "hat auf deinen Status geantwortet"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "replied to your status "
#~ msgid "replied to %(username)s's quote "
#~ msgstr "hat auf deinen Status geantwortet "
@@ -3498,7 +3543,6 @@ msgstr ""
#~ msgid "Add tag"
#~ msgstr "Tag hinzufügen"
-#, python-format
#~ msgid "Books tagged \"%(tag.name)s\""
#~ msgstr "Mit \"%(tag.name)s\" markierte Bücher"
@@ -3507,7 +3551,7 @@ msgstr ""
#~ msgid "Getting Started"
#~ msgstr "Gestartet"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "No users found for \"%(query)s\""
#~ msgid "No users were found for \"%(query)s\""
#~ msgstr "Keine Nutzer*innen für \"%(query)s\" gefunden"
@@ -3515,7 +3559,7 @@ msgstr ""
#~ msgid "Your lists"
#~ msgstr "Deine Listen"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "See all %(size)s"
#~ msgid "See all %(size)s lists"
#~ msgstr "Alle %(size)s anzeigen"
@@ -3538,14 +3582,12 @@ msgstr ""
#~ msgid "Your Shelves"
#~ msgstr "Deine Regale"
-#, python-format
#~ msgid "%(username)s: Shelves"
#~ msgstr "%(username)s: Regale"
#~ msgid "Shelves"
#~ msgstr "Regale"
-#, python-format
#~ msgid "See all %(shelf_count)s shelves"
#~ msgstr "Alle %(shelf_count)s Regale anzeigen"
diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po
index 1fa5eb304..8c36a2cb3 100644
--- a/locale/en_US/LC_MESSAGES/django.po
+++ b/locale/en_US/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-20 14:40-0700\n"
+"POT-Creation-Date: 2021-06-06 20:52+0000\n"
"PO-Revision-Date: 2021-02-28 17:19-0800\n"
"Last-Translator: Mouse Reeve \n"
"Language-Team: English \n"
@@ -56,12 +56,12 @@ msgid "Book Title"
msgstr ""
#: bookwyrm/forms.py:301 bookwyrm/templates/snippets/create_status_form.html:34
-#: bookwyrm/templates/user/shelf/shelf.html:84
-#: bookwyrm/templates/user/shelf/shelf.html:115
+#: bookwyrm/templates/user/shelf/shelf.html:85
+#: bookwyrm/templates/user/shelf/shelf.html:116
msgid "Rating"
msgstr ""
-#: bookwyrm/forms.py:303 bookwyrm/templates/lists/list.html:101
+#: bookwyrm/forms.py:303 bookwyrm/templates/lists/list.html:107
msgid "Sort By"
msgstr ""
@@ -73,41 +73,41 @@ msgstr ""
msgid "Descending"
msgstr ""
-#: bookwyrm/models/fields.py:24
+#: bookwyrm/models/fields.py:25
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr ""
-#: bookwyrm/models/fields.py:33 bookwyrm/models/fields.py:42
+#: bookwyrm/models/fields.py:34 bookwyrm/models/fields.py:43
#, python-format
msgid "%(value)s is not a valid username"
msgstr ""
-#: bookwyrm/models/fields.py:165 bookwyrm/templates/layout.html:155
+#: bookwyrm/models/fields.py:166 bookwyrm/templates/layout.html:152
msgid "username"
msgstr ""
-#: bookwyrm/models/fields.py:170
+#: bookwyrm/models/fields.py:171
msgid "A user with that username already exists."
msgstr ""
-#: bookwyrm/settings.py:155
+#: bookwyrm/settings.py:156
msgid "English"
msgstr ""
-#: bookwyrm/settings.py:156
+#: bookwyrm/settings.py:157
msgid "German"
msgstr ""
-#: bookwyrm/settings.py:157
+#: bookwyrm/settings.py:158
msgid "Spanish"
msgstr ""
-#: bookwyrm/settings.py:158
+#: bookwyrm/settings.py:159
msgid "French"
msgstr ""
-#: bookwyrm/settings.py:159
+#: bookwyrm/settings.py:160
msgid "Simplified Chinese"
msgstr ""
@@ -248,7 +248,7 @@ msgstr ""
#: bookwyrm/templates/book/edit_book.html:263
#: bookwyrm/templates/lists/form.html:42
#: bookwyrm/templates/preferences/edit_user.html:70
-#: bookwyrm/templates/settings/announcement_form.html:65
+#: bookwyrm/templates/settings/announcement_form.html:69
#: bookwyrm/templates/settings/edit_server.html:68
#: bookwyrm/templates/settings/federated_server.html:98
#: bookwyrm/templates/settings/site.html:97
@@ -367,7 +367,7 @@ msgstr ""
msgid "Places"
msgstr ""
-#: bookwyrm/templates/book/book.html:276 bookwyrm/templates/layout.html:64
+#: bookwyrm/templates/book/book.html:276 bookwyrm/templates/layout.html:61
#: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:25
#: bookwyrm/templates/search/layout.html:50
@@ -381,7 +381,7 @@ msgstr ""
#: bookwyrm/templates/book/book.html:297
#: bookwyrm/templates/book/cover_modal.html:31
-#: bookwyrm/templates/lists/list.html:164
+#: bookwyrm/templates/lists/list.html:179
msgid "Add"
msgstr ""
@@ -511,7 +511,7 @@ msgid "John Doe, Jane Smith"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:183
-#: bookwyrm/templates/user/shelf/shelf.html:77
+#: bookwyrm/templates/user/shelf/shelf.html:78
msgid "Cover"
msgstr ""
@@ -630,7 +630,7 @@ msgstr ""
#: bookwyrm/templates/directory/directory.html:4
#: bookwyrm/templates/directory/directory.html:9
-#: bookwyrm/templates/layout.html:92
+#: bookwyrm/templates/layout.html:64
msgid "Directory"
msgstr ""
@@ -831,7 +831,7 @@ msgid "Direct Messages with %(username)s "
msgstr ""
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/layout.html:87
+#: bookwyrm/templates/layout.html:92
msgid "Direct Messages"
msgstr ""
@@ -887,7 +887,6 @@ msgid "Updates"
msgstr ""
#: bookwyrm/templates/feed/feed_layout.html:10
-#: bookwyrm/templates/layout.html:58
#: bookwyrm/templates/user/shelf/books_header.html:3
msgid "Your books"
msgstr ""
@@ -942,7 +941,7 @@ msgid "What are you reading?"
msgstr ""
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/lists/list.html:120
+#: bookwyrm/templates/lists/list.html:135
msgid "Search for a book"
msgstr ""
@@ -962,7 +961,7 @@ msgstr ""
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/layout.html:37 bookwyrm/templates/layout.html:38
-#: bookwyrm/templates/lists/list.html:124
+#: bookwyrm/templates/lists/list.html:139
#: bookwyrm/templates/search/layout.html:4
#: bookwyrm/templates/search/layout.html:9
msgid "Search"
@@ -978,7 +977,7 @@ msgid "Popular on %(site_name)s"
msgstr ""
#: bookwyrm/templates/get_started/books.html:58
-#: bookwyrm/templates/lists/list.html:137
+#: bookwyrm/templates/lists/list.html:152
msgid "No books found"
msgstr ""
@@ -1090,7 +1089,7 @@ msgid "%(username)s's %(year)s Books"
msgstr ""
#: bookwyrm/templates/import.html:5 bookwyrm/templates/import.html:9
-#: bookwyrm/templates/layout.html:97
+#: bookwyrm/templates/user/shelf/shelf.html:40
msgid "Import Books"
msgstr ""
@@ -1175,14 +1174,14 @@ msgstr ""
#: bookwyrm/templates/import_status.html:114
#: bookwyrm/templates/snippets/create_status_form.html:13
-#: bookwyrm/templates/user/shelf/shelf.html:78
-#: bookwyrm/templates/user/shelf/shelf.html:98
+#: bookwyrm/templates/user/shelf/shelf.html:79
+#: bookwyrm/templates/user/shelf/shelf.html:99
msgid "Title"
msgstr ""
#: bookwyrm/templates/import_status.html:117
-#: bookwyrm/templates/user/shelf/shelf.html:79
-#: bookwyrm/templates/user/shelf/shelf.html:101
+#: bookwyrm/templates/user/shelf/shelf.html:80
+#: bookwyrm/templates/user/shelf/shelf.html:102
msgid "Author"
msgstr ""
@@ -1224,15 +1223,19 @@ msgstr ""
msgid "Main navigation menu"
msgstr ""
-#: bookwyrm/templates/layout.html:61
+#: bookwyrm/templates/layout.html:58
msgid "Feed"
msgstr ""
-#: bookwyrm/templates/layout.html:102
+#: bookwyrm/templates/layout.html:87
+msgid "Your Books"
+msgstr ""
+
+#: bookwyrm/templates/layout.html:97
msgid "Settings"
msgstr ""
-#: bookwyrm/templates/layout.html:111
+#: bookwyrm/templates/layout.html:106
#: bookwyrm/templates/settings/admin_layout.html:31
#: bookwyrm/templates/settings/manage_invite_requests.html:15
#: bookwyrm/templates/settings/manage_invites.html:3
@@ -1240,45 +1243,45 @@ msgstr ""
msgid "Invites"
msgstr ""
-#: bookwyrm/templates/layout.html:118
+#: bookwyrm/templates/layout.html:113
msgid "Admin"
msgstr ""
-#: bookwyrm/templates/layout.html:125
+#: bookwyrm/templates/layout.html:120
msgid "Log out"
msgstr ""
-#: bookwyrm/templates/layout.html:133 bookwyrm/templates/layout.html:134
+#: bookwyrm/templates/layout.html:128 bookwyrm/templates/layout.html:129
#: bookwyrm/templates/notifications.html:6
#: bookwyrm/templates/notifications.html:11
msgid "Notifications"
msgstr ""
-#: bookwyrm/templates/layout.html:154 bookwyrm/templates/layout.html:158
+#: bookwyrm/templates/layout.html:151 bookwyrm/templates/layout.html:155
#: bookwyrm/templates/login.html:17
#: bookwyrm/templates/snippets/register_form.html:4
msgid "Username:"
msgstr ""
-#: bookwyrm/templates/layout.html:159
+#: bookwyrm/templates/layout.html:156
msgid "password"
msgstr ""
-#: bookwyrm/templates/layout.html:160 bookwyrm/templates/login.html:36
+#: bookwyrm/templates/layout.html:157 bookwyrm/templates/login.html:36
msgid "Forgot your password?"
msgstr ""
-#: bookwyrm/templates/layout.html:163 bookwyrm/templates/login.html:10
+#: bookwyrm/templates/layout.html:160 bookwyrm/templates/login.html:10
#: bookwyrm/templates/login.html:33
msgid "Log in"
msgstr ""
-#: bookwyrm/templates/layout.html:171
+#: bookwyrm/templates/layout.html:168
msgid "Join"
msgstr ""
#: bookwyrm/templates/layout.html:206
-msgid "About this server"
+msgid "About this instance"
msgstr ""
#: bookwyrm/templates/layout.html:210
@@ -1338,7 +1341,7 @@ msgid "Discard"
msgstr ""
#: bookwyrm/templates/lists/edit_form.html:5
-#: bookwyrm/templates/lists/list_layout.html:17
+#: bookwyrm/templates/lists/list_layout.html:16
msgid "Edit List"
msgstr ""
@@ -1385,54 +1388,55 @@ msgstr ""
msgid "This list is currently empty"
msgstr ""
-#: bookwyrm/templates/lists/list.html:65
+#: bookwyrm/templates/lists/list.html:66
#, python-format
msgid "Added by %(username)s "
msgstr ""
-#: bookwyrm/templates/lists/list.html:77
-msgid "Set"
-msgstr ""
-
-#: bookwyrm/templates/lists/list.html:80
+#: bookwyrm/templates/lists/list.html:74
msgid "List position"
msgstr ""
-#: bookwyrm/templates/lists/list.html:86
+#: bookwyrm/templates/lists/list.html:81
+msgid "Set"
+msgstr ""
+
+#: bookwyrm/templates/lists/list.html:89
#: bookwyrm/templates/snippets/shelf_selector.html:26
msgid "Remove"
msgstr ""
-#: bookwyrm/templates/lists/list.html:99 bookwyrm/templates/lists/list.html:111
+#: bookwyrm/templates/lists/list.html:103
+#: bookwyrm/templates/lists/list.html:120
msgid "Sort List"
msgstr ""
-#: bookwyrm/templates/lists/list.html:105
+#: bookwyrm/templates/lists/list.html:113
msgid "Direction"
msgstr ""
-#: bookwyrm/templates/lists/list.html:116
+#: bookwyrm/templates/lists/list.html:127
msgid "Add Books"
msgstr ""
-#: bookwyrm/templates/lists/list.html:116
+#: bookwyrm/templates/lists/list.html:129
msgid "Suggest Books"
msgstr ""
-#: bookwyrm/templates/lists/list.html:125
+#: bookwyrm/templates/lists/list.html:140
msgid "search"
msgstr ""
-#: bookwyrm/templates/lists/list.html:131
+#: bookwyrm/templates/lists/list.html:146
msgid "Clear search"
msgstr ""
-#: bookwyrm/templates/lists/list.html:136
+#: bookwyrm/templates/lists/list.html:151
#, python-format
msgid "No books found matching the query \"%(query)s\""
msgstr ""
-#: bookwyrm/templates/lists/list.html:164
+#: bookwyrm/templates/lists/list.html:179
msgid "Suggest"
msgstr ""
@@ -1523,7 +1527,7 @@ msgstr ""
#: bookwyrm/templates/moderation/reports.html:6
#, python-format
-msgid "Reports: %(server_name)s"
+msgid "Reports: %(instance_name)s"
msgstr ""
#: bookwyrm/templates/moderation/reports.html:8
@@ -1534,7 +1538,7 @@ msgstr ""
#: bookwyrm/templates/moderation/reports.html:14
#, python-format
-msgid "Reports: %(server_name)s "
+msgid "Reports: %(instance_name)s "
msgstr ""
#: bookwyrm/templates/moderation/reports.html:28
@@ -1733,6 +1737,26 @@ msgstr ""
msgid "Relationships"
msgstr ""
+#: bookwyrm/templates/rss/title.html:5
+#: bookwyrm/templates/snippets/status/status_header.html:35
+msgid "rated"
+msgstr ""
+
+#: bookwyrm/templates/rss/title.html:7
+#: bookwyrm/templates/snippets/status/status_header.html:37
+msgid "reviewed"
+msgstr ""
+
+#: bookwyrm/templates/rss/title.html:9
+#: bookwyrm/templates/snippets/status/status_header.html:39
+msgid "commented on"
+msgstr ""
+
+#: bookwyrm/templates/rss/title.html:11
+#: bookwyrm/templates/snippets/status/status_header.html:41
+msgid "quoted"
+msgstr ""
+
#: bookwyrm/templates/search/book.html:64
msgid "Load results from other catalogues"
msgstr ""
@@ -1783,7 +1807,7 @@ msgstr ""
#: bookwyrm/templates/settings/admin_layout.html:39
#: bookwyrm/templates/settings/federation.html:3
#: bookwyrm/templates/settings/federation.html:5
-msgid "Federated Servers"
+msgid "Federated Instances"
msgstr ""
#: bookwyrm/templates/settings/admin_layout.html:44
@@ -1833,6 +1857,7 @@ msgid "Back to list"
msgstr ""
#: bookwyrm/templates/settings/announcement.html:11
+#: bookwyrm/templates/settings/announcement_form.html:6
msgid "Edit Announcement"
msgstr ""
@@ -1866,7 +1891,7 @@ msgstr ""
msgid "Active:"
msgstr ""
-#: bookwyrm/templates/settings/announcement_form.html:5
+#: bookwyrm/templates/settings/announcement_form.html:8
#: bookwyrm/templates/settings/announcements.html:8
msgid "Create Announcement"
msgstr ""
@@ -1910,12 +1935,12 @@ msgstr ""
#: bookwyrm/templates/settings/federation.html:10
#: bookwyrm/templates/settings/server_blocklist.html:3
#: bookwyrm/templates/settings/server_blocklist.html:20
-msgid "Add server"
+msgid "Add instance"
msgstr ""
#: bookwyrm/templates/settings/edit_server.html:7
#: bookwyrm/templates/settings/server_blocklist.html:7
-msgid "Back to server list"
+msgid "Back to instance list"
msgstr ""
#: bookwyrm/templates/settings/edit_server.html:16
@@ -2022,7 +2047,7 @@ msgstr ""
#: bookwyrm/templates/settings/federation.html:19
#: bookwyrm/templates/user_admin/server_filter.html:5
-msgid "Server name"
+msgid "Instance name"
msgstr ""
#: bookwyrm/templates/settings/federation.html:23
@@ -2144,7 +2169,7 @@ msgid "Import Blocklist"
msgstr ""
#: bookwyrm/templates/settings/server_blocklist.html:26
-#: bookwyrm/templates/snippets/goal_progress.html:5
+#: bookwyrm/templates/snippets/goal_progress.html:7
msgid "Success!"
msgstr ""
@@ -2230,13 +2255,13 @@ msgstr ""
msgid "%(title)s by "
msgstr ""
-#: bookwyrm/templates/snippets/boost_button.html:9
-#: bookwyrm/templates/snippets/boost_button.html:10
+#: bookwyrm/templates/snippets/boost_button.html:20
+#: bookwyrm/templates/snippets/boost_button.html:21
msgid "Boost"
msgstr ""
-#: bookwyrm/templates/snippets/boost_button.html:16
-#: bookwyrm/templates/snippets/boost_button.html:17
+#: bookwyrm/templates/snippets/boost_button.html:33
+#: bookwyrm/templates/snippets/boost_button.html:34
msgid "Un-boost"
msgstr ""
@@ -2326,13 +2351,13 @@ msgstr ""
msgid "You are deleting this readthrough and its %(count)s associated progress updates."
msgstr ""
-#: bookwyrm/templates/snippets/fav_button.html:9
-#: bookwyrm/templates/snippets/fav_button.html:11
+#: bookwyrm/templates/snippets/fav_button.html:10
+#: bookwyrm/templates/snippets/fav_button.html:12
msgid "Like"
msgstr ""
-#: bookwyrm/templates/snippets/fav_button.html:17
#: bookwyrm/templates/snippets/fav_button.html:18
+#: bookwyrm/templates/snippets/fav_button.html:19
msgid "Un-like"
msgstr ""
@@ -2373,6 +2398,14 @@ msgstr ""
msgid "No rating"
msgstr ""
+#: bookwyrm/templates/snippets/form_rate_stars.html:44
+#: bookwyrm/templates/snippets/stars.html:7
+#, python-format
+msgid "%(rating)s star"
+msgid_plural "%(rating)s stars"
+msgstr[0] ""
+msgstr[1] ""
+
#: bookwyrm/templates/snippets/generated_status/goal.html:1
#, python-format
msgid "set a goal to read %(counter)s book in %(year)s"
@@ -2427,17 +2460,17 @@ msgstr ""
msgid "Set goal"
msgstr ""
-#: bookwyrm/templates/snippets/goal_progress.html:7
+#: bookwyrm/templates/snippets/goal_progress.html:9
#, python-format
msgid "%(percent)s%% complete!"
msgstr ""
-#: bookwyrm/templates/snippets/goal_progress.html:10
+#: bookwyrm/templates/snippets/goal_progress.html:12
#, python-format
msgid "You've read %(read_count)s of %(goal_count)s books ."
msgstr ""
-#: bookwyrm/templates/snippets/goal_progress.html:12
+#: bookwyrm/templates/snippets/goal_progress.html:14
#, python-format
msgid "%(username)s has read %(read_count)s of %(goal_count)s books ."
msgstr ""
@@ -2546,26 +2579,6 @@ msgstr ""
msgid "Report"
msgstr ""
-#: bookwyrm/templates/snippets/rss_title.html:5
-#: bookwyrm/templates/snippets/status/status_header.html:35
-msgid "rated"
-msgstr ""
-
-#: bookwyrm/templates/snippets/rss_title.html:7
-#: bookwyrm/templates/snippets/status/status_header.html:37
-msgid "reviewed"
-msgstr ""
-
-#: bookwyrm/templates/snippets/rss_title.html:9
-#: bookwyrm/templates/snippets/status/status_header.html:39
-msgid "commented on"
-msgstr ""
-
-#: bookwyrm/templates/snippets/rss_title.html:11
-#: bookwyrm/templates/snippets/status/status_header.html:41
-msgid "quoted"
-msgstr ""
-
#: bookwyrm/templates/snippets/search_result_text.html:36
msgid "Import book"
msgstr ""
@@ -2735,7 +2748,7 @@ msgstr ""
msgid "Update shelf"
msgstr ""
-#: bookwyrm/templates/user/shelf/shelf.html:25 bookwyrm/views/shelf.py:51
+#: bookwyrm/templates/user/shelf/shelf.html:25 bookwyrm/views/shelf.py:56
msgid "All books"
msgstr ""
@@ -2743,30 +2756,30 @@ msgstr ""
msgid "Create shelf"
msgstr ""
-#: bookwyrm/templates/user/shelf/shelf.html:61
+#: bookwyrm/templates/user/shelf/shelf.html:62
msgid "Edit shelf"
msgstr ""
-#: bookwyrm/templates/user/shelf/shelf.html:80
-#: bookwyrm/templates/user/shelf/shelf.html:104
+#: bookwyrm/templates/user/shelf/shelf.html:81
+#: bookwyrm/templates/user/shelf/shelf.html:105
msgid "Shelved"
msgstr ""
-#: bookwyrm/templates/user/shelf/shelf.html:81
-#: bookwyrm/templates/user/shelf/shelf.html:108
+#: bookwyrm/templates/user/shelf/shelf.html:82
+#: bookwyrm/templates/user/shelf/shelf.html:109
msgid "Started"
msgstr ""
-#: bookwyrm/templates/user/shelf/shelf.html:82
-#: bookwyrm/templates/user/shelf/shelf.html:111
+#: bookwyrm/templates/user/shelf/shelf.html:83
+#: bookwyrm/templates/user/shelf/shelf.html:112
msgid "Finished"
msgstr ""
-#: bookwyrm/templates/user/shelf/shelf.html:137
+#: bookwyrm/templates/user/shelf/shelf.html:138
msgid "This shelf is empty."
msgstr ""
-#: bookwyrm/templates/user/shelf/shelf.html:143
+#: bookwyrm/templates/user/shelf/shelf.html:144
msgid "Delete shelf"
msgstr ""
@@ -2825,7 +2838,7 @@ msgstr ""
#: bookwyrm/templates/user_admin/user_admin.html:7
#, python-format
-msgid "Users: %(server_name)s "
+msgid "Users: %(instance_name)s "
msgstr ""
#: bookwyrm/templates/user_admin/user_admin.html:22
@@ -2842,7 +2855,7 @@ msgid "Last Active"
msgstr ""
#: bookwyrm/templates/user_admin/user_admin.html:38
-msgid "Remote server"
+msgid "Remote instance"
msgstr ""
#: bookwyrm/templates/user_admin/user_admin.html:47
@@ -2886,6 +2899,10 @@ msgstr ""
msgid "Access level:"
msgstr ""
+#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:3
+msgid "File exceeds maximum size: 10MB"
+msgstr ""
+
#: bookwyrm/views/import_data.py:67
msgid "Not a valid csv file"
msgstr ""
diff --git a/locale/es/LC_MESSAGES/django.mo b/locale/es/LC_MESSAGES/django.mo
index 1377b5092..54adfb570 100644
Binary files a/locale/es/LC_MESSAGES/django.mo and b/locale/es/LC_MESSAGES/django.mo differ
diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po
index 4f60dfb8c..c9a19a4df 100644
--- a/locale/es/LC_MESSAGES/django.po
+++ b/locale/es/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-20 14:40-0700\n"
+"POT-Creation-Date: 2021-06-06 20:52+0000\n"
"PO-Revision-Date: 2021-03-19 11:49+0800\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -56,12 +56,12 @@ msgid "Book Title"
msgstr "Título"
#: bookwyrm/forms.py:301 bookwyrm/templates/snippets/create_status_form.html:34
-#: bookwyrm/templates/user/shelf/shelf.html:84
-#: bookwyrm/templates/user/shelf/shelf.html:115
+#: bookwyrm/templates/user/shelf/shelf.html:85
+#: bookwyrm/templates/user/shelf/shelf.html:116
msgid "Rating"
msgstr "Calificación"
-#: bookwyrm/forms.py:303 bookwyrm/templates/lists/list.html:101
+#: bookwyrm/forms.py:303 bookwyrm/templates/lists/list.html:107
msgid "Sort By"
msgstr "Ordenar por"
@@ -73,41 +73,41 @@ msgstr "Ascendente"
msgid "Descending"
msgstr "Descendente"
-#: bookwyrm/models/fields.py:24
+#: bookwyrm/models/fields.py:25
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s no es un remote_id válido"
-#: bookwyrm/models/fields.py:33 bookwyrm/models/fields.py:42
+#: bookwyrm/models/fields.py:34 bookwyrm/models/fields.py:43
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s no es un usuario válido"
-#: bookwyrm/models/fields.py:165 bookwyrm/templates/layout.html:155
+#: bookwyrm/models/fields.py:166 bookwyrm/templates/layout.html:152
msgid "username"
msgstr "nombre de usuario"
-#: bookwyrm/models/fields.py:170
+#: bookwyrm/models/fields.py:171
msgid "A user with that username already exists."
msgstr "Ya existe un usuario con ese nombre."
-#: bookwyrm/settings.py:155
+#: bookwyrm/settings.py:156
msgid "English"
msgstr "Inglés"
-#: bookwyrm/settings.py:156
+#: bookwyrm/settings.py:157
msgid "German"
msgstr "Aléman"
-#: bookwyrm/settings.py:157
+#: bookwyrm/settings.py:158
msgid "Spanish"
msgstr "Español"
-#: bookwyrm/settings.py:158
+#: bookwyrm/settings.py:159
msgid "French"
msgstr "Francés"
-#: bookwyrm/settings.py:159
+#: bookwyrm/settings.py:160
msgid "Simplified Chinese"
msgstr "Chino simplificado"
@@ -139,15 +139,15 @@ msgstr "Editar Autor/Autora"
#: bookwyrm/templates/author/author.html:32
#: bookwyrm/templates/author/edit_author.html:38
msgid "Aliases:"
-msgstr ""
+msgstr "Aliases:"
#: bookwyrm/templates/author/author.html:38
msgid "Born:"
-msgstr ""
+msgstr "Nacido:"
#: bookwyrm/templates/author/author.html:44
msgid "Died:"
-msgstr ""
+msgstr "Muerto:"
#: bookwyrm/templates/author/author.html:51
msgid "Wikipedia"
@@ -160,10 +160,8 @@ msgstr "Ver en OpenLibrary"
#: bookwyrm/templates/author/author.html:60
#: bookwyrm/templates/book/book.html:81
-#, fuzzy
-#| msgid "View on OpenLibrary"
msgid "View on Inventaire"
-msgstr "Ver en OpenLibrary"
+msgstr "Ver en Inventaire"
#: bookwyrm/templates/author/author.html:74
#, python-format
@@ -205,10 +203,8 @@ msgstr "Nombre:"
#: bookwyrm/templates/book/edit_book.html:132
#: bookwyrm/templates/book/edit_book.html:141
#: bookwyrm/templates/book/edit_book.html:178
-#, fuzzy
-#| msgid "Separate multiple publishers with commas."
msgid "Separate multiple values with commas."
-msgstr "Separar varios editores con comas."
+msgstr "Separar varios valores con comas."
#: bookwyrm/templates/author/edit_author.html:46
msgid "Bio:"
@@ -236,10 +232,8 @@ msgstr "Clave OpenLibrary:"
#: bookwyrm/templates/author/edit_author.html:79
#: bookwyrm/templates/book/edit_book.html:243
-#, fuzzy
-#| msgid "View on OpenLibrary"
msgid "Inventaire ID:"
-msgstr "Ver en OpenLibrary"
+msgstr "ID Inventaire:"
#: bookwyrm/templates/author/edit_author.html:84
msgid "Librarything key:"
@@ -254,7 +248,7 @@ msgstr "Clave Goodreads:"
#: bookwyrm/templates/book/edit_book.html:263
#: bookwyrm/templates/lists/form.html:42
#: bookwyrm/templates/preferences/edit_user.html:70
-#: bookwyrm/templates/settings/announcement_form.html:65
+#: bookwyrm/templates/settings/announcement_form.html:69
#: bookwyrm/templates/settings/edit_server.html:68
#: bookwyrm/templates/settings/federated_server.html:98
#: bookwyrm/templates/settings/site.html:97
@@ -350,28 +344,20 @@ msgid "You don't have any reading activity for this book."
msgstr "No tienes ninguna actividad de lectura para este libro."
#: bookwyrm/templates/book/book.html:200
-#, fuzzy
-#| msgid "Review"
msgid "Reviews"
-msgstr "Reseña"
+msgstr "Reseñas"
#: bookwyrm/templates/book/book.html:205
-#, fuzzy
-#| msgid "Your shelves"
msgid "Your reviews"
-msgstr "Tus estantes"
+msgstr "Tus reseñas"
#: bookwyrm/templates/book/book.html:211
-#, fuzzy
-#| msgid "Your Account"
msgid "Your comments"
-msgstr "Tu cuenta"
+msgstr "Tus comentarios"
#: bookwyrm/templates/book/book.html:217
-#, fuzzy
-#| msgid "Your books"
msgid "Your quotes"
-msgstr "Tus libros"
+msgstr "Tus citas"
#: bookwyrm/templates/book/book.html:253
msgid "Subjects"
@@ -381,7 +367,7 @@ msgstr "Sujetos"
msgid "Places"
msgstr "Lugares"
-#: bookwyrm/templates/book/book.html:276 bookwyrm/templates/layout.html:64
+#: bookwyrm/templates/book/book.html:276 bookwyrm/templates/layout.html:61
#: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:25
#: bookwyrm/templates/search/layout.html:50
@@ -395,7 +381,7 @@ msgstr "Agregar a lista"
#: bookwyrm/templates/book/book.html:297
#: bookwyrm/templates/book/cover_modal.html:31
-#: bookwyrm/templates/lists/list.html:164
+#: bookwyrm/templates/lists/list.html:179
msgid "Add"
msgstr "Agregar"
@@ -492,10 +478,8 @@ msgid "Series number:"
msgstr "Número de serie:"
#: bookwyrm/templates/book/edit_book.html:130
-#, fuzzy
-#| msgid "Language:"
msgid "Languages:"
-msgstr "Idioma:"
+msgstr "Idiomas:"
#: bookwyrm/templates/book/edit_book.html:139
msgid "Publisher:"
@@ -527,7 +511,7 @@ msgid "John Doe, Jane Smith"
msgstr "Juan Nadie, Natalia Natalia"
#: bookwyrm/templates/book/edit_book.html:183
-#: bookwyrm/templates/user/shelf/shelf.html:77
+#: bookwyrm/templates/user/shelf/shelf.html:78
msgid "Cover"
msgstr "Portada:"
@@ -557,10 +541,8 @@ msgid "ISBN 10:"
msgstr "ISBN 10:"
#: bookwyrm/templates/book/edit_book.html:238
-#, fuzzy
-#| msgid "Openlibrary key:"
msgid "Openlibrary ID:"
-msgstr "Clave OpenLibrary:"
+msgstr "ID OpenLibrary:"
#: bookwyrm/templates/book/editions.html:4
#, python-format
@@ -648,7 +630,7 @@ msgstr "Comunidad federalizada"
#: bookwyrm/templates/directory/directory.html:4
#: bookwyrm/templates/directory/directory.html:9
-#: bookwyrm/templates/layout.html:92
+#: bookwyrm/templates/layout.html:64
msgid "Directory"
msgstr "Directorio"
@@ -849,7 +831,7 @@ msgid "Direct Messages with %(username)s "
msgstr "Mensajes directos con %(username)s "
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/layout.html:87
+#: bookwyrm/templates/layout.html:92
msgid "Direct Messages"
msgstr "Mensajes directos"
@@ -905,7 +887,6 @@ msgid "Updates"
msgstr "Actualizaciones"
#: bookwyrm/templates/feed/feed_layout.html:10
-#: bookwyrm/templates/layout.html:58
#: bookwyrm/templates/user/shelf/books_header.html:3
msgid "Your books"
msgstr "Tus libros"
@@ -960,7 +941,7 @@ msgid "What are you reading?"
msgstr "¿Qué estás leyendo?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/lists/list.html:120
+#: bookwyrm/templates/lists/list.html:135
msgid "Search for a book"
msgstr "Buscar libros"
@@ -980,7 +961,7 @@ msgstr "Puedes agregar libros cuando comiences a usar %(site_name)s."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/layout.html:37 bookwyrm/templates/layout.html:38
-#: bookwyrm/templates/lists/list.html:124
+#: bookwyrm/templates/lists/list.html:139
#: bookwyrm/templates/search/layout.html:4
#: bookwyrm/templates/search/layout.html:9
msgid "Search"
@@ -996,7 +977,7 @@ msgid "Popular on %(site_name)s"
msgstr "Popular en %(site_name)s"
#: bookwyrm/templates/get_started/books.html:58
-#: bookwyrm/templates/lists/list.html:137
+#: bookwyrm/templates/lists/list.html:152
msgid "No books found"
msgstr "No se encontró ningún libro"
@@ -1108,7 +1089,7 @@ msgid "%(username)s's %(year)s Books"
msgstr "Los libros de %(username)s para %(year)s"
#: bookwyrm/templates/import.html:5 bookwyrm/templates/import.html:9
-#: bookwyrm/templates/layout.html:97
+#: bookwyrm/templates/user/shelf/shelf.html:40
msgid "Import Books"
msgstr "Importar libros"
@@ -1193,14 +1174,14 @@ msgstr "Libro"
#: bookwyrm/templates/import_status.html:114
#: bookwyrm/templates/snippets/create_status_form.html:13
-#: bookwyrm/templates/user/shelf/shelf.html:78
-#: bookwyrm/templates/user/shelf/shelf.html:98
+#: bookwyrm/templates/user/shelf/shelf.html:79
+#: bookwyrm/templates/user/shelf/shelf.html:99
msgid "Title"
msgstr "Título"
#: bookwyrm/templates/import_status.html:117
-#: bookwyrm/templates/user/shelf/shelf.html:79
-#: bookwyrm/templates/user/shelf/shelf.html:101
+#: bookwyrm/templates/user/shelf/shelf.html:80
+#: bookwyrm/templates/user/shelf/shelf.html:102
msgid "Author"
msgstr "Autor/Autora"
@@ -1242,15 +1223,19 @@ msgstr "Buscar un libro o un usuario"
msgid "Main navigation menu"
msgstr "Menú de navigación central"
-#: bookwyrm/templates/layout.html:61
+#: bookwyrm/templates/layout.html:58
msgid "Feed"
msgstr "Actividad"
-#: bookwyrm/templates/layout.html:102
+#: bookwyrm/templates/layout.html:87
+msgid "Your Books"
+msgstr "Tus libros"
+
+#: bookwyrm/templates/layout.html:97
msgid "Settings"
msgstr "Configuración"
-#: bookwyrm/templates/layout.html:111
+#: bookwyrm/templates/layout.html:106
#: bookwyrm/templates/settings/admin_layout.html:31
#: bookwyrm/templates/settings/manage_invite_requests.html:15
#: bookwyrm/templates/settings/manage_invites.html:3
@@ -1258,45 +1243,47 @@ msgstr "Configuración"
msgid "Invites"
msgstr "Invitaciones"
-#: bookwyrm/templates/layout.html:118
+#: bookwyrm/templates/layout.html:113
msgid "Admin"
msgstr "Admin"
-#: bookwyrm/templates/layout.html:125
+#: bookwyrm/templates/layout.html:120
msgid "Log out"
msgstr "Cerrar sesión"
-#: bookwyrm/templates/layout.html:133 bookwyrm/templates/layout.html:134
+#: bookwyrm/templates/layout.html:128 bookwyrm/templates/layout.html:129
#: bookwyrm/templates/notifications.html:6
#: bookwyrm/templates/notifications.html:11
msgid "Notifications"
msgstr "Notificaciones"
-#: bookwyrm/templates/layout.html:154 bookwyrm/templates/layout.html:158
+#: bookwyrm/templates/layout.html:151 bookwyrm/templates/layout.html:155
#: bookwyrm/templates/login.html:17
#: bookwyrm/templates/snippets/register_form.html:4
msgid "Username:"
msgstr "Nombre de usuario:"
-#: bookwyrm/templates/layout.html:159
+#: bookwyrm/templates/layout.html:156
msgid "password"
msgstr "contraseña"
-#: bookwyrm/templates/layout.html:160 bookwyrm/templates/login.html:36
+#: bookwyrm/templates/layout.html:157 bookwyrm/templates/login.html:36
msgid "Forgot your password?"
msgstr "¿Olvidaste tu contraseña?"
-#: bookwyrm/templates/layout.html:163 bookwyrm/templates/login.html:10
+#: bookwyrm/templates/layout.html:160 bookwyrm/templates/login.html:10
#: bookwyrm/templates/login.html:33
msgid "Log in"
msgstr "Iniciar sesión"
-#: bookwyrm/templates/layout.html:171
+#: bookwyrm/templates/layout.html:168
msgid "Join"
msgstr "Unirse"
#: bookwyrm/templates/layout.html:206
-msgid "About this server"
+#, fuzzy
+#| msgid "About this server"
+msgid "About this instance"
msgstr "Sobre este servidor"
#: bookwyrm/templates/layout.html:210
@@ -1304,8 +1291,6 @@ msgid "Contact site admin"
msgstr "Contactarse con administradores del sitio"
#: bookwyrm/templates/layout.html:214
-#, fuzzy
-#| msgid "Django Documentation"
msgid "Documentation"
msgstr "Documentación de Django"
@@ -1358,7 +1343,7 @@ msgid "Discard"
msgstr "Desechar"
#: bookwyrm/templates/lists/edit_form.html:5
-#: bookwyrm/templates/lists/list_layout.html:17
+#: bookwyrm/templates/lists/list_layout.html:16
msgid "Edit List"
msgstr "Editar lista"
@@ -1395,66 +1380,65 @@ msgstr "Cualquer usuario puede agregar libros a esta lista"
#: bookwyrm/templates/lists/list.html:20
msgid "You successfully suggested a book for this list!"
-msgstr ""
+msgstr "¡Has sugerido un libro para esta lista exitosamente!"
#: bookwyrm/templates/lists/list.html:22
-#, fuzzy
-#| msgid "Anyone can add books to this list"
msgid "You successfully added a book to this list!"
-msgstr "Cualquer usuario puede agregar libros a esta lista"
+msgstr "¡Has agregado un libro a esta lista exitosamente!"
#: bookwyrm/templates/lists/list.html:28
msgid "This list is currently empty"
msgstr "Esta lista está vacia"
-#: bookwyrm/templates/lists/list.html:65
+#: bookwyrm/templates/lists/list.html:66
#, python-format
msgid "Added by %(username)s "
msgstr "Agregado por %(username)s "
-#: bookwyrm/templates/lists/list.html:77
-msgid "Set"
-msgstr "Establecido"
-
-#: bookwyrm/templates/lists/list.html:80
+#: bookwyrm/templates/lists/list.html:74
msgid "List position"
msgstr "Posición"
-#: bookwyrm/templates/lists/list.html:86
+#: bookwyrm/templates/lists/list.html:81
+msgid "Set"
+msgstr "Establecido"
+
+#: bookwyrm/templates/lists/list.html:89
#: bookwyrm/templates/snippets/shelf_selector.html:26
msgid "Remove"
msgstr "Quitar"
-#: bookwyrm/templates/lists/list.html:99 bookwyrm/templates/lists/list.html:111
+#: bookwyrm/templates/lists/list.html:103
+#: bookwyrm/templates/lists/list.html:120
msgid "Sort List"
msgstr "Ordena la lista"
-#: bookwyrm/templates/lists/list.html:105
+#: bookwyrm/templates/lists/list.html:113
msgid "Direction"
msgstr "Dirección"
-#: bookwyrm/templates/lists/list.html:116
+#: bookwyrm/templates/lists/list.html:127
msgid "Add Books"
msgstr "Agregar libros"
-#: bookwyrm/templates/lists/list.html:116
+#: bookwyrm/templates/lists/list.html:129
msgid "Suggest Books"
msgstr "Sugerir libros"
-#: bookwyrm/templates/lists/list.html:125
+#: bookwyrm/templates/lists/list.html:140
msgid "search"
msgstr "buscar"
-#: bookwyrm/templates/lists/list.html:131
+#: bookwyrm/templates/lists/list.html:146
msgid "Clear search"
msgstr "Borrar búsqueda"
-#: bookwyrm/templates/lists/list.html:136
+#: bookwyrm/templates/lists/list.html:151
#, python-format
msgid "No books found matching the query \"%(query)s\""
msgstr "No se encontró ningún libro correspondiente a la búsqueda: \"%(query)s\""
-#: bookwyrm/templates/lists/list.html:164
+#: bookwyrm/templates/lists/list.html:179
msgid "Suggest"
msgstr "Sugerir"
@@ -1545,8 +1529,8 @@ msgstr "Resolver"
#: bookwyrm/templates/moderation/reports.html:6
#, python-format
-msgid "Reports: %(server_name)s"
-msgstr "Informes: %(server_name)s"
+msgid "Reports: %(instance_name)s"
+msgstr "Informes: %(instance_name)s"
#: bookwyrm/templates/moderation/reports.html:8
#: bookwyrm/templates/moderation/reports.html:17
@@ -1556,8 +1540,8 @@ msgstr "Informes"
#: bookwyrm/templates/moderation/reports.html:14
#, python-format
-msgid "Reports: %(server_name)s "
-msgstr "Informes: %(server_name)s "
+msgid "Reports: %(instance_name)s "
+msgstr "Informes: %(instance_name)s "
#: bookwyrm/templates/moderation/reports.html:28
msgid "Resolved"
@@ -1573,13 +1557,11 @@ msgstr "Borrar notificaciones"
#: bookwyrm/templates/notifications.html:25
msgid "All"
-msgstr ""
+msgstr "Todas"
#: bookwyrm/templates/notifications.html:29
-#, fuzzy
-#| msgid "More options"
msgid "Mentions"
-msgstr "Más opciones"
+msgstr "Menciones"
#: bookwyrm/templates/notifications.html:70
#, python-format
@@ -1680,10 +1662,9 @@ msgid " suggested adding %(book_title)s t
msgstr " sugirió agregar %(book_title)s a tu lista \"%(list_name)s \""
#: bookwyrm/templates/notifications.html:128
-#, fuzzy, python-format
-#| msgid "Your import completed."
+#, python-format
msgid "Your import completed."
-msgstr "Tu importación ha terminado."
+msgstr "Tu importación ha terminado."
#: bookwyrm/templates/notifications.html:131
#, python-format
@@ -1758,31 +1739,45 @@ msgstr "Perfil"
msgid "Relationships"
msgstr "Relaciones"
+#: bookwyrm/templates/rss/title.html:5
+#: bookwyrm/templates/snippets/status/status_header.html:35
+msgid "rated"
+msgstr "calificó"
+
+#: bookwyrm/templates/rss/title.html:7
+#: bookwyrm/templates/snippets/status/status_header.html:37
+msgid "reviewed"
+msgstr "reseñó"
+
+#: bookwyrm/templates/rss/title.html:9
+#: bookwyrm/templates/snippets/status/status_header.html:39
+msgid "commented on"
+msgstr "comentó en"
+
+#: bookwyrm/templates/rss/title.html:11
+#: bookwyrm/templates/snippets/status/status_header.html:41
+msgid "quoted"
+msgstr "citó"
+
#: bookwyrm/templates/search/book.html:64
-#, fuzzy
-#| msgid "Show results from other catalogues"
msgid "Load results from other catalogues"
-msgstr "Mostrar resultados de otros catálogos"
+msgstr "Cargar resultados de otros catálogos"
#: bookwyrm/templates/search/book.html:68
msgid "Manually add book"
-msgstr ""
+msgstr "Agregar libro a mano"
#: bookwyrm/templates/search/book.html:73
msgid "Log in to import or add books."
-msgstr ""
+msgstr "Iniciar una sesión para importar o agregar libros"
#: bookwyrm/templates/search/layout.html:16
-#, fuzzy
-#| msgid "Search for a user"
msgid "Search query"
-msgstr "Buscar un usuario"
+msgstr "Búsqueda"
#: bookwyrm/templates/search/layout.html:19
-#, fuzzy
-#| msgid "Search"
msgid "Search type"
-msgstr "Buscar"
+msgstr "Tipo de búsqueda"
#: bookwyrm/templates/search/layout.html:21
#: bookwyrm/templates/search/layout.html:42
@@ -1799,10 +1794,9 @@ msgid "Users"
msgstr "Usuarios"
#: bookwyrm/templates/search/layout.html:58
-#, fuzzy, python-format
-#| msgid "No lists found for \"%(query)s\""
+#, python-format
msgid "No results found for \"%(query)s\""
-msgstr "No se encontró ningúna lista correspondiente a \"%(query)s\""
+msgstr "No se encontró ningún resultado correspondiente a \"%(query)s\""
#: bookwyrm/templates/settings/admin_layout.html:4
msgid "Administration"
@@ -1815,7 +1809,9 @@ msgstr "Administrar usuarios"
#: bookwyrm/templates/settings/admin_layout.html:39
#: bookwyrm/templates/settings/federation.html:3
#: bookwyrm/templates/settings/federation.html:5
-msgid "Federated Servers"
+#, fuzzy
+#| msgid "Federated Servers"
+msgid "Federated Instances"
msgstr "Servidores federalizados"
#: bookwyrm/templates/settings/admin_layout.html:44
@@ -1856,23 +1852,18 @@ msgstr "Registración"
#: bookwyrm/templates/settings/announcement.html:3
#: bookwyrm/templates/settings/announcement.html:6
-#, fuzzy
-#| msgid "Announcements"
msgid "Announcement"
-msgstr "Anuncios"
+msgstr "Anuncio"
#: bookwyrm/templates/settings/announcement.html:7
#: bookwyrm/templates/settings/federated_server.html:13
-#, fuzzy
-#| msgid "Back to server list"
msgid "Back to list"
msgstr "Volver a la lista de servidores"
#: bookwyrm/templates/settings/announcement.html:11
-#, fuzzy
-#| msgid "Announcements"
+#: bookwyrm/templates/settings/announcement_form.html:6
msgid "Edit Announcement"
-msgstr "Anuncios"
+msgstr "Editar anuncio"
#: bookwyrm/templates/settings/announcement.html:20
#: bookwyrm/templates/snippets/delete_readthrough_modal.html:15
@@ -1882,64 +1873,48 @@ msgstr "Eliminar"
#: bookwyrm/templates/settings/announcement.html:35
msgid "Visible:"
-msgstr ""
+msgstr "Visible:"
#: bookwyrm/templates/settings/announcement.html:38
msgid "True"
-msgstr ""
+msgstr "Verdadero"
#: bookwyrm/templates/settings/announcement.html:40
msgid "False"
-msgstr ""
+msgstr "Falso"
#: bookwyrm/templates/settings/announcement.html:47
-#, fuzzy
-#| msgid "Birth date:"
msgid "Start date:"
-msgstr "Fecha de nacimiento:"
+msgstr "Fecha de inicio:"
#: bookwyrm/templates/settings/announcement.html:54
-#, fuzzy
-#| msgid "Birth date:"
msgid "End date:"
-msgstr "Fecha de nacimiento:"
+msgstr "Fecha final:"
#: bookwyrm/templates/settings/announcement.html:60
-#, fuzzy
-#| msgid "Active"
msgid "Active:"
-msgstr "Activ@"
+msgstr "Activ@:"
-#: bookwyrm/templates/settings/announcement_form.html:5
+#: bookwyrm/templates/settings/announcement_form.html:8
#: bookwyrm/templates/settings/announcements.html:8
-#, fuzzy
-#| msgid "Announcements"
msgid "Create Announcement"
-msgstr "Anuncios"
+msgstr "Crear anuncio"
#: bookwyrm/templates/settings/announcements.html:22
-#, fuzzy
-#| msgid "Date Added"
msgid "Date added"
msgstr "Fecha agregada"
#: bookwyrm/templates/settings/announcements.html:26
-#, fuzzy
-#| msgid "reviewed"
msgid "Preview"
-msgstr "reseñó"
+msgstr "Vista preliminar"
#: bookwyrm/templates/settings/announcements.html:30
-#, fuzzy
-#| msgid "Started"
msgid "Start date"
-msgstr "Empezado"
+msgstr "Fecha de inicio"
#: bookwyrm/templates/settings/announcements.html:34
-#, fuzzy
-#| msgid "Edit read dates"
msgid "End date"
-msgstr "Editar fechas de lectura"
+msgstr "Fecha final"
#: bookwyrm/templates/settings/announcements.html:38
#: bookwyrm/templates/settings/federation.html:30
@@ -1950,16 +1925,12 @@ msgid "Status"
msgstr "Status"
#: bookwyrm/templates/settings/announcements.html:48
-#, fuzzy
-#| msgid "Inactive"
msgid "active"
-msgstr "Inactiv@"
+msgstr "activo"
#: bookwyrm/templates/settings/announcements.html:48
-#, fuzzy
-#| msgid "Inactive"
msgid "inactive"
-msgstr "Inactiv@"
+msgstr "inactivo"
#: bookwyrm/templates/settings/edit_server.html:3
#: bookwyrm/templates/settings/edit_server.html:6
@@ -1968,12 +1939,16 @@ msgstr "Inactiv@"
#: bookwyrm/templates/settings/federation.html:10
#: bookwyrm/templates/settings/server_blocklist.html:3
#: bookwyrm/templates/settings/server_blocklist.html:20
-msgid "Add server"
-msgstr "Agregar servidor"
+#, fuzzy
+#| msgid "View instance"
+msgid "Add instance"
+msgstr "Ver instancia"
#: bookwyrm/templates/settings/edit_server.html:7
#: bookwyrm/templates/settings/server_blocklist.html:7
-msgid "Back to server list"
+#, fuzzy
+#| msgid "Back to server list"
+msgid "Back to instance list"
msgstr "Volver a la lista de servidores"
#: bookwyrm/templates/settings/edit_server.html:16
@@ -2080,8 +2055,10 @@ msgstr "Todos los usuarios en esta instancia serán re-activados."
#: bookwyrm/templates/settings/federation.html:19
#: bookwyrm/templates/user_admin/server_filter.html:5
-msgid "Server name"
-msgstr "Nombre de servidor"
+#, fuzzy
+#| msgid "Instance Name:"
+msgid "Instance name"
+msgstr "Nombre de instancia:"
#: bookwyrm/templates/settings/federation.html:23
msgid "Date federated"
@@ -2202,7 +2179,7 @@ msgid "Import Blocklist"
msgstr "Importar lista de bloqueo"
#: bookwyrm/templates/settings/server_blocklist.html:26
-#: bookwyrm/templates/snippets/goal_progress.html:5
+#: bookwyrm/templates/snippets/goal_progress.html:7
msgid "Success!"
msgstr "¡Meta logrado!"
@@ -2260,7 +2237,7 @@ msgstr "Correo electrónico de administradorx:"
#: bookwyrm/templates/settings/site.html:73
msgid "Additional info:"
-msgstr ""
+msgstr "Más informacion:"
#: bookwyrm/templates/settings/site.html:83
msgid "Allow registration:"
@@ -2275,10 +2252,9 @@ msgid "Registration closed text:"
msgstr "Texto de registración cerrada:"
#: bookwyrm/templates/snippets/announcement.html:31
-#, fuzzy, python-format
-#| msgid "Added by %(username)s "
+#, python-format
msgid "Posted by %(username)s "
-msgstr "Agregado por %(username)s "
+msgstr "Publicado por %(username)s "
#: bookwyrm/templates/snippets/book_cover.html:31
msgid "No cover"
@@ -2289,19 +2265,15 @@ msgstr "Sin portada"
msgid "%(title)s by "
msgstr "%(title)s por "
-#: bookwyrm/templates/snippets/boost_button.html:9
-#: bookwyrm/templates/snippets/boost_button.html:10
-#, fuzzy
-#| msgid "boosted"
+#: bookwyrm/templates/snippets/boost_button.html:20
+#: bookwyrm/templates/snippets/boost_button.html:21
msgid "Boost"
-msgstr "respaldó"
+msgstr "Respaldar"
-#: bookwyrm/templates/snippets/boost_button.html:16
-#: bookwyrm/templates/snippets/boost_button.html:17
-#, fuzzy
-#| msgid "Un-boost status"
+#: bookwyrm/templates/snippets/boost_button.html:33
+#: bookwyrm/templates/snippets/boost_button.html:34
msgid "Un-boost"
-msgstr "Status de des-respaldo"
+msgstr "Des-respaldar"
#: bookwyrm/templates/snippets/content_warning_field.html:3
msgid "Spoiler alert:"
@@ -2339,10 +2311,8 @@ msgid "Reply"
msgstr "Respuesta"
#: bookwyrm/templates/snippets/create_status_form.html:56
-#, fuzzy
-#| msgid "Footer Content"
msgid "Content"
-msgstr "Contenido del pie de página"
+msgstr "Contenido"
#: bookwyrm/templates/snippets/create_status_form.html:80
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16
@@ -2391,17 +2361,15 @@ msgstr "¿Eliminar estas fechas de lectura?"
msgid "You are deleting this readthrough and its %(count)s associated progress updates."
msgstr "Estás eliminando esta lectura y sus %(count)s actualizaciones de progreso asociados."
-#: bookwyrm/templates/snippets/fav_button.html:9
-#: bookwyrm/templates/snippets/fav_button.html:11
+#: bookwyrm/templates/snippets/fav_button.html:10
+#: bookwyrm/templates/snippets/fav_button.html:12
msgid "Like"
-msgstr ""
+msgstr "Me gusta"
-#: bookwyrm/templates/snippets/fav_button.html:17
#: bookwyrm/templates/snippets/fav_button.html:18
-#, fuzzy
-#| msgid "Un-like status"
+#: bookwyrm/templates/snippets/fav_button.html:19
msgid "Un-like"
-msgstr "Quitar me gusta de status"
+msgstr "Quitar me gusta"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:7
msgid "Show filters"
@@ -2440,6 +2408,14 @@ msgstr "Aceptar"
msgid "No rating"
msgstr "No calificación"
+#: bookwyrm/templates/snippets/form_rate_stars.html:44
+#: bookwyrm/templates/snippets/stars.html:7
+#, python-format
+msgid "%(rating)s star"
+msgid_plural "%(rating)s stars"
+msgstr[0] "%(rating)s estrella"
+msgstr[1] "%(rating)s estrellas"
+
#: bookwyrm/templates/snippets/generated_status/goal.html:1
#, python-format
msgid "set a goal to read %(counter)s book in %(year)s"
@@ -2494,17 +2470,17 @@ msgstr "Compartir con tu feed"
msgid "Set goal"
msgstr "Establecer meta"
-#: bookwyrm/templates/snippets/goal_progress.html:7
+#: bookwyrm/templates/snippets/goal_progress.html:9
#, python-format
msgid "%(percent)s%% complete!"
msgstr "%(percent)s%% terminado!"
-#: bookwyrm/templates/snippets/goal_progress.html:10
+#: bookwyrm/templates/snippets/goal_progress.html:12
#, python-format
msgid "You've read %(read_count)s of %(goal_count)s books ."
msgstr "Has leído %(read_count)s de %(goal_count)s libros ."
-#: bookwyrm/templates/snippets/goal_progress.html:12
+#: bookwyrm/templates/snippets/goal_progress.html:14
#, python-format
msgid "%(username)s has read %(read_count)s of %(goal_count)s books ."
msgstr "%(username)s ha leído %(read_count)s de %(goal_count)s libros ."
@@ -2614,26 +2590,6 @@ msgstr "Inscribirse"
msgid "Report"
msgstr "Reportar"
-#: bookwyrm/templates/snippets/rss_title.html:5
-#: bookwyrm/templates/snippets/status/status_header.html:35
-msgid "rated"
-msgstr "calificó"
-
-#: bookwyrm/templates/snippets/rss_title.html:7
-#: bookwyrm/templates/snippets/status/status_header.html:37
-msgid "reviewed"
-msgstr "reseñó"
-
-#: bookwyrm/templates/snippets/rss_title.html:9
-#: bookwyrm/templates/snippets/status/status_header.html:39
-msgid "commented on"
-msgstr "comentó en"
-
-#: bookwyrm/templates/snippets/rss_title.html:11
-#: bookwyrm/templates/snippets/status/status_header.html:41
-msgid "quoted"
-msgstr "citó"
-
#: bookwyrm/templates/snippets/search_result_text.html:36
msgid "Import book"
msgstr "Importar libro"
@@ -2706,7 +2662,7 @@ msgstr "Eliminar status"
#: bookwyrm/templates/snippets/status/layout.html:51
#: bookwyrm/templates/snippets/status/layout.html:52
msgid "Boost status"
-msgstr "Status de respaldo"
+msgstr "Respaldar status"
#: bookwyrm/templates/snippets/status/layout.html:55
#: bookwyrm/templates/snippets/status/layout.html:56
@@ -2803,7 +2759,7 @@ msgstr "Editar estante"
msgid "Update shelf"
msgstr "Actualizar estante"
-#: bookwyrm/templates/user/shelf/shelf.html:25 bookwyrm/views/shelf.py:51
+#: bookwyrm/templates/user/shelf/shelf.html:25 bookwyrm/views/shelf.py:56
msgid "All books"
msgstr "Todos los libros"
@@ -2811,30 +2767,30 @@ msgstr "Todos los libros"
msgid "Create shelf"
msgstr "Crear estante"
-#: bookwyrm/templates/user/shelf/shelf.html:61
+#: bookwyrm/templates/user/shelf/shelf.html:62
msgid "Edit shelf"
msgstr "Editar estante"
-#: bookwyrm/templates/user/shelf/shelf.html:80
-#: bookwyrm/templates/user/shelf/shelf.html:104
+#: bookwyrm/templates/user/shelf/shelf.html:81
+#: bookwyrm/templates/user/shelf/shelf.html:105
msgid "Shelved"
msgstr "Archivado"
-#: bookwyrm/templates/user/shelf/shelf.html:81
-#: bookwyrm/templates/user/shelf/shelf.html:108
+#: bookwyrm/templates/user/shelf/shelf.html:82
+#: bookwyrm/templates/user/shelf/shelf.html:109
msgid "Started"
msgstr "Empezado"
-#: bookwyrm/templates/user/shelf/shelf.html:82
-#: bookwyrm/templates/user/shelf/shelf.html:111
+#: bookwyrm/templates/user/shelf/shelf.html:83
+#: bookwyrm/templates/user/shelf/shelf.html:112
msgid "Finished"
msgstr "Terminado"
-#: bookwyrm/templates/user/shelf/shelf.html:137
+#: bookwyrm/templates/user/shelf/shelf.html:138
msgid "This shelf is empty."
msgstr "Este estante está vacio."
-#: bookwyrm/templates/user/shelf/shelf.html:143
+#: bookwyrm/templates/user/shelf/shelf.html:144
msgid "Delete shelf"
msgstr "Eliminar estante"
@@ -2881,13 +2837,11 @@ msgid "%(counter)s following"
msgstr "%(counter)s siguiendo"
#: bookwyrm/templates/user/user_preview.html:26
-#, fuzzy, python-format
-#| msgid "%(mutuals)s follower you follow"
-#| msgid_plural "%(mutuals)s followers you follow"
+#, python-format
msgid "%(mutuals_display)s follower you follow"
msgid_plural "%(mutuals_display)s followers you follow"
-msgstr[0] "%(mutuals)s seguidor que sigues"
-msgstr[1] "%(mutuals)s seguidores que sigues"
+msgstr[0] "%(mutuals_display)s seguidor que sigues"
+msgstr[1] "%(mutuals_display)s seguidores que sigues"
#: bookwyrm/templates/user_admin/user.html:9
msgid "Back to users"
@@ -2895,8 +2849,8 @@ msgstr "Volver a usuarios"
#: bookwyrm/templates/user_admin/user_admin.html:7
#, python-format
-msgid "Users: %(server_name)s "
-msgstr "Usuarios %(server_name)s "
+msgid "Users: %(instance_name)s "
+msgstr "Usuarios %(instance_name)s "
#: bookwyrm/templates/user_admin/user_admin.html:22
#: bookwyrm/templates/user_admin/username_filter.html:5
@@ -2912,8 +2866,10 @@ msgid "Last Active"
msgstr "Actividad reciente"
#: bookwyrm/templates/user_admin/user_admin.html:38
-msgid "Remote server"
-msgstr "Quitar servidor"
+#, fuzzy
+#| msgid "View instance"
+msgid "Remote instance"
+msgstr "Ver instancia"
#: bookwyrm/templates/user_admin/user_admin.html:47
msgid "Active"
@@ -2956,11 +2912,13 @@ msgstr "Des-suspender usuario"
msgid "Access level:"
msgstr "Nivel de acceso:"
+#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:3
+msgid "File exceeds maximum size: 10MB"
+msgstr ""
+
#: bookwyrm/views/import_data.py:67
-#, fuzzy
-#| msgid "Enter a valid value."
msgid "Not a valid csv file"
-msgstr "Ingrese un valor válido."
+msgstr "No un archivo csv válido"
#: bookwyrm/views/password.py:32
msgid "No user with that email address was found."
@@ -2971,6 +2929,18 @@ msgstr "No se pudo encontrar un usuario con esa dirección de correo electrónic
msgid "A password reset link sent to %s"
msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
+#~ msgid "Federated Servers"
+#~ msgstr "Servidores federalizados"
+
+#~ msgid "Server name"
+#~ msgstr "Nombre de servidor"
+
+#~ msgid "Add server"
+#~ msgstr "Agregar servidor"
+
+#~ msgid "Remote server"
+#~ msgstr "Quitar servidor"
+
#, fuzzy
#~| msgid "BookWyrm users"
#~ msgid "BookWyrm\\"
@@ -2981,7 +2951,6 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "Show"
#~ msgstr "Mostrar más"
-#, python-format
#~ msgid "ambiguous option: %(option)s could match %(matches)s"
#~ msgstr "opción ambiguo: %(option)s pudiera coincidir con %(matches)s"
@@ -3033,25 +3002,20 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "Enter only digits separated by commas."
#~ msgstr "Ingrese solo digitos separados por comas."
-#, python-format
#~ msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
#~ msgstr "Asegura que este valor es %(limit_value)s (es %(show_value)s)."
-#, python-format
#~ msgid "Ensure this value is less than or equal to %(limit_value)s."
#~ msgstr "Asegura que este valor es menor que o iguala a %(limit_value)s."
-#, python-format
#~ msgid "Ensure this value is greater than or equal to %(limit_value)s."
#~ msgstr "Asegura que este valor es más que o que iguala a %(limit_value)s."
-#, python-format
#~ msgid "Ensure this value has at least %(limit_value)d character (it has %(show_value)d)."
#~ msgid_plural "Ensure this value has at least %(limit_value)d characters (it has %(show_value)d)."
#~ msgstr[0] "Verifica que este valor tiene por lo menos %(limit_value)d carácter. (Tiene %(show_value)d).)"
#~ msgstr[1] "Verifica que este valor tiene por lo menos %(limit_value)d caracteres. (Tiene %(show_value)d).)"
-#, python-format
#~ msgid "Ensure this value has at most %(limit_value)d character (it has %(show_value)d)."
#~ msgid_plural "Ensure this value has at most %(limit_value)d characters (it has %(show_value)d)."
#~ msgstr[0] "Verifica que este valor tiene a lo sumo %(limit_value)d carácter. (Tiene %(show_value)d).)"
@@ -3060,26 +3024,22 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "Enter a number."
#~ msgstr "Ingrese un número."
-#, python-format
#~ msgid "Ensure that there are no more than %(max)s digit in total."
#~ msgid_plural "Ensure that there are no more than %(max)s digits in total."
#~ msgstr[0] "Verifica que no hay más que %(max)s digito en total."
#~ msgstr[1] "Verifica que no hay más que %(max)s digitos en total."
# is
-#, python-format
#~ msgid "Ensure that there are no more than %(max)s decimal place."
#~ msgid_plural "Ensure that there are no more than %(max)s decimal places."
#~ msgstr[0] "Verifica que no hay más que %(max)s cifra decimal."
#~ msgstr[1] "Verifica que no hay más que %(max)s cifras decimales."
-#, python-format
#~ msgid "Ensure that there are no more than %(max)s digit before the decimal point."
#~ msgid_plural "Ensure that there are no more than %(max)s digits before the decimal point."
#~ msgstr[0] "Verifica que no hay más que %(max)s digito antes de la coma decimal."
#~ msgstr[1] "Verifica que no hay más que %(max)s digitos antes de la coma decimal."
-#, python-format
#~ msgid "File extension “%(extension)s” is not allowed. Allowed extensions are: %(allowed_extensions)s."
#~ msgstr "No se permite la extensión de archivo “%(extension)s”. Extensiones permitidas son: %(allowed_extensions)s."
@@ -3089,11 +3049,9 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "and"
#~ msgstr "y"
-#, python-format
#~ msgid "%(model_name)s with this %(field_labels)s already exists."
#~ msgstr "Ya existe %(model_name)s con este %(field_labels)s."
-#, python-format
#~ msgid "Value %(value)r is not a valid choice."
#~ msgstr "El valor %(value)s no es una opción válida."
@@ -3103,67 +3061,56 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "This field cannot be blank."
#~ msgstr "Este campo no puede ser vacio."
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(model_name)s with this %(field_label)s already exists."
#~ msgid "%(model_name)s with this %(field_label)s already exists."
#~ msgstr "Ya existe %(model_name)s con este %(field_labels)s."
-#, python-format
#~ msgid "%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s."
#~ msgstr "%(field_label)s deben ser unicos por %(date_field_label)s %(lookup_type)s."
-#, python-format
#~ msgid "Field of type: %(field_type)s"
#~ msgstr "Campo de tipo: %(field_type)s"
-#, python-format
#~ msgid "“%(value)s” value must be either True or False."
#~ msgstr "“%(value)s” valor debe ser o verdadero o falso."
-#, python-format
#~ msgid "“%(value)s” value must be either True, False, or None."
#~ msgstr "%(value)s” valor debe ser o True, False, o None."
#~ msgid "Boolean (Either True or False)"
#~ msgstr "Booleano (O True O False)"
-#, python-format
#~ msgid "String (up to %(max_length)s)"
#~ msgstr "Cadena (máximo de %(max_length)s caracteres)"
#~ msgid "Comma-separated integers"
#~ msgstr "Enteros separados por comas"
-#, python-format
#~ msgid "“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD format."
#~ msgstr "“%(value)s” valor tiene un formato de fecha inválido. Hay que estar de formato YYYY-MM-DD."
-#, python-format
#~ msgid "“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid date."
#~ msgstr "“%(value)s” valor tiene el formato correcto (YYYY-MM-DD) pero la fecha es invalida."
#~ msgid "Date (without time)"
#~ msgstr "Fecha (sin la hora)"
-#, python-format
#~ msgid "“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."
#~ msgstr "“%(value)s” valor tiene un formato invalido. Debe estar en formato YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]."
-#, python-format
#~ msgid "“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) but it is an invalid date/time."
#~ msgstr "“%(value)s” valor tiene el formato correcto (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) pero es una fecha/hora invalida."
#~ msgid "Date (with time)"
#~ msgstr "Fecha (con la hora)"
-#, python-format
#~ msgid "“%(value)s” value must be a decimal number."
#~ msgstr "El valor de “%(value)s” debe ser un número decimal."
#~ msgid "Decimal number"
#~ msgstr "Número decimal"
-#, python-format
#~ msgid "“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[.uuuuuu] format."
#~ msgstr "“%(value)s” valor tiene un formato invalido. Debe estar en formato [DD] [[HH:]MM:]ss[.uuuuuu]."
@@ -3176,14 +3123,12 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "File path"
#~ msgstr "Ruta de archivo"
-#, python-format
#~ msgid "“%(value)s” value must be a float."
#~ msgstr "%(value)s no es un usuario válido"
#~ msgid "Floating point number"
#~ msgstr "Número de coma flotante"
-#, python-format
#~ msgid "“%(value)s” value must be an integer."
#~ msgstr "“%(value)s” valor debe ser un entero."
@@ -3199,7 +3144,6 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "IP address"
#~ msgstr "Dirección IP"
-#, python-format
#~ msgid "“%(value)s” value must be either None, True or False."
#~ msgstr "Valor “%(value)s” debe ser o None, True, o False."
@@ -3212,7 +3156,6 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "Positive small integer"
#~ msgstr "Entero positivo pequeño "
-#, python-format
#~ msgid "Slug (up to %(max_length)s)"
#~ msgstr "Slug (máximo de %(max_length)s)"
@@ -3222,11 +3165,9 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "Text"
#~ msgstr "Texto"
-#, python-format
#~ msgid "“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] format."
#~ msgstr "“%(value)s” valor tiene un formato invalido. Debe estar en formato HH:MM[:ss[.uuuuuu]]."
-#, python-format
#~ msgid "“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an invalid time."
#~ msgstr "“%(value)s” valor tiene el formato correcto (HH:MM[:ss[.uuuuuu]]) pero es una hora invalida."
@@ -3239,7 +3180,6 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "Raw binary data"
#~ msgstr "Datos binarios sin procesar"
-#, python-format
#~ msgid "“%(value)s” is not a valid UUID."
#~ msgstr "%(value)s no es una UUID válida."
@@ -3252,7 +3192,6 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "Image"
#~ msgstr "Imágen"
-#, python-format
#~ msgid "%(model)s instance with %(field)s %(value)r does not exist."
#~ msgstr "%(model)s instancia con %(field)s %(value)r no existe."
@@ -3262,11 +3201,9 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "One-to-one relationship"
#~ msgstr "Relación uno-a-uno"
-#, python-format
#~ msgid "%(from)s-%(to)s relationship"
#~ msgstr "relación %(from)s-%(to)s"
-#, python-format
#~ msgid "%(from)s-%(to)s relationships"
#~ msgstr "relaciones %(from)s-%(to)s"
@@ -3291,7 +3228,6 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "Enter a valid duration."
#~ msgstr "Ingrese una duración válida."
-#, python-brace-format
#~ msgid "The number of days must be between {min_days} and {max_days}."
#~ msgstr "El número de dias debe ser entre {min_days} y {max_days}."
@@ -3304,7 +3240,6 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "The submitted file is empty."
#~ msgstr "El archivo enviado está vacio."
-#, python-format
#~ msgid "Ensure this filename has at most %(max)d character (it has %(length)d)."
#~ msgid_plural "Ensure this filename has at most %(max)d characters (it has %(length)d)."
#~ msgstr[0] "Verifica que este nombre de archivo no tiene más que %(max)d carácter. (Tiene %(length)d)."
@@ -3316,7 +3251,6 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
#~ msgstr "Subir una imagen válida. El archivo que subiste o no fue imagen o fue corrupto."
-#, python-format
#~ msgid "Select a valid choice. %(value)s is not one of the available choices."
#~ msgstr "Selecciona una opción válida. %(value)s no es una de las opciones disponibles."
@@ -3332,20 +3266,17 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid ":"
#~ msgstr ":"
-#, python-format
#~ msgid "(Hidden field %(name)s) %(error)s"
#~ msgstr "(Campo oculto %(name)s) %(error)s"
#~ msgid "ManagementForm data is missing or has been tampered with"
#~ msgstr "Datos de ManagementForm está ausento o ha sido corrompido"
-#, python-format
#~ msgid "Please submit %d or fewer forms."
#~ msgid_plural "Please submit %d or fewer forms."
#~ msgstr[0] "Por favor, enviar %d o menos formularios."
#~ msgstr[1] "Por favor, enviar %d o menos formularios."
-#, python-format
#~ msgid "Please submit %d or more forms."
#~ msgid_plural "Please submit %d or more forms."
#~ msgstr[0] "Por favor, enviar %d o más formularios."
@@ -3358,15 +3289,12 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
# if verb
# msgstr "Pedido" # if noun
-#, python-format
#~ msgid "Please correct the duplicate data for %(field)s."
#~ msgstr "Por favor corrige los datos duplicados en %(field)s."
-#, python-format
#~ msgid "Please correct the duplicate data for %(field)s, which must be unique."
#~ msgstr "Por favor corrige los datos duplicados en %(field)s, los cuales deben ser unicos."
-#, python-format
#~ msgid "Please correct the duplicate data for %(field_name)s which must be unique for the %(lookup)s in %(date_field)s."
#~ msgstr "Por favor corrige los datos duplicados en %(field_name)s los cuales deben ser unicos por el %(lookup)s en %(date_field)s."
@@ -3379,11 +3307,9 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "Select a valid choice. That choice is not one of the available choices."
#~ msgstr "Selecciona una opción válida. Esa opción no es una de las opciones disponibles."
-#, python-format
#~ msgid "“%(pk)s” is not a valid value."
#~ msgstr "“%(pk)s” no es un valor válido."
-#, python-format
#~ msgid "%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it may be ambiguous or it may not exist."
#~ msgstr "%(datetime)s no se pudo interpretar en la zona horaria %(current_timezone)s; puede ser ambiguo o puede que no exista."
@@ -3408,29 +3334,23 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "yes,no,maybe"
#~ msgstr "sí,no,quizás"
-#, python-format
#~ msgid "%(size)d byte"
#~ msgid_plural "%(size)d bytes"
#~ msgstr[0] "%(size)d byte"
#~ msgstr[1] "%(size)d bytes"
-#, python-format
#~ msgid "%s KB"
#~ msgstr "%s KB"
-#, python-format
#~ msgid "%s MB"
#~ msgstr "%s MB"
-#, python-format
#~ msgid "%s GB"
#~ msgstr "%s GB"
-#, python-format
#~ msgid "%s TB"
#~ msgstr "%s TB"
-#, python-format
#~ msgid "%s PB"
#~ msgstr "%s PB"
@@ -3665,7 +3585,6 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "This is not a valid IPv6 address."
#~ msgstr "Esta no es una dirección IPv6 válida."
-#, python-format
#~ msgctxt "String to return when truncating text"
#~ msgid "%(truncated_text)s…"
#~ msgstr "%(truncated_text)s…"
@@ -3676,37 +3595,31 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid ", "
#~ msgstr ", "
-#, python-format
#~ msgid "%d year"
#~ msgid_plural "%d years"
#~ msgstr[0] "%d año"
#~ msgstr[1] "%d años"
-#, python-format
#~ msgid "%d month"
#~ msgid_plural "%d months"
#~ msgstr[0] "%d mes"
#~ msgstr[1] "%d meses"
-#, python-format
#~ msgid "%d week"
#~ msgid_plural "%d weeks"
#~ msgstr[0] "%d semana"
#~ msgstr[1] "%d semanas"
-#, python-format
#~ msgid "%d day"
#~ msgid_plural "%d days"
#~ msgstr[0] "%d día"
#~ msgstr[1] "%d días"
-#, python-format
#~ msgid "%d hour"
#~ msgid_plural "%d hours"
#~ msgstr[0] "%d hora"
#~ msgstr[1] "%d horas"
-#, python-format
#~ msgid "%d minute"
#~ msgid_plural "%d minutes"
#~ msgstr[0] "%d minuto"
@@ -3757,55 +3670,45 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "No week specified"
#~ msgstr "Ninguna semana fue especificado"
-#, python-format
#~ msgid "No %(verbose_name_plural)s available"
#~ msgstr "No %(verbose_name_plural)s disponible"
-#, python-format
#~ msgid "Future %(verbose_name_plural)s not available because %(class_name)s.allow_future is False."
#~ msgstr "%(verbose_name_plural)s del futuro no está disponible porque %(class_name)s.allow_future es False."
-#, python-format
#~ msgid "Invalid date string “%(datestr)s” given format “%(format)s”"
#~ msgstr "Cadena de fecha invalida “%(datestr)s” dado el formato “%(format)s”"
-#, python-format
#~ msgid "No %(verbose_name)s found matching the query"
#~ msgstr "No se encontró ningún %(verbose_name)s correspondiente a la búsqueda"
#~ msgid "Page is not “last”, nor can it be converted to an int."
#~ msgstr "Página no es “last”, ni puede ser convertido en un int."
-#, python-format
#~ msgid "Invalid page (%(page_number)s): %(message)s"
#~ msgstr "Página invalida (%(page_number)s): %(message)s"
-#, python-format
#~ msgid "Empty list and “%(class_name)s.allow_empty” is False."
#~ msgstr "Lista vacia y “%(class_name)s.allow_empty” es False."
#~ msgid "Directory indexes are not allowed here."
#~ msgstr "Indices directorios no se permiten aquí."
-#, python-format
#~ msgid "“%(path)s” does not exist"
#~ msgstr "“%(path)s” no existe"
-#, python-format
#~ msgid "Index of %(directory)s"
#~ msgstr "Indice de %(directory)s"
#~ msgid "Django: the Web framework for perfectionists with deadlines."
#~ msgstr "Django: el estructura Web para perfeccionistas con fechas límites."
-#, python-format
#~ msgid "View release notes for Django %(version)s"
#~ msgstr "Ver notas de lanzamiento por Django %(version)s"
#~ msgid "The install worked successfully! Congratulations!"
#~ msgstr "¡La instalación fue exitoso! ¡Felicidades!"
-#, python-format
#~ msgid "You are seeing this page because DEBUG=True is in your settings file and you have not configured any URLs."
#~ msgstr "Estás viendo esta pagina porque DEBUG=True está en tu archivo de configuración y no has configurado ningún URL."
@@ -3827,15 +3730,12 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "Connect, get help, or contribute"
#~ msgstr "Conectarse, encontrar ayuda, o contribuir"
-#, python-format
#~ msgid "Attempting to connect to qpid with SASL mechanism %s"
#~ msgstr "Intentando conectar con qpid con mecanismo SASL %s"
-#, python-format
#~ msgid "Connected to qpid with SASL mechanism %s"
#~ msgstr "Conectado con qpid con mecanismo SASL %s"
-#, python-format
#~ msgid "Unable to connect to qpid with SASL mechanism %s"
#~ msgstr "No se pudo conectar con qpid con mecanismo SASL %s"
@@ -3848,7 +3748,6 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "1 hour ago"
#~ msgstr "Hace 1 hora"
-#, python-format
#~ msgid "%(time)s"
#~ msgstr "%(time)s"
@@ -3857,45 +3756,36 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
# TODO cc @mouse this could be grammatically incorrect if the time said 1 o'clock
# a working clock is broken twice a day!
-#, python-format
#~ msgid "yesterday at %(time)s"
#~ msgstr "ayer a las %(time)s"
-#, python-format
#~ msgid "%(weekday)s"
#~ msgstr "%(weekday)s"
# TODO cc @mouse this could be grammatically incorrect if the time said 1 o'clock
# a working clock is broken twice a day!
-#, python-format
#~ msgid "%(weekday)s at %(time)s"
#~ msgstr "%(weekday)s a las %(time)s"
-#, python-format
#~ msgid "%(month_name)s %(day)s"
#~ msgstr "%(day)s %(month_name)s"
# TODO cc @mouse this could be grammatically incorrect if the time said 1 o'clock
# a working clock is broken twice a day!
-#, python-format
#~ msgid "%(month_name)s %(day)s at %(time)s"
#~ msgstr "%(day)s %(month_name)s a las %(time)s"
-#, python-format
#~ msgid "%(month_name)s %(day)s, %(year)s"
#~ msgstr "%(day)s %(month_name)s, %(year)s"
# TODO cc @mouse this could be grammatically incorrect if the time said 1 o'clock
# a working clock is broken twice a day!
-#, python-format
#~ msgid "%(month_name)s %(day)s, %(year)s at %(time)s"
#~ msgstr "%(day)s %(month_name)s, %(year)s a las %(time)s"
-#, python-format
#~ msgid "%(weekday)s, %(month_name)s %(day)s"
#~ msgstr "%(weekday)s, %(day)s %(month_name)s"
-#, python-format
#~ msgid "%(commas)s and %(last)s"
#~ msgstr "%(commas)s y %(last)s"
@@ -3924,29 +3814,18 @@ msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#~ msgid "Matching Users"
#~ msgstr "Usuarios correspondientes"
-#, python-format
#~ msgid "Set a reading goal for %(year)s"
#~ msgstr "Establecer una meta de lectura para %(year)s"
-#, python-format
#~ msgid "by %(author)s"
#~ msgstr "por %(author)s"
-#, python-format
-#~ msgid "%(rating)s star"
-#~ msgid_plural "%(rating)s stars"
-#~ msgstr[0] "%(rating)s estrella"
-#~ msgstr[1] "%(rating)s estrellas"
-
-#, python-format
#~ msgid "replied to %(username)s's review "
#~ msgstr "respondió a la reseña de %(username)s "
-#, python-format
#~ msgid "replied to %(username)s's comment "
#~ msgstr "respondió al comentario de %(username)s "
-#, python-format
#~ msgid "replied to %(username)s's quote "
#~ msgstr "respondió a la cita de %(username)s "
diff --git a/locale/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo
index 8d377f420..3d622ac66 100644
Binary files a/locale/fr_FR/LC_MESSAGES/django.mo and b/locale/fr_FR/LC_MESSAGES/django.mo differ
diff --git a/locale/fr_FR/LC_MESSAGES/django.po b/locale/fr_FR/LC_MESSAGES/django.po
index 577614544..d29afc1cf 100644
--- a/locale/fr_FR/LC_MESSAGES/django.po
+++ b/locale/fr_FR/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-20 14:40-0700\n"
+"POT-Creation-Date: 2021-06-09 16:46+0000\n"
"PO-Revision-Date: 2021-04-05 12:44+0100\n"
"Last-Translator: Fabien Basmaison \n"
"Language-Team: Mouse Reeve \n"
@@ -49,71 +49,65 @@ msgstr "Sans limite"
#: bookwyrm/forms.py:299
msgid "List Order"
-msgstr ""
+msgstr "Ordre de la liste"
#: bookwyrm/forms.py:300
-#, fuzzy
-#| msgid "Title"
msgid "Book Title"
-msgstr "Titre"
+msgstr "Titre du livre"
#: bookwyrm/forms.py:301 bookwyrm/templates/snippets/create_status_form.html:34
-#: bookwyrm/templates/user/shelf/shelf.html:84
-#: bookwyrm/templates/user/shelf/shelf.html:115
+#: bookwyrm/templates/user/shelf/shelf.html:85
+#: bookwyrm/templates/user/shelf/shelf.html:116
msgid "Rating"
msgstr "Note"
-#: bookwyrm/forms.py:303 bookwyrm/templates/lists/list.html:101
+#: bookwyrm/forms.py:303 bookwyrm/templates/lists/list.html:107
msgid "Sort By"
-msgstr ""
+msgstr "Trier par"
#: bookwyrm/forms.py:307
-#, fuzzy
-#| msgid "Sorted ascending"
msgid "Ascending"
-msgstr "Trié par ordre croissant"
+msgstr "Ordre croissant"
#: bookwyrm/forms.py:308
-#, fuzzy
-#| msgid "Sorted ascending"
msgid "Descending"
-msgstr "Trié par ordre croissant"
+msgstr "Ordre décroissant"
-#: bookwyrm/models/fields.py:24
+#: bookwyrm/models/fields.py:25
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s n’est pas une remote_id valide."
-#: bookwyrm/models/fields.py:33 bookwyrm/models/fields.py:42
+#: bookwyrm/models/fields.py:34 bookwyrm/models/fields.py:43
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s n’est pas un nom de compte valide."
-#: bookwyrm/models/fields.py:165 bookwyrm/templates/layout.html:155
+#: bookwyrm/models/fields.py:166 bookwyrm/templates/layout.html:152
msgid "username"
msgstr "nom du compte :"
-#: bookwyrm/models/fields.py:170
+#: bookwyrm/models/fields.py:171
msgid "A user with that username already exists."
msgstr "Ce nom est déjà associé à un compte."
-#: bookwyrm/settings.py:155
+#: bookwyrm/settings.py:156
msgid "English"
msgstr "English"
-#: bookwyrm/settings.py:156
+#: bookwyrm/settings.py:157
msgid "German"
msgstr "Deutsch"
-#: bookwyrm/settings.py:157
+#: bookwyrm/settings.py:158
msgid "Spanish"
msgstr "Español"
-#: bookwyrm/settings.py:158
+#: bookwyrm/settings.py:159
msgid "French"
msgstr "Français"
-#: bookwyrm/settings.py:159
+#: bookwyrm/settings.py:160
msgid "Simplified Chinese"
msgstr "简化字"
@@ -142,36 +136,42 @@ msgstr "Une erreur s’est produite ; désolé !"
msgid "Edit Author"
msgstr "Modifier l’auteur ou autrice"
-#: bookwyrm/templates/author/author.html:32
-#: bookwyrm/templates/author/edit_author.html:38
+#: bookwyrm/templates/author/author.html:34
+#: bookwyrm/templates/author/edit_author.html:41
msgid "Aliases:"
-msgstr ""
+msgstr "Pseudonymes :"
-#: bookwyrm/templates/author/author.html:38
+#: bookwyrm/templates/author/author.html:45
msgid "Born:"
-msgstr ""
+msgstr "Naissance :"
-#: bookwyrm/templates/author/author.html:44
+#: bookwyrm/templates/author/author.html:52
msgid "Died:"
-msgstr ""
+msgstr "Décès :"
-#: bookwyrm/templates/author/author.html:51
+#: bookwyrm/templates/author/author.html:61
msgid "Wikipedia"
msgstr "Wikipedia"
-#: bookwyrm/templates/author/author.html:55
-#: bookwyrm/templates/book/book.html:78
+#: bookwyrm/templates/author/author.html:69
+#: bookwyrm/templates/book/book.html:87
msgid "View on OpenLibrary"
msgstr "Voir sur OpenLibrary"
-#: bookwyrm/templates/author/author.html:60
-#: bookwyrm/templates/book/book.html:81
-#, fuzzy
-#| msgid "View on OpenLibrary"
+#: bookwyrm/templates/author/author.html:77
+#: bookwyrm/templates/book/book.html:90
msgid "View on Inventaire"
-msgstr "Voir sur OpenLibrary"
+msgstr "Voir sur Inventaire"
-#: bookwyrm/templates/author/author.html:74
+#: bookwyrm/templates/author/author.html:85
+msgid "View on LibraryThing"
+msgstr "Voir sur LibraryThing"
+
+#: bookwyrm/templates/author/author.html:93
+msgid "View on Goodreads"
+msgstr "Voir sur Goodreads"
+
+#: bookwyrm/templates/author/author.html:108
#, python-format
msgid "Books by %(name)s"
msgstr "Livres par %(name)s"
@@ -181,89 +181,85 @@ msgid "Edit Author:"
msgstr "Modifier l’auteur ou l’autrice :"
#: bookwyrm/templates/author/edit_author.html:13
-#: bookwyrm/templates/book/edit_book.html:18
+#: bookwyrm/templates/book/edit_book.html:19
msgid "Added:"
-msgstr "AJouté :"
+msgstr "Ajouté :"
#: bookwyrm/templates/author/edit_author.html:14
-#: bookwyrm/templates/book/edit_book.html:19
+#: bookwyrm/templates/book/edit_book.html:24
msgid "Updated:"
msgstr "Mis à jour :"
#: bookwyrm/templates/author/edit_author.html:15
-#: bookwyrm/templates/book/edit_book.html:20
+#: bookwyrm/templates/book/edit_book.html:30
msgid "Last edited by:"
msgstr "Dernière modification par :"
#: bookwyrm/templates/author/edit_author.html:31
-#: bookwyrm/templates/book/edit_book.html:90
+#: bookwyrm/templates/book/edit_book.html:117
msgid "Metadata"
msgstr "Métadonnées"
-#: bookwyrm/templates/author/edit_author.html:32
+#: bookwyrm/templates/author/edit_author.html:33
#: bookwyrm/templates/lists/form.html:8
#: bookwyrm/templates/user/shelf/create_shelf_form.html:13
#: bookwyrm/templates/user/shelf/edit_shelf_form.html:14
msgid "Name:"
msgstr "Nom :"
-#: bookwyrm/templates/author/edit_author.html:40
-#: bookwyrm/templates/book/edit_book.html:132
-#: bookwyrm/templates/book/edit_book.html:141
-#: bookwyrm/templates/book/edit_book.html:178
-#, fuzzy
-#| msgid "Separate multiple publishers with commas."
+#: bookwyrm/templates/author/edit_author.html:43
+#: bookwyrm/templates/book/edit_book.html:162
+#: bookwyrm/templates/book/edit_book.html:171
+#: bookwyrm/templates/book/edit_book.html:214
msgid "Separate multiple values with commas."
-msgstr "Séparez plusieurs éditeurs par une virgule."
+msgstr "Séparez plusieurs valeurs par une virgule."
-#: bookwyrm/templates/author/edit_author.html:46
+#: bookwyrm/templates/author/edit_author.html:50
msgid "Bio:"
msgstr "Bio :"
-#: bookwyrm/templates/author/edit_author.html:51
+#: bookwyrm/templates/author/edit_author.html:57
msgid "Wikipedia link:"
msgstr "Wikipedia :"
-#: bookwyrm/templates/author/edit_author.html:57
+#: bookwyrm/templates/author/edit_author.html:63
msgid "Birth date:"
msgstr "Date de naissance :"
-#: bookwyrm/templates/author/edit_author.html:65
+#: bookwyrm/templates/author/edit_author.html:71
msgid "Death date:"
msgstr "Date de décès :"
-#: bookwyrm/templates/author/edit_author.html:73
+#: bookwyrm/templates/author/edit_author.html:79
msgid "Author Identifiers"
msgstr "Identifiants de l’auteur ou autrice"
-#: bookwyrm/templates/author/edit_author.html:74
+#: bookwyrm/templates/author/edit_author.html:81
msgid "Openlibrary key:"
msgstr "Clé Openlibrary :"
-#: bookwyrm/templates/author/edit_author.html:79
-#: bookwyrm/templates/book/edit_book.html:243
-#, fuzzy
-#| msgid "View on OpenLibrary"
+#: bookwyrm/templates/author/edit_author.html:89
+#: bookwyrm/templates/book/edit_book.html:293
msgid "Inventaire ID:"
-msgstr "Voir sur OpenLibrary"
+msgstr "Identifiant Inventaire :"
-#: bookwyrm/templates/author/edit_author.html:84
+#: bookwyrm/templates/author/edit_author.html:97
msgid "Librarything key:"
msgstr "Clé Librarything :"
-#: bookwyrm/templates/author/edit_author.html:89
+#: bookwyrm/templates/author/edit_author.html:105
msgid "Goodreads key:"
msgstr "Clé Goodreads :"
-#: bookwyrm/templates/author/edit_author.html:98
-#: bookwyrm/templates/book/book.html:124
-#: bookwyrm/templates/book/edit_book.html:263
+#: bookwyrm/templates/author/edit_author.html:116
+#: bookwyrm/templates/book/book.html:133
+#: bookwyrm/templates/book/edit_book.html:321
#: bookwyrm/templates/lists/form.html:42
#: bookwyrm/templates/preferences/edit_user.html:70
-#: bookwyrm/templates/settings/announcement_form.html:65
+#: bookwyrm/templates/settings/announcement_form.html:69
#: bookwyrm/templates/settings/edit_server.html:68
#: bookwyrm/templates/settings/federated_server.html:98
-#: bookwyrm/templates/settings/site.html:97
+#: bookwyrm/templates/settings/site.html:101
#: bookwyrm/templates/snippets/readthrough.html:77
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42
@@ -272,10 +268,10 @@ msgstr "Clé Goodreads :"
msgid "Save"
msgstr "Enregistrer"
-#: bookwyrm/templates/author/edit_author.html:99
-#: bookwyrm/templates/book/book.html:125 bookwyrm/templates/book/book.html:174
+#: bookwyrm/templates/author/edit_author.html:117
+#: bookwyrm/templates/book/book.html:134 bookwyrm/templates/book/book.html:183
#: bookwyrm/templates/book/cover_modal.html:32
-#: bookwyrm/templates/book/edit_book.html:264
+#: bookwyrm/templates/book/edit_book.html:322
#: bookwyrm/templates/moderation/report_modal.html:34
#: bookwyrm/templates/settings/federated_server.html:99
#: bookwyrm/templates/snippets/delete_readthrough_modal.html:17
@@ -288,106 +284,98 @@ msgstr "Enregistrer"
msgid "Cancel"
msgstr "Annuler"
-#: bookwyrm/templates/book/book.html:31
+#: bookwyrm/templates/book/book.html:40
#: bookwyrm/templates/discover/large-book.html:25
#: bookwyrm/templates/discover/small-book.html:19
msgid "by"
msgstr "par"
-#: bookwyrm/templates/book/book.html:39 bookwyrm/templates/book/book.html:40
+#: bookwyrm/templates/book/book.html:48 bookwyrm/templates/book/book.html:49
msgid "Edit Book"
msgstr "Modifier le livre"
-#: bookwyrm/templates/book/book.html:57
+#: bookwyrm/templates/book/book.html:66
#: bookwyrm/templates/book/cover_modal.html:5
msgid "Add cover"
msgstr "Ajouter une couverture"
-#: bookwyrm/templates/book/book.html:61
+#: bookwyrm/templates/book/book.html:70
msgid "Failed to load cover"
msgstr "La couverture n’a pu être chargée"
-#: bookwyrm/templates/book/book.html:101
+#: bookwyrm/templates/book/book.html:110
#, python-format
msgid "(%(review_count)s review)"
msgid_plural "(%(review_count)s reviews)"
msgstr[0] "(%(review_count)s critique)"
msgstr[1] "(%(review_count)s critiques)"
-#: bookwyrm/templates/book/book.html:113
+#: bookwyrm/templates/book/book.html:122
msgid "Add Description"
msgstr "Ajouter une description"
-#: bookwyrm/templates/book/book.html:120
-#: bookwyrm/templates/book/edit_book.html:108
+#: bookwyrm/templates/book/book.html:129
+#: bookwyrm/templates/book/edit_book.html:136
#: bookwyrm/templates/lists/form.html:12
msgid "Description:"
msgstr "Description :"
-#: bookwyrm/templates/book/book.html:134
+#: bookwyrm/templates/book/book.html:143
#, python-format
msgid "%(count)s editions "
msgstr "%(count)s éditions "
-#: bookwyrm/templates/book/book.html:142
+#: bookwyrm/templates/book/book.html:151
#, python-format
msgid "This edition is on your %(shelf_name)s shelf."
msgstr "Cette édition est sur votre étagère %(shelf_name)s ."
-#: bookwyrm/templates/book/book.html:148
+#: bookwyrm/templates/book/book.html:157
#, python-format
msgid "A different edition of this book is on your %(shelf_name)s shelf."
msgstr "Une édition différente de ce livre existe sur votre étagère %(shelf_name)s ."
-#: bookwyrm/templates/book/book.html:159
+#: bookwyrm/templates/book/book.html:168
msgid "Your reading activity"
msgstr "Votre activité de lecture"
-#: bookwyrm/templates/book/book.html:162
+#: bookwyrm/templates/book/book.html:171
msgid "Add read dates"
msgstr "Ajouter des dates de lecture"
-#: bookwyrm/templates/book/book.html:171
+#: bookwyrm/templates/book/book.html:180
msgid "Create"
msgstr "Créer"
-#: bookwyrm/templates/book/book.html:181
+#: bookwyrm/templates/book/book.html:190
msgid "You don't have any reading activity for this book."
msgstr "Vous n’avez aucune activité de lecture pour ce livre"
-#: bookwyrm/templates/book/book.html:200
-#, fuzzy
-#| msgid "Review"
+#: bookwyrm/templates/book/book.html:209
msgid "Reviews"
-msgstr "Critique"
+msgstr "Critiques"
-#: bookwyrm/templates/book/book.html:205
-#, fuzzy
-#| msgid "Your shelves"
+#: bookwyrm/templates/book/book.html:214
msgid "Your reviews"
-msgstr "Vos étagères"
+msgstr "Vos critiques"
-#: bookwyrm/templates/book/book.html:211
-#, fuzzy
-#| msgid "Your Account"
+#: bookwyrm/templates/book/book.html:220
msgid "Your comments"
-msgstr "Votre compte"
+msgstr "Vos commentaires"
-#: bookwyrm/templates/book/book.html:217
-#, fuzzy
-#| msgid "Your books"
+#: bookwyrm/templates/book/book.html:226
msgid "Your quotes"
-msgstr "Vos livres"
+msgstr "Vos citations"
-#: bookwyrm/templates/book/book.html:253
+#: bookwyrm/templates/book/book.html:262
msgid "Subjects"
msgstr "Sujets"
-#: bookwyrm/templates/book/book.html:265
+#: bookwyrm/templates/book/book.html:274
msgid "Places"
msgstr "Lieux"
-#: bookwyrm/templates/book/book.html:276 bookwyrm/templates/layout.html:64
+#: bookwyrm/templates/book/book.html:285 bookwyrm/templates/layout.html:61
#: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:25
#: bookwyrm/templates/search/layout.html:50
@@ -395,13 +383,13 @@ msgstr "Lieux"
msgid "Lists"
msgstr "Listes"
-#: bookwyrm/templates/book/book.html:287
+#: bookwyrm/templates/book/book.html:296
msgid "Add to list"
msgstr "Ajouter à la liste"
-#: bookwyrm/templates/book/book.html:297
+#: bookwyrm/templates/book/book.html:306
#: bookwyrm/templates/book/cover_modal.html:31
-#: bookwyrm/templates/lists/list.html:164
+#: bookwyrm/templates/lists/list.html:179
msgid "Add"
msgstr "Ajouter"
@@ -410,22 +398,22 @@ msgid "ISBN:"
msgstr "ISBN :"
#: bookwyrm/templates/book/book_identifiers.html:14
-#: bookwyrm/templates/book/edit_book.html:248
+#: bookwyrm/templates/book/edit_book.html:301
msgid "OCLC Number:"
msgstr "Numéro OCLC :"
#: bookwyrm/templates/book/book_identifiers.html:21
-#: bookwyrm/templates/book/edit_book.html:253
+#: bookwyrm/templates/book/edit_book.html:309
msgid "ASIN:"
msgstr "ASIN :"
#: bookwyrm/templates/book/cover_modal.html:17
-#: bookwyrm/templates/book/edit_book.html:192
+#: bookwyrm/templates/book/edit_book.html:229
msgid "Upload cover:"
msgstr "Charger une couverture :"
#: bookwyrm/templates/book/cover_modal.html:23
-#: bookwyrm/templates/book/edit_book.html:198
+#: bookwyrm/templates/book/edit_book.html:235
msgid "Load cover from url:"
msgstr "Charger la couverture depuis une URL :"
@@ -440,133 +428,134 @@ msgstr "Modifier « %(book_title)s »"
msgid "Add Book"
msgstr "Ajouter un livre"
-#: bookwyrm/templates/book/edit_book.html:40
+#: bookwyrm/templates/book/edit_book.html:54
msgid "Confirm Book Info"
msgstr "Confirmer les informations de ce livre"
-#: bookwyrm/templates/book/edit_book.html:47
+#: bookwyrm/templates/book/edit_book.html:62
#, python-format
msgid "Is \"%(name)s\" an existing author?"
-msgstr "Est‑ce que l’auteur ou l’autrice « %(name)s » existe déjà ?"
+msgstr "Est‑ce que l’auteur/autrice « %(name)s » existe déjà ?"
-#: bookwyrm/templates/book/edit_book.html:52
+#: bookwyrm/templates/book/edit_book.html:71
#, python-format
msgid "Author of %(book_title)s "
-msgstr "Commencer « %(book_title)s »"
+msgstr "Auteur/autrice de %(book_title)s "
-#: bookwyrm/templates/book/edit_book.html:55
+#: bookwyrm/templates/book/edit_book.html:75
msgid "This is a new author"
msgstr "Il s’agit d’un nouvel auteur ou d’une nouvelle autrice."
-#: bookwyrm/templates/book/edit_book.html:61
+#: bookwyrm/templates/book/edit_book.html:82
#, python-format
msgid "Creating a new author: %(name)s"
-msgstr "Création d’un nouvel auteur ou d’une nouvelle autrice : %(name)s"
+msgstr "Création d’un nouvel auteur/autrice : %(name)s"
-#: bookwyrm/templates/book/edit_book.html:67
+#: bookwyrm/templates/book/edit_book.html:89
msgid "Is this an edition of an existing work?"
msgstr "Est‑ce l’édition d’un ouvrage existant ?"
-#: bookwyrm/templates/book/edit_book.html:71
+#: bookwyrm/templates/book/edit_book.html:97
msgid "This is a new work"
msgstr "Il s’agit d’un nouvel ouvrage."
-#: bookwyrm/templates/book/edit_book.html:77
+#: bookwyrm/templates/book/edit_book.html:104
#: bookwyrm/templates/password_reset.html:30
msgid "Confirm"
msgstr "Confirmer"
-#: bookwyrm/templates/book/edit_book.html:79
+#: bookwyrm/templates/book/edit_book.html:106
#: bookwyrm/templates/feed/status.html:8
msgid "Back"
msgstr "Retour"
-#: bookwyrm/templates/book/edit_book.html:93
+#: bookwyrm/templates/book/edit_book.html:120
msgid "Title:"
msgstr "Titre :"
-#: bookwyrm/templates/book/edit_book.html:101
+#: bookwyrm/templates/book/edit_book.html:128
msgid "Subtitle:"
msgstr "Sous‑titre :"
-#: bookwyrm/templates/book/edit_book.html:114
+#: bookwyrm/templates/book/edit_book.html:144
msgid "Series:"
msgstr "Série :"
-#: bookwyrm/templates/book/edit_book.html:122
+#: bookwyrm/templates/book/edit_book.html:152
msgid "Series number:"
msgstr "Numéro dans la série :"
-#: bookwyrm/templates/book/edit_book.html:130
-#, fuzzy
-#| msgid "Language:"
+#: bookwyrm/templates/book/edit_book.html:160
msgid "Languages:"
-msgstr "Langue :"
+msgstr "Langues :"
-#: bookwyrm/templates/book/edit_book.html:139
+#: bookwyrm/templates/book/edit_book.html:169
msgid "Publisher:"
msgstr "Éditeur :"
-#: bookwyrm/templates/book/edit_book.html:148
+#: bookwyrm/templates/book/edit_book.html:178
msgid "First published date:"
msgstr "Première date de publication :"
-#: bookwyrm/templates/book/edit_book.html:156
+#: bookwyrm/templates/book/edit_book.html:186
msgid "Published date:"
msgstr "Date de publication :"
-#: bookwyrm/templates/book/edit_book.html:165
+#: bookwyrm/templates/book/edit_book.html:195
msgid "Authors"
msgstr "Auteurs ou autrices"
-#: bookwyrm/templates/book/edit_book.html:171
+#: bookwyrm/templates/book/edit_book.html:202
#, python-format
-msgid "Remove %(name)s "
-msgstr "Supprimer %(name)s "
+msgid "Remove %(name)s"
+msgstr "Retirer %(name)s"
-#: bookwyrm/templates/book/edit_book.html:176
+#: bookwyrm/templates/book/edit_book.html:205
+#, python-format
+msgid "Author page for %(name)s"
+msgstr "Page de %(name)s"
+
+#: bookwyrm/templates/book/edit_book.html:212
msgid "Add Authors:"
msgstr "Ajouter des auteurs ou autrices :"
-#: bookwyrm/templates/book/edit_book.html:177
+#: bookwyrm/templates/book/edit_book.html:213
msgid "John Doe, Jane Smith"
msgstr "Claude Dupont, Dominique Durand"
-#: bookwyrm/templates/book/edit_book.html:183
-#: bookwyrm/templates/user/shelf/shelf.html:77
+#: bookwyrm/templates/book/edit_book.html:220
+#: bookwyrm/templates/user/shelf/shelf.html:78
msgid "Cover"
msgstr "Couverture"
-#: bookwyrm/templates/book/edit_book.html:211
+#: bookwyrm/templates/book/edit_book.html:248
msgid "Physical Properties"
msgstr "Propriétés physiques"
-#: bookwyrm/templates/book/edit_book.html:212
+#: bookwyrm/templates/book/edit_book.html:250
#: bookwyrm/templates/book/format_filter.html:5
msgid "Format:"
msgstr "Format :"
-#: bookwyrm/templates/book/edit_book.html:220
+#: bookwyrm/templates/book/edit_book.html:258
msgid "Pages:"
msgstr "Pages :"
-#: bookwyrm/templates/book/edit_book.html:227
+#: bookwyrm/templates/book/edit_book.html:267
msgid "Book Identifiers"
msgstr "Identifiants du livre"
-#: bookwyrm/templates/book/edit_book.html:228
+#: bookwyrm/templates/book/edit_book.html:269
msgid "ISBN 13:"
msgstr "ISBN 13 :"
-#: bookwyrm/templates/book/edit_book.html:233
+#: bookwyrm/templates/book/edit_book.html:277
msgid "ISBN 10:"
msgstr "ISBN 10 :"
-#: bookwyrm/templates/book/edit_book.html:238
-#, fuzzy
-#| msgid "Openlibrary key:"
+#: bookwyrm/templates/book/edit_book.html:285
msgid "Openlibrary ID:"
-msgstr "Clé Openlibrary :"
+msgstr "Identifiant Openlibrary :"
#: bookwyrm/templates/book/editions.html:4
#, python-format
@@ -605,7 +594,7 @@ msgstr "%(pages)s pages"
#: bookwyrm/templates/book/publisher_info.html:38
#, python-format
msgid "%(languages)s language"
-msgstr "%(languages)s langues"
+msgstr "Langue : %(languages)s"
#: bookwyrm/templates/book/publisher_info.html:64
#, python-format
@@ -654,7 +643,7 @@ msgstr "Communauté fédérée"
#: bookwyrm/templates/directory/directory.html:4
#: bookwyrm/templates/directory/directory.html:9
-#: bookwyrm/templates/layout.html:92
+#: bookwyrm/templates/layout.html:64
msgid "Directory"
msgstr "Répertoire"
@@ -671,7 +660,7 @@ msgstr "Vous pouvez décider de ne plus y figurer à n’importe quel moment dep
#: bookwyrm/templates/snippets/announcement.html:34
#: bookwyrm/templates/snippets/goal_card.html:22
msgid "Dismiss message"
-msgstr "Rejeter le message"
+msgstr "Fermer le message"
#: bookwyrm/templates/directory/sort_filter.html:5
msgid "Order by"
@@ -688,8 +677,8 @@ msgstr "Actif récemment"
#: bookwyrm/templates/directory/user_card.html:33
msgid "follower you follow"
msgid_plural "followers you follow"
-msgstr[0] "compte auquel vous êtes abonné(e)"
-msgstr[1] "comptes auxquels vous êtes abonné(e)"
+msgstr[0] "compte que vous suivez"
+msgstr[1] "comptes que vous suivez"
#: bookwyrm/templates/directory/user_card.html:40
msgid "book on your shelves"
@@ -855,7 +844,7 @@ msgid "Direct Messages with %(username)s "
msgstr "Messages directs avec %(username)s "
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/layout.html:87
+#: bookwyrm/templates/layout.html:92
msgid "Direct Messages"
msgstr "Messages directs"
@@ -911,7 +900,6 @@ msgid "Updates"
msgstr "Mises à jour"
#: bookwyrm/templates/feed/feed_layout.html:10
-#: bookwyrm/templates/layout.html:58
#: bookwyrm/templates/user/shelf/books_header.html:3
msgid "Your books"
msgstr "Vos livres"
@@ -928,7 +916,7 @@ msgstr "À lire"
#: bookwyrm/templates/feed/feed_layout.html:24
#: bookwyrm/templates/user/shelf/shelf.html:29
msgid "Currently Reading"
-msgstr "En train de lire"
+msgstr "Lectures en cours"
#: bookwyrm/templates/feed/feed_layout.html:25
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:13
@@ -946,8 +934,8 @@ msgstr "Défi lecture pour %(year)s"
#, python-format
msgid "%(mutuals)s follower you follow"
msgid_plural "%(mutuals)s followers you follow"
-msgstr[0] "%(mutuals)s abonnement auxquel vous êtes abonné(e)"
-msgstr[1] "%(mutuals)s abonnements auxquels vous êtes abonné(e)"
+msgstr[0] "%(mutuals)s abonné(e) que vous suivez"
+msgstr[1] "%(mutuals)s abonné(e)s que vous suivez"
#: bookwyrm/templates/feed/suggested_users.html:19
#, python-format
@@ -966,7 +954,7 @@ msgid "What are you reading?"
msgstr "Que lisez‑vous ?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/lists/list.html:120
+#: bookwyrm/templates/lists/list.html:135
msgid "Search for a book"
msgstr "Chercher un livre"
@@ -986,7 +974,7 @@ msgstr "Vous pourrez ajouter des livres lorsque vous commencerez à utiliser %(s
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/layout.html:37 bookwyrm/templates/layout.html:38
-#: bookwyrm/templates/lists/list.html:124
+#: bookwyrm/templates/lists/list.html:139
#: bookwyrm/templates/search/layout.html:4
#: bookwyrm/templates/search/layout.html:9
msgid "Search"
@@ -1002,7 +990,7 @@ msgid "Popular on %(site_name)s"
msgstr "Populaire sur %(site_name)s"
#: bookwyrm/templates/get_started/books.html:58
-#: bookwyrm/templates/lists/list.html:137
+#: bookwyrm/templates/lists/list.html:152
msgid "No books found"
msgstr "Aucun livre trouvé"
@@ -1014,7 +1002,7 @@ msgstr "Enregistrer & continuer"
#: bookwyrm/templates/get_started/layout.html:14
#, python-format
msgid "Welcome to %(site_name)s!"
-msgstr "Bienvenu(e) sur %(site_name)s !"
+msgstr "Bienvenue sur %(site_name)s !"
#: bookwyrm/templates/get_started/layout.html:16
msgid "These are some first steps to get you started."
@@ -1114,7 +1102,7 @@ msgid "%(username)s's %(year)s Books"
msgstr "Livres de %(username)s en %(year)s"
#: bookwyrm/templates/import.html:5 bookwyrm/templates/import.html:9
-#: bookwyrm/templates/layout.html:97
+#: bookwyrm/templates/user/shelf/shelf.html:40
msgid "Import Books"
msgstr "Importer des livres"
@@ -1152,65 +1140,70 @@ msgstr "Aucune importation récente"
msgid "Import Status"
msgstr "Statut de l’importation"
-#: bookwyrm/templates/import_status.html:12
+#: bookwyrm/templates/import_status.html:13
msgid "Import started:"
-msgstr "Importation en cours :"
+msgstr "Début de l’importation :"
-#: bookwyrm/templates/import_status.html:16
+#: bookwyrm/templates/import_status.html:18
msgid "Import completed:"
-msgstr "Importation terminé :"
+msgstr "Fin de l’importation :"
-#: bookwyrm/templates/import_status.html:19
+#: bookwyrm/templates/import_status.html:23
msgid "TASK FAILED"
msgstr "la tâche a échoué"
-#: bookwyrm/templates/import_status.html:25
+#: bookwyrm/templates/import_status.html:30
msgid "Import still in progress."
msgstr "L’importation est toujours en cours"
-#: bookwyrm/templates/import_status.html:27
+#: bookwyrm/templates/import_status.html:32
msgid "(Hit reload to update!)"
-msgstr "(Rechargez la page pour mettre à jour !"
+msgstr "(Rechargez la page pour la mettre à jour !)"
-#: bookwyrm/templates/import_status.html:34
+#: bookwyrm/templates/import_status.html:39
msgid "Failed to load"
-msgstr "Items non importés"
+msgstr "Éléments non importés"
-#: bookwyrm/templates/import_status.html:43
+#: bookwyrm/templates/import_status.html:48
#, python-format
msgid "Jump to the bottom of the list to select the %(failed_count)s items which failed to import."
msgstr "Sauter en bas de liste pour sélectionner les %(failed_count)s items n’ayant pu être importés."
-#: bookwyrm/templates/import_status.html:78
+#: bookwyrm/templates/import_status.html:60
+#, python-format
+msgid "Line %(index)s: %(title)s by %(author)s"
+msgstr "Ligne %(index)s : %(title)s par %(author)s"
+
+#: bookwyrm/templates/import_status.html:80
msgid "Select all"
msgstr "Tout sélectionner"
-#: bookwyrm/templates/import_status.html:81
+#: bookwyrm/templates/import_status.html:83
msgid "Retry items"
-msgstr "Essayer d’importer les items sélectionnés de nouveau"
+msgstr "Réessayer l’importation de ces éléments"
-#: bookwyrm/templates/import_status.html:107
+#: bookwyrm/templates/import_status.html:109
msgid "Successfully imported"
msgstr "Importation réussie"
-#: bookwyrm/templates/import_status.html:111
+#: bookwyrm/templates/import_status.html:113
msgid "Book"
msgstr "Livre"
-#: bookwyrm/templates/import_status.html:114
+#: bookwyrm/templates/import_status.html:116
#: bookwyrm/templates/snippets/create_status_form.html:13
-#: bookwyrm/templates/user/shelf/shelf.html:78
-#: bookwyrm/templates/user/shelf/shelf.html:98
+#: bookwyrm/templates/user/shelf/shelf.html:79
+#: bookwyrm/templates/user/shelf/shelf.html:99
msgid "Title"
msgstr "Titre"
-#: bookwyrm/templates/import_status.html:117
-#: bookwyrm/templates/user/shelf/shelf.html:79
-#: bookwyrm/templates/user/shelf/shelf.html:101
+#: bookwyrm/templates/import_status.html:119
+#: bookwyrm/templates/user/shelf/shelf.html:80
+#: bookwyrm/templates/user/shelf/shelf.html:102
msgid "Author"
-msgstr "Auteur ou autrice"
+msgstr "Auteur/autrice"
-#: bookwyrm/templates/import_status.html:140
+#: bookwyrm/templates/import_status.html:142
msgid "Imported"
msgstr "Importé"
@@ -1248,15 +1241,19 @@ msgstr "Chercher un livre ou un compte"
msgid "Main navigation menu"
msgstr "Menu de navigation principal "
-#: bookwyrm/templates/layout.html:61
+#: bookwyrm/templates/layout.html:58
msgid "Feed"
msgstr "Fil d’actualité"
-#: bookwyrm/templates/layout.html:102
+#: bookwyrm/templates/layout.html:87
+msgid "Your Books"
+msgstr "Vos Livres"
+
+#: bookwyrm/templates/layout.html:97
msgid "Settings"
msgstr "Paramètres"
-#: bookwyrm/templates/layout.html:111
+#: bookwyrm/templates/layout.html:106
#: bookwyrm/templates/settings/admin_layout.html:31
#: bookwyrm/templates/settings/manage_invite_requests.html:15
#: bookwyrm/templates/settings/manage_invites.html:3
@@ -1264,56 +1261,54 @@ msgstr "Paramètres"
msgid "Invites"
msgstr "Invitations"
-#: bookwyrm/templates/layout.html:118
+#: bookwyrm/templates/layout.html:113
msgid "Admin"
msgstr "Admin"
-#: bookwyrm/templates/layout.html:125
+#: bookwyrm/templates/layout.html:120
msgid "Log out"
msgstr "Se déconnecter"
-#: bookwyrm/templates/layout.html:133 bookwyrm/templates/layout.html:134
+#: bookwyrm/templates/layout.html:128 bookwyrm/templates/layout.html:129
#: bookwyrm/templates/notifications.html:6
#: bookwyrm/templates/notifications.html:11
msgid "Notifications"
msgstr "Notifications"
-#: bookwyrm/templates/layout.html:154 bookwyrm/templates/layout.html:158
+#: bookwyrm/templates/layout.html:151 bookwyrm/templates/layout.html:155
#: bookwyrm/templates/login.html:17
#: bookwyrm/templates/snippets/register_form.html:4
msgid "Username:"
msgstr "Nom du compte :"
-#: bookwyrm/templates/layout.html:159
+#: bookwyrm/templates/layout.html:156
msgid "password"
msgstr "Mot de passe"
-#: bookwyrm/templates/layout.html:160 bookwyrm/templates/login.html:36
+#: bookwyrm/templates/layout.html:157 bookwyrm/templates/login.html:36
msgid "Forgot your password?"
msgstr "Mot de passe oublié ?"
-#: bookwyrm/templates/layout.html:163 bookwyrm/templates/login.html:10
+#: bookwyrm/templates/layout.html:160 bookwyrm/templates/login.html:10
#: bookwyrm/templates/login.html:33
msgid "Log in"
msgstr "Se connecter"
-#: bookwyrm/templates/layout.html:171
+#: bookwyrm/templates/layout.html:168
msgid "Join"
msgstr "Rejoindre"
#: bookwyrm/templates/layout.html:206
-msgid "About this server"
-msgstr "À propos de ce serveur"
+msgid "About this instance"
+msgstr "À propos de cette instance"
#: bookwyrm/templates/layout.html:210
msgid "Contact site admin"
msgstr "Contacter l’administrateur du site"
#: bookwyrm/templates/layout.html:214
-#, fuzzy
-#| msgid "List curation:"
msgid "Documentation"
-msgstr "Modération de la liste :"
+msgstr "Documentation"
#: bookwyrm/templates/layout.html:221
#, python-format
@@ -1364,7 +1359,7 @@ msgid "Discard"
msgstr "Rejeter"
#: bookwyrm/templates/lists/edit_form.html:5
-#: bookwyrm/templates/lists/list_layout.html:17
+#: bookwyrm/templates/lists/list_layout.html:16
msgid "Edit List"
msgstr "Modifier la liste"
@@ -1378,7 +1373,7 @@ msgstr "Fermée"
#: bookwyrm/templates/lists/form.html:22
msgid "Only you can add and remove books to this list"
-msgstr "Vous seul(e) pouvez ajouter ou retirer des livres dans cette liste"
+msgstr "Vous seulement pouvez ajouter ou retirer des livres dans cette liste"
#: bookwyrm/templates/lists/form.html:26
msgid "Curated"
@@ -1401,74 +1396,65 @@ msgstr "N’importe qui peut suggérer des livres"
#: bookwyrm/templates/lists/list.html:20
msgid "You successfully suggested a book for this list!"
-msgstr ""
+msgstr "Vous avez suggéré un livre à cette liste !"
#: bookwyrm/templates/lists/list.html:22
-#, fuzzy
-#| msgid "Anyone can add books to this list"
msgid "You successfully added a book to this list!"
-msgstr "N’importe qui peut suggérer des livres"
+msgstr "Vous avez ajouté un livre à cette liste !"
#: bookwyrm/templates/lists/list.html:28
msgid "This list is currently empty"
-msgstr "Cette liste est vide actuellement"
+msgstr "Cette liste est actuellement vide"
-#: bookwyrm/templates/lists/list.html:65
+#: bookwyrm/templates/lists/list.html:66
#, python-format
msgid "Added by %(username)s "
-msgstr "Ajoutée par %(username)s "
+msgstr "Ajouté par %(username)s "
-#: bookwyrm/templates/lists/list.html:77
-#, fuzzy
-#| msgid "Sent"
-msgid "Set"
-msgstr "Envoyé(e)s"
-
-#: bookwyrm/templates/lists/list.html:80
-#, fuzzy
-#| msgid "List curation:"
+#: bookwyrm/templates/lists/list.html:74
msgid "List position"
-msgstr "Modération de la liste :"
+msgstr "Position"
-#: bookwyrm/templates/lists/list.html:86
+#: bookwyrm/templates/lists/list.html:81
+msgid "Set"
+msgstr "Appliquer"
+
+#: bookwyrm/templates/lists/list.html:89
#: bookwyrm/templates/snippets/shelf_selector.html:26
msgid "Remove"
-msgstr "Supprimer"
+msgstr "Retirer"
-#: bookwyrm/templates/lists/list.html:99 bookwyrm/templates/lists/list.html:111
-#, fuzzy
-#| msgid "Your Lists"
+#: bookwyrm/templates/lists/list.html:103
+#: bookwyrm/templates/lists/list.html:120
msgid "Sort List"
-msgstr "Vos listes"
+msgstr "Trier la liste"
-#: bookwyrm/templates/lists/list.html:105
-#, fuzzy
-#| msgid "Directory"
+#: bookwyrm/templates/lists/list.html:113
msgid "Direction"
-msgstr "Répertoire"
+msgstr "Direction"
-#: bookwyrm/templates/lists/list.html:116
+#: bookwyrm/templates/lists/list.html:127
msgid "Add Books"
msgstr "Ajouter des livres"
-#: bookwyrm/templates/lists/list.html:116
+#: bookwyrm/templates/lists/list.html:129
msgid "Suggest Books"
msgstr "Suggérer des livres"
-#: bookwyrm/templates/lists/list.html:125
+#: bookwyrm/templates/lists/list.html:140
msgid "search"
-msgstr "Chercher"
+msgstr "chercher"
-#: bookwyrm/templates/lists/list.html:131
+#: bookwyrm/templates/lists/list.html:146
msgid "Clear search"
msgstr "Vider la requête"
-#: bookwyrm/templates/lists/list.html:136
+#: bookwyrm/templates/lists/list.html:151
#, python-format
msgid "No books found matching the query \"%(query)s\""
msgstr "Aucun livre trouvé pour la requête « %(query)s »"
-#: bookwyrm/templates/lists/list.html:164
+#: bookwyrm/templates/lists/list.html:179
msgid "Suggest"
msgstr "Suggérer"
@@ -1523,10 +1509,8 @@ msgid "No statuses reported"
msgstr "Aucun statut signalé"
#: bookwyrm/templates/moderation/report.html:53
-#, fuzzy
-#| msgid "Statuses has been deleted"
msgid "Status has been deleted"
-msgstr "Les statuts ont été supprimés"
+msgstr "Le statut a été supprimé"
#: bookwyrm/templates/moderation/report_modal.html:6
#, python-format
@@ -1561,8 +1545,8 @@ msgstr "Résoudre"
#: bookwyrm/templates/moderation/reports.html:6
#, python-format
-msgid "Reports: %(server_name)s"
-msgstr "Signalements : %(server_name)s"
+msgid "Reports: %(instance_name)s"
+msgstr "Signalements : %(instance_name)s"
#: bookwyrm/templates/moderation/reports.html:8
#: bookwyrm/templates/moderation/reports.html:17
@@ -1572,8 +1556,8 @@ msgstr "Signalements"
#: bookwyrm/templates/moderation/reports.html:14
#, python-format
-msgid "Reports: %(server_name)s "
-msgstr "Signalements: %(server_name)s "
+msgid "Reports: %(instance_name)s "
+msgstr "Signalements : %(instance_name)s "
#: bookwyrm/templates/moderation/reports.html:28
msgid "Resolved"
@@ -1589,13 +1573,11 @@ msgstr "Supprimer les notifications"
#: bookwyrm/templates/notifications.html:25
msgid "All"
-msgstr ""
+msgstr "Toutes"
#: bookwyrm/templates/notifications.html:29
-#, fuzzy
-#| msgid "More options"
msgid "Mentions"
-msgstr "Plus d’options"
+msgstr "Mentions"
#: bookwyrm/templates/notifications.html:70
#, python-format
@@ -1659,7 +1641,7 @@ msgstr "a répondu à votre %(book_title)s t
msgstr " a suggégré l’ajout de %(book_title)s à votre liste « %(list_name)s »"
#: bookwyrm/templates/notifications.html:128
-#, fuzzy, python-format
-#| msgid "Your import completed."
+#, python-format
msgid "Your import completed."
-msgstr "Votre importation est terminée."
+msgstr "Votre importation est terminée."
#: bookwyrm/templates/notifications.html:131
#, python-format
@@ -1774,31 +1755,45 @@ msgstr "Profil"
msgid "Relationships"
msgstr "Relations"
+#: bookwyrm/templates/rss/title.html:5
+#: bookwyrm/templates/snippets/status/status_header.html:35
+msgid "rated"
+msgstr "a noté"
+
+#: bookwyrm/templates/rss/title.html:7
+#: bookwyrm/templates/snippets/status/status_header.html:37
+msgid "reviewed"
+msgstr "a écrit une critique de"
+
+#: bookwyrm/templates/rss/title.html:9
+#: bookwyrm/templates/snippets/status/status_header.html:39
+msgid "commented on"
+msgstr "a commenté"
+
+#: bookwyrm/templates/rss/title.html:11
+#: bookwyrm/templates/snippets/status/status_header.html:41
+msgid "quoted"
+msgstr "a cité"
+
#: bookwyrm/templates/search/book.html:64
-#, fuzzy
-#| msgid "Show results from other catalogues"
msgid "Load results from other catalogues"
-msgstr "Montrer les résultats d’autres catalogues"
+msgstr "Charger les résultats d’autres catalogues"
#: bookwyrm/templates/search/book.html:68
msgid "Manually add book"
-msgstr ""
+msgstr "Ajouter un livre manuellement"
#: bookwyrm/templates/search/book.html:73
msgid "Log in to import or add books."
-msgstr ""
+msgstr "Authentifiez-vous pour importer ou ajouter des livres."
#: bookwyrm/templates/search/layout.html:16
-#, fuzzy
-#| msgid "Search for a user"
msgid "Search query"
-msgstr "Chercher un compte"
+msgstr "Requête"
#: bookwyrm/templates/search/layout.html:19
-#, fuzzy
-#| msgid "Search"
msgid "Search type"
-msgstr "Chercher"
+msgstr "Type de recherche"
#: bookwyrm/templates/search/layout.html:21
#: bookwyrm/templates/search/layout.html:42
@@ -1815,10 +1810,9 @@ msgid "Users"
msgstr "Comptes"
#: bookwyrm/templates/search/layout.html:58
-#, fuzzy, python-format
-#| msgid "No lists found for \"%(query)s\""
+#, python-format
msgid "No results found for \"%(query)s\""
-msgstr "Aucune liste trouvée pour « %(query)s »"
+msgstr "Aucun résultat pour « %(query)s »"
#: bookwyrm/templates/settings/admin_layout.html:4
msgid "Administration"
@@ -1831,8 +1825,8 @@ msgstr "Gérer les comptes"
#: bookwyrm/templates/settings/admin_layout.html:39
#: bookwyrm/templates/settings/federation.html:3
#: bookwyrm/templates/settings/federation.html:5
-msgid "Federated Servers"
-msgstr "Serveurs fédérés"
+msgid "Federated Instances"
+msgstr "Instances fédérées"
#: bookwyrm/templates/settings/admin_layout.html:44
msgid "Instance Settings"
@@ -1868,27 +1862,22 @@ msgstr "Contenu du pied de page"
#: bookwyrm/templates/settings/admin_layout.html:58
#: bookwyrm/templates/settings/site.html:81
msgid "Registration"
-msgstr "Enregistrement"
+msgstr "Inscription"
#: bookwyrm/templates/settings/announcement.html:3
#: bookwyrm/templates/settings/announcement.html:6
-#, fuzzy
-#| msgid "Announcements"
msgid "Announcement"
-msgstr "Annonces"
+msgstr "Annonce"
#: bookwyrm/templates/settings/announcement.html:7
#: bookwyrm/templates/settings/federated_server.html:13
-#, fuzzy
-#| msgid "Back to server list"
msgid "Back to list"
-msgstr "Retour à la liste des serveurs"
+msgstr "Retour à la liste"
#: bookwyrm/templates/settings/announcement.html:11
-#, fuzzy
-#| msgid "Announcements"
+#: bookwyrm/templates/settings/announcement_form.html:6
msgid "Edit Announcement"
-msgstr "Annonces"
+msgstr "Modifier l’annonce"
#: bookwyrm/templates/settings/announcement.html:20
#: bookwyrm/templates/snippets/delete_readthrough_modal.html:15
@@ -1898,64 +1887,48 @@ msgstr "Supprimer"
#: bookwyrm/templates/settings/announcement.html:35
msgid "Visible:"
-msgstr ""
+msgstr "Visible :"
#: bookwyrm/templates/settings/announcement.html:38
msgid "True"
-msgstr ""
+msgstr "Vrai"
#: bookwyrm/templates/settings/announcement.html:40
msgid "False"
-msgstr ""
+msgstr "Faux"
#: bookwyrm/templates/settings/announcement.html:47
-#, fuzzy
-#| msgid "Birth date:"
msgid "Start date:"
-msgstr "Date de naissance :"
+msgstr "Date de début :"
#: bookwyrm/templates/settings/announcement.html:54
-#, fuzzy
-#| msgid "Birth date:"
msgid "End date:"
-msgstr "Date de naissance :"
+msgstr "Date de fin :"
#: bookwyrm/templates/settings/announcement.html:60
-#, fuzzy
-#| msgid "Active"
msgid "Active:"
-msgstr "Actif"
+msgstr "Active :"
-#: bookwyrm/templates/settings/announcement_form.html:5
+#: bookwyrm/templates/settings/announcement_form.html:8
#: bookwyrm/templates/settings/announcements.html:8
-#, fuzzy
-#| msgid "Announcements"
msgid "Create Announcement"
-msgstr "Annonces"
+msgstr "Ajouter une annonce"
#: bookwyrm/templates/settings/announcements.html:22
-#, fuzzy
-#| msgid "Date Added"
msgid "Date added"
msgstr "Date d’ajout"
#: bookwyrm/templates/settings/announcements.html:26
-#, fuzzy
-#| msgid "reviewed"
msgid "Preview"
-msgstr "a écrit une critique de"
+msgstr "Aperçu"
#: bookwyrm/templates/settings/announcements.html:30
-#, fuzzy
-#| msgid "Started"
msgid "Start date"
-msgstr "Commencé"
+msgstr "Date de début"
#: bookwyrm/templates/settings/announcements.html:34
-#, fuzzy
-#| msgid "Edit read dates"
msgid "End date"
-msgstr "Modifier les date de lecture"
+msgstr "Date de fin"
#: bookwyrm/templates/settings/announcements.html:38
#: bookwyrm/templates/settings/federation.html:30
@@ -1966,16 +1939,12 @@ msgid "Status"
msgstr "Statut"
#: bookwyrm/templates/settings/announcements.html:48
-#, fuzzy
-#| msgid "Inactive"
msgid "active"
-msgstr "Inactif"
+msgstr "active"
#: bookwyrm/templates/settings/announcements.html:48
-#, fuzzy
-#| msgid "Inactive"
msgid "inactive"
-msgstr "Inactif"
+msgstr "inactive"
#: bookwyrm/templates/settings/edit_server.html:3
#: bookwyrm/templates/settings/edit_server.html:6
@@ -1984,28 +1953,22 @@ msgstr "Inactif"
#: bookwyrm/templates/settings/federation.html:10
#: bookwyrm/templates/settings/server_blocklist.html:3
#: bookwyrm/templates/settings/server_blocklist.html:20
-#, fuzzy
-#| msgid "Add cover"
-msgid "Add server"
-msgstr "Ajouter une couverture"
+msgid "Add instance"
+msgstr "Ajouter une instance"
#: bookwyrm/templates/settings/edit_server.html:7
#: bookwyrm/templates/settings/server_blocklist.html:7
-msgid "Back to server list"
-msgstr "Retour à la liste des serveurs"
+msgid "Back to instance list"
+msgstr "Retour à la liste des instances"
#: bookwyrm/templates/settings/edit_server.html:16
#: bookwyrm/templates/settings/server_blocklist.html:16
-#, fuzzy
-#| msgid "Import book"
msgid "Import block list"
-msgstr "Importer le livre"
+msgstr "Importer une liste de blocage"
#: bookwyrm/templates/settings/edit_server.html:30
-#, fuzzy
-#| msgid "Instance Name:"
msgid "Instance:"
-msgstr "Nom de l’instance :"
+msgstr "Instance :"
#: bookwyrm/templates/settings/edit_server.html:37
#: bookwyrm/templates/settings/federated_server.html:31
@@ -2015,10 +1978,8 @@ msgstr "Statut :"
#: bookwyrm/templates/settings/edit_server.html:41
#: bookwyrm/templates/settings/federated_server.html:10
-#, fuzzy
-#| msgid "Block"
msgid "Blocked"
-msgstr "Bloquer"
+msgstr "Bloqué"
#: bookwyrm/templates/settings/edit_server.html:48
#: bookwyrm/templates/settings/federated_server.html:23
@@ -2034,7 +1995,7 @@ msgstr "Description :"
#: bookwyrm/templates/settings/edit_server.html:64
msgid "Notes:"
-msgstr ""
+msgstr "Remarques :"
#: bookwyrm/templates/settings/federated_server.html:19
msgid "Details"
@@ -2073,13 +2034,11 @@ msgstr "Bloqués par nous :"
#: bookwyrm/templates/settings/federated_server.html:82
#: bookwyrm/templates/user_admin/user_info.html:39
msgid "Notes"
-msgstr ""
+msgstr "Remarques"
#: bookwyrm/templates/settings/federated_server.html:85
-#, fuzzy
-#| msgid "Edit Book"
msgid "Edit"
-msgstr "Modifier le livre"
+msgstr "Modifier"
#: bookwyrm/templates/settings/federated_server.html:105
#: bookwyrm/templates/user_admin/user_moderation_actions.html:3
@@ -2093,7 +2052,7 @@ msgstr "Bloquer"
#: bookwyrm/templates/settings/federated_server.html:110
msgid "All users from this instance will be deactivated."
-msgstr ""
+msgstr "Tous les comptes de cette instance seront désactivés."
#: bookwyrm/templates/settings/federated_server.html:115
#: bookwyrm/templates/snippets/block_button.html:10
@@ -2102,12 +2061,12 @@ msgstr "Débloquer"
#: bookwyrm/templates/settings/federated_server.html:116
msgid "All users from this instance will be re-activated."
-msgstr ""
+msgstr "Tous les comptes de cette instance seront réactivés."
#: bookwyrm/templates/settings/federation.html:19
#: bookwyrm/templates/user_admin/server_filter.html:5
-msgid "Server name"
-msgstr "Nom du serveur"
+msgid "Instance name"
+msgstr "Nom de l’instance"
#: bookwyrm/templates/settings/federation.html:23
msgid "Date federated"
@@ -2122,7 +2081,7 @@ msgstr "Logiciel"
#: bookwyrm/templates/settings/manage_invite_requests.html:25
#: bookwyrm/templates/settings/manage_invites.html:11
msgid "Invite Requests"
-msgstr "Invitations"
+msgstr "Demandes d’invitation"
#: bookwyrm/templates/settings/manage_invite_requests.html:23
msgid "Ignored Invite Requests"
@@ -2224,25 +2183,21 @@ msgid "No active invites"
msgstr "Aucune invitation active"
#: bookwyrm/templates/settings/server_blocklist.html:6
-#, fuzzy
-#| msgid "Import Books"
msgid "Import Blocklist"
-msgstr "Importer des livres"
+msgstr "Importer une liste de blocage"
#: bookwyrm/templates/settings/server_blocklist.html:26
-#: bookwyrm/templates/snippets/goal_progress.html:5
+#: bookwyrm/templates/snippets/goal_progress.html:7
msgid "Success!"
msgstr "Bravo !"
#: bookwyrm/templates/settings/server_blocklist.html:30
-#, fuzzy
-#| msgid "Successfully imported"
msgid "Successfully blocked:"
-msgstr "Importation réussie"
+msgstr "Blocage réussi :"
#: bookwyrm/templates/settings/server_blocklist.html:32
msgid "Failed:"
-msgstr ""
+msgstr "Échec :"
#: bookwyrm/templates/settings/site.html:15
msgid "Instance Name:"
@@ -2290,48 +2245,43 @@ msgstr "Email de l’administrateur :"
#: bookwyrm/templates/settings/site.html:73
msgid "Additional info:"
-msgstr ""
+msgstr "Infos supplémentaires :"
-#: bookwyrm/templates/settings/site.html:83
-msgid "Allow registration:"
-msgstr "Autoriser l’enregistrement :"
-
-#: bookwyrm/templates/settings/site.html:87
-msgid "Allow invite requests:"
-msgstr "Autoriser les demandes d’invitation :"
+#: bookwyrm/templates/settings/site.html:85
+msgid "Allow registration"
+msgstr "Autoriser les inscriptions"
#: bookwyrm/templates/settings/site.html:91
+msgid "Allow invite requests"
+msgstr "Autoriser les demandes d’invitation"
+
+#: bookwyrm/templates/settings/site.html:95
msgid "Registration closed text:"
-msgstr "Texte affiché lorsque les enregistrements sont clos :"
+msgstr "Texte affiché lorsque les inscriptions sont closes :"
#: bookwyrm/templates/snippets/announcement.html:31
-#, fuzzy, python-format
-#| msgid "Added by %(username)s "
+#, python-format
msgid "Posted by %(username)s "
-msgstr "Ajoutée par %(username)s "
+msgstr "Publiée par %(username)s "
#: bookwyrm/templates/snippets/book_cover.html:31
msgid "No cover"
-msgstr "Aucune couverture"
+msgstr "Pas de couverture"
#: bookwyrm/templates/snippets/book_titleby.html:4
#, python-format
msgid "%(title)s by "
msgstr "%(title)s par "
-#: bookwyrm/templates/snippets/boost_button.html:9
-#: bookwyrm/templates/snippets/boost_button.html:10
-#, fuzzy
-#| msgid "boosted"
+#: bookwyrm/templates/snippets/boost_button.html:20
+#: bookwyrm/templates/snippets/boost_button.html:21
msgid "Boost"
-msgstr "partagé"
+msgstr "Partager"
-#: bookwyrm/templates/snippets/boost_button.html:16
-#: bookwyrm/templates/snippets/boost_button.html:17
-#, fuzzy
-#| msgid "Un-boost status"
+#: bookwyrm/templates/snippets/boost_button.html:33
+#: bookwyrm/templates/snippets/boost_button.html:34
msgid "Un-boost"
-msgstr "Annuler le partage du statut"
+msgstr "Annuler le partage"
#: bookwyrm/templates/snippets/content_warning_field.html:3
msgid "Spoiler alert:"
@@ -2369,10 +2319,8 @@ msgid "Reply"
msgstr "Répondre"
#: bookwyrm/templates/snippets/create_status_form.html:56
-#, fuzzy
-#| msgid "Footer Content"
msgid "Content"
-msgstr "Contenu du pied de page"
+msgstr "Contenu"
#: bookwyrm/templates/snippets/create_status_form.html:80
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16
@@ -2421,17 +2369,15 @@ msgstr "Supprimer ces dates de lecture ?"
msgid "You are deleting this readthrough and its %(count)s associated progress updates."
msgstr "Vous avez supprimé ce résumé et ses %(count)s progressions associées."
-#: bookwyrm/templates/snippets/fav_button.html:9
-#: bookwyrm/templates/snippets/fav_button.html:11
+#: bookwyrm/templates/snippets/fav_button.html:10
+#: bookwyrm/templates/snippets/fav_button.html:12
msgid "Like"
-msgstr ""
+msgstr "Ajouter aux favoris"
-#: bookwyrm/templates/snippets/fav_button.html:17
#: bookwyrm/templates/snippets/fav_button.html:18
-#, fuzzy
-#| msgid "Un-like status"
+#: bookwyrm/templates/snippets/fav_button.html:19
msgid "Un-like"
-msgstr "Retirer le statut des favoris"
+msgstr "Retirer des favoris"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:7
msgid "Show filters"
@@ -2470,6 +2416,14 @@ msgstr "Accepter"
msgid "No rating"
msgstr "Aucune note"
+#: bookwyrm/templates/snippets/form_rate_stars.html:44
+#: bookwyrm/templates/snippets/stars.html:7
+#, python-format
+msgid "%(rating)s star"
+msgid_plural "%(rating)s stars"
+msgstr[0] "%(rating)s étoile"
+msgstr[1] "%(rating)s étoiles"
+
#: bookwyrm/templates/snippets/generated_status/goal.html:1
#, python-format
msgid "set a goal to read %(counter)s book in %(year)s"
@@ -2524,17 +2478,17 @@ msgstr "Publier sur le fil d’actualité"
msgid "Set goal"
msgstr "Valider ce défi"
-#: bookwyrm/templates/snippets/goal_progress.html:7
+#: bookwyrm/templates/snippets/goal_progress.html:9
#, python-format
msgid "%(percent)s%% complete!"
msgstr "%(percent)s%% terminé !"
-#: bookwyrm/templates/snippets/goal_progress.html:10
+#: bookwyrm/templates/snippets/goal_progress.html:12
#, python-format
msgid "You've read %(read_count)s of %(goal_count)s books ."
msgstr "Vous avez lu %(read_count)s sur %(goal_count)s livres ."
-#: bookwyrm/templates/snippets/goal_progress.html:12
+#: bookwyrm/templates/snippets/goal_progress.html:14
#, python-format
msgid "%(username)s has read %(read_count)s of %(goal_count)s books ."
msgstr "%(username)s a lu %(read_count)s sur %(goal_count)s livres ."
@@ -2581,7 +2535,7 @@ msgstr "Confidentialité du statut"
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
-msgstr "Abonnements"
+msgstr "Abonné(e)s"
#: bookwyrm/templates/snippets/rate_action.html:4
msgid "Leave a rating"
@@ -2643,26 +2597,6 @@ msgstr "S’enregistrer"
msgid "Report"
msgstr "Signaler"
-#: bookwyrm/templates/snippets/rss_title.html:5
-#: bookwyrm/templates/snippets/status/status_header.html:35
-msgid "rated"
-msgstr "a noté"
-
-#: bookwyrm/templates/snippets/rss_title.html:7
-#: bookwyrm/templates/snippets/status/status_header.html:37
-msgid "reviewed"
-msgstr "a écrit une critique de"
-
-#: bookwyrm/templates/snippets/rss_title.html:9
-#: bookwyrm/templates/snippets/status/status_header.html:39
-msgid "commented on"
-msgstr "a commenté"
-
-#: bookwyrm/templates/snippets/rss_title.html:11
-#: bookwyrm/templates/snippets/status/status_header.html:41
-msgid "quoted"
-msgstr "a cité"
-
#: bookwyrm/templates/snippets/search_result_text.html:36
msgid "Import book"
msgstr "Importer le livre"
@@ -2711,7 +2645,7 @@ msgstr "Commencer « %(book_title)s »"
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5
#, python-format
msgid "Want to Read \"%(book_title)s \""
-msgstr "A envie de lire « %(book_title)s »"
+msgstr "Ajouter « %(book_title)s » aux envies de lecture"
#: bookwyrm/templates/snippets/status/content_status.html:71
#: bookwyrm/templates/snippets/trimmed_text.html:15
@@ -2744,7 +2678,7 @@ msgstr "Ajouter le statut aux favoris"
#: bookwyrm/templates/snippets/status/status.html:10
msgid "boosted"
-msgstr "partagé"
+msgstr "a partagé"
#: bookwyrm/templates/snippets/status/status_header.html:45
#, python-format
@@ -2807,12 +2741,12 @@ msgstr "%(username)s n’a pas d’abonné(e)"
#: bookwyrm/templates/user/relationships/following.html:6
#: bookwyrm/templates/user/relationships/layout.html:15
msgid "Following"
-msgstr "Abonné(e) à"
+msgstr "Comptes suivis"
#: bookwyrm/templates/user/relationships/following.html:12
#, python-format
msgid "%(username)s isn't following any users"
-msgstr "%(username)s n’est abonné(e) à personne"
+msgstr "%(username)s ne suit personne"
#: bookwyrm/templates/user/shelf/books_header.html:5
#, python-format
@@ -2822,7 +2756,7 @@ msgstr "Livres de %(username)s"
#: bookwyrm/templates/user/shelf/create_shelf_form.html:5
#: bookwyrm/templates/user/shelf/create_shelf_form.html:22
msgid "Create Shelf"
-msgstr "Créer l’étagère"
+msgstr "Créer une étagère"
#: bookwyrm/templates/user/shelf/edit_shelf_form.html:5
msgid "Edit Shelf"
@@ -2832,38 +2766,38 @@ msgstr "Modifier l’étagère"
msgid "Update shelf"
msgstr "Mettre l’étagère à jour"
-#: bookwyrm/templates/user/shelf/shelf.html:25 bookwyrm/views/shelf.py:51
+#: bookwyrm/templates/user/shelf/shelf.html:25 bookwyrm/views/shelf.py:56
msgid "All books"
msgstr "Tous les livres"
#: bookwyrm/templates/user/shelf/shelf.html:38
msgid "Create shelf"
-msgstr "Créer l’étagère"
+msgstr "Créer une étagère"
-#: bookwyrm/templates/user/shelf/shelf.html:61
+#: bookwyrm/templates/user/shelf/shelf.html:62
msgid "Edit shelf"
msgstr "Modifier l’étagère"
-#: bookwyrm/templates/user/shelf/shelf.html:80
-#: bookwyrm/templates/user/shelf/shelf.html:104
-msgid "Shelved"
-msgstr "Ajouté à une étagère"
-
#: bookwyrm/templates/user/shelf/shelf.html:81
-#: bookwyrm/templates/user/shelf/shelf.html:108
+#: bookwyrm/templates/user/shelf/shelf.html:105
+msgid "Shelved"
+msgstr "Date d’ajout"
+
+#: bookwyrm/templates/user/shelf/shelf.html:82
+#: bookwyrm/templates/user/shelf/shelf.html:109
msgid "Started"
msgstr "Commencé"
-#: bookwyrm/templates/user/shelf/shelf.html:82
-#: bookwyrm/templates/user/shelf/shelf.html:111
+#: bookwyrm/templates/user/shelf/shelf.html:83
+#: bookwyrm/templates/user/shelf/shelf.html:112
msgid "Finished"
msgstr "Terminé"
-#: bookwyrm/templates/user/shelf/shelf.html:137
+#: bookwyrm/templates/user/shelf/shelf.html:138
msgid "This shelf is empty."
msgstr "Cette étagère est vide"
-#: bookwyrm/templates/user/shelf/shelf.html:143
+#: bookwyrm/templates/user/shelf/shelf.html:144
msgid "Delete shelf"
msgstr "Supprimer l’étagère"
@@ -2895,14 +2829,14 @@ msgstr "Aucune activité pour l’instant !"
#: bookwyrm/templates/user/user_preview.html:15
#, python-format
msgid "Joined %(date)s"
-msgstr "Enregistré(e) %(date)s"
+msgstr "A rejoint ce serveur %(date)s"
#: bookwyrm/templates/user/user_preview.html:19
#, python-format
msgid "%(counter)s follower"
msgid_plural "%(counter)s followers"
-msgstr[0] "%(counter)s abonnement"
-msgstr[1] "%(counter)s abonnements"
+msgstr[0] "%(counter)s abonné(e)"
+msgstr[1] "%(counter)s abonné(e)s"
#: bookwyrm/templates/user/user_preview.html:20
#, python-format
@@ -2910,24 +2844,20 @@ msgid "%(counter)s following"
msgstr "%(counter)s abonnements"
#: bookwyrm/templates/user/user_preview.html:26
-#, fuzzy, python-format
-#| msgid "%(mutuals)s follower you follow"
-#| msgid_plural "%(mutuals)s followers you follow"
+#, python-format
msgid "%(mutuals_display)s follower you follow"
msgid_plural "%(mutuals_display)s followers you follow"
-msgstr[0] "%(mutuals)s abonnement auxquel vous êtes abonné(e)"
-msgstr[1] "%(mutuals)s abonnements auxquels vous êtes abonné(e)"
+msgstr[0] "%(mutuals_display)s abonné(e) que vous suivez"
+msgstr[1] "%(mutuals_display)s abonné(e)s que vous suivez"
#: bookwyrm/templates/user_admin/user.html:9
-#, fuzzy
-#| msgid "Back to reports"
msgid "Back to users"
-msgstr "Retour aux signalements"
+msgstr "Retour aux comptes"
#: bookwyrm/templates/user_admin/user_admin.html:7
#, python-format
-msgid "Users: %(server_name)s "
-msgstr "Comptes : %(server_name)s "
+msgid "Users: %(instance_name)s "
+msgstr "Comptes : %(instance_name)s "
#: bookwyrm/templates/user_admin/user_admin.html:22
#: bookwyrm/templates/user_admin/username_filter.html:5
@@ -2943,8 +2873,8 @@ msgid "Last Active"
msgstr "Dernière activité"
#: bookwyrm/templates/user_admin/user_admin.html:38
-msgid "Remote server"
-msgstr "Serveur distant"
+msgid "Remote instance"
+msgstr "Instance distante"
#: bookwyrm/templates/user_admin/user_admin.html:47
msgid "Active"
@@ -2960,42 +2890,45 @@ msgid "Not set"
msgstr "Non défini"
#: bookwyrm/templates/user_admin/user_info.html:5
-#, fuzzy
-#| msgid "Details"
msgid "User details"
-msgstr "Détails"
+msgstr "Détails du compte"
#: bookwyrm/templates/user_admin/user_info.html:14
msgid "View user profile"
msgstr "Voir le profil"
#: bookwyrm/templates/user_admin/user_info.html:20
-#, fuzzy
-#| msgid "Instance Settings"
msgid "Instance details"
-msgstr "Paramètres de l’instance"
+msgstr "Détails de l’instance"
#: bookwyrm/templates/user_admin/user_info.html:46
msgid "View instance"
-msgstr ""
+msgstr "Voir l’instance"
#: bookwyrm/templates/user_admin/user_moderation_actions.html:11
msgid "Suspend user"
-msgstr ""
+msgstr "Suspendre le compte"
#: bookwyrm/templates/user_admin/user_moderation_actions.html:13
msgid "Un-suspend user"
-msgstr ""
+msgstr "Rétablir le compte"
#: bookwyrm/templates/user_admin/user_moderation_actions.html:21
msgid "Access level:"
-msgstr ""
+msgstr "Niveau d’accès :"
+
+#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:22
+msgid "File exceeds maximum size: 10MB"
+msgstr "Ce fichier dépasse la taille limite : 10 Mo"
+
+#: bookwyrm/templatetags/utilities.py:30
+#, python-format
+msgid "%(title)s: %(subtitle)s"
+msgstr "%(title)s (%(subtitle)s)"
#: bookwyrm/views/import_data.py:67
-#, fuzzy
-#| msgid "Email address:"
msgid "Not a valid csv file"
-msgstr "Adresse email :"
+msgstr "Fichier CSV non valide"
#: bookwyrm/views/password.py:32
msgid "No user with that email address was found."
@@ -3056,12 +2989,12 @@ msgstr "Un lien de réinitialisation a été envoyé à %s."
#~ msgid "Enter a number."
#~ msgstr "Numéro dans la série :"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "A user with this email already exists."
#~ msgid "%(model_name)s with this %(field_labels)s already exists."
#~ msgstr "Cet email est déjà associé à un compte."
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(value)s is not a valid remote_id"
#~ msgid "Value %(value)r is not a valid choice."
#~ msgstr "%(value)s n’est pas une remote_id valide."
@@ -3071,7 +3004,7 @@ msgstr "Un lien de réinitialisation a été envoyé à %s."
#~ msgid "This field cannot be null."
#~ msgstr "Cette étagère est vide"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "A user with this email already exists."
#~ msgid "%(model_name)s with this %(field_label)s already exists."
#~ msgstr "Cet email est déjà associé à un compte."
@@ -3121,7 +3054,7 @@ msgstr "Un lien de réinitialisation a été envoyé à %s."
#~ msgid "Positive small integer"
#~ msgstr "Aucune invitation active"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(value)s is not a valid username"
#~ msgid "“%(value)s” is not a valid UUID."
#~ msgstr "%(value)s n’est pas un nom de compte valide."
@@ -3136,12 +3069,12 @@ msgstr "Un lien de réinitialisation a été envoyé à %s."
#~ msgid "One-to-one relationship"
#~ msgstr "Relations"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "Relationships"
#~ msgid "%(from)s-%(to)s relationship"
#~ msgstr "Relations"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "Relationships"
#~ msgid "%(from)s-%(to)s relationships"
#~ msgstr "Relations"
@@ -3201,7 +3134,7 @@ msgstr "Un lien de réinitialisation a été envoyé à %s."
#~ msgid "Order"
#~ msgstr "Trier par"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(value)s is not a valid username"
#~ msgid "“%(pk)s” is not a valid value."
#~ msgstr "%(value)s n’est pas un nom de compte valide."
@@ -3265,7 +3198,7 @@ msgstr "Un lien de réinitialisation a été envoyé à %s."
#~ msgid "This is not a valid IPv6 address."
#~ msgstr "Adresse email :"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "No books found matching the query \"%(query)s\""
#~ msgid "No %(verbose_name)s found matching the query"
#~ msgstr "Aucun livre trouvé pour la requête « %(query)s »"
@@ -3284,11 +3217,9 @@ msgstr "Un lien de réinitialisation a été envoyé à %s."
#~ msgid "Matching Users"
#~ msgstr "Comptes correspondants"
-#, python-format
#~ msgid "Set a reading goal for %(year)s"
#~ msgstr "Définir un défi lecture pour %(year)s"
-#, python-format
#~ msgid "by %(author)s"
#~ msgstr "par %(author)s"
@@ -3298,21 +3229,12 @@ msgstr "Un lien de réinitialisation a été envoyé à %s."
#~ msgid "Reactivate user"
#~ msgstr "Réactiver le compte"
-#, python-format
-#~ msgid "%(rating)s star"
-#~ msgid_plural "%(rating)s stars"
-#~ msgstr[0] "%(rating)s étoile"
-#~ msgstr[1] "%(rating)s étoiles"
-
-#, python-format
#~ msgid "replied to %(username)s's review "
#~ msgstr "a répondu à la critique de %(username)s "
-#, python-format
#~ msgid "replied to %(username)s's comment "
#~ msgstr "a répondu au commentaire de %(username)s "
-#, python-format
#~ msgid "replied to %(username)s's quote "
#~ msgstr "a répondu à la citation de %(username)s "
@@ -3322,7 +3244,6 @@ msgstr "Un lien de réinitialisation a été envoyé à %s."
#~ msgid "Add tag"
#~ msgstr "Ajouter un tag"
-#, python-format
#~ msgid "Books tagged \"%(tag.name)s\""
#~ msgstr "Livres tagués « %(tag.name)s »"
diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo
index 17b3df695..5e5b36dcb 100644
Binary files a/locale/zh_Hans/LC_MESSAGES/django.mo and b/locale/zh_Hans/LC_MESSAGES/django.mo differ
diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po
index 0ec8b1d88..4106db438 100644
--- a/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/locale/zh_Hans/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-20 14:40-0700\n"
+"POT-Creation-Date: 2021-06-06 20:52+0000\n"
"PO-Revision-Date: 2021-03-20 00:56+0000\n"
"Last-Translator: Kana \n"
"Language-Team: Mouse Reeve \n"
@@ -58,12 +58,12 @@ msgid "Book Title"
msgstr "标题"
#: bookwyrm/forms.py:301 bookwyrm/templates/snippets/create_status_form.html:34
-#: bookwyrm/templates/user/shelf/shelf.html:84
-#: bookwyrm/templates/user/shelf/shelf.html:115
+#: bookwyrm/templates/user/shelf/shelf.html:85
+#: bookwyrm/templates/user/shelf/shelf.html:116
msgid "Rating"
msgstr "评价"
-#: bookwyrm/forms.py:303 bookwyrm/templates/lists/list.html:101
+#: bookwyrm/forms.py:303 bookwyrm/templates/lists/list.html:107
msgid "Sort By"
msgstr ""
@@ -79,41 +79,41 @@ msgstr "升序排序"
msgid "Descending"
msgstr "升序排序"
-#: bookwyrm/models/fields.py:24
+#: bookwyrm/models/fields.py:25
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s 不是有效的 remote_id"
-#: bookwyrm/models/fields.py:33 bookwyrm/models/fields.py:42
+#: bookwyrm/models/fields.py:34 bookwyrm/models/fields.py:43
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s 不是有效的用户名"
-#: bookwyrm/models/fields.py:165 bookwyrm/templates/layout.html:155
+#: bookwyrm/models/fields.py:166 bookwyrm/templates/layout.html:152
msgid "username"
msgstr "用户名"
-#: bookwyrm/models/fields.py:170
+#: bookwyrm/models/fields.py:171
msgid "A user with that username already exists."
msgstr "已经存在使用该用户名的用户。"
-#: bookwyrm/settings.py:155
+#: bookwyrm/settings.py:156
msgid "English"
msgstr "English(英语)"
-#: bookwyrm/settings.py:156
+#: bookwyrm/settings.py:157
msgid "German"
msgstr "Deutsch(德语)"
-#: bookwyrm/settings.py:157
+#: bookwyrm/settings.py:158
msgid "Spanish"
msgstr "Español(西班牙语)"
-#: bookwyrm/settings.py:158
+#: bookwyrm/settings.py:159
msgid "French"
msgstr "Français(法语)"
-#: bookwyrm/settings.py:159
+#: bookwyrm/settings.py:160
msgid "Simplified Chinese"
msgstr "简体中文"
@@ -260,7 +260,7 @@ msgstr "Goodreads key:"
#: bookwyrm/templates/book/edit_book.html:263
#: bookwyrm/templates/lists/form.html:42
#: bookwyrm/templates/preferences/edit_user.html:70
-#: bookwyrm/templates/settings/announcement_form.html:65
+#: bookwyrm/templates/settings/announcement_form.html:69
#: bookwyrm/templates/settings/edit_server.html:68
#: bookwyrm/templates/settings/federated_server.html:98
#: bookwyrm/templates/settings/site.html:97
@@ -386,7 +386,7 @@ msgstr "主题"
msgid "Places"
msgstr "地点"
-#: bookwyrm/templates/book/book.html:276 bookwyrm/templates/layout.html:64
+#: bookwyrm/templates/book/book.html:276 bookwyrm/templates/layout.html:61
#: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:25
#: bookwyrm/templates/search/layout.html:50
@@ -400,7 +400,7 @@ msgstr "添加到列表"
#: bookwyrm/templates/book/book.html:297
#: bookwyrm/templates/book/cover_modal.html:31
-#: bookwyrm/templates/lists/list.html:164
+#: bookwyrm/templates/lists/list.html:179
msgid "Add"
msgstr "添加"
@@ -532,7 +532,7 @@ msgid "John Doe, Jane Smith"
msgstr "张三, 李四"
#: bookwyrm/templates/book/edit_book.html:183
-#: bookwyrm/templates/user/shelf/shelf.html:77
+#: bookwyrm/templates/user/shelf/shelf.html:78
msgid "Cover"
msgstr "封面"
@@ -655,7 +655,7 @@ msgstr "跨站社区"
#: bookwyrm/templates/directory/directory.html:4
#: bookwyrm/templates/directory/directory.html:9
-#: bookwyrm/templates/layout.html:92
+#: bookwyrm/templates/layout.html:64
msgid "Directory"
msgstr "目录"
@@ -854,7 +854,7 @@ msgid "Direct Messages with %(username)s "
msgstr "与 %(username)s 私信"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/layout.html:87
+#: bookwyrm/templates/layout.html:92
msgid "Direct Messages"
msgstr "私信"
@@ -910,7 +910,6 @@ msgid "Updates"
msgstr "更新"
#: bookwyrm/templates/feed/feed_layout.html:10
-#: bookwyrm/templates/layout.html:58
#: bookwyrm/templates/user/shelf/books_header.html:3
msgid "Your books"
msgstr "你的书目"
@@ -963,7 +962,7 @@ msgid "What are you reading?"
msgstr "你在阅读什么?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/lists/list.html:120
+#: bookwyrm/templates/lists/list.html:135
msgid "Search for a book"
msgstr "搜索书目"
@@ -983,7 +982,7 @@ msgstr "你可以在开始使用 %(site_name)s 后添加书目。"
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/layout.html:37 bookwyrm/templates/layout.html:38
-#: bookwyrm/templates/lists/list.html:124
+#: bookwyrm/templates/lists/list.html:139
#: bookwyrm/templates/search/layout.html:4
#: bookwyrm/templates/search/layout.html:9
msgid "Search"
@@ -999,7 +998,7 @@ msgid "Popular on %(site_name)s"
msgstr "%(site_name)s 上的热门"
#: bookwyrm/templates/get_started/books.html:58
-#: bookwyrm/templates/lists/list.html:137
+#: bookwyrm/templates/lists/list.html:152
msgid "No books found"
msgstr "没有找到书目"
@@ -1111,7 +1110,7 @@ msgid "%(username)s's %(year)s Books"
msgstr "%(username)s 在 %(year)s 的书目"
#: bookwyrm/templates/import.html:5 bookwyrm/templates/import.html:9
-#: bookwyrm/templates/layout.html:97
+#: bookwyrm/templates/user/shelf/shelf.html:40
msgid "Import Books"
msgstr "导入书目"
@@ -1196,14 +1195,14 @@ msgstr "书目"
#: bookwyrm/templates/import_status.html:114
#: bookwyrm/templates/snippets/create_status_form.html:13
-#: bookwyrm/templates/user/shelf/shelf.html:78
-#: bookwyrm/templates/user/shelf/shelf.html:98
+#: bookwyrm/templates/user/shelf/shelf.html:79
+#: bookwyrm/templates/user/shelf/shelf.html:99
msgid "Title"
msgstr "标题"
#: bookwyrm/templates/import_status.html:117
-#: bookwyrm/templates/user/shelf/shelf.html:79
-#: bookwyrm/templates/user/shelf/shelf.html:101
+#: bookwyrm/templates/user/shelf/shelf.html:80
+#: bookwyrm/templates/user/shelf/shelf.html:102
msgid "Author"
msgstr "作者"
@@ -1245,15 +1244,21 @@ msgstr "搜索书目或用户"
msgid "Main navigation menu"
msgstr "主导航菜单"
-#: bookwyrm/templates/layout.html:61
+#: bookwyrm/templates/layout.html:58
msgid "Feed"
msgstr "动态"
-#: bookwyrm/templates/layout.html:102
+#: bookwyrm/templates/layout.html:87
+#, fuzzy
+#| msgid "Your books"
+msgid "Your Books"
+msgstr "你的书目"
+
+#: bookwyrm/templates/layout.html:97
msgid "Settings"
msgstr "设置"
-#: bookwyrm/templates/layout.html:111
+#: bookwyrm/templates/layout.html:106
#: bookwyrm/templates/settings/admin_layout.html:31
#: bookwyrm/templates/settings/manage_invite_requests.html:15
#: bookwyrm/templates/settings/manage_invites.html:3
@@ -1261,45 +1266,47 @@ msgstr "设置"
msgid "Invites"
msgstr "邀请"
-#: bookwyrm/templates/layout.html:118
+#: bookwyrm/templates/layout.html:113
msgid "Admin"
msgstr "管理员"
-#: bookwyrm/templates/layout.html:125
+#: bookwyrm/templates/layout.html:120
msgid "Log out"
msgstr "登出"
-#: bookwyrm/templates/layout.html:133 bookwyrm/templates/layout.html:134
+#: bookwyrm/templates/layout.html:128 bookwyrm/templates/layout.html:129
#: bookwyrm/templates/notifications.html:6
#: bookwyrm/templates/notifications.html:11
msgid "Notifications"
msgstr "通知"
-#: bookwyrm/templates/layout.html:154 bookwyrm/templates/layout.html:158
+#: bookwyrm/templates/layout.html:151 bookwyrm/templates/layout.html:155
#: bookwyrm/templates/login.html:17
#: bookwyrm/templates/snippets/register_form.html:4
msgid "Username:"
msgstr "用户名:"
-#: bookwyrm/templates/layout.html:159
+#: bookwyrm/templates/layout.html:156
msgid "password"
msgstr "密码"
-#: bookwyrm/templates/layout.html:160 bookwyrm/templates/login.html:36
+#: bookwyrm/templates/layout.html:157 bookwyrm/templates/login.html:36
msgid "Forgot your password?"
msgstr "忘记了密码?"
-#: bookwyrm/templates/layout.html:163 bookwyrm/templates/login.html:10
+#: bookwyrm/templates/layout.html:160 bookwyrm/templates/login.html:10
#: bookwyrm/templates/login.html:33
msgid "Log in"
msgstr "登录"
-#: bookwyrm/templates/layout.html:171
+#: bookwyrm/templates/layout.html:168
msgid "Join"
msgstr "加入"
#: bookwyrm/templates/layout.html:206
-msgid "About this server"
+#, fuzzy
+#| msgid "About this server"
+msgid "About this instance"
msgstr "关于本服务器"
#: bookwyrm/templates/layout.html:210
@@ -1361,7 +1368,7 @@ msgid "Discard"
msgstr "削除"
#: bookwyrm/templates/lists/edit_form.html:5
-#: bookwyrm/templates/lists/list_layout.html:17
+#: bookwyrm/templates/lists/list_layout.html:16
msgid "Edit List"
msgstr "编辑列表"
@@ -1410,62 +1417,63 @@ msgstr "任何人都可以向此列表中添加书目"
msgid "This list is currently empty"
msgstr "此列表当前是空的"
-#: bookwyrm/templates/lists/list.html:65
+#: bookwyrm/templates/lists/list.html:66
#, python-format
msgid "Added by %(username)s "
msgstr "由 %(username)s 添加"
-#: bookwyrm/templates/lists/list.html:77
-#, fuzzy
-#| msgid "Sent"
-msgid "Set"
-msgstr "已发送"
-
-#: bookwyrm/templates/lists/list.html:80
+#: bookwyrm/templates/lists/list.html:74
#, fuzzy
#| msgid "List curation:"
msgid "List position"
msgstr "列表策展:"
-#: bookwyrm/templates/lists/list.html:86
+#: bookwyrm/templates/lists/list.html:81
+#, fuzzy
+#| msgid "Sent"
+msgid "Set"
+msgstr "已发送"
+
+#: bookwyrm/templates/lists/list.html:89
#: bookwyrm/templates/snippets/shelf_selector.html:26
msgid "Remove"
msgstr "移除"
-#: bookwyrm/templates/lists/list.html:99 bookwyrm/templates/lists/list.html:111
+#: bookwyrm/templates/lists/list.html:103
+#: bookwyrm/templates/lists/list.html:120
#, fuzzy
#| msgid "Your Lists"
msgid "Sort List"
msgstr "你的列表"
-#: bookwyrm/templates/lists/list.html:105
+#: bookwyrm/templates/lists/list.html:113
#, fuzzy
#| msgid "Directory"
msgid "Direction"
msgstr "目录"
-#: bookwyrm/templates/lists/list.html:116
+#: bookwyrm/templates/lists/list.html:127
msgid "Add Books"
msgstr "添加书目"
-#: bookwyrm/templates/lists/list.html:116
+#: bookwyrm/templates/lists/list.html:129
msgid "Suggest Books"
msgstr "推荐书目"
-#: bookwyrm/templates/lists/list.html:125
+#: bookwyrm/templates/lists/list.html:140
msgid "search"
msgstr "搜索"
-#: bookwyrm/templates/lists/list.html:131
+#: bookwyrm/templates/lists/list.html:146
msgid "Clear search"
msgstr "清除搜索"
-#: bookwyrm/templates/lists/list.html:136
+#: bookwyrm/templates/lists/list.html:151
#, python-format
msgid "No books found matching the query \"%(query)s\""
msgstr "没有符合 \"%(query)s\" 请求的书目"
-#: bookwyrm/templates/lists/list.html:164
+#: bookwyrm/templates/lists/list.html:179
msgid "Suggest"
msgstr "推荐"
@@ -1558,8 +1566,8 @@ msgstr "已解决"
#: bookwyrm/templates/moderation/reports.html:6
#, python-format
-msgid "Reports: %(server_name)s"
-msgstr "报告: %(server_name)s"
+msgid "Reports: %(instance_name)s"
+msgstr "报告: %(instance_name)s"
#: bookwyrm/templates/moderation/reports.html:8
#: bookwyrm/templates/moderation/reports.html:17
@@ -1569,8 +1577,8 @@ msgstr "报告"
#: bookwyrm/templates/moderation/reports.html:14
#, python-format
-msgid "Reports: %(server_name)s "
-msgstr "报告: %(server_name)s "
+msgid "Reports: %(instance_name)s "
+msgstr "报告: %(instance_name)s "
#: bookwyrm/templates/moderation/reports.html:28
msgid "Resolved"
@@ -1771,6 +1779,26 @@ msgstr "个人资料"
msgid "Relationships"
msgstr "关系"
+#: bookwyrm/templates/rss/title.html:5
+#: bookwyrm/templates/snippets/status/status_header.html:35
+msgid "rated"
+msgstr "评价了"
+
+#: bookwyrm/templates/rss/title.html:7
+#: bookwyrm/templates/snippets/status/status_header.html:37
+msgid "reviewed"
+msgstr "写了书评给"
+
+#: bookwyrm/templates/rss/title.html:9
+#: bookwyrm/templates/snippets/status/status_header.html:39
+msgid "commented on"
+msgstr "评论了"
+
+#: bookwyrm/templates/rss/title.html:11
+#: bookwyrm/templates/snippets/status/status_header.html:41
+msgid "quoted"
+msgstr "引用了"
+
#: bookwyrm/templates/search/book.html:64
#, fuzzy
#| msgid "Show results from other catalogues"
@@ -1828,7 +1856,9 @@ msgstr "管理用户"
#: bookwyrm/templates/settings/admin_layout.html:39
#: bookwyrm/templates/settings/federation.html:3
#: bookwyrm/templates/settings/federation.html:5
-msgid "Federated Servers"
+#, fuzzy
+#| msgid "Federated Servers"
+msgid "Federated Instances"
msgstr "互联的服务器"
#: bookwyrm/templates/settings/admin_layout.html:44
@@ -1882,6 +1912,7 @@ msgid "Back to list"
msgstr "回到服务器列表"
#: bookwyrm/templates/settings/announcement.html:11
+#: bookwyrm/templates/settings/announcement_form.html:6
#, fuzzy
#| msgid "Announcements"
msgid "Edit Announcement"
@@ -1923,7 +1954,7 @@ msgstr "出生日期:"
msgid "Active:"
msgstr "活跃"
-#: bookwyrm/templates/settings/announcement_form.html:5
+#: bookwyrm/templates/settings/announcement_form.html:8
#: bookwyrm/templates/settings/announcements.html:8
#, fuzzy
#| msgid "Announcements"
@@ -1982,13 +2013,15 @@ msgstr "停用"
#: bookwyrm/templates/settings/server_blocklist.html:3
#: bookwyrm/templates/settings/server_blocklist.html:20
#, fuzzy
-#| msgid "Add cover"
-msgid "Add server"
-msgstr "添加封面"
+#| msgid "Instance Name:"
+msgid "Add instance"
+msgstr "实例名称"
#: bookwyrm/templates/settings/edit_server.html:7
#: bookwyrm/templates/settings/server_blocklist.html:7
-msgid "Back to server list"
+#, fuzzy
+#| msgid "Back to server list"
+msgid "Back to instance list"
msgstr "回到服务器列表"
#: bookwyrm/templates/settings/edit_server.html:16
@@ -2103,8 +2136,10 @@ msgstr ""
#: bookwyrm/templates/settings/federation.html:19
#: bookwyrm/templates/user_admin/server_filter.html:5
-msgid "Server name"
-msgstr "服务器名称"
+#, fuzzy
+#| msgid "Instance Name:"
+msgid "Instance name"
+msgstr "实例名称"
#: bookwyrm/templates/settings/federation.html:23
msgid "Date federated"
@@ -2231,7 +2266,7 @@ msgid "Import Blocklist"
msgstr "导入书目"
#: bookwyrm/templates/settings/server_blocklist.html:26
-#: bookwyrm/templates/snippets/goal_progress.html:5
+#: bookwyrm/templates/snippets/goal_progress.html:7
msgid "Success!"
msgstr "成功!"
@@ -2320,15 +2355,15 @@ msgstr "没有封面"
msgid "%(title)s by "
msgstr "%(title)s 来自"
-#: bookwyrm/templates/snippets/boost_button.html:9
-#: bookwyrm/templates/snippets/boost_button.html:10
+#: bookwyrm/templates/snippets/boost_button.html:20
+#: bookwyrm/templates/snippets/boost_button.html:21
#, fuzzy
#| msgid "boosted"
msgid "Boost"
msgstr "转发了"
-#: bookwyrm/templates/snippets/boost_button.html:16
-#: bookwyrm/templates/snippets/boost_button.html:17
+#: bookwyrm/templates/snippets/boost_button.html:33
+#: bookwyrm/templates/snippets/boost_button.html:34
#, fuzzy
#| msgid "Un-boost status"
msgid "Un-boost"
@@ -2422,13 +2457,13 @@ msgstr "删除这些阅读日期吗?"
msgid "You are deleting this readthrough and its %(count)s associated progress updates."
msgstr "你正要删除这篇阅读经过以及与之相关的 %(count)s 次进度更新。"
-#: bookwyrm/templates/snippets/fav_button.html:9
-#: bookwyrm/templates/snippets/fav_button.html:11
+#: bookwyrm/templates/snippets/fav_button.html:10
+#: bookwyrm/templates/snippets/fav_button.html:12
msgid "Like"
msgstr ""
-#: bookwyrm/templates/snippets/fav_button.html:17
#: bookwyrm/templates/snippets/fav_button.html:18
+#: bookwyrm/templates/snippets/fav_button.html:19
#, fuzzy
#| msgid "Un-like status"
msgid "Un-like"
@@ -2471,6 +2506,13 @@ msgstr "接受"
msgid "No rating"
msgstr "没有评价"
+#: bookwyrm/templates/snippets/form_rate_stars.html:44
+#: bookwyrm/templates/snippets/stars.html:7
+#, python-format
+msgid "%(rating)s star"
+msgid_plural "%(rating)s stars"
+msgstr[0] ""
+
#: bookwyrm/templates/snippets/generated_status/goal.html:1
#, python-format
msgid "set a goal to read %(counter)s book in %(year)s"
@@ -2522,17 +2564,17 @@ msgstr "发布到消息流中"
msgid "Set goal"
msgstr "设置目标"
-#: bookwyrm/templates/snippets/goal_progress.html:7
+#: bookwyrm/templates/snippets/goal_progress.html:9
#, python-format
msgid "%(percent)s%% complete!"
msgstr "完成了 %(percent)s%% !"
-#: bookwyrm/templates/snippets/goal_progress.html:10
+#: bookwyrm/templates/snippets/goal_progress.html:12
#, python-format
msgid "You've read %(read_count)s of %(goal_count)s books ."
msgstr "你已经阅读了 %(goal_count)s 本书中的 %(read_count)s 本 。"
-#: bookwyrm/templates/snippets/goal_progress.html:12
+#: bookwyrm/templates/snippets/goal_progress.html:14
#, python-format
msgid "%(username)s has read %(read_count)s of %(goal_count)s books ."
msgstr "%(username)s 已经阅读了 %(goal_count)s 本书中的 %(read_count)s 本 。"
@@ -2641,26 +2683,6 @@ msgstr "注册"
msgid "Report"
msgstr "报告"
-#: bookwyrm/templates/snippets/rss_title.html:5
-#: bookwyrm/templates/snippets/status/status_header.html:35
-msgid "rated"
-msgstr "评价了"
-
-#: bookwyrm/templates/snippets/rss_title.html:7
-#: bookwyrm/templates/snippets/status/status_header.html:37
-msgid "reviewed"
-msgstr "写了书评给"
-
-#: bookwyrm/templates/snippets/rss_title.html:9
-#: bookwyrm/templates/snippets/status/status_header.html:39
-msgid "commented on"
-msgstr "评论了"
-
-#: bookwyrm/templates/snippets/rss_title.html:11
-#: bookwyrm/templates/snippets/status/status_header.html:41
-msgid "quoted"
-msgstr "引用了"
-
#: bookwyrm/templates/snippets/search_result_text.html:36
msgid "Import book"
msgstr "导入书目"
@@ -2832,7 +2854,7 @@ msgstr "编辑书架"
msgid "Update shelf"
msgstr "更新书架"
-#: bookwyrm/templates/user/shelf/shelf.html:25 bookwyrm/views/shelf.py:51
+#: bookwyrm/templates/user/shelf/shelf.html:25 bookwyrm/views/shelf.py:56
msgid "All books"
msgstr "所有书目"
@@ -2840,30 +2862,30 @@ msgstr "所有书目"
msgid "Create shelf"
msgstr "创建书架"
-#: bookwyrm/templates/user/shelf/shelf.html:61
+#: bookwyrm/templates/user/shelf/shelf.html:62
msgid "Edit shelf"
msgstr "编辑书架"
-#: bookwyrm/templates/user/shelf/shelf.html:80
-#: bookwyrm/templates/user/shelf/shelf.html:104
+#: bookwyrm/templates/user/shelf/shelf.html:81
+#: bookwyrm/templates/user/shelf/shelf.html:105
msgid "Shelved"
msgstr "上架时间"
-#: bookwyrm/templates/user/shelf/shelf.html:81
-#: bookwyrm/templates/user/shelf/shelf.html:108
+#: bookwyrm/templates/user/shelf/shelf.html:82
+#: bookwyrm/templates/user/shelf/shelf.html:109
msgid "Started"
msgstr "开始时间"
-#: bookwyrm/templates/user/shelf/shelf.html:82
-#: bookwyrm/templates/user/shelf/shelf.html:111
+#: bookwyrm/templates/user/shelf/shelf.html:83
+#: bookwyrm/templates/user/shelf/shelf.html:112
msgid "Finished"
msgstr "完成时间"
-#: bookwyrm/templates/user/shelf/shelf.html:137
+#: bookwyrm/templates/user/shelf/shelf.html:138
msgid "This shelf is empty."
msgstr "此书架是空的。"
-#: bookwyrm/templates/user/shelf/shelf.html:143
+#: bookwyrm/templates/user/shelf/shelf.html:144
msgid "Delete shelf"
msgstr "删除书架"
@@ -2924,8 +2946,8 @@ msgstr "回到报告"
#: bookwyrm/templates/user_admin/user_admin.html:7
#, python-format
-msgid "Users: %(server_name)s "
-msgstr "用户: %(server_name)s "
+msgid "Users: %(instance_name)s "
+msgstr "用户: %(instance_name)s "
#: bookwyrm/templates/user_admin/user_admin.html:22
#: bookwyrm/templates/user_admin/username_filter.html:5
@@ -2941,7 +2963,7 @@ msgid "Last Active"
msgstr "最后或缺"
#: bookwyrm/templates/user_admin/user_admin.html:38
-msgid "Remote server"
+msgid "Remote instance"
msgstr "移除服务器"
#: bookwyrm/templates/user_admin/user_admin.html:47
@@ -2989,6 +3011,10 @@ msgstr ""
msgid "Access level:"
msgstr ""
+#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:3
+msgid "File exceeds maximum size: 10MB"
+msgstr ""
+
#: bookwyrm/views/import_data.py:67
#, fuzzy
#| msgid "Email address:"
@@ -3004,6 +3030,23 @@ msgstr "没有找到使用该邮箱的用户。"
msgid "A password reset link sent to %s"
msgstr "密码重置连接已发送给 %s"
+#~ msgid "Reports: %(server_name)s "
+#~ msgstr "报告: %(server_name)s "
+
+#~ msgid "Federated Servers"
+#~ msgstr "互联的服务器"
+
+#~ msgid "Server name"
+#~ msgstr "服务器名称"
+
+#, fuzzy
+#~| msgid "Add cover"
+#~ msgid "Add server"
+#~ msgstr "添加封面"
+
+#~ msgid "Remote server"
+#~ msgstr "移除服务器"
+
#, fuzzy
#~| msgid "BookWyrm users"
#~ msgid "BookWyrm\\"
@@ -3054,12 +3097,12 @@ msgstr "密码重置连接已发送给 %s"
#~ msgid "Enter a number."
#~ msgstr "系列编号:"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "A user with this email already exists."
#~ msgid "%(model_name)s with this %(field_labels)s already exists."
#~ msgstr "已经存在使用该邮箱的用户。"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(value)s is not a valid remote_id"
#~ msgid "Value %(value)r is not a valid choice."
#~ msgstr "%(value)s 不是有效的 remote_id"
@@ -3069,7 +3112,7 @@ msgstr "密码重置连接已发送给 %s"
#~ msgid "This field cannot be null."
#~ msgstr "此书架是空的。"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "A user with this email already exists."
#~ msgid "%(model_name)s with this %(field_label)s already exists."
#~ msgstr "已经存在使用该邮箱的用户。"
@@ -3119,7 +3162,7 @@ msgstr "密码重置连接已发送给 %s"
#~ msgid "Positive small integer"
#~ msgstr "无有效的邀请"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(value)s is not a valid username"
#~ msgid "“%(value)s” is not a valid UUID."
#~ msgstr "%(value)s 不是有效的用户名"
@@ -3134,12 +3177,12 @@ msgstr "密码重置连接已发送给 %s"
#~ msgid "One-to-one relationship"
#~ msgstr "关系"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "Relationships"
#~ msgid "%(from)s-%(to)s relationship"
#~ msgstr "关系"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "Relationships"
#~ msgid "%(from)s-%(to)s relationships"
#~ msgstr "关系"
@@ -3199,7 +3242,7 @@ msgstr "密码重置连接已发送给 %s"
#~ msgid "Order"
#~ msgstr "排列顺序"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "%(value)s is not a valid username"
#~ msgid "“%(pk)s” is not a valid value."
#~ msgstr "%(value)s 不是有效的用户名"
@@ -3263,7 +3306,7 @@ msgstr "密码重置连接已发送给 %s"
#~ msgid "This is not a valid IPv6 address."
#~ msgstr "邮箱地址:"
-#, fuzzy, python-format
+#, fuzzy
#~| msgid "No books found matching the query \"%(query)s\""
#~ msgid "No %(verbose_name)s found matching the query"
#~ msgstr "没有符合 \"%(query)s\" 请求的书目"
@@ -3282,11 +3325,9 @@ msgstr "密码重置连接已发送给 %s"
#~ msgid "Matching Users"
#~ msgstr "匹配的用户"
-#, python-format
#~ msgid "Set a reading goal for %(year)s"
#~ msgstr "设定 %(year)s 的阅读目标"
-#, python-format
#~ msgid "by %(author)s"
#~ msgstr "由 %(author)s 所著"
@@ -3299,15 +3340,12 @@ msgstr "密码重置连接已发送给 %s"
#~ msgid "Date"
#~ msgstr "日期"
-#, python-format
#~ msgid "replied to %(username)s's review "
#~ msgstr "回复了 %(username)s 的 书评 "
-#, python-format
#~ msgid "replied to %(username)s's comment "
#~ msgstr "恢复了 %(username)s 的 评论 "
-#, python-format
#~ msgid "replied to %(username)s's quote "
#~ msgstr "回复了 %(username)s 的 引用 "
@@ -3317,7 +3355,6 @@ msgstr "密码重置连接已发送给 %s"
#~ msgid "Add tag"
#~ msgstr "添加标签"
-#, python-format
#~ msgid "Books tagged \"%(tag.name)s\""
#~ msgstr "标有 \"%(tag.name)s\" 标签的书"
diff --git a/nginx/development b/nginx/development
index d38982870..05b27c2b1 100644
--- a/nginx/development
+++ b/nginx/development
@@ -1,3 +1,5 @@
+include /etc/nginx/conf.d/server_config;
+
upstream web {
server web:8000;
}
diff --git a/nginx/production b/nginx/production
index c5d83cbf6..54c84af45 100644
--- a/nginx/production
+++ b/nginx/production
@@ -1,3 +1,5 @@
+include /etc/nginx/conf.d/server_config;
+
upstream web {
server web:8000;
}
diff --git a/nginx/server_config b/nginx/server_config
new file mode 100644
index 000000000..c9aad8e4a
--- /dev/null
+++ b/nginx/server_config
@@ -0,0 +1 @@
+client_max_body_size 10m;
diff --git a/requirements.txt b/requirements.txt
index 5c4c6466e..6d29982e9 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,6 @@
celery==4.4.2
colorthief==0.2.1
-Django==3.2.0
+Django==3.2.4
django-model-utils==4.0.0
environs==7.2.0
flower==0.9.4
diff --git a/yarn.lock b/yarn.lock
index 21730a685..7686fd113 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2042,9 +2042,9 @@ to-regex-range@^5.0.1:
is-number "^7.0.0"
trim-newlines@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30"
- integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
+ integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
trough@^1.0.0:
version "1.0.5"