From 29ebfc456d4e584b11cc993e67e9f84410524bc2 Mon Sep 17 00:00:00 2001 From: Joel Bradshaw Date: Sun, 9 Jan 2022 23:57:57 -0800 Subject: [PATCH 01/88] Use run --rm instead of exec for initdb This way we don't depend on the containers already being up and running. --- bw-dev | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bw-dev b/bw-dev index 6bf5a125..29c2660d 100755 --- a/bw-dev +++ b/bw-dev @@ -30,12 +30,12 @@ function execweb { } function initdb { - execweb python manage.py migrate - execweb python manage.py initdb + runweb python manage.py migrate + runweb python manage.py initdb } function makeitblack { - docker-compose run --rm web black celerywyrm bookwyrm + runweb black celerywyrm bookwyrm } function awscommand { From 284eb620dd413fd2327d8d90778f556c1c3da503 Mon Sep 17 00:00:00 2001 From: Joel Bradshaw Date: Thu, 20 Jan 2022 22:37:03 -0800 Subject: [PATCH 02/88] Add Source Han font for preview generation to Docker image Include the license and a README explaining things in the repo itself. Depending on an external source for this is intended to be temporary, the goal is to have a Bookywrm-managed source for these, but this should be stable enough for now. We build it into the Dockerfile to make it available without adding it to the git repo itself, because git history is forever and we don't want to bake large files into the history. Theoretically it would make sense to gate this download on the ENABLE_PREVIEW_IMAGES environment variable, but ENV variables aren't available at Docker image build time (for sensible reasons), so we just unconditonally download it. This does mean users will ultimately download it anyway, but the benefit to doing this over adding it to the git history is that if we switch fonts, or update this one, or change strategies altogether, this version of the font will no longer have to be downloaded. Additionally, the font won't be downloaded until the application is actually built, which involves a bunch of other downloading (of Docker images and the like), so it's a reasonable time to do it. --- Dockerfile | 7 ++ .../static/fonts/source_han_sans/LICENSE.txt | 96 +++++++++++++++++++ .../static/fonts/source_han_sans/README.txt | 9 ++ 3 files changed, 112 insertions(+) create mode 100644 bookwyrm/static/fonts/source_han_sans/LICENSE.txt create mode 100644 bookwyrm/static/fonts/source_han_sans/README.txt diff --git a/Dockerfile b/Dockerfile index 349dd82b..8a24e888 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,13 @@ RUN mkdir /app /app/static /app/images WORKDIR /app +# Use RUN curl because ADD will re-download the file every time to make sure it +# hasn't changed, which is exactly what we don't want +RUN mkdir -p /app/static/fonts/source_han_sans +RUN curl \ + https://github.com/adobe-fonts/source-han-sans/raw/release/Variable/OTC/SourceHanSans-VF.ttf.ttc \ + -o /app/static/fonts/source_han_sans/SourceHanSans-VF.ttf.ttc + COPY requirements.txt /app/ RUN pip install -r requirements.txt --no-cache-dir RUN apt-get update && apt-get install -y gettext libgettextpo-dev tidy && apt-get clean diff --git a/bookwyrm/static/fonts/source_han_sans/LICENSE.txt b/bookwyrm/static/fonts/source_han_sans/LICENSE.txt new file mode 100644 index 00000000..ddf7b7e9 --- /dev/null +++ b/bookwyrm/static/fonts/source_han_sans/LICENSE.txt @@ -0,0 +1,96 @@ +Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font +Name 'Source'. Source is a trademark of Adobe in the United States +and/or other countries. + +This Font Software is licensed under the SIL Open Font License, +Version 1.1. + +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font +creation efforts of academic and linguistic communities, and to +provide a free and open framework in which fonts may be shared and +improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software +components as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, +deleting, or substituting -- in part or in whole -- any of the +components of the Original Version, by changing formats or by porting +the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, +modify, redistribute, and sell modified and unmodified copies of the +Font Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the +corresponding Copyright Holder. This restriction only applies to the +primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created using +the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/bookwyrm/static/fonts/source_han_sans/README.txt b/bookwyrm/static/fonts/source_han_sans/README.txt new file mode 100644 index 00000000..53cfa9b8 --- /dev/null +++ b/bookwyrm/static/fonts/source_han_sans/README.txt @@ -0,0 +1,9 @@ +The font file itself is not included in the Git repository to avoid putting +large files in the repo history. The Docker image should download the correct +font into this folder automatically. + +In case something goes wrong, the font used is the Variable OTC TTF, available +as of this writing from the Adobe Fonts GitHub repository: +https://github.com/adobe-fonts/source-han-sans/tree/release#user-content-variable-otcs + +BookWyrm expects the file to be in this folder, named SourceHanSans-VF.ttf.ttc From 6f5115c716a4443726e7b0dd31ae6e16d412d1ce Mon Sep 17 00:00:00 2001 From: Joachim Date: Wed, 19 Jan 2022 16:52:57 +0100 Subject: [PATCH 03/88] Use Source Han Sans for preview images generation --- bookwyrm/preview_images.py | 18 ++++++++++-------- requirements.txt | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/bookwyrm/preview_images.py b/bookwyrm/preview_images.py index a97ae2d5..917d985a 100644 --- a/bookwyrm/preview_images.py +++ b/bookwyrm/preview_images.py @@ -29,23 +29,25 @@ margin = math.floor(IMG_HEIGHT / 10) gutter = math.floor(margin / 2) inner_img_height = math.floor(IMG_HEIGHT * 0.8) inner_img_width = math.floor(inner_img_height * 0.7) -font_dir = os.path.join(settings.STATIC_ROOT, "fonts/public_sans") +font_dir = os.path.join(settings.STATIC_ROOT, "fonts/source_han_sans") -def get_font(font_name, size=28): +def get_font(weight, size=28): """Loads custom font""" - if font_name == "light": - font_path = os.path.join(font_dir, "PublicSans-Light.ttf") - if font_name == "regular": - font_path = os.path.join(font_dir, "PublicSans-Regular.ttf") - elif font_name == "bold": - font_path = os.path.join(font_dir, "PublicSans-Bold.ttf") + font_path = os.path.join(font_dir, "SourceHanSans-VF.ttf.ttc") try: font = ImageFont.truetype(font_path, size) except OSError: font = ImageFont.load_default() + if (weight == 'light'): + font.set_variation_by_name('Light') + if (weight == 'bold'): + font.set_variation_by_name('Bold') + if (weight == 'regular'): + font.set_variation_by_name('Regular') + return font diff --git a/requirements.txt b/requirements.txt index 534a0593..1f25895c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ django-model-utils==4.0.0 environs==9.3.4 flower==1.0.0 Markdown==3.3.3 -Pillow>=8.2.0 +Pillow>=9.0.0 psycopg2==2.8.4 pycryptodome==3.9.4 python-dateutil==2.8.1 From 766a0cc652c693786e6d3f25c624a1f4c8bac405 Mon Sep 17 00:00:00 2001 From: Joachim Date: Thu, 20 Jan 2022 22:19:49 +0100 Subject: [PATCH 04/88] Fix tests --- bookwyrm/preview_images.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/bookwyrm/preview_images.py b/bookwyrm/preview_images.py index 917d985a..f48ca15e 100644 --- a/bookwyrm/preview_images.py +++ b/bookwyrm/preview_images.py @@ -41,12 +41,15 @@ def get_font(weight, size=28): except OSError: font = ImageFont.load_default() - if (weight == 'light'): - font.set_variation_by_name('Light') - if (weight == 'bold'): - font.set_variation_by_name('Bold') - if (weight == 'regular'): - font.set_variation_by_name('Regular') + try: + if weight == "light": + font.set_variation_by_name("Light") + if weight == "bold": + font.set_variation_by_name("Bold") + if weight == "regular": + font.set_variation_by_name("Regular") + except AttributeError: + pass return font From 9e6390662b0dd9877c9151002b28468b5d4849e9 Mon Sep 17 00:00:00 2001 From: Joel Bradshaw Date: Tue, 25 Jan 2022 00:22:13 -0800 Subject: [PATCH 05/88] Download fonts at app startup instead We can't bake the font into the Docker image as such, because we mount the volumes which blows away anything we have in the app tree beforehand. We could stash it somewhere in the image and then copy it from there on app startup or something, but at that point we might as well just download it as part of the app startup. --- Dockerfile | 7 ------- bookwyrm/apps.py | 35 +++++++++++++++++++++++++++++++++++ bookwyrm/preview_images.py | 26 ++++++++++++++++++-------- bookwyrm/settings.py | 18 +++++++++++++----- 4 files changed, 66 insertions(+), 20 deletions(-) create mode 100644 bookwyrm/apps.py diff --git a/Dockerfile b/Dockerfile index 8a24e888..349dd82b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,13 +6,6 @@ RUN mkdir /app /app/static /app/images WORKDIR /app -# Use RUN curl because ADD will re-download the file every time to make sure it -# hasn't changed, which is exactly what we don't want -RUN mkdir -p /app/static/fonts/source_han_sans -RUN curl \ - https://github.com/adobe-fonts/source-han-sans/raw/release/Variable/OTC/SourceHanSans-VF.ttf.ttc \ - -o /app/static/fonts/source_han_sans/SourceHanSans-VF.ttf.ttc - COPY requirements.txt /app/ RUN pip install -r requirements.txt --no-cache-dir RUN apt-get update && apt-get install -y gettext libgettextpo-dev tidy && apt-get clean diff --git a/bookwyrm/apps.py b/bookwyrm/apps.py new file mode 100644 index 00000000..a3fe1c2c --- /dev/null +++ b/bookwyrm/apps.py @@ -0,0 +1,35 @@ +import os +import urllib +import logging + +from django.apps import AppConfig + +from bookwyrm import settings + +logger = logging.getLogger(__name__) + +def download_file(url, destination): + try: + stream = urllib.request.urlopen(url) + with open(destination, "b+w") as f: + f.write(stream.read()) + except (urllib.error.HTTPError, urllib.error.URLError): + logger.error("Failed to download file %s", url) + + +class BookwyrmConfig(AppConfig): + name = "bookwyrm" + verbose_name = "BookWyrm" + + def ready(self): + if settings.ENABLE_PREVIEW_IMAGES and settings.FONTS: + # Download any fonts that we don't have yet + logger.debug("Downloading fonts..") + for name, config in settings.FONTS.items(): + font_path = os.path.join( + settings.FONT_DIR, config["directory"], config["filename"] + ) + + if "url" in config and not os.path.exists(font_path): + logger.info("Just a sec, downloading %s", name) + download_file(config["url"], font_path) diff --git a/bookwyrm/preview_images.py b/bookwyrm/preview_images.py index f48ca15e..325742d7 100644 --- a/bookwyrm/preview_images.py +++ b/bookwyrm/preview_images.py @@ -4,6 +4,8 @@ import os import textwrap from io import BytesIO from uuid import uuid4 +import urllib +import logging import colorsys from colorthief import ColorThief @@ -17,29 +19,37 @@ from django.db.models import Avg from bookwyrm import models, settings from bookwyrm.tasks import app +logger = logging.getLogger(__name__) IMG_WIDTH = settings.PREVIEW_IMG_WIDTH IMG_HEIGHT = settings.PREVIEW_IMG_HEIGHT BG_COLOR = settings.PREVIEW_BG_COLOR TEXT_COLOR = settings.PREVIEW_TEXT_COLOR DEFAULT_COVER_COLOR = settings.PREVIEW_DEFAULT_COVER_COLOR +DEFAULT_FONT = settings.PREVIEW_DEFAULT_FONT TRANSPARENT_COLOR = (0, 0, 0, 0) margin = math.floor(IMG_HEIGHT / 10) gutter = math.floor(margin / 2) inner_img_height = math.floor(IMG_HEIGHT * 0.8) inner_img_width = math.floor(inner_img_height * 0.7) -font_dir = os.path.join(settings.STATIC_ROOT, "fonts/source_han_sans") + + +def get_imagefont(name, size): + try: + config = settings.FONTS[name] + path = os.path.join(settings.FONT_DIR, config["directory"], config["filename"]) + return ImageFont.truetype(path, size) + except KeyError: + logger.error("Font %s not found in config", name) + except OSError: + logger.error("Could not load font %s from file", name) + + return ImageFont.load_default() def get_font(weight, size=28): - """Loads custom font""" - font_path = os.path.join(font_dir, "SourceHanSans-VF.ttf.ttc") - - try: - font = ImageFont.truetype(font_path, size) - except OSError: - font = ImageFont.load_default() + font = get_imagefont(DEFAULT_FONT, size) try: if weight == "light": diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 197e672c..b85925b7 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -35,6 +35,9 @@ LOCALE_PATHS = [ ] LANGUAGE_COOKIE_NAME = env.str("LANGUAGE_COOKIE_NAME", "django_language") +STATIC_ROOT = os.path.join(BASE_DIR, env("STATIC_ROOT", "static")) +MEDIA_ROOT = os.path.join(BASE_DIR, env("MEDIA_ROOT", "images")) + DEFAULT_AUTO_FIELD = "django.db.models.AutoField" # Preview image @@ -44,6 +47,16 @@ PREVIEW_TEXT_COLOR = env.str("PREVIEW_TEXT_COLOR", "#363636") PREVIEW_IMG_WIDTH = env.int("PREVIEW_IMG_WIDTH", 1200) PREVIEW_IMG_HEIGHT = env.int("PREVIEW_IMG_HEIGHT", 630) PREVIEW_DEFAULT_COVER_COLOR = env.str("PREVIEW_DEFAULT_COVER_COLOR", "#002549") +PREVIEW_DEFAULT_FONT = env.str("PREVIEW_DEFAULT_FONT", "Source Han Sans") + +FONTS = { + "Source Han Sans": { + "directory": "source_han_sans", + "filename": "SourceHanSans-VF.ttf.ttc", + "url": "https://github.com/adobe-fonts/source-han-sans/raw/release/Variable/OTC/SourceHanSans-VF.ttf.ttc", + } +} +FONT_DIR = os.path.join(STATIC_ROOT, "fonts") # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/ @@ -310,13 +323,8 @@ if USE_S3: MEDIA_FULL_URL = MEDIA_URL STATIC_FULL_URL = STATIC_URL DEFAULT_FILE_STORAGE = "bookwyrm.storage_backends.ImagesStorage" - # I don't know if it's used, but the site crashes without it - STATIC_ROOT = os.path.join(BASE_DIR, env("STATIC_ROOT", "static")) - MEDIA_ROOT = os.path.join(BASE_DIR, env("MEDIA_ROOT", "images")) else: STATIC_URL = "/static/" - STATIC_ROOT = os.path.join(BASE_DIR, env("STATIC_ROOT", "static")) MEDIA_URL = "/images/" MEDIA_FULL_URL = f"{PROTOCOL}://{DOMAIN}{MEDIA_URL}" STATIC_FULL_URL = f"{PROTOCOL}://{DOMAIN}{STATIC_URL}" - MEDIA_ROOT = os.path.join(BASE_DIR, env("MEDIA_ROOT", "images")) From a1a3aa45f4860b6270e924c4a6dfad545c1cadb7 Mon Sep 17 00:00:00 2001 From: Joel Bradshaw Date: Tue, 25 Jan 2022 00:37:05 -0800 Subject: [PATCH 06/88] Don't log autoload debug This is just too much --- bookwyrm/apps.py | 1 + bookwyrm/settings.py | 3 +++ 2 files changed, 4 insertions(+) diff --git a/bookwyrm/apps.py b/bookwyrm/apps.py index a3fe1c2c..c30b7c8f 100644 --- a/bookwyrm/apps.py +++ b/bookwyrm/apps.py @@ -8,6 +8,7 @@ from bookwyrm import settings logger = logging.getLogger(__name__) + def download_file(url, destination): try: stream = urllib.request.urlopen(url) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index b85925b7..75987ae9 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -163,6 +163,9 @@ LOGGING = { "handlers": ["console", "mail_admins"], "level": LOG_LEVEL, }, + "django.utils.autoreload": { + "level": "INFO", + }, # Add a bookwyrm-specific logger "bookwyrm": { "handlers": ["console"], From 0c53f4e003205f6ba027bc696b2f81a6b1537235 Mon Sep 17 00:00:00 2001 From: Joel Bradshaw Date: Tue, 25 Jan 2022 01:04:46 -0800 Subject: [PATCH 07/88] Fix linting and formatting --- bookwyrm/apps.py | 10 +++++++--- bookwyrm/preview_images.py | 3 ++- bookwyrm/settings.py | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/bookwyrm/apps.py b/bookwyrm/apps.py index c30b7c8f..c2dfd4b8 100644 --- a/bookwyrm/apps.py +++ b/bookwyrm/apps.py @@ -1,3 +1,4 @@ +"""Do further startup configuration and initialization""" import os import urllib import logging @@ -10,15 +11,18 @@ logger = logging.getLogger(__name__) def download_file(url, destination): + """Downloads a file to the given path""" try: - stream = urllib.request.urlopen(url) - with open(destination, "b+w") as f: - f.write(stream.read()) + with urllib.request.urlopen(url) as stream: + with open(destination, "b+w") as outfile: + outfile.write(stream.read()) except (urllib.error.HTTPError, urllib.error.URLError): logger.error("Failed to download file %s", url) class BookwyrmConfig(AppConfig): + """Handles additional configuration""" + name = "bookwyrm" verbose_name = "BookWyrm" diff --git a/bookwyrm/preview_images.py b/bookwyrm/preview_images.py index 325742d7..891c8b6d 100644 --- a/bookwyrm/preview_images.py +++ b/bookwyrm/preview_images.py @@ -4,7 +4,6 @@ import os import textwrap from io import BytesIO from uuid import uuid4 -import urllib import logging import colorsys @@ -36,6 +35,7 @@ inner_img_width = math.floor(inner_img_height * 0.7) def get_imagefont(name, size): + """Loads an ImageFont based on config""" try: config = settings.FONTS[name] path = os.path.join(settings.FONT_DIR, config["directory"], config["filename"]) @@ -49,6 +49,7 @@ def get_imagefont(name, size): def get_font(weight, size=28): + """Gets a custom font with the given weight and size""" font = get_imagefont(DEFAULT_FONT, size) try: diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 75987ae9..591a3b3b 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -50,6 +50,7 @@ PREVIEW_DEFAULT_COVER_COLOR = env.str("PREVIEW_DEFAULT_COVER_COLOR", "#002549") PREVIEW_DEFAULT_FONT = env.str("PREVIEW_DEFAULT_FONT", "Source Han Sans") FONTS = { + # pylint: disable=line-too-long "Source Han Sans": { "directory": "source_han_sans", "filename": "SourceHanSans-VF.ttf.ttc", From 224dc4100ac5487f23106ef279710ab461481934 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 28 Jan 2022 17:32:41 -0800 Subject: [PATCH 08/88] Activitstreams tests --- .../activitystreams/test_abstractstream.py | 57 ++++++++++++++++++- .../tests/activitystreams/test_booksstream.py | 26 +++++++++ 2 files changed, 81 insertions(+), 2 deletions(-) diff --git a/bookwyrm/tests/activitystreams/test_abstractstream.py b/bookwyrm/tests/activitystreams/test_abstractstream.py index 2c5cf610..8d278041 100644 --- a/bookwyrm/tests/activitystreams/test_abstractstream.py +++ b/bookwyrm/tests/activitystreams/test_abstractstream.py @@ -1,6 +1,9 @@ """ testing activitystreams """ +from datetime import datetime from unittest.mock import patch from django.test import TestCase +from django.utils import timezone + from bookwyrm import activitystreams, models @@ -51,13 +54,63 @@ class Activitystreams(TestCase): """the abstract base class for stream objects""" self.assertEqual( self.test_stream.stream_id(self.local_user), - "{}-test".format(self.local_user.id), + f"{self.local_user.id}-test", ) self.assertEqual( self.test_stream.unread_id(self.local_user), - "{}-test-unread".format(self.local_user.id), + f"{self.local_user.id}-test-unread", ) + def test_unread_by_status_type_id(self, *_): + """stream for status type""" + self.assertEqual( + self.test_stream.unread_by_status_type_id(self.local_user), + f"{self.local_user.id}-test-unread-by-type", + ) + + def test_get_rank(self, *_): + """sort order""" + date = datetime(2022, 1, 28, 0, 0, tzinfo=timezone.utc) + status = models.Status.objects.create( + user=self.remote_user, + content="hi", + privacy="direct", + published_date=date, + ) + self.assertEqual( + str(self.test_stream.get_rank(status)), + "1643328000.0", + ) + + def test_get_activity_stream(self, *_): + """load statuses""" + status = models.Status.objects.create( + user=self.remote_user, + content="hi", + privacy="direct", + ) + status2 = models.Comment.objects.create( + user=self.remote_user, + content="hi", + privacy="direct", + book=self.book, + ) + models.Comment.objects.create( + user=self.remote_user, + content="hi", + privacy="direct", + book=self.book, + ) + with patch("bookwyrm.activitystreams.r.set"), patch( + "bookwyrm.activitystreams.r.delete" + ), patch("bookwyrm.activitystreams.ActivityStream.get_store") as redis_mock: + redis_mock.return_value = [status.id, status2.id] + result = self.test_stream.get_activity_stream(self.local_user) + self.assertEqual(result.count(), 2) + self.assertEqual(result.first(), status) + self.assertEqual(result.last(), status2) + self.assertIsInstance(result.last(), models.Comment) + def test_abstractstream_get_audience(self, *_): """get a list of users that should see a status""" status = models.Status.objects.create( diff --git a/bookwyrm/tests/activitystreams/test_booksstream.py b/bookwyrm/tests/activitystreams/test_booksstream.py index c001d6dd..dedf488a 100644 --- a/bookwyrm/tests/activitystreams/test_booksstream.py +++ b/bookwyrm/tests/activitystreams/test_booksstream.py @@ -52,3 +52,29 @@ class Activitystreams(TestCase): # yes book, yes audience result = activitystreams.BooksStream().get_statuses_for_user(self.local_user) self.assertEqual(list(result), [status]) + + def test_book_statuses(self, *_): + """statuses about a book""" + alt_book = models.Edition.objects.create( + title="hi", parent_work=self.book.parent_work + ) + status = models.Status.objects.create( + user=self.local_user, content="hi", privacy="public" + ) + status = models.Comment.objects.create( + user=self.remote_user, content="hi", privacy="public", book=alt_book + ) + models.ShelfBook.objects.create( + user=self.local_user, + shelf=self.local_user.shelf_set.first(), + book=self.book, + ) + with patch( + "bookwyrm.activitystreams.BooksStream.bulk_add_objects_to_store" + ) as redis_mock: + activitystreams.BooksStream().add_book_statuses(self.local_user, self.book) + args = redis_mock.call_args[0] + queryset = args[0] + self.assertEqual(queryset.count(), 1) + self.assertTrue(status in queryset) + self.assertEqual(args[1], f"{self.local_user.id}-books") From e674f85d4ef3bccb7724bd3c8a9e907579a58f2e Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 30 Jan 2022 11:21:56 -0800 Subject: [PATCH 09/88] Don't display empty shelves on user page --- bookwyrm/views/user.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bookwyrm/views/user.py b/bookwyrm/views/user.py index 851cfdaa..d38981ea 100644 --- a/bookwyrm/views/user.py +++ b/bookwyrm/views/user.py @@ -31,12 +31,13 @@ class User(View): shelf_preview = [] # only show shelves that should be visible - shelves = user.shelf_set is_self = request.user.id == user.id if not is_self: shelves = models.Shelf.privacy_filter( request.user, privacy_levels=["public", "followers"] ).filter(user=user, books__isnull=False) + else: + shelves = user.shelf_set.filter(books__isnull=False).distinct() for user_shelf in shelves.all()[:3]: shelf_preview.append( From 754e24812b63fb6a2d39215f01bee5892ac5948f Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 1 Feb 2022 21:18:25 -0800 Subject: [PATCH 10/88] Check image extensions before saving --- bookwyrm/connectors/abstract_connector.py | 12 +++++++++++- bookwyrm/models/fields.py | 8 ++------ bookwyrm/views/books/books.py | 8 +++----- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index 5ed57df1..8e998979 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -1,7 +1,9 @@ """ functionality outline for a book data connector """ from abc import ABC, abstractmethod +import imghdr import logging +from django.core.files.base import ContentFile from django.db import transaction import requests from requests.exceptions import RequestException @@ -291,9 +293,17 @@ def get_image(url, timeout=10): except RequestException as err: logger.exception(err) return None + if not resp.ok: return None - return resp + + image_content = ContentFile(resp.content) + extension = imghdr.what(None, image_content.read()) + if not extension: + logger.exception("File requested was not an image: %s", url) + return None + + return image_content, extension class Mapping: diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index e61f912e..b506c11c 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -1,6 +1,5 @@ """ activitypub-aware django model fields """ from dataclasses import MISSING -import imghdr import re from uuid import uuid4 from urllib.parse import urljoin @@ -9,7 +8,6 @@ import dateutil.parser from dateutil.parser import ParserError from django.contrib.postgres.fields import ArrayField as DjangoArrayField from django.core.exceptions import ValidationError -from django.core.files.base import ContentFile from django.db import models from django.forms import ClearableFileInput, ImageField as DjangoImageField from django.utils import timezone @@ -443,12 +441,10 @@ class ImageField(ActivitypubFieldMixin, models.ImageField): except ValidationError: return None - response = get_image(url) - if not response: + image_content, extension = get_image(url) + if not image_content: return None - image_content = ContentFile(response.content) - extension = imghdr.what(None, image_content.read()) or "" image_name = f"{uuid4()}.{extension}" return [image_name, image_content] diff --git a/bookwyrm/views/books/books.py b/bookwyrm/views/books/books.py index 7de2d0d2..e04230ba 100644 --- a/bookwyrm/views/books/books.py +++ b/bookwyrm/views/books/books.py @@ -2,7 +2,6 @@ from uuid import uuid4 from django.contrib.auth.decorators import login_required, permission_required -from django.core.files.base import ContentFile from django.core.paginator import Paginator from django.db.models import Avg, Q from django.http import Http404 @@ -144,13 +143,12 @@ def upload_cover(request, book_id): def set_cover_from_url(url): """load it from a url""" try: - image_file = get_image(url) + image_content, extension = get_image(url) except: # pylint: disable=bare-except return None - if not image_file: + if not image_content: return None - image_name = str(uuid4()) + "." + url.split(".")[-1] - image_content = ContentFile(image_file.content) + image_name = str(uuid4()) + "." + extension return [image_name, image_content] From d6abd9b32d0a1c2a25cef56c9405e607eef461cc Mon Sep 17 00:00:00 2001 From: Joel Bradshaw Date: Tue, 1 Feb 2022 21:45:13 -0800 Subject: [PATCH 11/88] Ensure directory exists, don't crash if we fail to write We should be creating the directory because the static tree from the repo isn't actually copied into the container, so we can't rely on it existing. And if we can't write it, we should catch that error instead of crashing the whole thing, oops! --- bookwyrm/apps.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bookwyrm/apps.py b/bookwyrm/apps.py index c2dfd4b8..10ccc89f 100644 --- a/bookwyrm/apps.py +++ b/bookwyrm/apps.py @@ -13,11 +13,15 @@ logger = logging.getLogger(__name__) def download_file(url, destination): """Downloads a file to the given path""" try: + # Ensure our destination directory exists + os.makedirs(os.path.dirname(destination)) with urllib.request.urlopen(url) as stream: with open(destination, "b+w") as outfile: outfile.write(stream.read()) except (urllib.error.HTTPError, urllib.error.URLError): logger.error("Failed to download file %s", url) + except OSError: + logger.error("Couldn't open font file %s for writing", destination) class BookwyrmConfig(AppConfig): From 060f515aea5afa255e3441a1b357de5280886a69 Mon Sep 17 00:00:00 2001 From: Joel Bradshaw Date: Tue, 1 Feb 2022 21:54:51 -0800 Subject: [PATCH 12/88] Be even more conservative on errors This runs at startup of anything, so we should be extra sure to not break anything, and lots of things can go wrong downloading files from the internet --- bookwyrm/apps.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bookwyrm/apps.py b/bookwyrm/apps.py index 10ccc89f..8940edcc 100644 --- a/bookwyrm/apps.py +++ b/bookwyrm/apps.py @@ -22,6 +22,8 @@ def download_file(url, destination): logger.error("Failed to download file %s", url) except OSError: logger.error("Couldn't open font file %s for writing", destination) + except: # pylint: disable=bare-except + logger.exception("Unknown error in file download") class BookwyrmConfig(AppConfig): From 194c69f512d11dd6ff05604395a2b7abaf4ae667 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 2 Feb 2022 07:09:35 -0800 Subject: [PATCH 13/88] Fixes return values of null responses --- bookwyrm/connectors/abstract_connector.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index 8e998979..0ab135b8 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -292,16 +292,16 @@ def get_image(url, timeout=10): ) except RequestException as err: logger.exception(err) - return None + return None, None if not resp.ok: - return None + return None, None image_content = ContentFile(resp.content) extension = imghdr.what(None, image_content.read()) if not extension: logger.exception("File requested was not an image: %s", url) - return None + return None, None return image_content, extension From 6fd3ac0cb13ed6ed1fe1c582729c89157401be13 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 2 Feb 2022 09:23:06 -0800 Subject: [PATCH 14/88] Changes how test image data is loaded --- bookwyrm/tests/models/test_fields.py | 73 ++++++++++++++-------------- bw-dev | 1 + 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/bookwyrm/tests/models/test_fields.py b/bookwyrm/tests/models/test_fields.py index 5bb7fecc..f7386c2e 100644 --- a/bookwyrm/tests/models/test_fields.py +++ b/bookwyrm/tests/models/test_fields.py @@ -443,18 +443,17 @@ class ModelFields(TestCase): image_file = pathlib.Path(__file__).parent.joinpath( "../../static/images/default_avi.jpg" ) - image = Image.open(image_file) - output = BytesIO() - image.save(output, format=image.format) - instance = fields.ImageField() - responses.add( - responses.GET, - "http://www.example.com/image.jpg", - body=image.tobytes(), - status=200, - ) + with open(image_file, "rb") as image_data: + responses.add( + responses.GET, + "http://www.example.com/image.jpg", + body=image_data.read(), + status=200, + content_type="image/jpeg", + stream=True, + ) loaded_image = instance.field_from_activity("http://www.example.com/image.jpg") self.assertIsInstance(loaded_image, list) self.assertIsInstance(loaded_image[1], ContentFile) @@ -465,18 +464,18 @@ class ModelFields(TestCase): image_file = pathlib.Path(__file__).parent.joinpath( "../../static/images/default_avi.jpg" ) - image = Image.open(image_file) - output = BytesIO() - image.save(output, format=image.format) instance = fields.ImageField(activitypub_field="cover", name="cover") - responses.add( - responses.GET, - "http://www.example.com/image.jpg", - body=image.tobytes(), - status=200, - ) + with open(image_file, "rb") as image_data: + responses.add( + responses.GET, + "http://www.example.com/image.jpg", + body=image_data.read(), + content_type="image/jpeg", + status=200, + stream=True, + ) book = Edition.objects.create(title="hello") MockActivity = namedtuple("MockActivity", ("cover")) @@ -491,18 +490,18 @@ class ModelFields(TestCase): image_file = pathlib.Path(__file__).parent.joinpath( "../../static/images/default_avi.jpg" ) - image = Image.open(image_file) - output = BytesIO() - image.save(output, format=image.format) instance = fields.ImageField(activitypub_field="cover", name="cover") - responses.add( - responses.GET, - "http://www.example.com/image.jpg", - body=image.tobytes(), - status=200, - ) + with open(image_file, "rb") as image_data: + responses.add( + responses.GET, + "http://www.example.com/image.jpg", + body=image_data.read(), + status=200, + content_type="image/jpeg", + stream=True, + ) book = Edition.objects.create(title="hello") MockActivity = namedtuple("MockActivity", ("cover")) @@ -565,18 +564,18 @@ class ModelFields(TestCase): another_image_file = pathlib.Path(__file__).parent.joinpath( "../../static/images/logo.png" ) - another_image = Image.open(another_image_file) - another_output = BytesIO() - another_image.save(another_output, format=another_image.format) instance = fields.ImageField(activitypub_field="cover", name="cover") - responses.add( - responses.GET, - "http://www.example.com/image.jpg", - body=another_image.tobytes(), - status=200, - ) + with open(another_image_file, "rb") as another_image: + responses.add( + responses.GET, + "http://www.example.com/image.jpg", + body=another_image.read(), + status=200, + content_type="image/jpeg", + stream=True, + ) MockActivity = namedtuple("MockActivity", ("cover")) mock_activity = MockActivity("http://www.example.com/image.jpg") diff --git a/bw-dev b/bw-dev index 00faa6a6..77d33729 100755 --- a/bw-dev +++ b/bw-dev @@ -209,6 +209,7 @@ case "$CMD" in echo " build" echo " clean" echo " black" + echo " prettier" echo " populate_streams [--stream=]" echo " populate_suggestions" echo " generate_thumbnails" From e37982d28506111e46d124b418094b6dceca8d2b Mon Sep 17 00:00:00 2001 From: Willi Hohenstein Date: Wed, 2 Feb 2022 19:35:26 +0100 Subject: [PATCH 15/88] added domain pending or blocked check fixes #1850 --- bookwyrm/forms.py | 13 +++ locale/de_DE/LC_MESSAGES/django.po | 179 +++++++++++++++++++---------- locale/en_US/LC_MESSAGES/django.po | 38 +++--- 3 files changed, 154 insertions(+), 76 deletions(-) diff --git a/bookwyrm/forms.py b/bookwyrm/forms.py index e442dbf4..1b13598b 100644 --- a/bookwyrm/forms.py +++ b/bookwyrm/forms.py @@ -1,6 +1,7 @@ """ using django model forms """ import datetime from collections import defaultdict +from urllib.parse import urlparse from django import forms from django.forms import ModelForm, PasswordInput, widgets, ChoiceField @@ -226,6 +227,18 @@ class FileLinkForm(CustomForm): class Meta: model = models.FileLink fields = ["url", "filetype", "availability", "book", "added_by"] + + def clean(self): + """make sure the domain isn't blocked or pending""" + cleaned_data = super().clean() + url = cleaned_data.get('url') + domain = urlparse(url).netloc + if models.LinkDomain.objects.filter(domain=domain).exists(): + status = models.LinkDomain.objects.get(domain=domain).status + if status == 'blocked': + self.add_error("url", _("Domain is blocked. Don't try this url again.")) + elif status == 'pending': + self.add_error("url", _("Domain already pending. Please try later.")) class EditionForm(CustomForm): diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index bb05219b..8b4e11d4 100644 --- a/locale/de_DE/LC_MESSAGES/django.po +++ b/locale/de_DE/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-24 17:25+0000\n" +"POT-Creation-Date: 2022-02-02 18:03+0000\n" "PO-Revision-Date: 2022-01-24 18:55\n" "Last-Translator: Mouse Reeve \n" "Language-Team: German\n" @@ -17,62 +17,70 @@ msgstr "" "X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 1553\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "Die Domäne ist blockiert. Versuchen Sie diese Url nicht mehr." + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "Die Domain ist bereits in Bearbeitung. Bitte versuchen Sie es später." + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "Es existiert bereits ein Benutzer*inkonto mit dieser E-Mail-Adresse." -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "Ein Tag" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "Eine Woche" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "Ein Monat" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "Läuft nicht ab" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "{i}-mal verwendbar" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "Unbegrenzt" -#: bookwyrm/forms.py:483 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "Reihenfolge der Liste" -#: bookwyrm/forms.py:484 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "Buchtitel" -#: bookwyrm/forms.py:485 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Bewertung" -#: bookwyrm/forms.py:487 bookwyrm/templates/lists/list.html:135 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "Sortieren nach" -#: bookwyrm/forms.py:491 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "Aufsteigend" -#: bookwyrm/forms.py:492 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "Absteigend" -#: bookwyrm/forms.py:505 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "Enddatum darf nicht vor dem Startdatum liegen." @@ -283,10 +291,14 @@ msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Portugiesisch)" #: bookwyrm/settings.py:258 +msgid "Swedish (Svenska)" +msgstr "Swedish (Schwedisch)" + +#: bookwyrm/settings.py:259 msgid "简体中文 (Simplified Chinese)" msgstr "简体中文 (vereinfachtes Chinesisch)" -#: bookwyrm/settings.py:259 +#: bookwyrm/settings.py:260 msgid "繁體中文 (Traditional Chinese)" msgstr "繁體中文 (Chinesisch, traditionell)" @@ -424,7 +436,7 @@ msgid "Copy address" msgstr "Adresse kopieren" #: bookwyrm/templates/annual_summary/layout.html:68 -#: bookwyrm/templates/lists/list.html:231 +#: bookwyrm/templates/lists/list.html:269 msgid "Copied!" msgstr "Kopiert!" @@ -689,6 +701,7 @@ msgstr "ISNI:" #: bookwyrm/templates/book/file_links/edit_links.html:82 #: bookwyrm/templates/groups/form.html:30 #: bookwyrm/templates/lists/bookmark_button.html:15 +#: bookwyrm/templates/lists/edit_item_form.html:15 #: bookwyrm/templates/lists/form.html:130 #: bookwyrm/templates/preferences/edit_user.html:124 #: bookwyrm/templates/readthrough/readthrough_modal.html:72 @@ -712,6 +725,7 @@ msgstr "Speichern" #: bookwyrm/templates/book/file_links/verification_modal.html:21 #: bookwyrm/templates/book/sync_modal.html:23 #: bookwyrm/templates/groups/delete_group_modal.html:17 +#: bookwyrm/templates/lists/add_item_modal.html:42 #: bookwyrm/templates/lists/delete_list_modal.html:18 #: bookwyrm/templates/readthrough/delete_readthrough_modal.html:23 #: bookwyrm/templates/readthrough/readthrough_modal.html:74 @@ -816,7 +830,7 @@ msgstr "Orte" #: bookwyrm/templates/book/book.html:348 #: bookwyrm/templates/groups/group.html:19 bookwyrm/templates/layout.html:74 -#: bookwyrm/templates/lists/curate.html:7 bookwyrm/templates/lists/list.html:11 +#: bookwyrm/templates/lists/curate.html:8 bookwyrm/templates/lists/list.html:12 #: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12 #: bookwyrm/templates/search/layout.html:25 #: bookwyrm/templates/search/layout.html:50 @@ -830,7 +844,8 @@ msgstr "Zur Liste hinzufügen" #: bookwyrm/templates/book/book.html:369 #: bookwyrm/templates/book/cover_add_modal.html:31 -#: bookwyrm/templates/lists/list.html:209 +#: bookwyrm/templates/lists/add_item_modal.html:37 +#: bookwyrm/templates/lists/list.html:247 #: bookwyrm/templates/settings/email_blocklist/domain_form.html:24 #: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:31 msgid "Add" @@ -1551,16 +1566,11 @@ msgstr "Alle Nachrichten" msgid "You have no messages right now." msgstr "Du hast momentan keine Nachrichten." -#: bookwyrm/templates/feed/feed.html:28 -#, python-format -msgid "load 0 unread status(es)" -msgstr "lade 0 ungelesene Statusmeldung(en)" - -#: bookwyrm/templates/feed/feed.html:51 +#: bookwyrm/templates/feed/feed.html:54 msgid "There aren't any activities right now! Try following a user to get started" msgstr "Hier sind noch keine Aktivitäten! Folge Anderen, um loszulegen" -#: bookwyrm/templates/feed/feed.html:52 +#: bookwyrm/templates/feed/feed.html:55 msgid "Alternatively, you can try enabling more status types" msgstr "Alternativ könntest du auch weitere Statustypen aktivieren" @@ -1649,7 +1659,7 @@ msgid "What are you reading?" msgstr "Was liest du gerade?" #: bookwyrm/templates/get_started/books.html:9 -#: bookwyrm/templates/layout.html:47 bookwyrm/templates/lists/list.html:163 +#: bookwyrm/templates/layout.html:47 bookwyrm/templates/lists/list.html:205 msgid "Search for a book" msgstr "Nach einem Buch suchen" @@ -1669,7 +1679,7 @@ msgstr "Du kannst Bücher hinzufügen, wenn du %(site_name)s benutzt." #: bookwyrm/templates/get_started/users.html:19 #: bookwyrm/templates/groups/members.html:15 #: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:53 -#: bookwyrm/templates/layout.html:54 bookwyrm/templates/lists/list.html:167 +#: bookwyrm/templates/layout.html:54 bookwyrm/templates/lists/list.html:209 #: bookwyrm/templates/search/layout.html:4 #: bookwyrm/templates/search/layout.html:9 msgid "Search" @@ -1685,7 +1695,7 @@ msgid "Popular on %(site_name)s" msgstr "Auf %(site_name)s beliebt" #: bookwyrm/templates/get_started/books.html:58 -#: bookwyrm/templates/lists/list.html:180 +#: bookwyrm/templates/lists/list.html:222 msgid "No books found" msgstr "Keine Bücher gefunden" @@ -2034,7 +2044,7 @@ msgid "Approving a suggestion will permanently add the suggested book to your sh msgstr "Die Genehmigung eines Vorschlags wird das vorgeschlagene Buch dauerhaft in deine Regale aufnehmen und deine Lesedaten, Besprechungen und Bewertungen mit diesem Buch verknüpfen." #: bookwyrm/templates/import/manual_review.html:58 -#: bookwyrm/templates/lists/curate.html:59 +#: bookwyrm/templates/lists/curate.html:71 #: bookwyrm/templates/settings/link_domains/link_domains.html:76 msgid "Approve" msgstr "Bestätigen" @@ -2245,6 +2255,23 @@ msgstr "%(site_name)s auf %(suppo msgid "BookWyrm's source code is freely available. You can contribute or report issues on GitHub." msgstr "BookWyrm ist open source Software. Du kannst dich auf GitHub beteiligen oder etwas melden." +#: bookwyrm/templates/lists/add_item_modal.html:8 +#, fuzzy, python-format +#| msgid "Add read dates for \"%(title)s\"" +msgid "Add \"%(title)s\" to this list" +msgstr "„%(title)s“ zu dieser Liste hinzufügen" + +#: bookwyrm/templates/lists/add_item_modal.html:12 +#, fuzzy, python-format +#| msgid "Start \"%(book_title)s\"" +msgid "Suggest \"%(title)s\" for this list" +msgstr "„%(book_title)s“ für diese Liste vorschlagen" + +#: bookwyrm/templates/lists/add_item_modal.html:39 +#: bookwyrm/templates/lists/list.html:249 +msgid "Suggest" +msgstr "Vorschlagen" + #: bookwyrm/templates/lists/bookmark_button.html:30 msgid "Un-save" msgstr "Speichern rückgängig machen" @@ -2264,23 +2291,30 @@ msgstr "Erstellt und betreut von %(username)s" msgid "Created by %(username)s" msgstr "Erstellt von %(username)s" -#: bookwyrm/templates/lists/curate.html:11 +#: bookwyrm/templates/lists/curate.html:12 msgid "Curate" msgstr "Kuratieren" -#: bookwyrm/templates/lists/curate.html:20 +#: bookwyrm/templates/lists/curate.html:21 msgid "Pending Books" msgstr "Unbestätigte Bücher" -#: bookwyrm/templates/lists/curate.html:23 +#: bookwyrm/templates/lists/curate.html:24 msgid "You're all set!" msgstr "Du bist soweit!" -#: bookwyrm/templates/lists/curate.html:43 +#: bookwyrm/templates/lists/curate.html:45 +#: bookwyrm/templates/lists/list.html:83 +#, fuzzy, python-format +#| msgid "Added by %(username)s" +msgid "%(username)s says:" +msgstr "%(username)s sagt:" + +#: bookwyrm/templates/lists/curate.html:55 msgid "Suggested by" msgstr "Vorgeschlagen von" -#: bookwyrm/templates/lists/curate.html:65 +#: bookwyrm/templates/lists/curate.html:77 msgid "Discard" msgstr "Ablehnen" @@ -2304,7 +2338,7 @@ msgid "on %(site_name)s" msgstr "auf %(site_name)s" #: bookwyrm/templates/lists/embed-list.html:27 -#: bookwyrm/templates/lists/list.html:43 +#: bookwyrm/templates/lists/list.html:44 msgid "This list is currently empty" msgstr "Diese Liste ist momentan leer" @@ -2365,76 +2399,93 @@ msgstr "Gruppe erstellen" msgid "Delete list" msgstr "Liste löschen" -#: bookwyrm/templates/lists/list.html:35 +#: bookwyrm/templates/lists/item_notes_field.html:7 +#: bookwyrm/templates/settings/federation/edit_instance.html:74 +msgid "Notes:" +msgstr "Anmerkungen:" + +#: bookwyrm/templates/lists/item_notes_field.html:19 +msgid "An optional note that will be displayed with the book." +msgstr "Eine optionale Anmerkung, die mit dem Buch angezeigt wird." + +#: bookwyrm/templates/lists/list.html:36 msgid "You successfully suggested a book for this list!" msgstr "Dein Buchvorschlag wurde dieser Liste hinzugefügt!" -#: bookwyrm/templates/lists/list.html:37 +#: bookwyrm/templates/lists/list.html:38 msgid "You successfully added a book to this list!" msgstr "Du hast ein Buch zu dieser Liste hinzugefügt!" -#: bookwyrm/templates/lists/list.html:81 +#: bookwyrm/templates/lists/list.html:96 +#, fuzzy +#| msgid "Edit links" +msgid "Edit notes" +msgstr "Anmerkungen bearbeiten" + +#: bookwyrm/templates/lists/list.html:111 +#, fuzzy +#| msgid "Add cover" +msgid "Add notes" +msgstr "Anmerkungen hinzufügen" + +#: bookwyrm/templates/lists/list.html:123 #, python-format msgid "Added by %(username)s" msgstr "Hinzugefügt von %(username)s" -#: bookwyrm/templates/lists/list.html:96 +#: bookwyrm/templates/lists/list.html:138 msgid "List position" msgstr "Listenposition" -#: bookwyrm/templates/lists/list.html:102 +#: bookwyrm/templates/lists/list.html:144 #: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:21 msgid "Set" msgstr "Übernehmen" -#: bookwyrm/templates/lists/list.html:117 +#: bookwyrm/templates/lists/list.html:159 #: bookwyrm/templates/snippets/remove_from_group_button.html:20 msgid "Remove" msgstr "Entfernen" -#: bookwyrm/templates/lists/list.html:131 -#: bookwyrm/templates/lists/list.html:148 +#: bookwyrm/templates/lists/list.html:173 +#: bookwyrm/templates/lists/list.html:190 msgid "Sort List" msgstr "Liste sortieren" -#: bookwyrm/templates/lists/list.html:141 +#: bookwyrm/templates/lists/list.html:183 msgid "Direction" msgstr "Reihenfolge" -#: bookwyrm/templates/lists/list.html:155 +#: bookwyrm/templates/lists/list.html:197 msgid "Add Books" msgstr "Bücher hinzufügen" -#: bookwyrm/templates/lists/list.html:157 +#: bookwyrm/templates/lists/list.html:199 msgid "Suggest Books" msgstr "Bücher vorschlagen" -#: bookwyrm/templates/lists/list.html:168 +#: bookwyrm/templates/lists/list.html:210 msgid "search" msgstr "suchen" -#: bookwyrm/templates/lists/list.html:174 +#: bookwyrm/templates/lists/list.html:216 msgid "Clear search" msgstr "Suche zurücksetzen" -#: bookwyrm/templates/lists/list.html:179 +#: bookwyrm/templates/lists/list.html:221 #, 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:211 -msgid "Suggest" -msgstr "Vorschlagen" - -#: bookwyrm/templates/lists/list.html:222 +#: bookwyrm/templates/lists/list.html:260 msgid "Embed this list on a website" msgstr "Diese Liste auf einer Webseite einbetten" -#: bookwyrm/templates/lists/list.html:230 +#: bookwyrm/templates/lists/list.html:268 msgid "Copy embed code" msgstr "Code zum einbetten kopieren" -#: bookwyrm/templates/lists/list.html:232 +#: bookwyrm/templates/lists/list.html:270 #, python-format msgid "%(list_name)s, a list by %(owner)s on %(site_name)s" msgstr "%(list_name)s, eine Liste von %(owner)s auf %(site_name)s" @@ -3222,10 +3273,6 @@ msgstr "Software:" msgid "Version:" msgstr "Version:" -#: bookwyrm/templates/settings/federation/edit_instance.html:74 -msgid "Notes:" -msgstr "Anmerkungen:" - #: bookwyrm/templates/settings/federation/instance.html:19 msgid "Details" msgstr "Details" @@ -4631,3 +4678,13 @@ msgstr "Ein Link zum Zurücksetzen des Passworts wurde an {email} gesendet" msgid "Status updates from {obj.display_name}" msgstr "Status -Updates von {obj.display_name}" +#: bookwyrm/views/updates.py:45 +#, python-format +msgid "Load %(count)d unread status" +msgid_plural "Load %(count)d unread statuses" +msgstr[0] "" +msgstr[1] "" + +#, python-format +#~ msgid "load 0 unread status(es)" +#~ msgstr "lade 0 ungelesene Statusmeldung(en)" diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index 6895c534..78afefa7 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: 2022-01-28 02:50+0000\n" +"POT-Creation-Date: 2022-02-02 18:03+0000\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -18,62 +18,70 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "" + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "" + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "" -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "" -#: bookwyrm/forms.py:489 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "" -#: bookwyrm/forms.py:490 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "" -#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "" -#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "" -#: bookwyrm/forms.py:497 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "" -#: bookwyrm/forms.py:498 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "" From c2c33fe1e8ddfa455007ad765478671ce8b7640b Mon Sep 17 00:00:00 2001 From: Willi Hohenstein Date: Wed, 2 Feb 2022 20:20:16 +0100 Subject: [PATCH 16/88] fixed merge conflict --- locale/de_DE/LC_MESSAGES/django.po | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index 2e975d62..34fecd22 100644 --- a/locale/de_DE/LC_MESSAGES/django.po +++ b/locale/de_DE/LC_MESSAGES/django.po @@ -4675,15 +4675,5 @@ msgstr "Status -Updates von {obj.display_name}" #, python-format msgid "Load %(count)d unread status" msgid_plural "Load %(count)d unread statuses" -<<<<<<< HEAD -msgstr[0] "" -msgstr[1] "" - -#, python-format -#~ msgid "load 0 unread status(es)" -#~ msgstr "lade 0 ungelesene Statusmeldung(en)" -======= msgstr[0] "Lade %(count)d ungelesene Statusmeldung" msgstr[1] "Lade %(count)d ungelesene Statusmeldungen" - ->>>>>>> f84241b085a00b54a2f5ba083e8e60311ccb8622 From e9370fe4c99546f49abc61e5cfe572a184613f01 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 2 Feb 2022 11:43:54 -0800 Subject: [PATCH 17/88] Fixes name of Swedish locale --- bookwyrm/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 8c4e8a7e..22682a80 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -255,7 +255,7 @@ LANGUAGES = [ ("no-no", _("Norsk (Norwegian)")), ("pt-br", _("Português do Brasil (Brazilian Portuguese)")), ("pt-pt", _("Português Europeu (European Portuguese)")), - ("sv-se", _("Swedish (Svenska)")), + ("sv-se", _("Svenska (Swedish)")), ("zh-hans", _("简体中文 (Simplified Chinese)")), ("zh-hant", _("繁體中文 (Traditional Chinese)")), ] From 36a47760cd4a8574d492ed8d4ca39e2ae02d40e8 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 2 Feb 2022 12:15:00 -0800 Subject: [PATCH 18/88] Updates locales --- locale/de_DE/LC_MESSAGES/django.po | 26 +++-- locale/en_US/LC_MESSAGES/django.po | 34 +++---- locale/es_ES/LC_MESSAGES/django.mo | Bin 83458 -> 83458 bytes locale/es_ES/LC_MESSAGES/django.po | 26 +++-- locale/fr_FR/LC_MESSAGES/django.po | 26 +++-- locale/gl_ES/LC_MESSAGES/django.mo | Bin 81604 -> 81710 bytes locale/gl_ES/LC_MESSAGES/django.po | 26 +++-- locale/it_IT/LC_MESSAGES/django.mo | Bin 82668 -> 82792 bytes locale/it_IT/LC_MESSAGES/django.po | 26 +++-- locale/lt_LT/LC_MESSAGES/django.mo | Bin 80149 -> 80620 bytes locale/lt_LT/LC_MESSAGES/django.po | 36 ++++--- locale/no_NO/LC_MESSAGES/django.mo | Bin 73851 -> 80170 bytes locale/no_NO/LC_MESSAGES/django.po | 146 ++++++++++++++------------- locale/pt_BR/LC_MESSAGES/django.mo | Bin 82002 -> 82142 bytes locale/pt_BR/LC_MESSAGES/django.po | 26 +++-- locale/pt_PT/LC_MESSAGES/django.mo | Bin 72904 -> 72904 bytes locale/pt_PT/LC_MESSAGES/django.po | 26 +++-- locale/sv_SE/LC_MESSAGES/django.mo | Bin 80853 -> 80853 bytes locale/sv_SE/LC_MESSAGES/django.po | 26 +++-- locale/zh_Hans/LC_MESSAGES/django.po | 26 +++-- locale/zh_Hant/LC_MESSAGES/django.po | 26 +++-- 21 files changed, 287 insertions(+), 189 deletions(-) diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index 50806ca8..3f56ede6 100644 --- a/locale/de_DE/LC_MESSAGES/django.po +++ b/locale/de_DE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-28 02:50+0000\n" -"PO-Revision-Date: 2022-01-29 14:28\n" +"POT-Creation-Date: 2022-01-30 18:17+0000\n" +"PO-Revision-Date: 2022-01-30 19:38\n" "Last-Translator: Mouse Reeve \n" "Language-Team: German\n" "Language: de\n" @@ -3574,23 +3574,31 @@ msgstr "Keine Links für diese Domain vorhanden." msgid "Back to reports" msgstr "Zurück zu den Meldungen" -#: bookwyrm/templates/settings/reports/report.html:22 +#: bookwyrm/templates/settings/reports/report.html:23 +msgid "Message reporter" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:27 +msgid "Update on your report:" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" msgstr "Gemeldete Statusmeldungen" -#: bookwyrm/templates/settings/reports/report.html:27 +#: bookwyrm/templates/settings/reports/report.html:40 msgid "Status has been deleted" msgstr "Statusmeldung gelöscht" -#: bookwyrm/templates/settings/reports/report.html:39 +#: bookwyrm/templates/settings/reports/report.html:52 msgid "Reported links" msgstr "Gemeldete Links" -#: bookwyrm/templates/settings/reports/report.html:55 +#: bookwyrm/templates/settings/reports/report.html:68 msgid "Moderator Comments" msgstr "Moderator*innenkommentare" -#: bookwyrm/templates/settings/reports/report.html:73 +#: bookwyrm/templates/settings/reports/report.html:89 #: bookwyrm/templates/snippets/create_status.html:28 msgid "Comment" msgstr "Kommentieren" @@ -4015,14 +4023,14 @@ msgstr "Prozent" msgid "of %(pages)s pages" msgstr "von %(pages)s Seiten" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 #: bookwyrm/templates/snippets/status/layout.html:34 #: bookwyrm/templates/snippets/status/layout.html:53 #: bookwyrm/templates/snippets/status/layout.html:54 msgid "Reply" msgstr "Antworten" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 msgid "Content" msgstr "Inhalt" diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index 6d27ab75..411f825e 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: 2022-01-30 18:17+0000\n" +"POT-Creation-Date: 2022-02-02 20:09+0000\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -141,26 +141,26 @@ msgstr "" msgid "Blocked" msgstr "" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, python-format msgid "%(value)s is not a valid username" msgstr "" -#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "" -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -168,7 +168,7 @@ msgstr "" msgid "Public" msgstr "" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -176,14 +176,14 @@ msgstr "" msgid "Unlisted" msgstr "" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -284,7 +284,7 @@ msgid "Português Europeu (European Portuguese)" msgstr "" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" +msgid "Svenska (Swedish)" msgstr "" #: bookwyrm/settings.py:259 @@ -370,7 +370,7 @@ msgstr "" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "" @@ -1018,7 +1018,7 @@ msgid "Physical Properties" msgstr "" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "" @@ -1056,17 +1056,17 @@ msgstr "" msgid "Editions of \"%(work_title)s\"" msgstr "" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "" @@ -4108,7 +4108,7 @@ msgstr "" msgid "Clear filters" msgstr "" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "" diff --git a/locale/es_ES/LC_MESSAGES/django.mo b/locale/es_ES/LC_MESSAGES/django.mo index 84f15f73aa5132a317390ddf4a02be4e4a29d7bd..faae97eddcd1061d339b2730b98f353da094633a 100644 GIT binary patch delta 23 ecmZqbVQuPR-7xDQhp~Zzp{13v#pXo^6IuXfU\n" "Language-Team: Spanish\n" "Language: es\n" @@ -3574,23 +3574,31 @@ msgstr "Ningún enlace disponible para este dominio." msgid "Back to reports" msgstr "Volver a los informes" -#: bookwyrm/templates/settings/reports/report.html:22 +#: bookwyrm/templates/settings/reports/report.html:23 +msgid "Message reporter" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:27 +msgid "Update on your report:" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" msgstr "Estados reportados" -#: bookwyrm/templates/settings/reports/report.html:27 +#: bookwyrm/templates/settings/reports/report.html:40 msgid "Status has been deleted" msgstr "El estado ha sido eliminado" -#: bookwyrm/templates/settings/reports/report.html:39 +#: bookwyrm/templates/settings/reports/report.html:52 msgid "Reported links" msgstr "Enlaces denunciados" -#: bookwyrm/templates/settings/reports/report.html:55 +#: bookwyrm/templates/settings/reports/report.html:68 msgid "Moderator Comments" msgstr "Comentarios de moderador" -#: bookwyrm/templates/settings/reports/report.html:73 +#: bookwyrm/templates/settings/reports/report.html:89 #: bookwyrm/templates/snippets/create_status.html:28 msgid "Comment" msgstr "Comentario" @@ -4015,14 +4023,14 @@ msgstr "por ciento" msgid "of %(pages)s pages" msgstr "de %(pages)s páginas" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 #: bookwyrm/templates/snippets/status/layout.html:34 #: bookwyrm/templates/snippets/status/layout.html:53 #: bookwyrm/templates/snippets/status/layout.html:54 msgid "Reply" msgstr "Responder" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 msgid "Content" msgstr "Contenido" diff --git a/locale/fr_FR/LC_MESSAGES/django.po b/locale/fr_FR/LC_MESSAGES/django.po index cf872cf6..4300f005 100644 --- a/locale/fr_FR/LC_MESSAGES/django.po +++ b/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-28 02:50+0000\n" -"PO-Revision-Date: 2022-01-28 11:29\n" +"POT-Creation-Date: 2022-01-30 18:17+0000\n" +"PO-Revision-Date: 2022-01-30 19:38\n" "Last-Translator: Mouse Reeve \n" "Language-Team: French\n" "Language: fr\n" @@ -3574,23 +3574,31 @@ msgstr "Aucun lien n’est disponible pour ce domaine." msgid "Back to reports" msgstr "Retour aux signalements" -#: bookwyrm/templates/settings/reports/report.html:22 +#: bookwyrm/templates/settings/reports/report.html:23 +msgid "Message reporter" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:27 +msgid "Update on your report:" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" msgstr "Statuts signalés" -#: bookwyrm/templates/settings/reports/report.html:27 +#: bookwyrm/templates/settings/reports/report.html:40 msgid "Status has been deleted" msgstr "Le statut a été supprimé" -#: bookwyrm/templates/settings/reports/report.html:39 +#: bookwyrm/templates/settings/reports/report.html:52 msgid "Reported links" msgstr "Liens signalés" -#: bookwyrm/templates/settings/reports/report.html:55 +#: bookwyrm/templates/settings/reports/report.html:68 msgid "Moderator Comments" msgstr "Commentaires de l’équipe de modération" -#: bookwyrm/templates/settings/reports/report.html:73 +#: bookwyrm/templates/settings/reports/report.html:89 #: bookwyrm/templates/snippets/create_status.html:28 msgid "Comment" msgstr "Commentaire" @@ -4015,14 +4023,14 @@ msgstr "pourcent" msgid "of %(pages)s pages" msgstr "sur %(pages)s pages" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 #: bookwyrm/templates/snippets/status/layout.html:34 #: bookwyrm/templates/snippets/status/layout.html:53 #: bookwyrm/templates/snippets/status/layout.html:54 msgid "Reply" msgstr "Répondre" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 msgid "Content" msgstr "Contenu" diff --git a/locale/gl_ES/LC_MESSAGES/django.mo b/locale/gl_ES/LC_MESSAGES/django.mo index 78192e67d85eb90031d0da3966b8042cf40a279e..563a5e98d3e02f475cf713db9069f7b9e76d7ee2 100644 GIT binary patch delta 20492 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 delta 20389 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�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 diff --git a/locale/gl_ES/LC_MESSAGES/django.po b/locale/gl_ES/LC_MESSAGES/django.po index 731b56ec..5ae9619c 100644 --- a/locale/gl_ES/LC_MESSAGES/django.po +++ b/locale/gl_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-28 02:50+0000\n" -"PO-Revision-Date: 2022-01-28 05:04\n" +"POT-Creation-Date: 2022-01-30 18:17+0000\n" +"PO-Revision-Date: 2022-01-31 07:59\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Galician\n" "Language: gl\n" @@ -3574,23 +3574,31 @@ msgstr "Non hai ligazóns dispoñibles para este dominio." msgid "Back to reports" msgstr "Volver a denuncias" -#: bookwyrm/templates/settings/reports/report.html:22 +#: bookwyrm/templates/settings/reports/report.html:23 +msgid "Message reporter" +msgstr "Denunciante" + +#: bookwyrm/templates/settings/reports/report.html:27 +msgid "Update on your report:" +msgstr "Actualiza a denuncia:" + +#: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" msgstr "Estados dununciados" -#: bookwyrm/templates/settings/reports/report.html:27 +#: bookwyrm/templates/settings/reports/report.html:40 msgid "Status has been deleted" msgstr "O estado foi eliminado" -#: bookwyrm/templates/settings/reports/report.html:39 +#: bookwyrm/templates/settings/reports/report.html:52 msgid "Reported links" msgstr "Ligazóns denunciadas" -#: bookwyrm/templates/settings/reports/report.html:55 +#: bookwyrm/templates/settings/reports/report.html:68 msgid "Moderator Comments" msgstr "Comentarios da moderación" -#: bookwyrm/templates/settings/reports/report.html:73 +#: bookwyrm/templates/settings/reports/report.html:89 #: bookwyrm/templates/snippets/create_status.html:28 msgid "Comment" msgstr "Comentario" @@ -4015,14 +4023,14 @@ msgstr "porcentaxe" msgid "of %(pages)s pages" msgstr "de %(pages)s páxinas" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 #: bookwyrm/templates/snippets/status/layout.html:34 #: bookwyrm/templates/snippets/status/layout.html:53 #: bookwyrm/templates/snippets/status/layout.html:54 msgid "Reply" msgstr "Responder" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 msgid "Content" msgstr "Contido" diff --git a/locale/it_IT/LC_MESSAGES/django.mo b/locale/it_IT/LC_MESSAGES/django.mo index 1b0b6d280554fe96697529525ce7277a72b5431f..a8f4c5de665cf17ee3449e7e0fedd48338a48560 100644 GIT binary patch delta 20504 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 diff --git a/locale/it_IT/LC_MESSAGES/django.po b/locale/it_IT/LC_MESSAGES/django.po index 24c44980..fa00f1f4 100644 --- a/locale/it_IT/LC_MESSAGES/django.po +++ b/locale/it_IT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-28 02:50+0000\n" -"PO-Revision-Date: 2022-01-28 19:04\n" +"POT-Creation-Date: 2022-01-30 18:17+0000\n" +"PO-Revision-Date: 2022-01-30 20:36\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Italian\n" "Language: it\n" @@ -3574,23 +3574,31 @@ msgstr "Nessun collegamento disponibile per questo libro." msgid "Back to reports" msgstr "Tornare all'elenco dei report" -#: bookwyrm/templates/settings/reports/report.html:22 +#: bookwyrm/templates/settings/reports/report.html:23 +msgid "Message reporter" +msgstr "Messaggio segnalato" + +#: bookwyrm/templates/settings/reports/report.html:27 +msgid "Update on your report:" +msgstr "Aggiornamento sul tuo rapporto:" + +#: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" msgstr "Stati segnalati" -#: bookwyrm/templates/settings/reports/report.html:27 +#: bookwyrm/templates/settings/reports/report.html:40 msgid "Status has been deleted" msgstr "Lo stato è stato eliminato" -#: bookwyrm/templates/settings/reports/report.html:39 +#: bookwyrm/templates/settings/reports/report.html:52 msgid "Reported links" msgstr "Collegamenti segnalati" -#: bookwyrm/templates/settings/reports/report.html:55 +#: bookwyrm/templates/settings/reports/report.html:68 msgid "Moderator Comments" msgstr "Commenti del moderatore" -#: bookwyrm/templates/settings/reports/report.html:73 +#: bookwyrm/templates/settings/reports/report.html:89 #: bookwyrm/templates/snippets/create_status.html:28 msgid "Comment" msgstr "Commenta" @@ -4015,14 +4023,14 @@ msgstr "percentuale" msgid "of %(pages)s pages" msgstr "di %(pages)s pagine" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 #: bookwyrm/templates/snippets/status/layout.html:34 #: bookwyrm/templates/snippets/status/layout.html:53 #: bookwyrm/templates/snippets/status/layout.html:54 msgid "Reply" msgstr "Rispondi" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 msgid "Content" msgstr "Contenuto" diff --git a/locale/lt_LT/LC_MESSAGES/django.mo b/locale/lt_LT/LC_MESSAGES/django.mo index 7d8a201a48e9ec2503c4521a0347e6d81e08016e..7c4e54132e96414871daace696db775dd917cbca 100644 GIT binary patch delta 20279 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 ebOXEe9gq;;KdH;m0Uy6DHZfwP77H8 delta 20003 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\n" "Language-Team: Lithuanian\n" "Language: lt\n" @@ -3603,23 +3603,31 @@ msgstr "" msgid "Back to reports" msgstr "Atgal į pranešimus" -#: bookwyrm/templates/settings/reports/report.html:22 +#: bookwyrm/templates/settings/reports/report.html:23 +msgid "Message reporter" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:27 +msgid "Update on your report:" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" msgstr "Praneštos būsenos" -#: bookwyrm/templates/settings/reports/report.html:27 +#: bookwyrm/templates/settings/reports/report.html:40 msgid "Status has been deleted" msgstr "Būsena ištrinta" -#: bookwyrm/templates/settings/reports/report.html:39 +#: bookwyrm/templates/settings/reports/report.html:52 msgid "Reported links" msgstr "Raportuotos nuorodos" -#: bookwyrm/templates/settings/reports/report.html:55 +#: bookwyrm/templates/settings/reports/report.html:68 msgid "Moderator Comments" msgstr "Moderatoriaus komentarai" -#: bookwyrm/templates/settings/reports/report.html:73 +#: bookwyrm/templates/settings/reports/report.html:89 #: bookwyrm/templates/snippets/create_status.html:28 msgid "Comment" msgstr "Komentuoti" @@ -4048,14 +4056,14 @@ msgstr "procentai" msgid "of %(pages)s pages" msgstr "iš %(pages)s psl." -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 #: bookwyrm/templates/snippets/status/layout.html:34 #: bookwyrm/templates/snippets/status/layout.html:53 #: bookwyrm/templates/snippets/status/layout.html:54 msgid "Reply" msgstr "Atsakyti" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 msgid "Content" msgstr "Turinys" @@ -4420,7 +4428,7 @@ msgstr "redaguota %(date)s" #: bookwyrm/templates/snippets/status/headers/comment.html:8 #, python-format msgid "commented on %(book)s by %(author_name)s" -msgstr "" +msgstr "pakomentavo autoriaus %(author_name)s knygą %(book)s" #: bookwyrm/templates/snippets/status/headers/comment.html:15 #, python-format @@ -4714,8 +4722,8 @@ msgstr "Būsenos atnaujinimai iš {obj.display_name}" #, python-format msgid "Load %(count)d unread status" msgid_plural "Load %(count)d unread statuses" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Įkelti %(count)d neperskaitytą statusą" +msgstr[1] "Įkelti %(count)d neperskaitytus statusus" +msgstr[2] "Įkelti %(count)d neperskaitytą statusą" +msgstr[3] "Įkelti %(count)d neperskaitytą statusą" diff --git a/locale/no_NO/LC_MESSAGES/django.mo b/locale/no_NO/LC_MESSAGES/django.mo index 3d71d6dd979a03b7dc8c6121a1c0371cae8b29d7..3d3d4263ff97c37febc6023a770f772e58b6aace 100644 GIT binary patch delta 25883 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 delta 20511 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 U*1NVniE$nG-}XVQYg6X`0=|fhNdN!< diff --git a/locale/no_NO/LC_MESSAGES/django.po b/locale/no_NO/LC_MESSAGES/django.po index ae88985c..a4677434 100644 --- a/locale/no_NO/LC_MESSAGES/django.po +++ b/locale/no_NO/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-28 02:50+0000\n" -"PO-Revision-Date: 2022-01-28 04:03\n" +"POT-Creation-Date: 2022-01-30 18:17+0000\n" +"PO-Revision-Date: 2022-01-30 21:36\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Norwegian\n" "Language: no\n" @@ -193,20 +193,20 @@ msgstr "Privat" #: bookwyrm/models/link.py:51 msgid "Free" -msgstr "" +msgstr "Gratis" #: bookwyrm/models/link.py:52 msgid "Purchasable" -msgstr "" +msgstr "Tilgjengelig for kjøp" #: bookwyrm/models/link.py:53 msgid "Available for loan" -msgstr "" +msgstr "Tilgjengelig for utlån" #: bookwyrm/models/link.py:70 #: bookwyrm/templates/settings/link_domains/link_domains.html:23 msgid "Approved" -msgstr "" +msgstr "Godkjent" #: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:272 msgid "Reviews" @@ -284,7 +284,7 @@ msgstr "Português Europeu (Europeisk Portugisisk)" #: bookwyrm/settings.py:258 msgid "Swedish (Svenska)" -msgstr "" +msgstr "Svensk (Svenska)" #: bookwyrm/settings.py:259 msgid "简体中文 (Simplified Chinese)" @@ -328,7 +328,7 @@ msgstr "Velkommen til %(site_name)s!" #: bookwyrm/templates/about/about.html:23 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." -msgstr "" +msgstr "%(site_name)s er en del av BookWyrm, et nettverk av selvstendige, selvstyrte samfunn for lesere. Du kan kommunisere sømløst med brukere hvor som helst i BookWyrm nettverket, men hvert samfunn er unikt." #: bookwyrm/templates/about/about.html:40 #, python-format @@ -356,7 +356,7 @@ msgstr "Møt administratorene" #: bookwyrm/templates/about/about.html:99 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." -msgstr "" +msgstr "%(site_name)s sine moderatorer og administratorer holder nettsida oppe og tilgjengelig, håndhever adferdskoden, og svarer på brukernes rapporterer om spam og dårlig atferd." #: bookwyrm/templates/about/about.html:113 msgid "Moderator" @@ -1071,51 +1071,53 @@ msgstr "Søk etter utgaver" #: bookwyrm/templates/book/file_links/add_link_modal.html:6 msgid "Add file link" -msgstr "" +msgstr "Legg til fillenke" #: bookwyrm/templates/book/file_links/add_link_modal.html:19 msgid "Links from unknown domains will need to be approved by a moderator before they are added." -msgstr "" +msgstr "Lenker fra ukjente domener må være godkjent av en moderator før de kan legges til." #: bookwyrm/templates/book/file_links/add_link_modal.html:24 msgid "URL:" -msgstr "" +msgstr "URL:" #: bookwyrm/templates/book/file_links/add_link_modal.html:29 msgid "File type:" -msgstr "" +msgstr "Filtype:" #: bookwyrm/templates/book/file_links/add_link_modal.html:48 msgid "Availability:" -msgstr "" +msgstr "Tilgjengelighet:" #: bookwyrm/templates/book/file_links/edit_links.html:5 #: bookwyrm/templates/book/file_links/edit_links.html:22 #: bookwyrm/templates/book/file_links/links.html:53 msgid "Edit links" -msgstr "" +msgstr "Rediger lenker" #: bookwyrm/templates/book/file_links/edit_links.html:11 #, python-format msgid "\n" " Links for \"%(title)s\"\n" " " -msgstr "" +msgstr "\n" +" Lenker for \"%(title)s\"\n" +" " #: bookwyrm/templates/book/file_links/edit_links.html:32 #: bookwyrm/templates/settings/link_domains/link_table.html:6 msgid "URL" -msgstr "" +msgstr "URL" #: bookwyrm/templates/book/file_links/edit_links.html:33 #: bookwyrm/templates/settings/link_domains/link_table.html:7 msgid "Added by" -msgstr "" +msgstr "Lagt til av" #: bookwyrm/templates/book/file_links/edit_links.html:34 #: bookwyrm/templates/settings/link_domains/link_table.html:8 msgid "Filetype" -msgstr "" +msgstr "Filtype" #: bookwyrm/templates/book/file_links/edit_links.html:35 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:25 @@ -1143,41 +1145,41 @@ msgstr "Handlinger" #: bookwyrm/templates/book/file_links/edit_links.html:53 #: bookwyrm/templates/book/file_links/verification_modal.html:25 msgid "Report spam" -msgstr "" +msgstr "Rapporter spam" #: bookwyrm/templates/book/file_links/edit_links.html:97 msgid "No links available for this book." -msgstr "" +msgstr "Ingen lenker er tilgjengelig for denne boka." #: bookwyrm/templates/book/file_links/edit_links.html:108 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" -msgstr "" +msgstr "Legg til lenke til fil" #: bookwyrm/templates/book/file_links/file_link_page.html:6 msgid "File Links" -msgstr "" +msgstr "Fillenker" #: bookwyrm/templates/book/file_links/links.html:9 msgid "Get a copy" -msgstr "" +msgstr "Få en kopi" #: bookwyrm/templates/book/file_links/links.html:47 msgid "No links available" -msgstr "" +msgstr "Ingen tilgjengelige lenker" #: bookwyrm/templates/book/file_links/verification_modal.html:5 msgid "Leaving BookWyrm" -msgstr "" +msgstr "Forlater BookWyrm" #: bookwyrm/templates/book/file_links/verification_modal.html:11 #, python-format msgid "This link is taking you to: %(link_url)s.
Is that where you'd like to go?" -msgstr "" +msgstr "Denne lenka sender deg til: %(link_url)s.
Er det dit du vil dra?" #: bookwyrm/templates/book/file_links/verification_modal.html:20 msgid "Continue" -msgstr "" +msgstr "Fortsett" #: bookwyrm/templates/book/publisher_info.html:23 #, python-format @@ -2045,7 +2047,7 @@ msgstr "Avslå" #: bookwyrm/templates/import/tooltip.html:6 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." -msgstr "" +msgstr "Du kan laste ned Goodread-dataene dine fra Import/Export sida på Goodread-kontoen din." #: bookwyrm/templates/import/troubleshoot.html:7 msgid "Failed items" @@ -2248,12 +2250,12 @@ msgstr "BookWyrms kildekode er fritt tilgjengelig. Du kan bidra eller rapportere #: bookwyrm/templates/lists/add_item_modal.html:8 #, python-format msgid "Add \"%(title)s\" to this list" -msgstr "" +msgstr "Legg til \"%(title)s\" på denne lista" #: bookwyrm/templates/lists/add_item_modal.html:12 #, python-format msgid "Suggest \"%(title)s\" for this list" -msgstr "" +msgstr "Foreslå \"%(title)s\" for denne lista" #: bookwyrm/templates/lists/add_item_modal.html:39 #: bookwyrm/templates/lists/list.html:249 @@ -2295,7 +2297,7 @@ msgstr "Nå er du klar!" #: bookwyrm/templates/lists/list.html:83 #, python-format msgid "%(username)s says:" -msgstr "" +msgstr "%(username)s sier:" #: bookwyrm/templates/lists/curate.html:55 msgid "Suggested by" @@ -2393,7 +2395,7 @@ msgstr "Notater:" #: bookwyrm/templates/lists/item_notes_field.html:19 msgid "An optional note that will be displayed with the book." -msgstr "" +msgstr "En valgfri merknad som vil vises sammen med boken." #: bookwyrm/templates/lists/list.html:36 msgid "You successfully suggested a book for this list!" @@ -2405,11 +2407,11 @@ msgstr "Du har nå lagt til ei bok i denne lista!" #: bookwyrm/templates/lists/list.html:96 msgid "Edit notes" -msgstr "" +msgstr "Rediger merknader" #: bookwyrm/templates/lists/list.html:111 msgid "Add notes" -msgstr "" +msgstr "Legg til merknader" #: bookwyrm/templates/lists/list.html:123 #, python-format @@ -3129,8 +3131,8 @@ msgstr[1] "%(display_count)s åpne rapporter" #, python-format msgid "%(display_count)s domain needs review" msgid_plural "%(display_count)s domains need review" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(display_count)s domene må godkjennes" +msgstr[1] "%(display_count)s domener må godkjennes" #: bookwyrm/templates/settings/dashboard/dashboard.html:65 #, python-format @@ -3523,7 +3525,7 @@ msgstr "Rapporter" #: bookwyrm/templates/settings/link_domains/link_domains.html:5 #: bookwyrm/templates/settings/link_domains/link_domains.html:7 msgid "Link Domains" -msgstr "" +msgstr "Lenkedomener" #: bookwyrm/templates/settings/layout.html:72 msgid "Instance Settings" @@ -3538,57 +3540,65 @@ msgstr "Sideinnstillinger" #: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:5 #, python-format msgid "Set display name for %(url)s" -msgstr "" +msgstr "Angi visningsnavn for %(url)s" #: bookwyrm/templates/settings/link_domains/link_domains.html:11 msgid "Link domains must be approved before they are shown on book pages. Please make sure that the domains are not hosting spam, malicious code, or deceptive links before approving." -msgstr "" +msgstr "Nettstedsdomener må godkjennes før de kan vises på boksidene. Vennligst sjekk at domenene ikke fører spam, ondsinnet kode eller lurelenker før du godkjenner." #: bookwyrm/templates/settings/link_domains/link_domains.html:45 msgid "Set display name" -msgstr "" +msgstr "Angi visningsnavn" #: bookwyrm/templates/settings/link_domains/link_domains.html:53 msgid "View links" -msgstr "" +msgstr "Vis lenker" #: bookwyrm/templates/settings/link_domains/link_domains.html:96 msgid "No domains currently approved" -msgstr "" +msgstr "Ingen domener er hittil godkjent" #: bookwyrm/templates/settings/link_domains/link_domains.html:98 msgid "No domains currently pending" -msgstr "" +msgstr "Ingen domener venter for tiden på godkjenning" #: bookwyrm/templates/settings/link_domains/link_domains.html:100 msgid "No domains currently blocked" -msgstr "" +msgstr "Ingen domener er for øyeblikket blokkert" #: bookwyrm/templates/settings/link_domains/link_table.html:39 msgid "No links available for this domain." -msgstr "" +msgstr "Ingen lenker tilgjengelig til dette domenet." #: bookwyrm/templates/settings/reports/report.html:11 msgid "Back to reports" msgstr "Tilbake til rapporter" -#: bookwyrm/templates/settings/reports/report.html:22 +#: bookwyrm/templates/settings/reports/report.html:23 +msgid "Message reporter" +msgstr "Send melding til rapportør" + +#: bookwyrm/templates/settings/reports/report.html:27 +msgid "Update on your report:" +msgstr "Oppdatering på din rapport:" + +#: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" msgstr "Rapporterte statuser" -#: bookwyrm/templates/settings/reports/report.html:27 +#: bookwyrm/templates/settings/reports/report.html:40 msgid "Status has been deleted" msgstr "Status er slettet" -#: bookwyrm/templates/settings/reports/report.html:39 +#: bookwyrm/templates/settings/reports/report.html:52 msgid "Reported links" -msgstr "" +msgstr "Rapporterte lenker" -#: bookwyrm/templates/settings/reports/report.html:55 +#: bookwyrm/templates/settings/reports/report.html:68 msgid "Moderator Comments" msgstr "Moderatorkommentarer" -#: bookwyrm/templates/settings/reports/report.html:73 +#: bookwyrm/templates/settings/reports/report.html:89 #: bookwyrm/templates/snippets/create_status.html:28 msgid "Comment" msgstr "Kommentar" @@ -3596,21 +3606,21 @@ msgstr "Kommentar" #: bookwyrm/templates/settings/reports/report_header.html:6 #, python-format msgid "Report #%(report_id)s: Status posted by @%(username)s" -msgstr "" +msgstr "Rapportér #%(report_id)s: Status postet av @%(username)s" #: bookwyrm/templates/settings/reports/report_header.html:12 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" -msgstr "" +msgstr "Rapportér #%(report_id)s: Lenke lagt til av @%(username)s" #: bookwyrm/templates/settings/reports/report_header.html:18 #, python-format msgid "Report #%(report_id)s: User @%(username)s" -msgstr "" +msgstr "Rapportér #%(report_id)s: bruker @%(username)s" #: bookwyrm/templates/settings/reports/report_links_table.html:17 msgid "Block domain" -msgstr "" +msgstr "Blokkér domene" #: bookwyrm/templates/settings/reports/report_preview.html:17 msgid "No notes provided" @@ -3619,7 +3629,7 @@ msgstr "Ingen merknader finnes" #: bookwyrm/templates/settings/reports/report_preview.html:24 #, python-format msgid "Reported by @%(username)s" -msgstr "" +msgstr "Rapportert av %(username)s" #: bookwyrm/templates/settings/reports/report_preview.html:34 msgid "Re-open" @@ -3865,7 +3875,7 @@ msgstr "Slettet for godt" #: bookwyrm/templates/settings/users/user_moderation_actions.html:8 msgid "User Actions" -msgstr "" +msgstr "Brukerhandlinger" #: bookwyrm/templates/settings/users/user_moderation_actions.html:21 msgid "Suspend user" @@ -4013,14 +4023,14 @@ msgstr "prosent" msgid "of %(pages)s pages" msgstr "av %(pages)s sider" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 #: bookwyrm/templates/snippets/status/layout.html:34 #: bookwyrm/templates/snippets/status/layout.html:53 #: bookwyrm/templates/snippets/status/layout.html:54 msgid "Reply" msgstr "Svar" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 msgid "Content" msgstr "Innhold" @@ -4167,13 +4177,13 @@ msgstr[1] "vurderte %(title)s til: %(display_r #, python-format msgid "Review of \"%(book_title)s\" (%(display_rating)s star): %(review_title)s" msgid_plural "Review of \"%(book_title)s\" (%(display_rating)s stars): %(review_title)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Anmeldelse av \"%(book_title)s\" (%(display_rating)s stjerne): %(review_title)s" +msgstr[1] "Anmeldelse av \"%(book_title)s\" (%(display_rating)s stjerner): %(review_title)s" #: bookwyrm/templates/snippets/generated_status/review_pure_name.html:12 #, python-format msgid "Review of \"%(book_title)s\": %(review_title)s" -msgstr "" +msgstr "Anmeldelse av \"%(book_title)s\": %(review_title)s" #: bookwyrm/templates/snippets/goal_form.html:4 #, python-format @@ -4282,12 +4292,12 @@ msgstr "Registrer deg" #: bookwyrm/templates/snippets/report_modal.html:8 #, python-format msgid "Report @%(username)s's status" -msgstr "" +msgstr "Rapportér @%(username)s sin status" #: bookwyrm/templates/snippets/report_modal.html:10 #, python-format msgid "Report %(domain)s link" -msgstr "" +msgstr "Rapportér %(domain)s lenke" #: bookwyrm/templates/snippets/report_modal.html:12 #, python-format @@ -4301,7 +4311,7 @@ msgstr "Denne rapporten vil bli sendt til %(site_name)s sine moderatorer for gje #: bookwyrm/templates/snippets/report_modal.html:36 msgid "Links from this domain will be removed until your report has been reviewed." -msgstr "" +msgstr "Lenker fra dette domenet vil fjernes fram til rapporten din er ferbigbehandlet." #: bookwyrm/templates/snippets/report_modal.html:41 msgid "More info about this report:" @@ -4665,6 +4675,6 @@ msgstr "Statusoppdateringer fra {obj.display_name}" #, python-format msgid "Load %(count)d unread status" msgid_plural "Load %(count)d unread statuses" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Last inn %(count)d ulest status" +msgstr[1] "Last inn %(count)d uleste statuser" diff --git a/locale/pt_BR/LC_MESSAGES/django.mo b/locale/pt_BR/LC_MESSAGES/django.mo index ec3d556ddb35aa892afa2aa22f8b5d7627a4d898..2522c804acd3e1e728d920205c9a130983b537db 100644 GIT binary patch delta 20527 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 A0RR91 delta 20399 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 xDCF3^zxj#C7YoR2rN0D3Ov%3~#`5zk_=am2e diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po index f8e1ff35..4845ae1b 100644 --- a/locale/pt_BR/LC_MESSAGES/django.po +++ b/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-28 02:50+0000\n" -"PO-Revision-Date: 2022-01-29 14:28\n" +"POT-Creation-Date: 2022-01-30 18:17+0000\n" +"PO-Revision-Date: 2022-01-30 19:38\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt\n" @@ -3574,23 +3574,31 @@ msgstr "Nenhum link disponível para este domínio." msgid "Back to reports" msgstr "Voltar às denúncias" -#: bookwyrm/templates/settings/reports/report.html:22 +#: bookwyrm/templates/settings/reports/report.html:23 +msgid "Message reporter" +msgstr "Enviar mensagem a quem denunciou" + +#: bookwyrm/templates/settings/reports/report.html:27 +msgid "Update on your report:" +msgstr "Atualização sobre sua denúncia:" + +#: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" msgstr "Publicações denunciadas" -#: bookwyrm/templates/settings/reports/report.html:27 +#: bookwyrm/templates/settings/reports/report.html:40 msgid "Status has been deleted" msgstr "A publicação foi excluída" -#: bookwyrm/templates/settings/reports/report.html:39 +#: bookwyrm/templates/settings/reports/report.html:52 msgid "Reported links" msgstr "Links denunciados" -#: bookwyrm/templates/settings/reports/report.html:55 +#: bookwyrm/templates/settings/reports/report.html:68 msgid "Moderator Comments" msgstr "Comentários da moderação" -#: bookwyrm/templates/settings/reports/report.html:73 +#: bookwyrm/templates/settings/reports/report.html:89 #: bookwyrm/templates/snippets/create_status.html:28 msgid "Comment" msgstr "Comentar" @@ -4015,14 +4023,14 @@ msgstr "porcentagem" msgid "of %(pages)s pages" msgstr "de %(pages)s páginas" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 #: bookwyrm/templates/snippets/status/layout.html:34 #: bookwyrm/templates/snippets/status/layout.html:53 #: bookwyrm/templates/snippets/status/layout.html:54 msgid "Reply" msgstr "Responder" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 msgid "Content" msgstr "Conteúdo" diff --git a/locale/pt_PT/LC_MESSAGES/django.mo b/locale/pt_PT/LC_MESSAGES/django.mo index 45eadd1986e422b7409f9fe3a085124cc90ea222..1ffe4140dddda96744e2702b0735223738c058fe 100644 GIT binary patch delta 23 fcmX@HljX!tmJOC`IE)Px3@xpUEjBx@X)gc(a9jw{ delta 23 fcmX@HljX!tmJOC`IE*Y53{0#Hj5j;3X)gc(a775p diff --git a/locale/pt_PT/LC_MESSAGES/django.po b/locale/pt_PT/LC_MESSAGES/django.po index 363f096f..b241c4d5 100644 --- a/locale/pt_PT/LC_MESSAGES/django.po +++ b/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-28 02:50+0000\n" -"PO-Revision-Date: 2022-01-28 04:03\n" +"POT-Creation-Date: 2022-01-30 18:17+0000\n" +"PO-Revision-Date: 2022-01-30 19:38\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese\n" "Language: pt\n" @@ -3572,23 +3572,31 @@ msgstr "" msgid "Back to reports" msgstr "Voltar para denúncias" -#: bookwyrm/templates/settings/reports/report.html:22 +#: bookwyrm/templates/settings/reports/report.html:23 +msgid "Message reporter" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:27 +msgid "Update on your report:" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" msgstr "Estados denunciados" -#: bookwyrm/templates/settings/reports/report.html:27 +#: bookwyrm/templates/settings/reports/report.html:40 msgid "Status has been deleted" msgstr "O estado foi eliminado" -#: bookwyrm/templates/settings/reports/report.html:39 +#: bookwyrm/templates/settings/reports/report.html:52 msgid "Reported links" msgstr "" -#: bookwyrm/templates/settings/reports/report.html:55 +#: bookwyrm/templates/settings/reports/report.html:68 msgid "Moderator Comments" msgstr "Comentários do Moderador" -#: bookwyrm/templates/settings/reports/report.html:73 +#: bookwyrm/templates/settings/reports/report.html:89 #: bookwyrm/templates/snippets/create_status.html:28 msgid "Comment" msgstr "Comentar" @@ -4013,14 +4021,14 @@ msgstr "porcento" msgid "of %(pages)s pages" msgstr "%(pages)s páginas" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 #: bookwyrm/templates/snippets/status/layout.html:34 #: bookwyrm/templates/snippets/status/layout.html:53 #: bookwyrm/templates/snippets/status/layout.html:54 msgid "Reply" msgstr "Responder" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 msgid "Content" msgstr "Conteúdo" diff --git a/locale/sv_SE/LC_MESSAGES/django.mo b/locale/sv_SE/LC_MESSAGES/django.mo index bff1e3e360d211e7fbd2c0f1ff57f0976aee5444..87a0038a5e7551fdf759fb77a75a0c546b31a921 100644 GIT binary patch delta 23 fcmccmo#pCxmJN3MIE)Px3@xpUEjGLD>#qd>em)7R delta 23 fcmccmo#pCxmJN3MIE*Y53{0#Hj5oXO>#qd>ekTc| diff --git a/locale/sv_SE/LC_MESSAGES/django.po b/locale/sv_SE/LC_MESSAGES/django.po index 7f2fbd85..33fc8682 100644 --- a/locale/sv_SE/LC_MESSAGES/django.po +++ b/locale/sv_SE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-28 02:50+0000\n" -"PO-Revision-Date: 2022-01-28 04:03\n" +"POT-Creation-Date: 2022-01-30 18:17+0000\n" +"PO-Revision-Date: 2022-01-30 19:38\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Swedish\n" "Language: sv\n" @@ -3574,23 +3574,31 @@ msgstr "Inga länkar tillgängliga för den här domänen." msgid "Back to reports" msgstr "Tillbaka till rapporter" -#: bookwyrm/templates/settings/reports/report.html:22 +#: bookwyrm/templates/settings/reports/report.html:23 +msgid "Message reporter" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:27 +msgid "Update on your report:" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" msgstr "Rapporterade statusar" -#: bookwyrm/templates/settings/reports/report.html:27 +#: bookwyrm/templates/settings/reports/report.html:40 msgid "Status has been deleted" msgstr "Statusen har tagits bort" -#: bookwyrm/templates/settings/reports/report.html:39 +#: bookwyrm/templates/settings/reports/report.html:52 msgid "Reported links" msgstr "Rapporterade länkar" -#: bookwyrm/templates/settings/reports/report.html:55 +#: bookwyrm/templates/settings/reports/report.html:68 msgid "Moderator Comments" msgstr "Moderatorns kommentarer" -#: bookwyrm/templates/settings/reports/report.html:73 +#: bookwyrm/templates/settings/reports/report.html:89 #: bookwyrm/templates/snippets/create_status.html:28 msgid "Comment" msgstr "Kommentar" @@ -4015,14 +4023,14 @@ msgstr "procent" msgid "of %(pages)s pages" msgstr "av %(pages)s sidor" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 #: bookwyrm/templates/snippets/status/layout.html:34 #: bookwyrm/templates/snippets/status/layout.html:53 #: bookwyrm/templates/snippets/status/layout.html:54 msgid "Reply" msgstr "Svara" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 msgid "Content" msgstr "Innehåll" diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index 250d030b..6b51efb8 100644 --- a/locale/zh_Hans/LC_MESSAGES/django.po +++ b/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-28 02:50+0000\n" -"PO-Revision-Date: 2022-01-28 04:03\n" +"POT-Creation-Date: 2022-01-30 18:17+0000\n" +"PO-Revision-Date: 2022-01-30 19:38\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Simplified\n" "Language: zh\n" @@ -3557,23 +3557,31 @@ msgstr "" msgid "Back to reports" msgstr "回到报告" -#: bookwyrm/templates/settings/reports/report.html:22 +#: bookwyrm/templates/settings/reports/report.html:23 +msgid "Message reporter" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:27 +msgid "Update on your report:" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" msgstr "被报告的状态" -#: bookwyrm/templates/settings/reports/report.html:27 +#: bookwyrm/templates/settings/reports/report.html:40 msgid "Status has been deleted" msgstr "状态已被删除" -#: bookwyrm/templates/settings/reports/report.html:39 +#: bookwyrm/templates/settings/reports/report.html:52 msgid "Reported links" msgstr "" -#: bookwyrm/templates/settings/reports/report.html:55 +#: bookwyrm/templates/settings/reports/report.html:68 msgid "Moderator Comments" msgstr "监察员评论" -#: bookwyrm/templates/settings/reports/report.html:73 +#: bookwyrm/templates/settings/reports/report.html:89 #: bookwyrm/templates/snippets/create_status.html:28 msgid "Comment" msgstr "评论" @@ -3996,14 +4004,14 @@ msgstr "百分比" msgid "of %(pages)s pages" msgstr "全书 %(pages)s 页" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 #: bookwyrm/templates/snippets/status/layout.html:34 #: bookwyrm/templates/snippets/status/layout.html:53 #: bookwyrm/templates/snippets/status/layout.html:54 msgid "Reply" msgstr "回复" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 msgid "Content" msgstr "内容" diff --git a/locale/zh_Hant/LC_MESSAGES/django.po b/locale/zh_Hant/LC_MESSAGES/django.po index 220a6268..daebda62 100644 --- a/locale/zh_Hant/LC_MESSAGES/django.po +++ b/locale/zh_Hant/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-28 02:50+0000\n" -"PO-Revision-Date: 2022-01-28 04:03\n" +"POT-Creation-Date: 2022-01-30 18:17+0000\n" +"PO-Revision-Date: 2022-01-30 19:38\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Traditional\n" "Language: zh\n" @@ -3557,23 +3557,31 @@ msgstr "" msgid "Back to reports" msgstr "回到舉報" -#: bookwyrm/templates/settings/reports/report.html:22 +#: bookwyrm/templates/settings/reports/report.html:23 +msgid "Message reporter" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:27 +msgid "Update on your report:" +msgstr "" + +#: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" msgstr "被舉報的狀態" -#: bookwyrm/templates/settings/reports/report.html:27 +#: bookwyrm/templates/settings/reports/report.html:40 msgid "Status has been deleted" msgstr "狀態已被刪除" -#: bookwyrm/templates/settings/reports/report.html:39 +#: bookwyrm/templates/settings/reports/report.html:52 msgid "Reported links" msgstr "" -#: bookwyrm/templates/settings/reports/report.html:55 +#: bookwyrm/templates/settings/reports/report.html:68 msgid "Moderator Comments" msgstr "監察員評論" -#: bookwyrm/templates/settings/reports/report.html:73 +#: bookwyrm/templates/settings/reports/report.html:89 #: bookwyrm/templates/snippets/create_status.html:28 msgid "Comment" msgstr "評論" @@ -3996,14 +4004,14 @@ msgstr "百分比" msgid "of %(pages)s pages" msgstr "全書 %(pages)s 頁" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 #: bookwyrm/templates/snippets/status/layout.html:34 #: bookwyrm/templates/snippets/status/layout.html:53 #: bookwyrm/templates/snippets/status/layout.html:54 msgid "Reply" msgstr "回覆" -#: bookwyrm/templates/snippets/create_status/content_field.html:17 +#: bookwyrm/templates/snippets/create_status/content_field.html:18 msgid "Content" msgstr "內容" From 36a52019fb18192dda989ff8be1dcb10e8e46d87 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 2 Feb 2022 12:29:01 -0800 Subject: [PATCH 19/88] Fixes adding book to list from book page --- bookwyrm/templates/book/book.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 43f2171c..e15b656c 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -356,10 +356,11 @@
{% csrf_token %} +
- {% for list in user.list_set.all %} {% endfor %} From e18f6fbfaf05e45aa0dfc3abe4253ea59cf2b2d0 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 2 Feb 2022 12:43:27 -0800 Subject: [PATCH 20/88] Adds migration for locale name update --- .../0132_alter_user_preferred_language.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 bookwyrm/migrations/0132_alter_user_preferred_language.py diff --git a/bookwyrm/migrations/0132_alter_user_preferred_language.py b/bookwyrm/migrations/0132_alter_user_preferred_language.py new file mode 100644 index 00000000..a2f0aa6a --- /dev/null +++ b/bookwyrm/migrations/0132_alter_user_preferred_language.py @@ -0,0 +1,37 @@ +# Generated by Django 3.2.10 on 2022-02-02 20:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0131_merge_20220125_1644"), + ] + + operations = [ + migrations.AlterField( + model_name="user", + name="preferred_language", + field=models.CharField( + blank=True, + choices=[ + ("en-us", "English"), + ("de-de", "Deutsch (German)"), + ("es-es", "Español (Spanish)"), + ("gl-es", "Galego (Galician)"), + ("it-it", "Italiano (Italian)"), + ("fr-fr", "Français (French)"), + ("lt-lt", "Lietuvių (Lithuanian)"), + ("no-no", "Norsk (Norwegian)"), + ("pt-br", "Português do Brasil (Brazilian Portuguese)"), + ("pt-pt", "Português Europeu (European Portuguese)"), + ("sv-se", "Svenska (Swedish)"), + ("zh-hans", "简体中文 (Simplified Chinese)"), + ("zh-hant", "繁體中文 (Traditional Chinese)"), + ], + max_length=255, + null=True, + ), + ), + ] From 1b313c2b624d81451735e4e404f8265c7375f181 Mon Sep 17 00:00:00 2001 From: Willi Hohenstein Date: Wed, 2 Feb 2022 22:34:30 +0100 Subject: [PATCH 21/88] added check of existing url for book sould also fix #1899 --- bookwyrm/forms.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/bookwyrm/forms.py b/bookwyrm/forms.py index 1b13598b..684fe91f 100644 --- a/bookwyrm/forms.py +++ b/bookwyrm/forms.py @@ -227,18 +227,32 @@ class FileLinkForm(CustomForm): class Meta: model = models.FileLink fields = ["url", "filetype", "availability", "book", "added_by"] - + def clean(self): """make sure the domain isn't blocked or pending""" cleaned_data = super().clean() - url = cleaned_data.get('url') + url = cleaned_data.get("url") + filetype = cleaned_data.get("filetype") + book = cleaned_data.get("book") domain = urlparse(url).netloc if models.LinkDomain.objects.filter(domain=domain).exists(): status = models.LinkDomain.objects.get(domain=domain).status - if status == 'blocked': - self.add_error("url", _("Domain is blocked. Don't try this url again.")) - elif status == 'pending': - self.add_error("url", _("Domain already pending. Please try later.")) + if status == "blocked": + self.add_error( + "url", + _( + "This domain is blocked. Please contact your administrator if you think this is an error." + ), + ) + elif models.FileLink.objects.filter( + url=url, book=book, filetype=filetype + ).exists(): + self.add_error( + "url", + _( + "This link with file type has already been added for this book. If it is not visible, the domain is still pending." + ), + ) class EditionForm(CustomForm): From 2c16b8f33b8049801a950fecad5b59e61d14e91b Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 3 Feb 2022 08:44:51 -0800 Subject: [PATCH 22/88] Fix shelf names on books page --- bookwyrm/settings.py | 2 +- bookwyrm/templates/shelf/shelf.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 22682a80..72af0804 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _ env = Env() env.read_env() DOMAIN = env("DOMAIN") -VERSION = "0.2.0" +VERSION = "0.2.1" PAGE_LENGTH = env("PAGE_LENGTH", 15) DEFAULT_LANGUAGE = env("DEFAULT_LANGUAGE", "English") diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index 3a565221..cc4bb143 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -45,7 +45,7 @@ href="{{ shelf_tab.local_path }}" {% if shelf_tab.identifier == shelf.identifier %} aria-current="page"{% endif %} > - {% include 'user/books_header.html' with shelf=shelf_tab %} + {% include "snippets/translated_shelf_name.html" with shelf=shelf_tab %} {% endfor %} From a46ab96d9b5ec399396605ee67c8575e801ecd1f Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 3 Feb 2022 10:30:30 -0800 Subject: [PATCH 23/88] Fixes add/edit notes form on list page --- bookwyrm/templates/lists/list.html | 4 ++-- bookwyrm/views/list/list_item.py | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/lists/list.html b/bookwyrm/templates/lists/list.html index 8e35416f..a4c12f46 100644 --- a/bookwyrm/templates/lists/list.html +++ b/bookwyrm/templates/lists/list.html @@ -97,7 +97,7 @@ - {% include "lists/edit_item_form.html" %} + {% include "lists/edit_item_form.html" with book=item.book %}
{% endif %} @@ -112,7 +112,7 @@ - {% include "lists/edit_item_form.html" %} + {% include "lists/edit_item_form.html" with book=item.book %}
{% endif %} diff --git a/bookwyrm/views/list/list_item.py b/bookwyrm/views/list/list_item.py index 29cfbee8..5fd65938 100644 --- a/bookwyrm/views/list/list_item.py +++ b/bookwyrm/views/list/list_item.py @@ -19,4 +19,6 @@ class ListItem(View): form = forms.ListItemForm(request.POST, instance=list_item) if form.is_valid(): form.save() + else: + raise Exception(form.errors) return redirect("list", list_item.book_list.id) From 5a3ce5e328c46f45d730a1aed1606c1e7e355264 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 3 Feb 2022 11:48:56 -0800 Subject: [PATCH 24/88] Fixes rating in about page superlatives --- bookwyrm/templates/about/about.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/about/about.html b/bookwyrm/templates/about/about.html index 4e533b11..6f16aa67 100644 --- a/bookwyrm/templates/about/about.html +++ b/bookwyrm/templates/about/about.html @@ -28,7 +28,7 @@
{% if superlatives.top_rated %} - {% with book=superlatives.top_rated.default_edition rating=top_rated.rating %} + {% with book=superlatives.top_rated.default_edition rating=superlatives.top_rated.rating %}
From 1f6ecc39ac32b5867c970549e72a1a8c8a3b025b Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 3 Feb 2022 13:15:06 -0800 Subject: [PATCH 25/88] Adds allowlist for html attrs --- bookwyrm/sanitize_html.py | 12 +++++++++++- bookwyrm/tests/test_sanitize_html.py | 13 ++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/bookwyrm/sanitize_html.py b/bookwyrm/sanitize_html.py index 8b0e3c4c..538264fc 100644 --- a/bookwyrm/sanitize_html.py +++ b/bookwyrm/sanitize_html.py @@ -22,6 +22,9 @@ class InputHtmlParser(HTMLParser): # pylint: disable=abstract-method "ol", "li", ] + self.allowed_attrs = [ + "href", "rel", "src", "alt" + ] self.tag_stack = [] self.output = [] # if the html appears invalid, we just won't allow any at all @@ -30,7 +33,14 @@ class InputHtmlParser(HTMLParser): # pylint: disable=abstract-method def handle_starttag(self, tag, attrs): """check if the tag is valid""" if self.allow_html and tag in self.allowed_tags: - self.output.append(("tag", self.get_starttag_text())) + allowed_attrs = " ".join( + f'{a}="{v}"' for a, v in attrs if a in self.allowed_attrs + ) + reconstructed = f'<{tag}' + if allowed_attrs: + reconstructed += " " + allowed_attrs + reconstructed += ">" + self.output.append(("tag", reconstructed)) self.tag_stack.append(tag) else: self.output.append(("data", "")) diff --git a/bookwyrm/tests/test_sanitize_html.py b/bookwyrm/tests/test_sanitize_html.py index 6c405348..572f8332 100644 --- a/bookwyrm/tests/test_sanitize_html.py +++ b/bookwyrm/tests/test_sanitize_html.py @@ -24,13 +24,24 @@ class Sanitizer(TestCase): self.assertEqual(input_text, output) def test_valid_html_attrs(self): - """and don't remove attributes""" + """and don't remove useful attributes""" input_text = 'yes html' parser = InputHtmlParser() parser.feed(input_text) output = parser.get_output() self.assertEqual(input_text, output) + def test_valid_html_invalid_attrs(self): + """do remove un-approved attributes""" + input_text = 'yes html' + parser = InputHtmlParser() + parser.feed(input_text) + output = parser.get_output() + self.assertEqual( + output, + 'yes html' + ) + def test_invalid_html(self): """remove all html when the html is malformed""" input_text = "yes html" From 2c7a6e85186255c123708f4936af6465fd9b193f Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 3 Feb 2022 13:17:16 -0800 Subject: [PATCH 26/88] Correct status order --- bookwyrm/tests/activitystreams/test_abstractstream.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/tests/activitystreams/test_abstractstream.py b/bookwyrm/tests/activitystreams/test_abstractstream.py index 8d278041..f81c6fd6 100644 --- a/bookwyrm/tests/activitystreams/test_abstractstream.py +++ b/bookwyrm/tests/activitystreams/test_abstractstream.py @@ -107,8 +107,8 @@ class Activitystreams(TestCase): redis_mock.return_value = [status.id, status2.id] result = self.test_stream.get_activity_stream(self.local_user) self.assertEqual(result.count(), 2) - self.assertEqual(result.first(), status) - self.assertEqual(result.last(), status2) + self.assertEqual(result.first(), status2) + self.assertEqual(result.last(), status) self.assertIsInstance(result.last(), models.Comment) def test_abstractstream_get_audience(self, *_): From cae7191a2b65f82c70054bcb73efeb7518f77dee Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 3 Feb 2022 13:19:56 -0800 Subject: [PATCH 27/88] Python formatting --- bookwyrm/sanitize_html.py | 6 ++---- bookwyrm/tests/test_sanitize_html.py | 5 +---- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/bookwyrm/sanitize_html.py b/bookwyrm/sanitize_html.py index 538264fc..4edd2818 100644 --- a/bookwyrm/sanitize_html.py +++ b/bookwyrm/sanitize_html.py @@ -22,9 +22,7 @@ class InputHtmlParser(HTMLParser): # pylint: disable=abstract-method "ol", "li", ] - self.allowed_attrs = [ - "href", "rel", "src", "alt" - ] + self.allowed_attrs = ["href", "rel", "src", "alt"] self.tag_stack = [] self.output = [] # if the html appears invalid, we just won't allow any at all @@ -36,7 +34,7 @@ class InputHtmlParser(HTMLParser): # pylint: disable=abstract-method allowed_attrs = " ".join( f'{a}="{v}"' for a, v in attrs if a in self.allowed_attrs ) - reconstructed = f'<{tag}' + reconstructed = f"<{tag}" if allowed_attrs: reconstructed += " " + allowed_attrs reconstructed += ">" diff --git a/bookwyrm/tests/test_sanitize_html.py b/bookwyrm/tests/test_sanitize_html.py index 572f8332..5814f220 100644 --- a/bookwyrm/tests/test_sanitize_html.py +++ b/bookwyrm/tests/test_sanitize_html.py @@ -37,10 +37,7 @@ class Sanitizer(TestCase): parser = InputHtmlParser() parser.feed(input_text) output = parser.get_output() - self.assertEqual( - output, - 'yes html' - ) + self.assertEqual(output, 'yes html') def test_invalid_html(self): """remove all html when the html is malformed""" From 85aad7c219fbedbe8307c1e7b386f911740ca729 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 3 Feb 2022 13:25:44 -0800 Subject: [PATCH 28/88] Another sorting order error --- bookwyrm/tests/activitystreams/test_abstractstream.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/tests/activitystreams/test_abstractstream.py b/bookwyrm/tests/activitystreams/test_abstractstream.py index f81c6fd6..af94233f 100644 --- a/bookwyrm/tests/activitystreams/test_abstractstream.py +++ b/bookwyrm/tests/activitystreams/test_abstractstream.py @@ -109,7 +109,7 @@ class Activitystreams(TestCase): self.assertEqual(result.count(), 2) self.assertEqual(result.first(), status2) self.assertEqual(result.last(), status) - self.assertIsInstance(result.last(), models.Comment) + self.assertIsInstance(result.first(), models.Comment) def test_abstractstream_get_audience(self, *_): """get a list of users that should see a status""" From 3b12af63b60752f655834059c95456a4416a8836 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 3 Feb 2022 13:49:33 -0800 Subject: [PATCH 29/88] Fixes links on import page --- bookwyrm/templates/import/import_status.html | 4 ++-- bookwyrm/views/imports/troubleshoot.py | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/import/import_status.html b/bookwyrm/templates/import/import_status.html index 374ea22c..3a063954 100644 --- a/bookwyrm/templates/import/import_status.html +++ b/bookwyrm/templates/import/import_status.html @@ -47,7 +47,7 @@ {% trans "In progress" %} - {% trans "Refresh" %} + {% trans "Refresh" %}
@@ -230,7 +230,7 @@ {% if not legacy %}
- {% include 'snippets/pagination.html' with page=items %} + {% include 'snippets/pagination.html' with page=items path=page_path %}
{% endif %} {% endspaceless %}{% endblock %} diff --git a/bookwyrm/views/imports/troubleshoot.py b/bookwyrm/views/imports/troubleshoot.py index f637b966..e9ac275f 100644 --- a/bookwyrm/views/imports/troubleshoot.py +++ b/bookwyrm/views/imports/troubleshoot.py @@ -5,6 +5,7 @@ from django.core.paginator import Paginator from django.shortcuts import get_object_or_404, redirect from django.template.response import TemplateResponse from django.utils.decorators import method_decorator +from django.urls import reverse from django.views import View from bookwyrm import models @@ -35,6 +36,7 @@ class ImportTroubleshoot(View): page.number, on_each_side=2, on_ends=1 ), "complete": True, + "page_path": reverse("import-troubleshoot", args=[job.id]), } return TemplateResponse(request, "import/troubleshoot.html", data) From 9013b1417ae552681120858de1eea9b212a129a7 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 3 Feb 2022 13:59:53 -0800 Subject: [PATCH 30/88] Show cancel buttons on modals in static mode --- bookwyrm/templates/book/file_links/add_link_modal.html | 4 +--- bookwyrm/templates/readthrough/readthrough_modal.html | 2 -- bookwyrm/templates/snippets/report_modal.html | 4 +--- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/bookwyrm/templates/book/file_links/add_link_modal.html b/bookwyrm/templates/book/file_links/add_link_modal.html index 0002b82b..d5b3fcd0 100644 --- a/bookwyrm/templates/book/file_links/add_link_modal.html +++ b/bookwyrm/templates/book/file_links/add_link_modal.html @@ -56,9 +56,7 @@ {% block modal-footer %} -{% if not static %} - -{% endif %} + {% endblock %} {% block modal-form-close %}{% endblock %} diff --git a/bookwyrm/templates/readthrough/readthrough_modal.html b/bookwyrm/templates/readthrough/readthrough_modal.html index 07d27b66..73f445f6 100644 --- a/bookwyrm/templates/readthrough/readthrough_modal.html +++ b/bookwyrm/templates/readthrough/readthrough_modal.html @@ -70,9 +70,7 @@ {% block modal-footer %} -{% if not static %} -{% endif %} {% endblock %} {% block modal-form-close %} diff --git a/bookwyrm/templates/snippets/report_modal.html b/bookwyrm/templates/snippets/report_modal.html index 0cf786ec..f65cab59 100644 --- a/bookwyrm/templates/snippets/report_modal.html +++ b/bookwyrm/templates/snippets/report_modal.html @@ -50,9 +50,7 @@ {% block modal-footer %} -{% if not static %} - -{% endif %} + {% endblock %} From 3e635f497e3cd821455ea51fe39ae45743ec7a80 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 3 Feb 2022 15:11:01 -0800 Subject: [PATCH 31/88] Adds some simple url validation --- bookwyrm/connectors/abstract_connector.py | 19 +++++++++++++++++++ .../connectors/test_abstract_connector.py | 12 ++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index 0ab135b8..d8b9c630 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -1,7 +1,9 @@ """ functionality outline for a book data connector """ from abc import ABC, abstractmethod import imghdr +import ipaddress import logging +from urllib.parse import urlparse from django.core.files.base import ContentFile from django.db import transaction @@ -250,6 +252,8 @@ def dict_from_mappings(data, mappings): def get_data(url, params=None, timeout=10): """wrapper for request.get""" # check if the url is blocked + raise_not_valid_url(url) + if models.FederatedServer.is_blocked(url): raise ConnectorException(f"Attempting to load data from blocked url: {url}") @@ -282,6 +286,7 @@ def get_data(url, params=None, timeout=10): def get_image(url, timeout=10): """wrapper for requesting an image""" + raise_not_valid_url(url) try: resp = requests.get( url, @@ -306,6 +311,20 @@ def get_image(url, timeout=10): return image_content, extension +def raise_not_valid_url(url): + """do some basic reality checks on the url""" + parsed = urlparse(url) + if not parsed.scheme in ["http", "https"]: + raise ConnectorException("Invalid scheme: ", url) + + try: + ipaddress.ip_address(parsed.netloc) + raise ConnectorException("Provided url is an IP address: ", url) + except ValueError: + # it's not an IP address, which is good + pass + + class Mapping: """associate a local database field with a field in an external dataset""" diff --git a/bookwyrm/tests/connectors/test_abstract_connector.py b/bookwyrm/tests/connectors/test_abstract_connector.py index 90e77b79..901cb5af 100644 --- a/bookwyrm/tests/connectors/test_abstract_connector.py +++ b/bookwyrm/tests/connectors/test_abstract_connector.py @@ -4,8 +4,8 @@ from django.test import TestCase import responses from bookwyrm import models -from bookwyrm.connectors import abstract_connector -from bookwyrm.connectors.abstract_connector import Mapping +from bookwyrm.connectors import abstract_connector, ConnectorException +from bookwyrm.connectors.abstract_connector import Mapping, get_data from bookwyrm.settings import DOMAIN @@ -163,3 +163,11 @@ class AbstractConnector(TestCase): author.refresh_from_db() self.assertEqual(author.name, "Test") self.assertEqual(author.isni, "hi") + + def test_get_data_invalid_url(self): + """load json data from an arbitrary url""" + with self.assertRaises(ConnectorException): + get_data("file://hello.com/image/jpg") + + with self.assertRaises(ConnectorException): + get_data("http://127.0.0.1/image/jpg") From 7c0d51ed1484851ddab63ea45e53d1c4b53bc135 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 3 Feb 2022 18:59:08 -0800 Subject: [PATCH 32/88] Fixes duplicted shelves on user view --- bookwyrm/views/user.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/bookwyrm/views/user.py b/bookwyrm/views/user.py index d38981ea..15ed5d29 100644 --- a/bookwyrm/views/user.py +++ b/bookwyrm/views/user.py @@ -33,9 +33,13 @@ class User(View): # only show shelves that should be visible is_self = request.user.id == user.id if not is_self: - shelves = models.Shelf.privacy_filter( - request.user, privacy_levels=["public", "followers"] - ).filter(user=user, books__isnull=False) + shelves = ( + models.Shelf.privacy_filter( + request.user, privacy_levels=["public", "followers"] + ) + .filter(user=user, books__isnull=False) + .distinct() + ) else: shelves = user.shelf_set.filter(books__isnull=False).distinct() From 82aacf8f2aaca178457e461c5652f5e3d9f2dce4 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 11:47:18 -0800 Subject: [PATCH 33/88] Update forms.py --- bookwyrm/forms.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bookwyrm/forms.py b/bookwyrm/forms.py index 684fe91f..564ea91b 100644 --- a/bookwyrm/forms.py +++ b/bookwyrm/forms.py @@ -238,6 +238,7 @@ class FileLinkForm(CustomForm): if models.LinkDomain.objects.filter(domain=domain).exists(): status = models.LinkDomain.objects.get(domain=domain).status if status == "blocked": + # pylint: disable=line-too-long self.add_error( "url", _( @@ -247,6 +248,7 @@ class FileLinkForm(CustomForm): elif models.FileLink.objects.filter( url=url, book=book, filetype=filetype ).exists(): + # pylint: disable=line-too-long self.add_error( "url", _( From 719df5621ce06a9f33e2072c98fe797168e10e55 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 11:58:03 -0800 Subject: [PATCH 34/88] Unit test to catch error on list page --- bookwyrm/tests/views/lists/test_list.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bookwyrm/tests/views/lists/test_list.py b/bookwyrm/tests/views/lists/test_list.py index a999d4cd..f29288c0 100644 --- a/bookwyrm/tests/views/lists/test_list.py +++ b/bookwyrm/tests/views/lists/test_list.py @@ -85,6 +85,7 @@ class ListViews(TestCase): user=self.local_user, book=self.book, approved=True, + notes="hello", order=1, ) From fefb7e582a4bc01df5fe7a6608d78acdc551b396 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 12:02:10 -0800 Subject: [PATCH 35/88] Fixes list note display --- bookwyrm/templates/lists/list.html | 4 +--- bookwyrm/tests/views/lists/test_list.py | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/bookwyrm/templates/lists/list.html b/bookwyrm/templates/lists/list.html index a4c12f46..6dfea8a6 100644 --- a/bookwyrm/templates/lists/list.html +++ b/bookwyrm/templates/lists/list.html @@ -84,9 +84,7 @@ {{ username }} says: {% endblocktrans %} -

- {{ item.notes|to_markdown|safe }} -

+ {{ item.notes|to_markdown|safe }}
{% if item.user == request.user %}
diff --git a/bookwyrm/tests/views/lists/test_list.py b/bookwyrm/tests/views/lists/test_list.py index f29288c0..bcec0822 100644 --- a/bookwyrm/tests/views/lists/test_list.py +++ b/bookwyrm/tests/views/lists/test_list.py @@ -179,6 +179,7 @@ class ListViews(TestCase): book_list=self.list, user=self.local_user, book=self.book, + notes="hi hello", approved=True, order=1, ) From 0683ce1c33f5341dc1ae7c6c8c805a745a763201 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 12:06:47 -0800 Subject: [PATCH 36/88] Proper markdown formatting --- .../migrations/0133_alter_listitem_notes.py | 21 +++++++++++++++++++ bookwyrm/models/list.py | 2 +- bookwyrm/views/list/list_item.py | 5 ++++- 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 bookwyrm/migrations/0133_alter_listitem_notes.py diff --git a/bookwyrm/migrations/0133_alter_listitem_notes.py b/bookwyrm/migrations/0133_alter_listitem_notes.py new file mode 100644 index 00000000..26ed10f8 --- /dev/null +++ b/bookwyrm/migrations/0133_alter_listitem_notes.py @@ -0,0 +1,21 @@ +# Generated by Django 3.2.11 on 2022-02-04 20:06 + +import bookwyrm.models.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0132_alter_user_preferred_language"), + ] + + operations = [ + migrations.AlterField( + model_name="listitem", + name="notes", + field=bookwyrm.models.fields.HtmlField( + blank=True, max_length=300, null=True + ), + ), + ] diff --git a/bookwyrm/models/list.py b/bookwyrm/models/list.py index 7dff7214..ea524cc5 100644 --- a/bookwyrm/models/list.py +++ b/bookwyrm/models/list.py @@ -142,7 +142,7 @@ class ListItem(CollectionItemMixin, BookWyrmModel): user = fields.ForeignKey( "User", on_delete=models.PROTECT, activitypub_field="actor" ) - notes = fields.TextField(blank=True, null=True, max_length=300) + notes = fields.HtmlField(blank=True, null=True, max_length=300) approved = models.BooleanField(default=True) order = fields.IntegerField() endorsement = models.ManyToManyField("User", related_name="endorsers") diff --git a/bookwyrm/views/list/list_item.py b/bookwyrm/views/list/list_item.py index 5fd65938..6dca908f 100644 --- a/bookwyrm/views/list/list_item.py +++ b/bookwyrm/views/list/list_item.py @@ -5,6 +5,7 @@ from django.utils.decorators import method_decorator from django.views import View from bookwyrm import forms, models +from bookwyrm.views.status import to_markdown # pylint: disable=no-self-use @@ -18,7 +19,9 @@ class ListItem(View): list_item.raise_not_editable(request.user) form = forms.ListItemForm(request.POST, instance=list_item) if form.is_valid(): - form.save() + item = form.save(commit=False) + item.notes = to_markdown(item.notes) + item.save() else: raise Exception(form.errors) return redirect("list", list_item.book_list.id) From 547d2463751fb7fe7c02b4f2ce4b17749c888e03 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 12:09:20 -0800 Subject: [PATCH 37/88] Fixes 500 error --- bookwyrm/templates/lists/list.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/lists/list.html b/bookwyrm/templates/lists/list.html index 6dfea8a6..ab64fc9b 100644 --- a/bookwyrm/templates/lists/list.html +++ b/bookwyrm/templates/lists/list.html @@ -79,7 +79,7 @@
- {% url 'user-feed' user|username as user_path %} + {% url 'user-feed' item.user|username as user_path %} {% blocktrans trimmed with username=user.display_name %} {{ username }} says: {% endblocktrans %} From 18768a23f3a8d81688490d18746a1dfca7b05acf Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 15:30:58 -0800 Subject: [PATCH 38/88] Fixes test --- bookwyrm/tests/views/lists/test_list_item.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/tests/views/lists/test_list_item.py b/bookwyrm/tests/views/lists/test_list_item.py index 0d6f66ab..50be3c28 100644 --- a/bookwyrm/tests/views/lists/test_list_item.py +++ b/bookwyrm/tests/views/lists/test_list_item.py @@ -67,4 +67,4 @@ class ListItemViews(TestCase): self.assertEqual(mock.call_count, 1) item.refresh_from_db() - self.assertEqual(item.notes, "beep boop") + self.assertEqual(item.notes, "

beep boop

") From ea035b9fbe3c586fcdb3e5272dc22d0a29dc63a4 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 17:37:08 -0800 Subject: [PATCH 39/88] Don't expose unnecessary ports --- docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 0f4e90e3..fa28dbee 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -35,7 +35,7 @@ services: networks: - main ports: - - 8000:8000 + - 8000 redis_activity: image: redis command: redis-server --requirepass ${REDIS_ACTIVITY_PASSWORD} --appendonly yes --port ${REDIS_ACTIVITY_PORT} @@ -51,7 +51,7 @@ services: command: redis-server --requirepass ${REDIS_BROKER_PASSWORD} --appendonly yes --port ${REDIS_BROKER_PORT} env_file: .env ports: - - 6379:6379 + - 6379 networks: - main restart: on-failure @@ -74,10 +74,10 @@ services: restart: on-failure flower: build: . - command: celery -A celerywyrm flower + command: celery -A celerywyrm flower --basic_auth=${FLOWER_USER}:${FLOWER_PASSWORD} env_file: .env ports: - - ${FLOWER_PORT}:${FLOWER_PORT} + - ${FLOWER_PORT} volumes: - .:/app networks: From d8c3699adc4e8a7188dc75b9cfdc8afb742add7d Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 18:21:48 -0800 Subject: [PATCH 40/88] Updates locales --- locale/de_DE/LC_MESSAGES/django.po | 43 ++++---- locale/en_US/LC_MESSAGES/django.po | 144 +++++++++++++-------------- locale/es_ES/LC_MESSAGES/django.mo | Bin 83458 -> 83690 bytes locale/es_ES/LC_MESSAGES/django.po | 74 ++++++++------ locale/fr_FR/LC_MESSAGES/django.po | 78 ++++++++------- locale/gl_ES/LC_MESSAGES/django.mo | Bin 81710 -> 81710 bytes locale/gl_ES/LC_MESSAGES/django.po | 74 ++++++++------ locale/it_IT/LC_MESSAGES/django.mo | Bin 82792 -> 82792 bytes locale/it_IT/LC_MESSAGES/django.po | 74 ++++++++------ locale/lt_LT/LC_MESSAGES/django.mo | Bin 80620 -> 85183 bytes locale/lt_LT/LC_MESSAGES/django.po | 134 +++++++++++++------------ locale/no_NO/LC_MESSAGES/django.mo | Bin 80170 -> 80170 bytes locale/no_NO/LC_MESSAGES/django.po | 74 ++++++++------ locale/pt_BR/LC_MESSAGES/django.mo | Bin 82142 -> 82398 bytes locale/pt_BR/LC_MESSAGES/django.po | 74 ++++++++------ locale/pt_PT/LC_MESSAGES/django.mo | Bin 72904 -> 72904 bytes locale/pt_PT/LC_MESSAGES/django.po | 72 ++++++++------ locale/sv_SE/LC_MESSAGES/django.mo | Bin 80853 -> 82016 bytes locale/sv_SE/LC_MESSAGES/django.po | 92 +++++++++-------- locale/zh_Hans/LC_MESSAGES/django.po | 72 ++++++++------ locale/zh_Hant/LC_MESSAGES/django.po | 72 ++++++++------ 21 files changed, 583 insertions(+), 494 deletions(-) diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index 1ed9ee62..835bee66 100644 --- a/locale/de_DE/LC_MESSAGES/django.po +++ b/locale/de_DE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-30 18:17+0000\n" -"PO-Revision-Date: 2022-01-30 19:38\n" +"POT-Creation-Date: 2022-02-02 20:09+0000\n" +"PO-Revision-Date: 2022-02-04 21:01\n" "Last-Translator: Mouse Reeve \n" "Language-Team: German\n" "Language: de\n" @@ -19,11 +19,11 @@ msgstr "" #: bookwyrm/forms.py:239 msgid "Domain is blocked. Don't try this url again." -msgstr "Die Domäne ist blockiert. Versuchen Sie diese Url nicht mehr." +msgstr "" #: bookwyrm/forms.py:241 msgid "Domain already pending. Please try later." -msgstr "Die Domain ist bereits in Bearbeitung. Bitte versuchen Sie es später." +msgstr "" #: bookwyrm/forms.py:378 msgid "A user with this email already exists." @@ -148,26 +148,26 @@ msgstr "Föderiert" msgid "Blocked" msgstr "Blockiert" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s ist keine gültige remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s ist kein gültiger Benutzer*inname" -#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "Benutzer*inname" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "Dieser Benutzer*inname ist bereits vergeben." -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -175,7 +175,7 @@ msgstr "Dieser Benutzer*inname ist bereits vergeben." msgid "Public" msgstr "Öffentlich" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -183,14 +183,14 @@ msgstr "Öffentlich" msgid "Unlisted" msgstr "Ungelistet" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "Follower*innen" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -291,8 +291,8 @@ msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Portugiesisch)" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" -msgstr "Swedish (Schwedisch)" +msgid "Svenska (Swedish)" +msgstr "Svenska (Schwedisch)" #: bookwyrm/settings.py:259 msgid "简体中文 (Simplified Chinese)" @@ -377,7 +377,7 @@ msgstr "Administration" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "Direktnachricht senden" @@ -1025,7 +1025,7 @@ msgid "Physical Properties" msgstr "Physikalische Eigenschaften" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "Format:" @@ -1063,17 +1063,17 @@ msgstr "Ausgaben von %(book_title)s" msgid "Editions of \"%(work_title)s\"" msgstr "Ausgaben von \"%(work_title)s\"" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "Beliebig(e)" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "Sprache:" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "Ausgaben suchen" @@ -4116,7 +4116,7 @@ msgstr "Filter werden angewendet" msgid "Clear filters" msgstr "Filter zurücksetzen" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "Filter anwenden" @@ -4685,3 +4685,4 @@ msgid "Load %(count)d unread status" msgid_plural "Load %(count)d unread statuses" msgstr[0] "Lade %(count)d ungelesene Statusmeldung" msgstr[1] "Lade %(count)d ungelesene Statusmeldungen" + diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index 2b8ffaf5..998a34ac 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: 2022-02-02 20:09+0000\n" +"POT-Creation-Date: 2022-02-05 02:20+0000\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -18,70 +18,70 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: bookwyrm/forms.py:239 -msgid "Domain is blocked. Don't try this url again." +#: bookwyrm/forms.py:245 +msgid "This domain is blocked. Please contact your administrator if you think this is an error." msgstr "" -#: bookwyrm/forms.py:241 -msgid "Domain already pending. Please try later." -msgstr "" - -#: bookwyrm/forms.py:378 -msgid "A user with this email already exists." -msgstr "" - -#: bookwyrm/forms.py:392 -msgid "One Day" -msgstr "" - -#: bookwyrm/forms.py:393 -msgid "One Week" +#: bookwyrm/forms.py:255 +msgid "This link with file type has already been added for this book. If it is not visible, the domain is still pending." msgstr "" #: bookwyrm/forms.py:394 +msgid "A user with this email already exists." +msgstr "" + +#: bookwyrm/forms.py:408 +msgid "One Day" +msgstr "" + +#: bookwyrm/forms.py:409 +msgid "One Week" +msgstr "" + +#: bookwyrm/forms.py:410 msgid "One Month" msgstr "" -#: bookwyrm/forms.py:395 +#: bookwyrm/forms.py:411 msgid "Does Not Expire" msgstr "" -#: bookwyrm/forms.py:399 +#: bookwyrm/forms.py:415 #, python-brace-format msgid "{i} uses" msgstr "" -#: bookwyrm/forms.py:400 +#: bookwyrm/forms.py:416 msgid "Unlimited" msgstr "" -#: bookwyrm/forms.py:502 +#: bookwyrm/forms.py:518 msgid "List Order" msgstr "" -#: bookwyrm/forms.py:503 +#: bookwyrm/forms.py:519 msgid "Book Title" msgstr "" -#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:520 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "" -#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:522 bookwyrm/templates/lists/list.html:175 msgid "Sort By" msgstr "" -#: bookwyrm/forms.py:510 +#: bookwyrm/forms.py:526 msgid "Ascending" msgstr "" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:527 msgid "Descending" msgstr "" -#: bookwyrm/forms.py:524 +#: bookwyrm/forms.py:540 msgid "Reading finish date cannot be before start date." msgstr "" @@ -233,73 +233,73 @@ msgstr "" msgid "Everything else" msgstr "" -#: bookwyrm/settings.py:173 +#: bookwyrm/settings.py:190 msgid "Home Timeline" msgstr "" -#: bookwyrm/settings.py:173 +#: bookwyrm/settings.py:190 msgid "Home" msgstr "" -#: bookwyrm/settings.py:174 +#: bookwyrm/settings.py:191 msgid "Books Timeline" msgstr "" -#: bookwyrm/settings.py:174 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:191 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "" -#: bookwyrm/settings.py:248 +#: bookwyrm/settings.py:265 msgid "English" msgstr "" -#: bookwyrm/settings.py:249 +#: bookwyrm/settings.py:266 msgid "Deutsch (German)" msgstr "" -#: bookwyrm/settings.py:250 +#: bookwyrm/settings.py:267 msgid "Español (Spanish)" msgstr "" -#: bookwyrm/settings.py:251 +#: bookwyrm/settings.py:268 msgid "Galego (Galician)" msgstr "" -#: bookwyrm/settings.py:252 +#: bookwyrm/settings.py:269 msgid "Italiano (Italian)" msgstr "" -#: bookwyrm/settings.py:253 +#: bookwyrm/settings.py:270 msgid "Français (French)" msgstr "" -#: bookwyrm/settings.py:254 +#: bookwyrm/settings.py:271 msgid "Lietuvių (Lithuanian)" msgstr "" -#: bookwyrm/settings.py:255 +#: bookwyrm/settings.py:272 msgid "Norsk (Norwegian)" msgstr "" -#: bookwyrm/settings.py:256 +#: bookwyrm/settings.py:273 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "" -#: bookwyrm/settings.py:257 +#: bookwyrm/settings.py:274 msgid "Português Europeu (European Portuguese)" msgstr "" -#: bookwyrm/settings.py:258 +#: bookwyrm/settings.py:275 msgid "Svenska (Swedish)" msgstr "" -#: bookwyrm/settings.py:259 +#: bookwyrm/settings.py:276 msgid "简体中文 (Simplified Chinese)" msgstr "" -#: bookwyrm/settings.py:260 +#: bookwyrm/settings.py:277 msgid "繁體中文 (Traditional Chinese)" msgstr "" @@ -437,7 +437,7 @@ msgid "Copy address" msgstr "" #: bookwyrm/templates/annual_summary/layout.html:68 -#: bookwyrm/templates/lists/list.html:269 +#: bookwyrm/templates/lists/list.html:267 msgid "Copied!" msgstr "" @@ -722,17 +722,17 @@ msgstr "" #: bookwyrm/templates/book/cover_add_modal.html:32 #: bookwyrm/templates/book/edit/edit_book.html:123 #: bookwyrm/templates/book/edit/edit_book.html:126 -#: bookwyrm/templates/book/file_links/add_link_modal.html:60 +#: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:21 #: bookwyrm/templates/book/sync_modal.html:23 #: bookwyrm/templates/groups/delete_group_modal.html:17 #: bookwyrm/templates/lists/add_item_modal.html:42 #: bookwyrm/templates/lists/delete_list_modal.html:18 #: bookwyrm/templates/readthrough/delete_readthrough_modal.html:23 -#: bookwyrm/templates/readthrough/readthrough_modal.html:74 +#: bookwyrm/templates/readthrough/readthrough_modal.html:73 #: bookwyrm/templates/settings/federation/instance.html:88 #: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22 -#: bookwyrm/templates/snippets/report_modal.html:54 +#: bookwyrm/templates/snippets/report_modal.html:53 msgid "Cancel" msgstr "" @@ -839,14 +839,14 @@ msgstr "" msgid "Lists" msgstr "" -#: bookwyrm/templates/book/book.html:359 +#: bookwyrm/templates/book/book.html:360 msgid "Add to list" msgstr "" -#: bookwyrm/templates/book/book.html:369 +#: bookwyrm/templates/book/book.html:370 #: bookwyrm/templates/book/cover_add_modal.html:31 #: bookwyrm/templates/lists/add_item_modal.html:37 -#: bookwyrm/templates/lists/list.html:247 +#: bookwyrm/templates/lists/list.html:245 #: bookwyrm/templates/settings/email_blocklist/domain_form.html:24 #: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:31 msgid "Add" @@ -1659,7 +1659,7 @@ msgid "What are you reading?" msgstr "" #: bookwyrm/templates/get_started/books.html:9 -#: bookwyrm/templates/layout.html:47 bookwyrm/templates/lists/list.html:205 +#: bookwyrm/templates/layout.html:47 bookwyrm/templates/lists/list.html:203 msgid "Search for a book" msgstr "" @@ -1679,7 +1679,7 @@ msgstr "" #: bookwyrm/templates/get_started/users.html:19 #: bookwyrm/templates/groups/members.html:15 #: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:53 -#: bookwyrm/templates/layout.html:54 bookwyrm/templates/lists/list.html:209 +#: bookwyrm/templates/layout.html:54 bookwyrm/templates/lists/list.html:207 #: bookwyrm/templates/search/layout.html:4 #: bookwyrm/templates/search/layout.html:9 msgid "Search" @@ -1695,7 +1695,7 @@ msgid "Popular on %(site_name)s" msgstr "" #: bookwyrm/templates/get_started/books.html:58 -#: bookwyrm/templates/lists/list.html:222 +#: bookwyrm/templates/lists/list.html:220 msgid "No books found" msgstr "" @@ -2266,7 +2266,7 @@ msgid "Suggest \"%(title)s\" for this list" msgstr "" #: bookwyrm/templates/lists/add_item_modal.html:39 -#: bookwyrm/templates/lists/list.html:249 +#: bookwyrm/templates/lists/list.html:247 msgid "Suggest" msgstr "" @@ -2413,72 +2413,72 @@ msgstr "" msgid "You successfully added a book to this list!" msgstr "" -#: bookwyrm/templates/lists/list.html:96 +#: bookwyrm/templates/lists/list.html:94 msgid "Edit notes" msgstr "" -#: bookwyrm/templates/lists/list.html:111 +#: bookwyrm/templates/lists/list.html:109 msgid "Add notes" msgstr "" -#: bookwyrm/templates/lists/list.html:123 +#: bookwyrm/templates/lists/list.html:121 #, python-format msgid "Added by %(username)s" msgstr "" -#: bookwyrm/templates/lists/list.html:138 +#: bookwyrm/templates/lists/list.html:136 msgid "List position" msgstr "" -#: bookwyrm/templates/lists/list.html:144 +#: bookwyrm/templates/lists/list.html:142 #: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:21 msgid "Set" msgstr "" -#: bookwyrm/templates/lists/list.html:159 +#: bookwyrm/templates/lists/list.html:157 #: bookwyrm/templates/snippets/remove_from_group_button.html:20 msgid "Remove" msgstr "" -#: bookwyrm/templates/lists/list.html:173 -#: bookwyrm/templates/lists/list.html:190 +#: bookwyrm/templates/lists/list.html:171 +#: bookwyrm/templates/lists/list.html:188 msgid "Sort List" msgstr "" -#: bookwyrm/templates/lists/list.html:183 +#: bookwyrm/templates/lists/list.html:181 msgid "Direction" msgstr "" -#: bookwyrm/templates/lists/list.html:197 +#: bookwyrm/templates/lists/list.html:195 msgid "Add Books" msgstr "" -#: bookwyrm/templates/lists/list.html:199 +#: bookwyrm/templates/lists/list.html:197 msgid "Suggest Books" msgstr "" -#: bookwyrm/templates/lists/list.html:210 +#: bookwyrm/templates/lists/list.html:208 msgid "search" msgstr "" -#: bookwyrm/templates/lists/list.html:216 +#: bookwyrm/templates/lists/list.html:214 msgid "Clear search" msgstr "" -#: bookwyrm/templates/lists/list.html:221 +#: bookwyrm/templates/lists/list.html:219 #, python-format msgid "No books found matching the query \"%(query)s\"" msgstr "" -#: bookwyrm/templates/lists/list.html:260 +#: bookwyrm/templates/lists/list.html:258 msgid "Embed this list on a website" msgstr "" -#: bookwyrm/templates/lists/list.html:268 +#: bookwyrm/templates/lists/list.html:266 msgid "Copy embed code" msgstr "" -#: bookwyrm/templates/lists/list.html:270 +#: bookwyrm/templates/lists/list.html:268 #, python-format msgid "%(list_name)s, a list by %(owner)s on %(site_name)s" msgstr "" diff --git a/locale/es_ES/LC_MESSAGES/django.mo b/locale/es_ES/LC_MESSAGES/django.mo index faae97eddcd1061d339b2730b98f353da094633a..3a668fda91f51e8b7684aaa3c10c358dcd566165 100644 GIT binary patch delta 21188 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 S{(pLd5_+XsQANqenzG&(I delta 20956 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\n" "Language-Team: Spanish\n" "Language: es\n" @@ -17,62 +17,70 @@ msgstr "" "X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 1553\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "El dominio está bloqueado. No vuelva a intentar esta url." + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "El dominio ya está pendiente. Inténtalo más tarde." + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "Ya existe un usuario con ese correo electrónico." -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "Un día" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "Una semana" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "Un mes" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "No expira" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "{i} usos" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "Sin límite" -#: bookwyrm/forms.py:489 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "Orden de la lista" -#: bookwyrm/forms.py:490 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "Título" -#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Valoración" -#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "Ordenar por" -#: bookwyrm/forms.py:497 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "Ascendente" -#: bookwyrm/forms.py:498 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "Descendente" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "La fecha final de lectura no puede ser anterior a la fecha de inicio." @@ -140,26 +148,26 @@ msgstr "Federalizado" msgid "Blocked" msgstr "Bloqueado" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, 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:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s no es un usuario válido" -#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nombre de usuario" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "Ya existe un usuario con ese nombre." -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -167,7 +175,7 @@ msgstr "Ya existe un usuario con ese nombre." msgid "Public" msgstr "Público" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -175,14 +183,14 @@ msgstr "Público" msgid "Unlisted" msgstr "No listado" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "Seguidores" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Portugués europeo)" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" -msgstr "Sueco (Svenska)" +msgid "Svenska (Swedish)" +msgstr "Svenska (Sueco)" #: bookwyrm/settings.py:259 msgid "简体中文 (Simplified Chinese)" @@ -369,7 +377,7 @@ msgstr "Administrador" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "Enviar mensaje directo" @@ -1017,7 +1025,7 @@ msgid "Physical Properties" msgstr "Propiedades físicas" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "Formato:" @@ -1055,17 +1063,17 @@ msgstr "Ediciones de %(book_title)s" msgid "Editions of \"%(work_title)s\"" msgstr "Ediciones de \"%(work_title)s\"" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "Cualquier" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "Idioma:" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "Buscar ediciones" @@ -4108,7 +4116,7 @@ msgstr "Filtros aplicados" msgid "Clear filters" msgstr "Borrar filtros" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "Aplicar filtros" diff --git a/locale/fr_FR/LC_MESSAGES/django.po b/locale/fr_FR/LC_MESSAGES/django.po index 4300f005..c1b9551b 100644 --- a/locale/fr_FR/LC_MESSAGES/django.po +++ b/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-30 18:17+0000\n" -"PO-Revision-Date: 2022-01-30 19:38\n" +"POT-Creation-Date: 2022-02-02 20:09+0000\n" +"PO-Revision-Date: 2022-02-04 21:01\n" "Last-Translator: Mouse Reeve \n" "Language-Team: French\n" "Language: fr\n" @@ -17,62 +17,70 @@ msgstr "" "X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 1553\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "" + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "" + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "Cet email est déjà associé à un compte." -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "Un jour" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "Une semaine" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "Un mois" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "Sans expiration" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "{i} utilisations" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "Sans limite" -#: bookwyrm/forms.py:489 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "Ordre de la liste" -#: bookwyrm/forms.py:490 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "Titre du livre" -#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Note" -#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "Trier par" -#: bookwyrm/forms.py:497 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "Ordre croissant" -#: bookwyrm/forms.py:498 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "Ordre décroissant" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "La date de fin de lecture ne peut pas être antérieure à la date de début." @@ -140,26 +148,26 @@ msgstr "Fédéré" msgid "Blocked" msgstr "Bloqué" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, 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:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, 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:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nom du compte :" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "Ce nom est déjà associé à un compte." -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -167,7 +175,7 @@ msgstr "Ce nom est déjà associé à un compte." msgid "Public" msgstr "Public" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -175,14 +183,14 @@ msgstr "Public" msgid "Unlisted" msgstr "Non listé" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "Abonné(e)s" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Portugais européen)" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" -msgstr "Suédois (Svenska)" +msgid "Svenska (Swedish)" +msgstr "Svenska (Suédois)" #: bookwyrm/settings.py:259 msgid "简体中文 (Simplified Chinese)" @@ -369,7 +377,7 @@ msgstr "Admin" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "Envoyer un message direct" @@ -1017,7 +1025,7 @@ msgid "Physical Properties" msgstr "Propriétés physiques" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "Format :" @@ -1055,17 +1063,17 @@ msgstr "Éditions de %(book_title)s" msgid "Editions of \"%(work_title)s\"" msgstr "Éditions de « %(work_title)s »" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "Tou(te)s" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "Langue :" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "Rechercher des éditions" @@ -3576,11 +3584,11 @@ msgstr "Retour aux signalements" #: bookwyrm/templates/settings/reports/report.html:23 msgid "Message reporter" -msgstr "" +msgstr "Rapporteur du message" #: bookwyrm/templates/settings/reports/report.html:27 msgid "Update on your report:" -msgstr "" +msgstr "Mise à jour de votre rapport :" #: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" @@ -4108,7 +4116,7 @@ msgstr "Des filtres sont appliqués" msgid "Clear filters" msgstr "Annuler les filtres" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "Appliquer les filtres" diff --git a/locale/gl_ES/LC_MESSAGES/django.mo b/locale/gl_ES/LC_MESSAGES/django.mo index 563a5e98d3e02f475cf713db9069f7b9e76d7ee2..8a6a74da4090271c509e415f711a3be770689d79 100644 GIT binary patch delta 82 zcmZ4Yk7eCImJKiL7+E*JvyGPE)<-2CbwV+0#SZu>_`Mq5_`Mq5\n" "Language-Team: Galician\n" "Language: gl\n" @@ -17,62 +17,70 @@ msgstr "" "X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 1553\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "" + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "" + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "Xa existe unha usuaria con este email." -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "Un día" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "Unha semana" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "Un mes" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "Non caduca" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "{i} usos" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "Sen límite" -#: bookwyrm/forms.py:489 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "Orde da listaxe" -#: bookwyrm/forms.py:490 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "Título do libro" -#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Puntuación" -#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "Ordenar por" -#: bookwyrm/forms.py:497 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "Ascendente" -#: bookwyrm/forms.py:498 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "Descendente" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "A data final da lectura non pode ser anterior á de inicio." @@ -140,26 +148,26 @@ msgstr "Federado" msgid "Blocked" msgstr "Bloqueado" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s non é un remote_id válido" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s non é un nome de usuaria válido" -#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nome de usuaria" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "Xa existe unha usuaria con ese nome." -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -167,7 +175,7 @@ msgstr "Xa existe unha usuaria con ese nome." msgid "Public" msgstr "Público" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -175,14 +183,14 @@ msgstr "Público" msgid "Unlisted" msgstr "Non listado" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "Seguidoras" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Portugués europeo)" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" -msgstr "Sueco (Svenska)" +msgid "Svenska (Swedish)" +msgstr "Sueco (Swedish)" #: bookwyrm/settings.py:259 msgid "简体中文 (Simplified Chinese)" @@ -369,7 +377,7 @@ msgstr "Admin" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "Enviar mensaxe directa" @@ -1017,7 +1025,7 @@ msgid "Physical Properties" msgstr "Propiedades físicas" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "Formato:" @@ -1055,17 +1063,17 @@ msgstr "Edicións de %(book_title)s" msgid "Editions of \"%(work_title)s\"" msgstr "Edicións de %(work_title)s" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "Calquera" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "Idioma:" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "Buscar edicións" @@ -4108,7 +4116,7 @@ msgstr "Filtros aplicados" msgid "Clear filters" msgstr "Limpar filtros" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "Aplicar filtros" diff --git a/locale/it_IT/LC_MESSAGES/django.mo b/locale/it_IT/LC_MESSAGES/django.mo index a8f4c5de665cf17ee3449e7e0fedd48338a48560..c3ed2bbc0edeb45bb2cf8af67fd4d6db38e6fea7 100644 GIT binary patch delta 82 zcmaFS#`>a-b;AogM%K+Q?Sh$@7#KF&IWA*m(qrEI%xzORe_3i?adx7DMsRs*N@j7! j=H>G&mAQ;`4NMe_46O_dH@`Zl7sUoqv|Uby(Mufw-lZJ4 delta 82 zcmaFS#`>a-b;AogM!n51?Sh$@SeZB5IWA*mVqn<(%xzORe|c(3W^smsMsQhbUU7Ef j=H>G&mAMRcjSUox46KaJHorQk7sUoqv|Uby(Mufw;W`|- diff --git a/locale/it_IT/LC_MESSAGES/django.po b/locale/it_IT/LC_MESSAGES/django.po index fa00f1f4..2b47a65b 100644 --- a/locale/it_IT/LC_MESSAGES/django.po +++ b/locale/it_IT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-30 18:17+0000\n" -"PO-Revision-Date: 2022-01-30 20:36\n" +"POT-Creation-Date: 2022-02-02 20:09+0000\n" +"PO-Revision-Date: 2022-02-04 21:01\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Italian\n" "Language: it\n" @@ -17,62 +17,70 @@ msgstr "" "X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 1553\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "" + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "" + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "Esiste già un'utenza con questo indirizzo email." -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "Un giorno" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "Una settimana" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "Un mese" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "Non scade" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "{i} usi" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "Illimitato" -#: bookwyrm/forms.py:489 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "Ordina Lista" -#: bookwyrm/forms.py:490 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "Titolo del libro" -#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Valutazione" -#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "Ordina per" -#: bookwyrm/forms.py:497 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "Crescente" -#: bookwyrm/forms.py:498 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "Decrescente" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "La data di fine lettura non può essere precedente alla data di inizio." @@ -140,26 +148,26 @@ msgstr "Federato" msgid "Blocked" msgstr "Bloccato" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s non è un Id remoto valido" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s non è un nome utente valido" -#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nome utente" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "Un utente con questo nome utente esiste già." -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -167,7 +175,7 @@ msgstr "Un utente con questo nome utente esiste già." msgid "Public" msgstr "Pubblico" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -175,14 +183,14 @@ msgstr "Pubblico" msgid "Unlisted" msgstr "Non in lista" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "Followers" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Portoghese europeo)" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" -msgstr "Swedish (Svedese)" +msgid "Svenska (Swedish)" +msgstr "Svenska (Svedese)" #: bookwyrm/settings.py:259 msgid "简体中文 (Simplified Chinese)" @@ -369,7 +377,7 @@ msgstr "Admin" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "Invia messaggio diretto" @@ -1017,7 +1025,7 @@ msgid "Physical Properties" msgstr "Caratteristiche" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "Formato:" @@ -1055,17 +1063,17 @@ msgstr "Edizioni di %(book_title)s" msgid "Editions of \"%(work_title)s\"" msgstr "Edizioni di \"%(work_title)s\"" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "Qualsiasi" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "Lingua:" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "Ricerca edizioni" @@ -4108,7 +4116,7 @@ msgstr "Filtri applicati" msgid "Clear filters" msgstr "Rimuovi filtri" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "Applica filtri" diff --git a/locale/lt_LT/LC_MESSAGES/django.mo b/locale/lt_LT/LC_MESSAGES/django.mo index 7c4e54132e96414871daace696db775dd917cbca..d9043ac25c59ddef4aa5af7a9d4f26cf1566258c 100644 GIT binary patch delta 24613 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 n&NUre4N56Hq3~*FS3$wHznX delta 21095 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 diff --git a/locale/lt_LT/LC_MESSAGES/django.po b/locale/lt_LT/LC_MESSAGES/django.po index b9e24e72..9c343f3a 100644 --- a/locale/lt_LT/LC_MESSAGES/django.po +++ b/locale/lt_LT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-30 18:17+0000\n" -"PO-Revision-Date: 2022-01-31 15:31\n" +"POT-Creation-Date: 2022-02-02 20:09+0000\n" +"PO-Revision-Date: 2022-02-04 21:00\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Lithuanian\n" "Language: lt\n" @@ -17,62 +17,70 @@ msgstr "" "X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 1553\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "" + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "" + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "Vartotojas su šiuo el. pašto adresu jau yra." -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "Diena" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "Savaitė" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "Mėnuo" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "Galiojimas nesibaigia" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "{i} naudoja" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "Neribota" -#: bookwyrm/forms.py:489 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "Kaip pridėta į sąrašą" -#: bookwyrm/forms.py:490 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "Knygos antraštė" -#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Įvertinimas" -#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "Rūšiuoti pagal" -#: bookwyrm/forms.py:497 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "Didėjančia tvarka" -#: bookwyrm/forms.py:498 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "Mažėjančia tvarka" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "Skaitymo pabaigos data negali būti prieš skaitymo pradžios datą." @@ -140,26 +148,26 @@ msgstr "Susijungę" msgid "Blocked" msgstr "Užblokuoti" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s yra negaliojantis remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s yra negaliojantis naudotojo vardas" -#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "naudotojo vardas" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "Toks naudotojo vardas jau egzistuoja." -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -167,7 +175,7 @@ msgstr "Toks naudotojo vardas jau egzistuoja." msgid "Public" msgstr "Viešas" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -175,14 +183,14 @@ msgstr "Viešas" msgid "Unlisted" msgstr "Slaptas" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "Sekėjai" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Europos portugalų)" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" -msgstr "Švedų (Swedish)" +msgid "Svenska (Swedish)" +msgstr "Svenska (Švedų)" #: bookwyrm/settings.py:259 msgid "简体中文 (Simplified Chinese)" @@ -347,7 +355,7 @@ msgstr "%(title)s labiausiai kontroversi #: bookwyrm/templates/about/about.html:89 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." -msgstr "" +msgstr "Sekite savo skaitymus, kalbėkite apie knygas, rašykite atsiliepimus ir atraskite, ką dar perskaityti. „BookWyrm“ – tai programinė įranga, kurioje nėra reklamų, biurokratijos. Tai bendruomenei orientuota, nedidelė ir asmeninė įranga, kurią lengva plėsti. Jei norite papildomų funkcijų, įgyvendinti savo svajones ar tiesiog pranešti apie klaidą, susisiekite ir jus išgirsime." #: bookwyrm/templates/about/about.html:96 msgid "Meet your admins" @@ -356,7 +364,7 @@ msgstr "Šio serverio administratoriai" #: bookwyrm/templates/about/about.html:99 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." -msgstr "" +msgstr "Svetainės %(site_name)s moderatoriai ir administratoriai nuolat atnaujina puslapį, laikosi elgsenos susitarimo ir atsako, kai naudotojai praneša apie brukalą ir blogą elgesį." #: bookwyrm/templates/about/about.html:113 msgid "Moderator" @@ -369,7 +377,7 @@ msgstr "Administravimas" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "Siųsti asmeninę žinutę" @@ -1027,7 +1035,7 @@ msgid "Physical Properties" msgstr "Fizinės savybės" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "Formatas:" @@ -1065,17 +1073,17 @@ msgstr "Knygos %(book_title)s leidimai" msgid "Editions of \"%(work_title)s\"" msgstr "\"%(work_title)s\" leidimai" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "Bet kas" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "Kalba:" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "Paieškos leidimai" @@ -2919,7 +2927,7 @@ msgstr "Trinate tai, kas perskaityta ir %(count)s susietų progreso naujinių." #: bookwyrm/templates/readthrough/readthrough_modal.html:8 #, python-format msgid "Update read dates for \"%(title)s\"" -msgstr "" +msgstr "Atnaujinkite knygos „%(title)s“ skaitymo datas" #: bookwyrm/templates/readthrough/readthrough_form.html:10 #: bookwyrm/templates/readthrough/readthrough_modal.html:31 @@ -2970,7 +2978,7 @@ msgstr "Ištrinti šias skaitymo datas" #: bookwyrm/templates/readthrough/readthrough_modal.html:12 #, python-format msgid "Add read dates for \"%(title)s\"" -msgstr "" +msgstr "Pridėkite knygos „%(title)s“ skaitymo datas" #: bookwyrm/templates/report.html:5 #: bookwyrm/templates/snippets/report_button.html:13 @@ -3154,10 +3162,10 @@ msgstr[3] "%(display_count)s atvirų ataskaitų" #, python-format msgid "%(display_count)s domain needs review" msgid_plural "%(display_count)s domains need review" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "%(display_count)s domeną reikia peržiūrėti" +msgstr[1] "%(display_count)s domenus reikia peržiūrėti" +msgstr[2] "%(display_count)s domenus reikia peržiūrėti" +msgstr[3] "%(display_count)s domenus reikia peržiūrėti" #: bookwyrm/templates/settings/dashboard/dashboard.html:65 #, python-format @@ -3569,11 +3577,11 @@ msgstr "Puslapio nustatymai" #: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:5 #, python-format msgid "Set display name for %(url)s" -msgstr "" +msgstr "Nurodykite pavadinimą puslapiui %(url)s" #: bookwyrm/templates/settings/link_domains/link_domains.html:11 msgid "Link domains must be approved before they are shown on book pages. Please make sure that the domains are not hosting spam, malicious code, or deceptive links before approving." -msgstr "" +msgstr "Prieš parodant susietus domenus knygų puslapiuose, juos reikia patvirtinti. Užtikrinkite, kad domenai nenukreipia į brukalo ar kenkėjiškas svetaines ir tai nėra apgaulingos nuorodos." #: bookwyrm/templates/settings/link_domains/link_domains.html:45 msgid "Set display name" @@ -3597,7 +3605,7 @@ msgstr "Šiuo metu užblokuotų domenų nėra" #: bookwyrm/templates/settings/link_domains/link_table.html:39 msgid "No links available for this domain." -msgstr "" +msgstr "Šiam domenui nuorodų nėra." #: bookwyrm/templates/settings/reports/report.html:11 msgid "Back to reports" @@ -3605,11 +3613,11 @@ msgstr "Atgal į pranešimus" #: bookwyrm/templates/settings/reports/report.html:23 msgid "Message reporter" -msgstr "" +msgstr "Žinučių pranešėjas" #: bookwyrm/templates/settings/reports/report.html:27 msgid "Update on your report:" -msgstr "" +msgstr "Naujausia informacija apie jūsų pranešimą:" #: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" @@ -3635,17 +3643,17 @@ msgstr "Komentuoti" #: bookwyrm/templates/settings/reports/report_header.html:6 #, python-format msgid "Report #%(report_id)s: Status posted by @%(username)s" -msgstr "" +msgstr "Pranešimas #%(report_id)s: publikavo @%(username)s" #: bookwyrm/templates/settings/reports/report_header.html:12 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" -msgstr "" +msgstr "Pranešimas #%(report_id)s: nuorodą pridėjo @%(username)s" #: bookwyrm/templates/settings/reports/report_header.html:18 #, python-format msgid "Report #%(report_id)s: User @%(username)s" -msgstr "" +msgstr "Pranešimas #%(report_id)s: naudotojas @%(username)s" #: bookwyrm/templates/settings/reports/report_links_table.html:17 msgid "Block domain" @@ -3658,7 +3666,7 @@ msgstr "Užrašų nepateikta" #: bookwyrm/templates/settings/reports/report_preview.html:24 #, python-format msgid "Reported by @%(username)s" -msgstr "" +msgstr "Pranešė @%(username)s" #: bookwyrm/templates/settings/reports/report_preview.html:34 msgid "Re-open" @@ -4141,7 +4149,7 @@ msgstr "Taikyti filtrai" msgid "Clear filters" msgstr "Valyti filtrus" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "Taikyti filtrus" @@ -4218,15 +4226,15 @@ msgstr[3] "įvertinta %(title)s: %(display_rat #, python-format msgid "Review of \"%(book_title)s\" (%(display_rating)s star): %(review_title)s" msgid_plural "Review of \"%(book_title)s\" (%(display_rating)s stars): %(review_title)s" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Knygos „%(book_title)s“ apžvalga (%(display_rating)s žvaigždutė): %(review_title)s" +msgstr[1] "Knygos „%(book_title)s“ apžvalga (%(display_rating)s žvaigždutės): %(review_title)s" +msgstr[2] "Knygos „%(book_title)s“ apžvalga (%(display_rating)s žvaigždučių): %(review_title)s" +msgstr[3] "Knygos „%(book_title)s“ apžvalga (%(display_rating)s žvaigždutės): %(review_title)s" #: bookwyrm/templates/snippets/generated_status/review_pure_name.html:12 #, python-format msgid "Review of \"%(book_title)s\": %(review_title)s" -msgstr "" +msgstr "Knygos „%(book_title)s“ apžvalga: %(review_title)s" #: bookwyrm/templates/snippets/goal_form.html:4 #, python-format @@ -4335,12 +4343,12 @@ msgstr "Registruotis" #: bookwyrm/templates/snippets/report_modal.html:8 #, python-format msgid "Report @%(username)s's status" -msgstr "" +msgstr "Pranešti apie @%(username)s būseną" #: bookwyrm/templates/snippets/report_modal.html:10 #, python-format msgid "Report %(domain)s link" -msgstr "" +msgstr "Pranešti apie %(domain)s nuorodą" #: bookwyrm/templates/snippets/report_modal.html:12 #, python-format @@ -4354,7 +4362,7 @@ msgstr "Šis pranešimas bus nusiųstas peržiūrėti %(site_name)s puslapio mod #: bookwyrm/templates/snippets/report_modal.html:36 msgid "Links from this domain will be removed until your report has been reviewed." -msgstr "" +msgstr "Kol neperžiūrėsime jūsų pranešimo, nuoroda iš šio domeno bus pašalinta." #: bookwyrm/templates/snippets/report_modal.html:41 msgid "More info about this report:" @@ -4443,7 +4451,7 @@ msgstr "atsakė į %(username)s %(book)s by %(author_name)s" -msgstr "" +msgstr "pacitavo %(author_name)s knygą %(book)s" #: bookwyrm/templates/snippets/status/headers/quotation.html:15 #, python-format @@ -4458,7 +4466,7 @@ msgstr "įvertino %(book)s:" #: bookwyrm/templates/snippets/status/headers/read.html:10 #, python-format msgid "finished reading %(book)s by %(author_name)s" -msgstr "pabaigė skaityti %(author_name)s autoriaus knygą %(book)s" +msgstr "pabaigė skaityti %(author_name)s knygą %(book)s" #: bookwyrm/templates/snippets/status/headers/read.html:17 #, python-format @@ -4468,7 +4476,7 @@ msgstr "baigė skaityti %(book)s" #: bookwyrm/templates/snippets/status/headers/reading.html:10 #, python-format msgid "started reading %(book)s by %(author_name)s" -msgstr "pradėjo skaityti %(author_name)s autoriaus knygą %(book)s" +msgstr "pradėjo skaityti %(author_name)s knygą %(book)s" #: bookwyrm/templates/snippets/status/headers/reading.html:17 #, python-format @@ -4488,12 +4496,12 @@ msgstr "apžvelgė %(book)s" #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" -msgstr "" +msgstr "nori perskaityti %(author_name)s knygą %(book)s" #: bookwyrm/templates/snippets/status/headers/to_read.html:17 #, python-format msgid "wants to read %(book)s" -msgstr "" +msgstr "nori perskaityti %(book)s" #: bookwyrm/templates/snippets/status/layout.html:24 #: bookwyrm/templates/snippets/status/status_options.html:17 diff --git a/locale/no_NO/LC_MESSAGES/django.mo b/locale/no_NO/LC_MESSAGES/django.mo index 3d3d4263ff97c37febc6023a770f772e58b6aace..a272adbcbec341767c6ba1eb91125080095dd378 100644 GIT binary patch delta 84 zcmZ4WiDlI%mJKiL7+E*JvyGPE)<*!=3Cc`zqP9;|S=mMEhN05E7BSpWb4 delta 84 zcmZ4WiDlI%mJKiL81**4v\n" "Language-Team: Norwegian\n" "Language: no\n" @@ -17,62 +17,70 @@ msgstr "" "X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 1553\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "" + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "" + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "Den e-postadressen er allerede registrert." -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "Én dag" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "Én uke" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "Én måned" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "Uendelig" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "{i} ganger" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "Ubegrenset" -#: bookwyrm/forms.py:489 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "Liste rekkefølge" -#: bookwyrm/forms.py:490 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "Boktittel" -#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Vurdering" -#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "Sorter etter" -#: bookwyrm/forms.py:497 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "Stigende" -#: bookwyrm/forms.py:498 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "Synkende" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "Sluttdato kan ikke være før startdato." @@ -140,26 +148,26 @@ msgstr "Føderert" msgid "Blocked" msgstr "Blokkert" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s er en ugyldig remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s er et ugyldig brukernavn" -#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "brukernavn" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "En bruker med det brukernavnet eksisterer allerede." -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -167,7 +175,7 @@ msgstr "En bruker med det brukernavnet eksisterer allerede." msgid "Public" msgstr "Offentlig" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -175,14 +183,14 @@ msgstr "Offentlig" msgid "Unlisted" msgstr "Uoppført" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "Følgere" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Europeisk Portugisisk)" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" -msgstr "Svensk (Svenska)" +msgid "Svenska (Swedish)" +msgstr "Svenska (Svensk)" #: bookwyrm/settings.py:259 msgid "简体中文 (Simplified Chinese)" @@ -369,7 +377,7 @@ msgstr "Admin" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "Send direktemelding" @@ -1017,7 +1025,7 @@ msgid "Physical Properties" msgstr "Fysiske egenskaper" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "Format:" @@ -1055,17 +1063,17 @@ msgstr "Utgaver av %(book_title)s" msgid "Editions of \"%(work_title)s\"" msgstr "Utgaver av \"%(work_title)s\"" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "Alle" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "Språk:" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "Søk etter utgaver" @@ -4108,7 +4116,7 @@ msgstr "Filtrert visning" msgid "Clear filters" msgstr "Tøm filtre" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "Bruk filtre" diff --git a/locale/pt_BR/LC_MESSAGES/django.mo b/locale/pt_BR/LC_MESSAGES/django.mo index 2522c804acd3e1e728d920205c9a130983b537db..2a69662f733ae032362577fccc4a60dc62de2325 100644 GIT binary patch delta 21625 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 delta 21380 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 diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po index 4845ae1b..f1e78bae 100644 --- a/locale/pt_BR/LC_MESSAGES/django.po +++ b/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-30 18:17+0000\n" -"PO-Revision-Date: 2022-01-30 19:38\n" +"POT-Creation-Date: 2022-02-02 20:09+0000\n" +"PO-Revision-Date: 2022-02-04 22:13\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt\n" @@ -17,62 +17,70 @@ msgstr "" "X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 1553\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "Domínio bloqueado. Não tente adicionar este endereço novamente." + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "Domínio já pendente. Por favor, tente novamente mais tarde." + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "Já existe um usuário com este endereço de e-mail." -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "Um dia" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "Uma semana" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "Um mês" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "Não expira" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "{i} usos" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "Ilimitado" -#: bookwyrm/forms.py:489 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "Ordem de inserção" -#: bookwyrm/forms.py:490 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "Título do livro" -#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Avaliação" -#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "Organizar por" -#: bookwyrm/forms.py:497 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "Crescente" -#: bookwyrm/forms.py:498 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "Decrescente" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "A data de término da leitura não pode ser anterior a de início." @@ -140,26 +148,26 @@ msgstr "Federado" msgid "Blocked" msgstr "Bloqueado" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s não é um remote_id válido" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s não é um nome de usuário válido" -#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nome de usuário" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "Já existe um usuário com este nome." -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -167,7 +175,7 @@ msgstr "Já existe um usuário com este nome." msgid "Public" msgstr "Público" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -175,14 +183,14 @@ msgstr "Público" msgid "Unlisted" msgstr "Não listado" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "Seguidores" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Português Europeu)" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" -msgstr "Sueco (Svenska)" +msgid "Svenska (Swedish)" +msgstr "Svenska (Sueco)" #: bookwyrm/settings.py:259 msgid "简体中文 (Simplified Chinese)" @@ -369,7 +377,7 @@ msgstr "Admin" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "Enviar mensagem direta" @@ -1017,7 +1025,7 @@ msgid "Physical Properties" msgstr "Propriedades físicas" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "Formato:" @@ -1055,17 +1063,17 @@ msgstr "Edições de %(book_title)s" msgid "Editions of \"%(work_title)s\"" msgstr "Edições de \"%(work_title)s\"" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "Qualquer um" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "Idioma:" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "Procurar edições" @@ -4108,7 +4116,7 @@ msgstr "Filtros aplicados" msgid "Clear filters" msgstr "Limpar filtros" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "Aplicar filtros" diff --git a/locale/pt_PT/LC_MESSAGES/django.mo b/locale/pt_PT/LC_MESSAGES/django.mo index 1ffe4140dddda96744e2702b0735223738c058fe..9dec68d2cb719db245ec8a10d19856bdd58eac14 100644 GIT binary patch delta 25 hcmX@HljX!tmJQ}>xQuiSOcaa^tqcq{JFaOj004fH2_FCe delta 25 hcmX@HljX!tmJQ}>xD0iT4HOJ5t&A-;JFaOj004gd2`>Nu diff --git a/locale/pt_PT/LC_MESSAGES/django.po b/locale/pt_PT/LC_MESSAGES/django.po index b241c4d5..4c229390 100644 --- a/locale/pt_PT/LC_MESSAGES/django.po +++ b/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-30 18:17+0000\n" -"PO-Revision-Date: 2022-01-30 19:38\n" +"POT-Creation-Date: 2022-02-02 20:09+0000\n" +"PO-Revision-Date: 2022-02-04 21:00\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese\n" "Language: pt\n" @@ -17,62 +17,70 @@ msgstr "" "X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 1553\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "" + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "" + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "Já existe um utilizador com este E-Mail." -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "Um Dia" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "Uma Semana" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "Um Mês" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "Não Expira" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "{i} utilizações" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "Ilimitado" -#: bookwyrm/forms.py:489 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "Ordem da Lista" -#: bookwyrm/forms.py:490 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "Título do livro" -#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Classificação" -#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "Ordenar Por" -#: bookwyrm/forms.py:497 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "Ascendente" -#: bookwyrm/forms.py:498 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "Descendente" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "" @@ -140,26 +148,26 @@ msgstr "Federado" msgid "Blocked" msgstr "Bloqueado" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s não é um remote_id válido" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s não é um nome de utilizador válido" -#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nome de utilizador" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "Um utilizador com o mesmo nome de utilizador já existe." -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -167,7 +175,7 @@ msgstr "Um utilizador com o mesmo nome de utilizador já existe." msgid "Public" msgstr "Público" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -175,14 +183,14 @@ msgstr "Público" msgid "Unlisted" msgstr "Não listado" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "Seguidores" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -283,7 +291,7 @@ msgid "Português Europeu (European Portuguese)" msgstr "Português (Português Europeu)" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" +msgid "Svenska (Swedish)" msgstr "" #: bookwyrm/settings.py:259 @@ -369,7 +377,7 @@ msgstr "Admin" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "Enviar mensagem direta" @@ -1017,7 +1025,7 @@ msgid "Physical Properties" msgstr "Propriedades físicas" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "Formato:" @@ -1055,17 +1063,17 @@ msgstr "Edições de %(book_title)s" msgid "Editions of \"%(work_title)s\"" msgstr "Edições de \"%(work_title)s\"" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "Qualquer" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "Idioma:" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "Pesquisar edições" @@ -4106,7 +4114,7 @@ msgstr "Filtros aplicados" msgid "Clear filters" msgstr "Limpar filtros" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "Aplicar filtros" diff --git a/locale/sv_SE/LC_MESSAGES/django.mo b/locale/sv_SE/LC_MESSAGES/django.mo index 87a0038a5e7551fdf759fb77a75a0c546b31a921..8f66047d352cc3144eb4fabe960498806a59e1c0 100644 GIT binary patch delta 22045 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\n" "Language-Team: Swedish\n" "Language: sv\n" @@ -17,62 +17,70 @@ msgstr "" "X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 1553\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "" + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "" + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "En användare med den här e-postadressen existerar redan." -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "En dag" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "En vecka" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "En månad" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "Slutar inte gälla" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "{i} använder" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "Obegränsad" -#: bookwyrm/forms.py:489 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "Listordning" -#: bookwyrm/forms.py:490 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "Bokens titel" -#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Betyg" -#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "Sortera efter" -#: bookwyrm/forms.py:497 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "Stigande" -#: bookwyrm/forms.py:498 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "Fallande" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "Slutdatum för läsning kan inte vara före startdatum." @@ -140,26 +148,26 @@ msgstr "Federerad" msgid "Blocked" msgstr "Blockerad" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s är inte ett giltigt remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s är inte ett giltigt användarnamn" -#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "användarnamn" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "En användare med det användarnamnet existerar redan." -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -167,7 +175,7 @@ msgstr "En användare med det användarnamnet existerar redan." msgid "Public" msgstr "Publik" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -175,14 +183,14 @@ msgstr "Publik" msgid "Unlisted" msgstr "Ej listad" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "Följare" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Europeisk Portugisiska)" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" -msgstr "" +msgid "Svenska (Swedish)" +msgstr "Svenska (Svenska)" #: bookwyrm/settings.py:259 msgid "简体中文 (Simplified Chinese)" @@ -369,7 +377,7 @@ msgstr "Administratör" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "Skicka direktmeddelande" @@ -1017,7 +1025,7 @@ msgid "Physical Properties" msgstr "Fysiska egenskaper" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "Format:" @@ -1055,17 +1063,17 @@ msgstr "Utgåvor av %(book_title)s" msgid "Editions of \"%(work_title)s\"" msgstr "Utgåvor av \"%(work_title)s\"" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "Alla" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "Språk:" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "Sök efter utgåvor" @@ -2020,7 +2028,7 @@ msgstr "Försök igen" #: bookwyrm/templates/import/import_status.html:223 msgid "This import is in an old format that is no longer supported. If you would like to troubleshoot missing items from this import, click the button below to update the import format." -msgstr "" +msgstr "Den här importen är i ett gammalt format som inte längre stöds. Om du vill felsöka saknade objekt från denna import, klicka på knappen nedan för att uppdatera importformat." #: bookwyrm/templates/import/import_status.html:225 msgid "Update import" @@ -2250,12 +2258,12 @@ msgstr "BookWyrm's källkod är fritt tillgängligt. Du kan bidra eller rapporte #: bookwyrm/templates/lists/add_item_modal.html:8 #, python-format msgid "Add \"%(title)s\" to this list" -msgstr "" +msgstr "Lägg till \"%(title)s\" i den här listan" #: bookwyrm/templates/lists/add_item_modal.html:12 #, python-format msgid "Suggest \"%(title)s\" for this list" -msgstr "" +msgstr "Föreslå \"%(title)s\" för den här listan" #: bookwyrm/templates/lists/add_item_modal.html:39 #: bookwyrm/templates/lists/list.html:249 @@ -2297,7 +2305,7 @@ msgstr "Nu är du klar!" #: bookwyrm/templates/lists/list.html:83 #, python-format msgid "%(username)s says:" -msgstr "" +msgstr "%(username)s säger:" #: bookwyrm/templates/lists/curate.html:55 msgid "Suggested by" @@ -2395,7 +2403,7 @@ msgstr "Anteckningar:" #: bookwyrm/templates/lists/item_notes_field.html:19 msgid "An optional note that will be displayed with the book." -msgstr "" +msgstr "En valfri anteckning som kommer att visas med boken." #: bookwyrm/templates/lists/list.html:36 msgid "You successfully suggested a book for this list!" @@ -2407,11 +2415,11 @@ msgstr "Du lade framgångsrikt till en bok i här listan!" #: bookwyrm/templates/lists/list.html:96 msgid "Edit notes" -msgstr "" +msgstr "Redigera anteckningar" #: bookwyrm/templates/lists/list.html:111 msgid "Add notes" -msgstr "" +msgstr "Lägg till anteckningar" #: bookwyrm/templates/lists/list.html:123 #, python-format @@ -3576,11 +3584,11 @@ msgstr "Tillbaka till rapporter" #: bookwyrm/templates/settings/reports/report.html:23 msgid "Message reporter" -msgstr "" +msgstr "Meddela rapportören" #: bookwyrm/templates/settings/reports/report.html:27 msgid "Update on your report:" -msgstr "" +msgstr "Uppdatering av din rapport:" #: bookwyrm/templates/settings/reports/report.html:35 msgid "Reported statuses" @@ -4108,7 +4116,7 @@ msgstr "Filtren är verkställda" msgid "Clear filters" msgstr "Rensa filtren" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "Verkställ filtren" diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index 6b51efb8..78ed7c74 100644 --- a/locale/zh_Hans/LC_MESSAGES/django.po +++ b/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-30 18:17+0000\n" -"PO-Revision-Date: 2022-01-30 19:38\n" +"POT-Creation-Date: 2022-02-02 20:09+0000\n" +"PO-Revision-Date: 2022-02-04 21:01\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Simplified\n" "Language: zh\n" @@ -17,62 +17,70 @@ msgstr "" "X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 1553\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "" + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "" + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "已经存在使用该邮箱的用户。" -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "一天" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "一周" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "一个月" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "永不失效" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "{i} 次使用" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "不受限" -#: bookwyrm/forms.py:489 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "列表顺序" -#: bookwyrm/forms.py:490 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "书名" -#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "评价" -#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "排序方式" -#: bookwyrm/forms.py:497 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "升序" -#: bookwyrm/forms.py:498 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "降序" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "" @@ -140,26 +148,26 @@ msgstr "跨站" msgid "Blocked" msgstr "已屏蔽" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s 不是有效的 remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s 不是有效的用户名" -#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "用户名" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "已经存在使用该用户名的用户。" -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -167,7 +175,7 @@ msgstr "已经存在使用该用户名的用户。" msgid "Public" msgstr "公开" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -175,14 +183,14 @@ msgstr "公开" msgid "Unlisted" msgstr "不公开" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "关注者" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -283,7 +291,7 @@ msgid "Português Europeu (European Portuguese)" msgstr "" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" +msgid "Svenska (Swedish)" msgstr "" #: bookwyrm/settings.py:259 @@ -369,7 +377,7 @@ msgstr "管理员" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "发送私信" @@ -1012,7 +1020,7 @@ msgid "Physical Properties" msgstr "实体性质" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "格式:" @@ -1050,17 +1058,17 @@ msgstr "%(book_title)s 的各版本" msgid "Editions of \"%(work_title)s\"" msgstr "《%(work_title)s》 的各版本" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "所有" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "语言:" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "搜索版本" @@ -4089,7 +4097,7 @@ msgstr "" msgid "Clear filters" msgstr "清除过滤器" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "应用过滤器" diff --git a/locale/zh_Hant/LC_MESSAGES/django.po b/locale/zh_Hant/LC_MESSAGES/django.po index daebda62..061a0802 100644 --- a/locale/zh_Hant/LC_MESSAGES/django.po +++ b/locale/zh_Hant/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-30 18:17+0000\n" -"PO-Revision-Date: 2022-01-30 19:38\n" +"POT-Creation-Date: 2022-02-02 20:09+0000\n" +"PO-Revision-Date: 2022-02-04 21:01\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Traditional\n" "Language: zh\n" @@ -17,62 +17,70 @@ msgstr "" "X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 1553\n" -#: bookwyrm/forms.py:365 +#: bookwyrm/forms.py:239 +msgid "Domain is blocked. Don't try this url again." +msgstr "" + +#: bookwyrm/forms.py:241 +msgid "Domain already pending. Please try later." +msgstr "" + +#: bookwyrm/forms.py:378 msgid "A user with this email already exists." msgstr "已經存在使用該郵箱的使用者。" -#: bookwyrm/forms.py:379 +#: bookwyrm/forms.py:392 msgid "One Day" msgstr "一天" -#: bookwyrm/forms.py:380 +#: bookwyrm/forms.py:393 msgid "One Week" msgstr "一週" -#: bookwyrm/forms.py:381 +#: bookwyrm/forms.py:394 msgid "One Month" msgstr "一個月" -#: bookwyrm/forms.py:382 +#: bookwyrm/forms.py:395 msgid "Does Not Expire" msgstr "永不失效" -#: bookwyrm/forms.py:386 +#: bookwyrm/forms.py:399 #, python-brace-format msgid "{i} uses" msgstr "" -#: bookwyrm/forms.py:387 +#: bookwyrm/forms.py:400 msgid "Unlimited" msgstr "不受限" -#: bookwyrm/forms.py:489 +#: bookwyrm/forms.py:502 msgid "List Order" msgstr "列表順序" -#: bookwyrm/forms.py:490 +#: bookwyrm/forms.py:503 msgid "Book Title" msgstr "書名" -#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "評價" -#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177 +#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177 msgid "Sort By" msgstr "排序方式" -#: bookwyrm/forms.py:497 +#: bookwyrm/forms.py:510 msgid "Ascending" msgstr "升序" -#: bookwyrm/forms.py:498 +#: bookwyrm/forms.py:511 msgid "Descending" msgstr "降序" -#: bookwyrm/forms.py:511 +#: bookwyrm/forms.py:524 msgid "Reading finish date cannot be before start date." msgstr "" @@ -140,26 +148,26 @@ msgstr "跨站" msgid "Blocked" msgstr "已封鎖" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:27 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s 不是有效的 remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s 不是有效的使用者名稱" -#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170 +#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "使用者名稱" -#: bookwyrm/models/fields.py:188 +#: bookwyrm/models/fields.py:186 msgid "A user with that username already exists." msgstr "已經存在使用該名稱的使用者。" -#: bookwyrm/models/fields.py:207 +#: bookwyrm/models/fields.py:205 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -167,7 +175,7 @@ msgstr "已經存在使用該名稱的使用者。" msgid "Public" msgstr "公開" -#: bookwyrm/models/fields.py:208 +#: bookwyrm/models/fields.py:206 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -175,14 +183,14 @@ msgstr "公開" msgid "Unlisted" msgstr "不公開" -#: bookwyrm/models/fields.py:209 +#: bookwyrm/models/fields.py:207 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/layout.html:11 msgid "Followers" msgstr "關注者" -#: bookwyrm/models/fields.py:210 +#: bookwyrm/models/fields.py:208 #: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -283,7 +291,7 @@ msgid "Português Europeu (European Portuguese)" msgstr "" #: bookwyrm/settings.py:258 -msgid "Swedish (Svenska)" +msgid "Svenska (Swedish)" msgstr "" #: bookwyrm/settings.py:259 @@ -369,7 +377,7 @@ msgstr "管理員" #: bookwyrm/templates/about/about.html:131 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/snippets/user_options.html:14 msgid "Send direct message" msgstr "發送私信" @@ -1012,7 +1020,7 @@ msgid "Physical Properties" msgstr "實體性質" #: bookwyrm/templates/book/edit/edit_book_form.html:199 -#: bookwyrm/templates/book/editions/format_filter.html:5 +#: bookwyrm/templates/book/editions/format_filter.html:6 msgid "Format:" msgstr "格式:" @@ -1050,17 +1058,17 @@ msgstr "%(book_title)s 的各版本" msgid "Editions of \"%(work_title)s\"" msgstr "\"%(work_title)s\" 的各版本" -#: bookwyrm/templates/book/editions/format_filter.html:8 -#: bookwyrm/templates/book/editions/language_filter.html:8 +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 msgid "Any" msgstr "所有" -#: bookwyrm/templates/book/editions/language_filter.html:5 +#: bookwyrm/templates/book/editions/language_filter.html:6 #: bookwyrm/templates/preferences/edit_user.html:95 msgid "Language:" msgstr "語言:" -#: bookwyrm/templates/book/editions/search_filter.html:5 +#: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" msgstr "" @@ -4089,7 +4097,7 @@ msgstr "" msgid "Clear filters" msgstr "清除過濾器" -#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42 +#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43 msgid "Apply filters" msgstr "使用過濾器" From 7811a9920e27ac2be5d3d8e6e9676603f875ffaf Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 18:34:17 -0800 Subject: [PATCH 41/88] Copy config from prod branch to main --- .env.example | 16 ++++++++++++++ bookwyrm/apps.py | 5 +++++ bookwyrm/management/commands/erase_streams.py | 1 + bookwyrm/settings.py | 4 ++++ bookwyrm/telemetry/open_telemetry.py | 22 +++++++++++++++++++ celerywyrm/apps.py | 13 +++++++++++ certbot.sh | 19 ---------------- docker-compose.yml | 10 ++++----- requirements.txt | 5 +++++ 9 files changed, 70 insertions(+), 25 deletions(-) create mode 100644 bookwyrm/telemetry/open_telemetry.py create mode 100644 celerywyrm/apps.py delete mode 100644 certbot.sh diff --git a/.env.example b/.env.example index ca6f65bb..7769a67b 100644 --- a/.env.example +++ b/.env.example @@ -89,3 +89,19 @@ PREVIEW_TEXT_COLOR=#363636 PREVIEW_IMG_WIDTH=1200 PREVIEW_IMG_HEIGHT=630 PREVIEW_DEFAULT_COVER_COLOR=#002549 + +# Below are example keys if you want to enable automatically +# sending telemetry to an OTLP-compatible service. Many of +# the main monitoring apps have OLTP collectors, including +# NewRelic, DataDog, and Honeycomb.io - consult their +# documentation for setup instructions, and what exactly to +# put below! +# +# Service name is an arbitrary tag that is attached to any +# data sent, used to distinguish different sources. Useful +# for sending prod and dev metrics to the same place and +# keeping them separate, for instance! + +OTEL_EXPORTER_OTLP_ENDPOINT= # API endpoint for your provider +OTEL_EXPORTER_OTLP_HEADERS= # Any headers required, usually authentication info +OTEL_SERVICE_NAME= # Service name to identify your app diff --git a/bookwyrm/apps.py b/bookwyrm/apps.py index 8940edcc..af3b064e 100644 --- a/bookwyrm/apps.py +++ b/bookwyrm/apps.py @@ -33,6 +33,11 @@ class BookwyrmConfig(AppConfig): verbose_name = "BookWyrm" def ready(self): + if settings.OTEL_EXPORTER_OTLP_ENDPOINT: + from bookwyrm.telemetry import open_telemetry + + open_telemetry.instrumentDjango() + if settings.ENABLE_PREVIEW_IMAGES and settings.FONTS: # Download any fonts that we don't have yet logger.debug("Downloading fonts..") diff --git a/bookwyrm/management/commands/erase_streams.py b/bookwyrm/management/commands/erase_streams.py index 7b807402..9d971d69 100644 --- a/bookwyrm/management/commands/erase_streams.py +++ b/bookwyrm/management/commands/erase_streams.py @@ -7,6 +7,7 @@ from bookwyrm import settings r = redis.Redis( host=settings.REDIS_ACTIVITY_HOST, port=settings.REDIS_ACTIVITY_PORT, + password=settings.REDIS_ACTIVITY_PASSWORD, db=settings.REDIS_ACTIVITY_DB_INDEX, ) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index e8cbe344..e9f3d058 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -333,3 +333,7 @@ else: MEDIA_URL = "/images/" MEDIA_FULL_URL = f"{PROTOCOL}://{DOMAIN}{MEDIA_URL}" STATIC_FULL_URL = f"{PROTOCOL}://{DOMAIN}{STATIC_URL}" + +OTEL_EXPORTER_OTLP_ENDPOINT = env("OTEL_EXPORTER_OTLP_ENDPOINT", None) +OTEL_EXPORTER_OTLP_HEADERS = env("OTEL_EXPORTER_OTLP_HEADERS", None) +OTEL_SERVICE_NAME = env("OTEL_SERVICE_NAME", None) diff --git a/bookwyrm/telemetry/open_telemetry.py b/bookwyrm/telemetry/open_telemetry.py new file mode 100644 index 00000000..0b38a04b --- /dev/null +++ b/bookwyrm/telemetry/open_telemetry.py @@ -0,0 +1,22 @@ +from opentelemetry import trace +from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter +from opentelemetry.sdk.trace import TracerProvider +from opentelemetry.sdk.trace.export import BatchSpanProcessor + +trace.set_tracer_provider(TracerProvider()) +trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(OTLPSpanExporter())) + + +def instrumentDjango(): + from opentelemetry.instrumentation.django import DjangoInstrumentor + + DjangoInstrumentor().instrument() + + +def instrumentCelery(): + from opentelemetry.instrumentation.celery import CeleryInstrumentor + from celery.signals import worker_process_init + + @worker_process_init.connect(weak=False) + def init_celery_tracing(*args, **kwargs): + CeleryInstrumentor().instrument() diff --git a/celerywyrm/apps.py b/celerywyrm/apps.py new file mode 100644 index 00000000..6aae849c --- /dev/null +++ b/celerywyrm/apps.py @@ -0,0 +1,13 @@ +from django.apps import AppConfig +from celerywyrm import settings + + +class CelerywyrmConfig(AppConfig): + name = "celerywyrm" + verbose_name = "BookWyrm Celery" + + def ready(self): + if settings.OTEL_EXPORTER_OTLP_ENDPOINT: + from bookwyrm.telemetry import open_telemetry + + open_telemetry.instrumentCelery() diff --git a/certbot.sh b/certbot.sh deleted file mode 100644 index 6d2c3cd9..00000000 --- a/certbot.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -source .env; - -if [ "$CERTBOT_INIT" = "true" ] -then - certonly \ - --webroot \ - --webroot-path=/var/www/certbot \ - --email ${EMAIL} \ - --agree-tos \ - --no-eff-email \ - -d ${DOMAIN} \ - -d www.${DOMAIN} -else - renew \ - --webroot \ - --webroot-path \ - /var/www/certbot -fi diff --git a/docker-compose.yml b/docker-compose.yml index fa28dbee..d3b47467 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -49,15 +49,13 @@ services: redis_broker: image: redis command: redis-server --requirepass ${REDIS_BROKER_PASSWORD} --appendonly yes --port ${REDIS_BROKER_PORT} - env_file: .env - ports: - - 6379 - networks: - - main - restart: on-failure volumes: - ./redis.conf:/etc/redis/redis.conf - redis_broker_data:/data + env_file: .env + networks: + - main + restart: on-failure celery_worker: env_file: .env build: . diff --git a/requirements.txt b/requirements.txt index 4bda6bd5..638ed91b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,6 +18,11 @@ pytz>=2021.1 boto3==1.17.88 django-storages==1.11.1 django-redis==5.2.0 +opentelemetry-api==1.8.0 +opentelemetry-sdk==1.8.0 +opentelemetry-exporter-otlp-proto-grpc==1.8.0 +opentelemetry-instrumentation-django==0.27b0 +opentelemetry-instrumentation-celery==0.27b0 # Dev black==21.4b2 From bc7aa91b97d7bf89feb3787c731ab76b1bd65e9d Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 18:50:57 -0800 Subject: [PATCH 42/88] Fixes pylint complaints --- bookwyrm/apps.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bookwyrm/apps.py b/bookwyrm/apps.py index af3b064e..d494877d 100644 --- a/bookwyrm/apps.py +++ b/bookwyrm/apps.py @@ -32,8 +32,11 @@ class BookwyrmConfig(AppConfig): name = "bookwyrm" verbose_name = "BookWyrm" + # pylint: disable=no-self-use def ready(self): + """set up OTLP and preview image files, if desired""" if settings.OTEL_EXPORTER_OTLP_ENDPOINT: + # pylint: disable=import-outside-toplevel from bookwyrm.telemetry import open_telemetry open_telemetry.instrumentDjango() From 28a8edfdc460dba2692790195f1eef44498cfb8f Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 19:06:47 -0800 Subject: [PATCH 43/88] Fixes author page query --- bookwyrm/views/author.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bookwyrm/views/author.py b/bookwyrm/views/author.py index 3310fef0..b50653f9 100644 --- a/bookwyrm/views/author.py +++ b/bookwyrm/views/author.py @@ -1,6 +1,7 @@ """ the good people stuff! the authors! """ from django.contrib.auth.decorators import login_required, permission_required from django.core.paginator import Paginator +from django.db.models import Q from django.shortcuts import get_object_or_404, redirect from django.template.response import TemplateResponse from django.utils.decorators import method_decorator @@ -26,7 +27,7 @@ class Author(View): return ActivitypubResponse(author.to_activity()) books = models.Work.objects.filter( - authors=author, editions__authors=author + Q(authors=author) | Q(editions__authors=author) ).distinct() paginated = Paginator(books, PAGE_LENGTH) From a9a6fd12429d41ec1b2f0ebeaa57ab080ab61793 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 19:34:37 -0800 Subject: [PATCH 44/88] Adds test for author page bug --- bookwyrm/tests/views/test_author.py | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/bookwyrm/tests/views/test_author.py b/bookwyrm/tests/views/test_author.py index ad5c069d..71daef2a 100644 --- a/bookwyrm/tests/views/test_author.py +++ b/bookwyrm/tests/views/test_author.py @@ -50,6 +50,43 @@ class AuthorViews(TestCase): models.SiteSettings.objects.create() def test_author_page(self): + """there are so many views, this just makes sure it LOADS""" + view = views.Author.as_view() + author = models.Author.objects.create(name="Jessica") + self.book.authors.add(author) + request = self.factory.get("") + request.user = self.local_user + with patch("bookwyrm.views.author.is_api_request") as is_api: + is_api.return_value = False + result = view(request, author.id) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_author_page_edition_author(self): + """there are so many views, this just makes sure it LOADS""" + view = views.Author.as_view() + another_book = models.Edition.objects.create( + title="Example Edition", + remote_id="https://example.com/book/1", + parent_work=self.work, + isbn_13="9780300112511", + ) + author = models.Author.objects.create(name="Jessica") + self.book.authors.add(author) + request = self.factory.get("") + request.user = self.local_user + with patch("bookwyrm.views.author.is_api_request") as is_api: + is_api.return_value = False + result = view(request, author.id) + books = result.context_data["books"] + self.assertEqual(books.object_list.count(), 1) + + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_author_page_empty(self): """there are so many views, this just makes sure it LOADS""" view = views.Author.as_view() author = models.Author.objects.create(name="Jessica") From 49ceb2a9780035dc9b7a4634b18110cda7e3a485 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 19:41:21 -0800 Subject: [PATCH 45/88] Fixes warning in author view tests --- bookwyrm/views/author.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/views/author.py b/bookwyrm/views/author.py index b50653f9..c3e456ef 100644 --- a/bookwyrm/views/author.py +++ b/bookwyrm/views/author.py @@ -28,7 +28,7 @@ class Author(View): books = models.Work.objects.filter( Q(authors=author) | Q(editions__authors=author) - ).distinct() + ).order_by("-published_date").distinct() paginated = Paginator(books, PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) From a73960a0da25fba82f4a6fb4185f69d102b3a000 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 19:44:03 -0800 Subject: [PATCH 46/88] Python formatting --- bookwyrm/views/author.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bookwyrm/views/author.py b/bookwyrm/views/author.py index c3e456ef..b4eb7ef5 100644 --- a/bookwyrm/views/author.py +++ b/bookwyrm/views/author.py @@ -26,9 +26,11 @@ class Author(View): if is_api_request(request): return ActivitypubResponse(author.to_activity()) - books = models.Work.objects.filter( - Q(authors=author) | Q(editions__authors=author) - ).order_by("-published_date").distinct() + books = ( + models.Work.objects.filter(Q(authors=author) | Q(editions__authors=author)) + .order_by("-published_date") + .distinct() + ) paginated = Paginator(books, PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) From 73b611d68ddc8fca6690ae5f87e4640293c1869d Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 4 Feb 2022 20:12:26 -0800 Subject: [PATCH 47/88] Tick version number --- bookwyrm/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index e8cbe344..fee197a7 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _ env = Env() env.read_env() DOMAIN = env("DOMAIN") -VERSION = "0.2.1" +VERSION = "0.3.0" PAGE_LENGTH = env("PAGE_LENGTH", 15) DEFAULT_LANGUAGE = env("DEFAULT_LANGUAGE", "English") From 74fd13fb22e60913f376c9c2bdc34db69a086d53 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 6 Feb 2022 06:37:03 -0800 Subject: [PATCH 48/88] Consistent ordering of items in docker-compose file --- docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index d3b47467..672ea4c1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -39,13 +39,13 @@ services: redis_activity: image: redis command: redis-server --requirepass ${REDIS_ACTIVITY_PASSWORD} --appendonly yes --port ${REDIS_ACTIVITY_PORT} + volumes: + - ./redis.conf:/etc/redis/redis.conf + - redis_activity_data:/data env_file: .env networks: - main restart: on-failure - volumes: - - ./redis.conf:/etc/redis/redis.conf - - redis_activity_data:/data redis_broker: image: redis command: redis-server --requirepass ${REDIS_BROKER_PASSWORD} --appendonly yes --port ${REDIS_BROKER_PORT} From e9e4f70ae4ff11329be0e5dc667f39bcd2941201 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 8 Feb 2022 09:17:42 -0500 Subject: [PATCH 49/88] Refresh web and celery in update command --- bw-dev | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bw-dev b/bw-dev index 11977ad0..ded796b8 100755 --- a/bw-dev +++ b/bw-dev @@ -143,6 +143,8 @@ case "$CMD" in runweb python manage.py migrate runweb python manage.py collectstatic --no-input docker-compose up -d + docker-compose restart web + docker-compose restart celery_worker ;; populate_streams) runweb python manage.py populate_streams "$@" From 6323b0e7005218c35a88f28d3067af8227347f61 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 9 Feb 2022 12:20:11 -0500 Subject: [PATCH 50/88] Use correct model type for federated links --- bookwyrm/activitypub/base_activity.py | 4 ++-- bookwyrm/tests/views/books/test_links.py | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index 15ca5a93..7d2796ef 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -227,7 +227,7 @@ def set_related_field( model_field = getattr(model, related_field_name) if hasattr(model_field, "activitypub_field"): setattr(activity, getattr(model_field, "activitypub_field"), instance.remote_id) - item = activity.to_model() + item = activity.to_model(model=model) # if the related field isn't serialized (attachments on Status), then # we have to set it post-creation @@ -298,6 +298,7 @@ class Link(ActivityObject): mediaType: str = None id: str = None attributedTo: str = None + availability: str = None type: str = "Link" def serialize(self, **kwargs): @@ -305,7 +306,6 @@ class Link(ActivityObject): omit = ("id", "type", "@context") return super().serialize(omit=omit) - @dataclass(init=False) class Mention(Link): """a subtype of Link for mentioning an actor""" diff --git a/bookwyrm/tests/views/books/test_links.py b/bookwyrm/tests/views/books/test_links.py index 2aee5aed..d98e95da 100644 --- a/bookwyrm/tests/views/books/test_links.py +++ b/bookwyrm/tests/views/books/test_links.py @@ -80,6 +80,17 @@ class LinkViews(TestCase): activity = json.loads(mock.call_args[1]["args"][1]) self.assertEqual(activity["type"], "Update") self.assertEqual(activity["object"]["type"], "Edition") + self.assertIsInstance(activity["object"]["fileLinks"], list) + self.assertEqual( + activity["object"]["fileLinks"][0]["href"], "https://www.example.com" + ) + self.assertEqual( + activity["object"]["fileLinks"][0]["mediaType"], "HTML" + ) + self.assertEqual( + activity["object"]["fileLinks"][0]["attributedTo"], + self.local_user.remote_id + ) link = models.FileLink.objects.get() self.assertEqual(link.name, "www.example.com") From c06817e9ff8212c7bf5de413a4b4470aeed842f4 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 9 Feb 2022 12:23:01 -0500 Subject: [PATCH 51/88] Python formatting --- bookwyrm/activitypub/base_activity.py | 1 + bookwyrm/tests/models/test_book_model.py | 1 - bookwyrm/tests/views/books/test_links.py | 6 ++---- bookwyrm/tests/views/inbox/test_inbox_update.py | 1 - 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index 7d2796ef..6bee25f6 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -306,6 +306,7 @@ class Link(ActivityObject): omit = ("id", "type", "@context") return super().serialize(omit=omit) + @dataclass(init=False) class Mention(Link): """a subtype of Link for mentioning an actor""" diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index d74fa4ca..d4f59fa5 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -1,7 +1,6 @@ """ testing models """ from dateutil.parser import parse -from imagekit.models import ImageSpecField from django.test import TestCase from django.utils import timezone diff --git a/bookwyrm/tests/views/books/test_links.py b/bookwyrm/tests/views/books/test_links.py index d98e95da..3379786b 100644 --- a/bookwyrm/tests/views/books/test_links.py +++ b/bookwyrm/tests/views/books/test_links.py @@ -84,12 +84,10 @@ class LinkViews(TestCase): self.assertEqual( activity["object"]["fileLinks"][0]["href"], "https://www.example.com" ) - self.assertEqual( - activity["object"]["fileLinks"][0]["mediaType"], "HTML" - ) + self.assertEqual(activity["object"]["fileLinks"][0]["mediaType"], "HTML") self.assertEqual( activity["object"]["fileLinks"][0]["attributedTo"], - self.local_user.remote_id + self.local_user.remote_id, ) link = models.FileLink.objects.get() diff --git a/bookwyrm/tests/views/inbox/test_inbox_update.py b/bookwyrm/tests/views/inbox/test_inbox_update.py index 963742c8..18b2e5d5 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_update.py +++ b/bookwyrm/tests/views/inbox/test_inbox_update.py @@ -6,7 +6,6 @@ from unittest.mock import patch from django.test import TestCase from bookwyrm import models, views -from bookwyrm.activitypub.base_activity import set_related_field # pylint: disable=too-many-public-methods From 046f51609123799aa4fd90196053f8fded836af1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Feb 2022 13:02:16 +0000 Subject: [PATCH 52/88] Bump django from 3.2.11 to 3.2.12 Bumps [django](https://github.com/django/django) from 3.2.11 to 3.2.12. - [Release notes](https://github.com/django/django/releases) - [Commits](https://github.com/django/django/compare/3.2.11...3.2.12) --- updated-dependencies: - dependency-name: django dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4bda6bd5..191a6a92 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ celery==5.2.2 colorthief==0.2.1 -Django==3.2.11 +Django==3.2.12 django-imagekit==4.1.0 django-model-utils==4.0.0 environs==9.3.4 From 059fd84d06a3af1e385e1b0490803d158c4ad7ec Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 11 Feb 2022 13:33:42 -0500 Subject: [PATCH 53/88] Adds delete button to announcements list view It's handy to have it there --- .../settings/announcements/announcements.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bookwyrm/templates/settings/announcements/announcements.html b/bookwyrm/templates/settings/announcements/announcements.html index c86ecf3e..d60ef376 100644 --- a/bookwyrm/templates/settings/announcements/announcements.html +++ b/bookwyrm/templates/settings/announcements/announcements.html @@ -38,6 +38,9 @@ {% trans "Status" as text %} {% include 'snippets/table-sort-header.html' with field="active" sort=sort text=text %} + + {% trans "Actions" %} + {% for announcement in announcements %} @@ -46,6 +49,15 @@ {{ announcement.start_date|naturaltime|default:'' }} {{ announcement.end_date|naturaltime|default:'' }} {% if announcement.active %}{% trans "active" %}{% else %}{% trans "inactive" %}{% endif %} + +
+ {% csrf_token %} + +
+ {% endfor %} {% if not announcements %} From 62741a5d2e9a9872ccca2cff349f9f50035a28e2 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 11 Feb 2022 13:36:08 -0500 Subject: [PATCH 54/88] Allow html in announcement header --- bookwyrm/templates/snippets/announcement.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/snippets/announcement.html b/bookwyrm/templates/snippets/announcement.html index 8b856319..62dd4ea7 100644 --- a/bookwyrm/templates/snippets/announcement.html +++ b/bookwyrm/templates/snippets/announcement.html @@ -9,7 +9,7 @@ {% if announcement.event_date %} {{ announcement.event_date|naturalday|title }}: {% endif %} - {{ announcement.preview }} + {{ announcement.preview|safe }}
{% if announcement.content %}
From ee23aba9946361dc391891510d5f411ebc617299 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 11 Feb 2022 13:50:55 -0500 Subject: [PATCH 55/88] Use details and summary for announcement panel --- bookwyrm/static/css/bookwyrm.css | 4 +-- bookwyrm/templates/snippets/announcement.html | 29 +++++++++---------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm.css b/bookwyrm/static/css/bookwyrm.css index f05ea3c9..66949387 100644 --- a/bookwyrm/static/css/bookwyrm.css +++ b/bookwyrm/static/css/bookwyrm.css @@ -319,7 +319,7 @@ details.details-panel summary { position: relative; } -details.details-panel summary .details-close { +details summary .details-close { position: absolute; right: 0; top: 0; @@ -327,7 +327,7 @@ details.details-panel summary .details-close { transition: transform 0.2s ease; } -details[open].details-panel summary .details-close { +details[open] summary .details-close { transform: rotate(0deg); } diff --git a/bookwyrm/templates/snippets/announcement.html b/bookwyrm/templates/snippets/announcement.html index 62dd4ea7..c8eca6ad 100644 --- a/bookwyrm/templates/snippets/announcement.html +++ b/bookwyrm/templates/snippets/announcement.html @@ -4,29 +4,26 @@ class="notification mb-1 p-3{% if not admin_mode %} is-hidden{% endif %} transition-y" {% if not admin_mode %}data-hide="hide_announcement_{{ announcement.id }}"{% endif %} > -
-
+
+ {% if announcement.event_date %} {{ announcement.event_date|naturalday|title }}: {% endif %} + {{ announcement.preview|safe }} -
+ + {% if announcement.content %} + + {% endif %} + {% if announcement.content %} -
- {% trans "Open" as button_text %} - {% include 'snippets/toggle/open_button.html' with text=button_text controls_text="announcement" class="is-small" controls_uid=uuid icon_with_text="arrow-down" %} - {% trans "Close" as button_text %} - {% include 'snippets/toggle/close_button.html' with text=button_text controls_text="announcement" class="is-small" controls_uid=uuid icon_with_text="arrow-up" %} +
+
+ {{ announcement.content|safe }} +
{% endif %} -
- {% if announcement.content %} -
-
- {{ announcement.content|safe }} -
-
- {% endif %} +

{% blocktrans with user_path=announcement.user.local_path username=announcement.user.display_name %}Posted by {{ username }}{% endblocktrans %}

{% if not admin_mode %} From cfa91e25704d8a0c73a6648761824e734458e6be Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 11 Feb 2022 14:00:01 -0500 Subject: [PATCH 56/88] Adds color options to announcements --- .../0134_announcement_display_type.py | 29 +++++++++++++++++++ bookwyrm/models/announcement.py | 18 ++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 bookwyrm/migrations/0134_announcement_display_type.py diff --git a/bookwyrm/migrations/0134_announcement_display_type.py b/bookwyrm/migrations/0134_announcement_display_type.py new file mode 100644 index 00000000..ba845012 --- /dev/null +++ b/bookwyrm/migrations/0134_announcement_display_type.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.11 on 2022-02-11 18:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0133_alter_listitem_notes"), + ] + + operations = [ + migrations.AddField( + model_name="announcement", + name="display_type", + field=models.CharField( + choices=[ + ("white-ter", "None"), + ("primary-light", "Primary"), + ("success-light", "Success"), + ("link-light", "Link"), + ("warning-light", "Warning"), + ("danger-light", "Danger"), + ], + default="white-ter", + max_length=20, + ), + ), + ] diff --git a/bookwyrm/models/announcement.py b/bookwyrm/models/announcement.py index 498d5041..cbed38ae 100644 --- a/bookwyrm/models/announcement.py +++ b/bookwyrm/models/announcement.py @@ -2,10 +2,21 @@ from django.db import models from django.db.models import Q from django.utils import timezone +from django.utils.translation import gettext_lazy as _ from .base_model import BookWyrmModel +DisplayTypes = [ + ("white-ter", _("None")), + ("primary-light", _("Primary")), + ("success-light", _("Success")), + ("link-light", _("Link")), + ("warning-light", _("Warning")), + ("danger-light", _("Danger")), +] + + class Announcement(BookWyrmModel): """The admin has something to say""" @@ -16,6 +27,13 @@ class Announcement(BookWyrmModel): start_date = models.DateTimeField(blank=True, null=True) end_date = models.DateTimeField(blank=True, null=True) active = models.BooleanField(default=True) + display_type = models.CharField( + max_length=20, + blank=False, + null=False, + choices=DisplayTypes, + default="white-ter", + ) @classmethod def active_announcements(cls): From 01b52f023a19e20dd1c2af63a844c48de1d64eff Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 11 Feb 2022 14:38:13 -0500 Subject: [PATCH 57/88] Adds edit announcement view --- .../settings/announcements/announcement.html | 14 +-- .../announcements/announcement_form.html | 80 ------------- .../settings/announcements/announcements.html | 13 +-- .../announcements/edit_announcement.html | 105 ++++++++++++++++++ bookwyrm/urls.py | 10 ++ bookwyrm/views/__init__.py | 3 +- bookwyrm/views/admin/announcements.py | 62 ++++++----- 7 files changed, 165 insertions(+), 122 deletions(-) delete mode 100644 bookwyrm/templates/settings/announcements/announcement_form.html create mode 100644 bookwyrm/templates/settings/announcements/edit_announcement.html diff --git a/bookwyrm/templates/settings/announcements/announcement.html b/bookwyrm/templates/settings/announcements/announcement.html index 8b49f4f4..09501382 100644 --- a/bookwyrm/templates/settings/announcements/announcement.html +++ b/bookwyrm/templates/settings/announcements/announcement.html @@ -1,5 +1,7 @@ {% extends 'settings/layout.html' %} -{% load i18n %}{% load humanize %} +{% load i18n %} +{% load humanize %} + {% block title %}{% trans "Announcement" %} - {{ announcement.preview }}{% endblock %} {% block header %} @@ -8,10 +10,12 @@ {% endblock %} {% block edit-button %} -{% trans "Edit Announcement" as button_text %}
- {% include 'snippets/toggle/open_button.html' with controls_text="edit_announcement" icon_with_text="pencil" text=button_text focus="edit_announcement_header" %} + + + {% trans "Edit Announcement" %} +
{% csrf_token %} @@ -25,10 +29,6 @@ {% block panel %} - - {% include 'settings/announcements/announcement_form.html' with controls_text="edit_announcement" %} -
-
{% trans "Visible:" %}
diff --git a/bookwyrm/templates/settings/announcements/announcement_form.html b/bookwyrm/templates/settings/announcements/announcement_form.html deleted file mode 100644 index 8f68e255..00000000 --- a/bookwyrm/templates/settings/announcements/announcement_form.html +++ /dev/null @@ -1,80 +0,0 @@ -{% extends 'components/inline_form.html' %} -{% load i18n %} - -{% block header %} -{% if announcement %} -{% trans "Edit Announcement" %} -{% else %} -{% trans "Create Announcement" %} -{% endif %} -{% endblock %} - -{% block form %} -{% csrf_token %} - -

- - {{ form.preview }} - - {% include 'snippets/form_errors.html' with errors_list=form.preview.errors id="desc_preview" %} -

-

- - {{ form.content }} - - {% include 'snippets/form_errors.html' with errors_list=form.content.errors id="desc_content" %} -

-

- - - - {% include 'snippets/form_errors.html' with errors_list=form.event_date.errors id="desc_event_date" %} -

- -
-
-

- - - - {% include 'snippets/form_errors.html' with errors_list=form.start_date.errors id="desc_start_date" %} -

-
-
-

- - - - {% include 'snippets/form_errors.html' with errors_list=form.end_date.errors id="desc_end_date" %} -

-
-
-

- - {{ form.active }} - - {% include 'snippets/form_errors.html' with errors_list=form.active.errors id="desc_active" %} -

-
-
- -
-
- -
-
-{% endblock %} diff --git a/bookwyrm/templates/settings/announcements/announcements.html b/bookwyrm/templates/settings/announcements/announcements.html index d60ef376..6299ba3d 100644 --- a/bookwyrm/templates/settings/announcements/announcements.html +++ b/bookwyrm/templates/settings/announcements/announcements.html @@ -5,16 +5,15 @@ {% block header %}{% trans "Announcements" %}{% endblock %} {% block edit-button %} -{% trans "Create Announcement" as button_text %} -{% include 'snippets/toggle/open_button.html' with controls_text="create_announcement" icon_with_text="plus" text=button_text focus="create_announcement_header" %} + + {% trans "Create Announcement" as text %} + + {{ text }} + {% endblock %} {% block panel %} -
- {% include 'settings/announcements/announcement_form.html' with controls_text="create_announcement" %} -
- -
+
diff --git a/bookwyrm/templates/settings/announcements/edit_announcement.html b/bookwyrm/templates/settings/announcements/edit_announcement.html new file mode 100644 index 00000000..ef10c2a0 --- /dev/null +++ b/bookwyrm/templates/settings/announcements/edit_announcement.html @@ -0,0 +1,105 @@ +{% extends 'settings/layout.html' %} +{% load i18n %} + +{% block header %} +{% if announcement %} +{% trans "Edit Announcement" %} +{% else %} +{% trans "Create Announcement" %} +{% endif %} +{% endblock %} + +{% block panel %} +
+ {% csrf_token %} + +

{% trans "Announcement content" %}

+
+

+ + {{ form.preview }} + + {% include 'snippets/form_errors.html' with errors_list=form.preview.errors id="desc_preview" %} +

+

+ + {{ form.content }} + + {% include 'snippets/form_errors.html' with errors_list=form.content.errors id="desc_content" %} +

+

+ + + + {% include 'snippets/form_errors.html' with errors_list=form.event_date.errors id="desc_event_date" %} +

+
+ +

{% trans "Display settings" %}

+
+
+
+

+ + + + {% include 'snippets/form_errors.html' with errors_list=form.start_date.errors id="desc_start_date" %} +

+
+
+

+ + + + {% include 'snippets/form_errors.html' with errors_list=form.end_date.errors id="desc_end_date" %} +

+
+
+ +
+ {{ form.display_type }} +
+ + {% include 'snippets/form_errors.html' with errors_list=form.active.errors id="desc_display_type" %} +
+
+

+ + + {% include 'snippets/form_errors.html' with errors_list=form.active.errors id="desc_active" %} +

+
+ +
+
+ +
+
+
+{% endblock %} diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 79d868c9..5ee09a3a 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -93,6 +93,16 @@ urlpatterns = [ views.Announcement.as_view(), name="settings-announcements", ), + re_path( + r"^settings/announcements/create/?$", + views.EditAnnouncement.as_view(), + name="settings-announcements-edit", + ), + re_path( + r"^settings/announcements/(?P\d+)/edit/?$", + views.EditAnnouncement.as_view(), + name="settings-announcements-edit", + ), re_path( r"^settings/announcements/(?P\d+)/delete/?$", views.delete_announcement, diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 359bee82..579e89cb 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -1,6 +1,7 @@ """ make sure all our nice views are available """ # site admin -from .admin.announcements import Announcements, Announcement, delete_announcement +from .admin.announcements import Announcements, Announcement +from .admin.announcements import EditAnnouncement, delete_announcement from .admin.dashboard import Dashboard from .admin.federation import Federation, FederatedServer from .admin.federation import AddFederatedServer, ImportServerBlocklist diff --git a/bookwyrm/views/admin/announcements.py b/bookwyrm/views/admin/announcements.py index 92ec1766..dd0ce862 100644 --- a/bookwyrm/views/admin/announcements.py +++ b/bookwyrm/views/admin/announcements.py @@ -45,23 +45,6 @@ class Announcements(View): request, "settings/announcements/announcements.html", data ) - def post(self, request): - """edit the site settings""" - form = forms.AnnouncementForm(request.POST) - if form.is_valid(): - form.save() - # reset the create form - form = forms.AnnouncementForm() - data = { - "announcements": Paginator( - models.Announcement.objects.order_by("-created_date"), PAGE_LENGTH - ).get_page(request.GET.get("page")), - "form": form, - } - return TemplateResponse( - request, "settings/announcements/announcements.html", data - ) - @method_decorator(login_required, name="dispatch") @method_decorator( @@ -76,27 +59,52 @@ class Announcement(View): announcement = get_object_or_404(models.Announcement, id=announcement_id) data = { "announcement": announcement, - "form": forms.AnnouncementForm(instance=announcement), } return TemplateResponse( request, "settings/announcements/announcement.html", data ) - def post(self, request, announcement_id): - """edit announcement""" - announcement = get_object_or_404(models.Announcement, id=announcement_id) - form = forms.AnnouncementForm(request.POST, instance=announcement) - if form.is_valid(): - announcement = form.save() - form = forms.AnnouncementForm(instance=announcement) + + +@method_decorator(login_required, name="dispatch") +@method_decorator( + permission_required("bookwyrm.edit_instance_settings", raise_exception=True), + name="dispatch", +) +class EditAnnouncement(View): + """Create of edit an announcement""" + def get(self, request, announcement_id=None): + """announcement forms""" + announcement = None + if announcement_id: + announcement = get_object_or_404(models.Announcement, id=announcement_id) + data = { "announcement": announcement, - "form": form, + "form": forms.AnnouncementForm(instance=announcement), } return TemplateResponse( - request, "settings/announcements/announcement.html", data + request, "settings/announcements/edit_announcement.html", data ) + def post(self, request, announcement_id=None): + """edit announcement""" + announcement = None + if announcement_id: + announcement = get_object_or_404(models.Announcement, id=announcement_id) + + form = forms.AnnouncementForm(request.POST, instance=announcement) + if not form.is_valid(): + data = { + "announcement": announcement, + "form": form, + } + return TemplateResponse( + request, "settings/announcements/edit_announcement.html", data + ) + announcement = form.save() + return redirect("settings-announcements", announcement.id) + @login_required @permission_required("bookwyrm.edit_instance_settings", raise_exception=True) From b95f0ed287a9f3dcd25932060c79e3e9d4b0bd36 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 11 Feb 2022 14:43:37 -0500 Subject: [PATCH 58/88] Use color in announcement --- bookwyrm/templates/snippets/announcement.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/snippets/announcement.html b/bookwyrm/templates/snippets/announcement.html index c8eca6ad..ec1555d8 100644 --- a/bookwyrm/templates/snippets/announcement.html +++ b/bookwyrm/templates/snippets/announcement.html @@ -1,7 +1,7 @@ {% load humanize %}{% load i18n %}{% load utilities %} {% with announcement.id|uuid as uuid %}