diff --git a/.editorconfig b/.editorconfig index d102bc5a..f2e8a178 100644 --- a/.editorconfig +++ b/.editorconfig @@ -32,7 +32,7 @@ indent_size = 2 max_line_length = off # Computer generated files -[{package.json,*.lock,*.mo}] +[{icons.css,package.json,*.lock,*.mo}] indent_size = unset indent_style = unset max_line_length = unset diff --git a/.env.dev.example b/.env.dev.example index f42aaaae..d4476fd2 100644 --- a/.env.dev.example +++ b/.env.dev.example @@ -43,6 +43,9 @@ EMAIL_HOST_PASSWORD=emailpassword123 EMAIL_USE_TLS=true EMAIL_USE_SSL=false +# Thumbnails Generation +ENABLE_THUMBNAIL_GENERATION=false + # S3 configuration USE_S3=false AWS_ACCESS_KEY_ID= @@ -58,6 +61,7 @@ AWS_SECRET_ACCESS_KEY= # AWS_S3_REGION_NAME=None # "fr-par" # AWS_S3_ENDPOINT_URL=None # "https://s3.fr-par.scw.cloud" + # Preview image generation can be computing and storage intensive # ENABLE_PREVIEW_IMAGES=True diff --git a/.env.prod.example b/.env.prod.example index 5115469c..99520916 100644 --- a/.env.prod.example +++ b/.env.prod.example @@ -43,6 +43,9 @@ EMAIL_HOST_PASSWORD=emailpassword123 EMAIL_USE_TLS=true EMAIL_USE_SSL=false +# Thumbnails Generation +ENABLE_THUMBNAIL_GENERATION=false + # S3 configuration USE_S3=false AWS_ACCESS_KEY_ID= @@ -58,6 +61,7 @@ AWS_SECRET_ACCESS_KEY= # AWS_S3_REGION_NAME=None # "fr-par" # AWS_S3_ENDPOINT_URL=None # "https://s3.fr-par.scw.cloud" + # Preview image generation can be computing and storage intensive # ENABLE_PREVIEW_IMAGES=True diff --git a/.github/workflows/curlylint.yaml b/.github/workflows/curlylint.yaml new file mode 100644 index 00000000..e27d0b1b --- /dev/null +++ b/.github/workflows/curlylint.yaml @@ -0,0 +1,28 @@ +name: Templates validator + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Install curlylint + run: pip install curlylint + + - name: Run linter + run: > + curlylint --rule 'aria_role: true' \ + --rule 'django_forms_rendering: true' \ + --rule 'html_has_lang: true' \ + --rule 'image_alt: true' \ + --rule 'meta_viewport: true' \ + --rule 'no_autofocus: true' \ + --rule 'tabindex_no_positive: true' \ + --exclude '_modal.html|create_status/layout.html' \ + bookwyrm/templates diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index ddd45426..d20e7e94 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -106,8 +106,10 @@ class ActivityObject: value = field.default setattr(self, field.name, value) - # pylint: disable=too-many-locals,too-many-branches - def to_model(self, model=None, instance=None, allow_create=True, save=True): + # pylint: disable=too-many-locals,too-many-branches,too-many-arguments + def to_model( + self, model=None, instance=None, allow_create=True, save=True, overwrite=True + ): """convert from an activity to a model instance""" model = model or get_model_from_type(self.type) @@ -129,9 +131,12 @@ class ActivityObject: # keep track of what we've changed update_fields = [] + # sets field on the model using the activity value for field in instance.simple_fields: try: - changed = field.set_field_from_activity(instance, self) + changed = field.set_field_from_activity( + instance, self, overwrite=overwrite + ) if changed: update_fields.append(field.name) except AttributeError as e: @@ -140,7 +145,9 @@ class ActivityObject: # image fields have to be set after other fields because they can save # too early and jank up users for field in instance.image_fields: - changed = field.set_field_from_activity(instance, self, save=save) + changed = field.set_field_from_activity( + instance, self, save=save, overwrite=overwrite + ) if changed: update_fields.append(field.name) diff --git a/bookwyrm/activitypub/note.py b/bookwyrm/activitypub/note.py index 916da2d0..556ef185 100644 --- a/bookwyrm/activitypub/note.py +++ b/bookwyrm/activitypub/note.py @@ -59,6 +59,9 @@ class Comment(Note): """like a note but with a book""" inReplyToBook: str + readingStatus: str = None + progress: int = None + progressMode: str = None type: str = "Comment" diff --git a/bookwyrm/activitystreams.py b/bookwyrm/activitystreams.py index 0a90c9f4..c6ad5760 100644 --- a/bookwyrm/activitystreams.py +++ b/bookwyrm/activitystreams.py @@ -23,14 +23,15 @@ class ActivityStream(RedisStore): """statuses are sorted by date published""" return obj.published_date.timestamp() - def add_status(self, status): + def add_status(self, status, increment_unread=False): """add a status to users' feeds""" # the pipeline contains all the add-to-stream activities pipeline = self.add_object_to_related_stores(status, execute=False) - for user in self.get_audience(status): - # add to the unread status count - pipeline.incr(self.unread_id(user)) + if increment_unread: + for user in self.get_audience(status): + # add to the unread status count + pipeline.incr(self.unread_id(user)) # and go! pipeline.execute() @@ -262,7 +263,7 @@ def add_status_on_create(sender, instance, created, *args, **kwargs): return for stream in streams.values(): - stream.add_status(instance) + stream.add_status(instance, increment_unread=created) if sender != models.Boost: return @@ -273,9 +274,10 @@ def add_status_on_create(sender, instance, created, *args, **kwargs): created_date__lt=instance.created_date, ) for stream in streams.values(): - stream.remove_object_from_related_stores(boosted) + audience = stream.get_stores_for_object(instance) + stream.remove_object_from_related_stores(boosted, stores=audience) for status in old_versions: - stream.remove_object_from_related_stores(status) + stream.remove_object_from_related_stores(status, stores=audience) @receiver(signals.post_delete, sender=models.Boost) diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index fb102ea4..ffacffdf 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -139,7 +139,7 @@ class AbstractConnector(AbstractMinimalConnector): **dict_from_mappings(work_data, self.book_mappings) ) # this will dedupe automatically - work = work_activity.to_model(model=models.Work) + work = work_activity.to_model(model=models.Work, overwrite=False) for author in self.get_authors_from_data(work_data): work.authors.add(author) @@ -156,7 +156,7 @@ class AbstractConnector(AbstractMinimalConnector): mapped_data = dict_from_mappings(edition_data, self.book_mappings) mapped_data["work"] = work.remote_id edition_activity = activitypub.Edition(**mapped_data) - edition = edition_activity.to_model(model=models.Edition) + edition = edition_activity.to_model(model=models.Edition, overwrite=False) edition.connector = self.connector edition.save() @@ -182,7 +182,7 @@ class AbstractConnector(AbstractMinimalConnector): return None # this will dedupe - return activity.to_model(model=models.Author) + return activity.to_model(model=models.Author, overwrite=False) @abstractmethod def is_work_data(self, data): diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 842d0997..d2a7b9fa 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -145,8 +145,8 @@ class Connector(AbstractConnector): def get_edition_from_work_data(self, data): data = self.load_edition_data(data.get("uri")) try: - uri = data["uris"][0] - except KeyError: + uri = data.get("uris", [])[0] + except IndexError: raise ConnectorException("Invalid book data") return self.get_book_data(self.get_remote_id(uri)) diff --git a/bookwyrm/context_processors.py b/bookwyrm/context_processors.py index 1f0387fe..0610a8b9 100644 --- a/bookwyrm/context_processors.py +++ b/bookwyrm/context_processors.py @@ -11,6 +11,7 @@ def site_settings(request): # pylint: disable=unused-argument return { "site": models.SiteSettings.objects.get(), "active_announcements": models.Announcement.active_announcements(), + "thumbnail_generation_enabled": settings.ENABLE_THUMBNAIL_GENERATION, "media_full_url": settings.MEDIA_FULL_URL, "preview_images_enabled": settings.ENABLE_PREVIEW_IMAGES, "request_protocol": request_protocol, diff --git a/bookwyrm/forms.py b/bookwyrm/forms.py index c9e795c3..e8812470 100644 --- a/bookwyrm/forms.py +++ b/bookwyrm/forms.py @@ -86,6 +86,7 @@ class CommentForm(CustomForm): "privacy", "progress", "progress_mode", + "reading_status", ] diff --git a/bookwyrm/imagegenerators.py b/bookwyrm/imagegenerators.py new file mode 100644 index 00000000..1d065192 --- /dev/null +++ b/bookwyrm/imagegenerators.py @@ -0,0 +1,113 @@ +"""Generators for all the different thumbnail sizes""" +from imagekit import ImageSpec, register +from imagekit.processors import ResizeToFit + + +class BookXSmallWebp(ImageSpec): + """Handles XSmall size in Webp format""" + + processors = [ResizeToFit(80, 80)] + format = "WEBP" + options = {"quality": 95} + + +class BookXSmallJpg(ImageSpec): + """Handles XSmall size in Jpeg format""" + + processors = [ResizeToFit(80, 80)] + format = "JPEG" + options = {"quality": 95} + + +class BookSmallWebp(ImageSpec): + """Handles Small size in Webp format""" + + processors = [ResizeToFit(100, 100)] + format = "WEBP" + options = {"quality": 95} + + +class BookSmallJpg(ImageSpec): + """Handles Small size in Jpeg format""" + + processors = [ResizeToFit(100, 100)] + format = "JPEG" + options = {"quality": 95} + + +class BookMediumWebp(ImageSpec): + """Handles Medium size in Webp format""" + + processors = [ResizeToFit(150, 150)] + format = "WEBP" + options = {"quality": 95} + + +class BookMediumJpg(ImageSpec): + """Handles Medium size in Jpeg format""" + + processors = [ResizeToFit(150, 150)] + format = "JPEG" + options = {"quality": 95} + + +class BookLargeWebp(ImageSpec): + """Handles Large size in Webp format""" + + processors = [ResizeToFit(200, 200)] + format = "WEBP" + options = {"quality": 95} + + +class BookLargeJpg(ImageSpec): + """Handles Large size in Jpeg format""" + + processors = [ResizeToFit(200, 200)] + format = "JPEG" + options = {"quality": 95} + + +class BookXLargeWebp(ImageSpec): + """Handles XLarge size in Webp format""" + + processors = [ResizeToFit(250, 250)] + format = "WEBP" + options = {"quality": 95} + + +class BookXLargeJpg(ImageSpec): + """Handles XLarge size in Jpeg format""" + + processors = [ResizeToFit(250, 250)] + format = "JPEG" + options = {"quality": 95} + + +class BookXxLargeWebp(ImageSpec): + """Handles XxLarge size in Webp format""" + + processors = [ResizeToFit(500, 500)] + format = "WEBP" + options = {"quality": 95} + + +class BookXxLargeJpg(ImageSpec): + """Handles XxLarge size in Jpeg format""" + + processors = [ResizeToFit(500, 500)] + format = "JPEG" + options = {"quality": 95} + + +register.generator("bw:book:xsmall:webp", BookXSmallWebp) +register.generator("bw:book:xsmall:jpg", BookXSmallJpg) +register.generator("bw:book:small:webp", BookSmallWebp) +register.generator("bw:book:small:jpg", BookSmallJpg) +register.generator("bw:book:medium:webp", BookMediumWebp) +register.generator("bw:book:medium:jpg", BookMediumJpg) +register.generator("bw:book:large:webp", BookLargeWebp) +register.generator("bw:book:large:jpg", BookLargeJpg) +register.generator("bw:book:xlarge:webp", BookXLargeWebp) +register.generator("bw:book:xlarge:jpg", BookXLargeJpg) +register.generator("bw:book:xxlarge:webp", BookXxLargeWebp) +register.generator("bw:book:xxlarge:jpg", BookXxLargeJpg) diff --git a/bookwyrm/migrations/0083_auto_20210816_2022.py b/bookwyrm/migrations/0083_auto_20210816_2022.py new file mode 100644 index 00000000..ecf2778b --- /dev/null +++ b/bookwyrm/migrations/0083_auto_20210816_2022.py @@ -0,0 +1,56 @@ +# Generated by Django 3.2.4 on 2021-08-16 20:22 + +import bookwyrm.models.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0082_auto_20210806_2324"), + ] + + operations = [ + migrations.AddField( + model_name="comment", + name="reading_status", + field=bookwyrm.models.fields.CharField( + blank=True, + choices=[ + ("to-read", "Toread"), + ("reading", "Reading"), + ("read", "Read"), + ], + max_length=255, + null=True, + ), + ), + migrations.AddField( + model_name="quotation", + name="reading_status", + field=bookwyrm.models.fields.CharField( + blank=True, + choices=[ + ("to-read", "Toread"), + ("reading", "Reading"), + ("read", "Read"), + ], + max_length=255, + null=True, + ), + ), + migrations.AddField( + model_name="review", + name="reading_status", + field=bookwyrm.models.fields.CharField( + blank=True, + choices=[ + ("to-read", "Toread"), + ("reading", "Reading"), + ("read", "Read"), + ], + max_length=255, + null=True, + ), + ), + ] diff --git a/bookwyrm/migrations/0084_auto_20210817_1916.py b/bookwyrm/migrations/0084_auto_20210817_1916.py new file mode 100644 index 00000000..6e826f99 --- /dev/null +++ b/bookwyrm/migrations/0084_auto_20210817_1916.py @@ -0,0 +1,56 @@ +# Generated by Django 3.2.4 on 2021-08-17 19:16 + +import bookwyrm.models.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0083_auto_20210816_2022"), + ] + + operations = [ + migrations.AlterField( + model_name="comment", + name="reading_status", + field=bookwyrm.models.fields.CharField( + blank=True, + choices=[ + ("to-read", "To-Read"), + ("reading", "Reading"), + ("read", "Read"), + ], + max_length=255, + null=True, + ), + ), + migrations.AlterField( + model_name="quotation", + name="reading_status", + field=bookwyrm.models.fields.CharField( + blank=True, + choices=[ + ("to-read", "To-Read"), + ("reading", "Reading"), + ("read", "Read"), + ], + max_length=255, + null=True, + ), + ), + migrations.AlterField( + model_name="review", + name="reading_status", + field=bookwyrm.models.fields.CharField( + blank=True, + choices=[ + ("to-read", "To-Read"), + ("reading", "Reading"), + ("read", "Read"), + ], + max_length=255, + null=True, + ), + ), + ] diff --git a/bookwyrm/migrations/0085_user_saved_lists.py b/bookwyrm/migrations/0085_user_saved_lists.py new file mode 100644 index 00000000..d4d9278c --- /dev/null +++ b/bookwyrm/migrations/0085_user_saved_lists.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.4 on 2021-08-23 18:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0084_auto_20210817_1916"), + ] + + operations = [ + migrations.AddField( + model_name="user", + name="saved_lists", + field=models.ManyToManyField( + related_name="saved_lists", to="bookwyrm.List" + ), + ), + ] diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index a6aa5de2..8bed6924 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -7,10 +7,16 @@ from django.db import models from django.dispatch import receiver from model_utils import FieldTracker from model_utils.managers import InheritanceManager +from imagekit.models import ImageSpecField from bookwyrm import activitypub from bookwyrm.preview_images import generate_edition_preview_image_task -from bookwyrm.settings import DOMAIN, DEFAULT_LANGUAGE, ENABLE_PREVIEW_IMAGES +from bookwyrm.settings import ( + DOMAIN, + DEFAULT_LANGUAGE, + ENABLE_PREVIEW_IMAGES, + ENABLE_THUMBNAIL_GENERATION, +) from .activitypub_mixin import OrderedCollectionPageMixin, ObjectMixin from .base_model import BookWyrmModel @@ -97,6 +103,40 @@ class Book(BookDataModel): objects = InheritanceManager() field_tracker = FieldTracker(fields=["authors", "title", "subtitle", "cover"]) + if ENABLE_THUMBNAIL_GENERATION: + cover_bw_book_xsmall_webp = ImageSpecField( + source="cover", id="bw:book:xsmall:webp" + ) + cover_bw_book_xsmall_jpg = ImageSpecField( + source="cover", id="bw:book:xsmall:jpg" + ) + cover_bw_book_small_webp = ImageSpecField( + source="cover", id="bw:book:small:webp" + ) + cover_bw_book_small_jpg = ImageSpecField(source="cover", id="bw:book:small:jpg") + cover_bw_book_medium_webp = ImageSpecField( + source="cover", id="bw:book:medium:webp" + ) + cover_bw_book_medium_jpg = ImageSpecField( + source="cover", id="bw:book:medium:jpg" + ) + cover_bw_book_large_webp = ImageSpecField( + source="cover", id="bw:book:large:webp" + ) + cover_bw_book_large_jpg = ImageSpecField(source="cover", id="bw:book:large:jpg") + cover_bw_book_xlarge_webp = ImageSpecField( + source="cover", id="bw:book:xlarge:webp" + ) + cover_bw_book_xlarge_jpg = ImageSpecField( + source="cover", id="bw:book:xlarge:jpg" + ) + cover_bw_book_xxlarge_webp = ImageSpecField( + source="cover", id="bw:book:xxlarge:webp" + ) + cover_bw_book_xxlarge_jpg = ImageSpecField( + source="cover", id="bw:book:xxlarge:jpg" + ) + @property def author_text(self): """format a list of authors""" diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index b58f8174..6ed5aa5e 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -66,7 +66,7 @@ class ActivitypubFieldMixin: self.activitypub_field = activitypub_field super().__init__(*args, **kwargs) - def set_field_from_activity(self, instance, data): + def set_field_from_activity(self, instance, data, overwrite=True): """helper function for assinging a value to the field. Returns if changed""" try: value = getattr(data, self.get_activitypub_field()) @@ -79,8 +79,15 @@ class ActivitypubFieldMixin: if formatted is None or formatted is MISSING or formatted == {}: return False + current_value = ( + getattr(instance, self.name) if hasattr(instance, self.name) else None + ) + # if we're not in overwrite mode, only continue updating the field if its unset + if current_value and not overwrite: + return False + # the field is unchanged - if hasattr(instance, self.name) and getattr(instance, self.name) == formatted: + if current_value == formatted: return False setattr(instance, self.name, formatted) @@ -210,7 +217,10 @@ class PrivacyField(ActivitypubFieldMixin, models.CharField): ) # pylint: disable=invalid-name - def set_field_from_activity(self, instance, data): + def set_field_from_activity(self, instance, data, overwrite=True): + if not overwrite: + return False + original = getattr(instance, self.name) to = data.to cc = data.cc @@ -273,8 +283,11 @@ class ManyToManyField(ActivitypubFieldMixin, models.ManyToManyField): self.link_only = link_only super().__init__(*args, **kwargs) - def set_field_from_activity(self, instance, data): + def set_field_from_activity(self, instance, data, overwrite=True): """helper function for assinging a value to the field""" + if not overwrite and getattr(instance, self.name).exists(): + return False + value = getattr(data, self.get_activitypub_field()) formatted = self.field_from_activity(value) if formatted is None or formatted is MISSING: @@ -377,13 +390,16 @@ class ImageField(ActivitypubFieldMixin, models.ImageField): super().__init__(*args, **kwargs) # pylint: disable=arguments-differ - def set_field_from_activity(self, instance, data, save=True): + def set_field_from_activity(self, instance, data, save=True, overwrite=True): """helper function for assinging a value to the field""" value = getattr(data, self.get_activitypub_field()) formatted = self.field_from_activity(value) if formatted is None or formatted is MISSING: return False + if not overwrite and hasattr(instance, self.name): + return False + getattr(instance, self.name).save(*formatted, save=save) return True diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index 3c25f1af..9274a581 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -235,12 +235,31 @@ class GeneratedNote(Status): pure_type = "Note" -class Comment(Status): - """like a review but without a rating and transient""" +ReadingStatusChoices = models.TextChoices( + "ReadingStatusChoices", ["to-read", "reading", "read"] +) + + +class BookStatus(Status): + """Shared fields for comments, quotes, reviews""" book = fields.ForeignKey( "Edition", on_delete=models.PROTECT, activitypub_field="inReplyToBook" ) + pure_type = "Note" + + reading_status = fields.CharField( + max_length=255, choices=ReadingStatusChoices.choices, null=True, blank=True + ) + + class Meta: + """not a real model, sorry""" + + abstract = True + + +class Comment(BookStatus): + """like a review but without a rating and transient""" # this is it's own field instead of a foreign key to the progress update # so that the update can be deleted without impacting the status @@ -265,16 +284,12 @@ class Comment(Status): ) activity_serializer = activitypub.Comment - pure_type = "Note" -class Quotation(Status): +class Quotation(BookStatus): """like a review but without a rating and transient""" quote = fields.HtmlField() - book = fields.ForeignKey( - "Edition", on_delete=models.PROTECT, activitypub_field="inReplyToBook" - ) @property def pure_content(self): @@ -289,16 +304,12 @@ class Quotation(Status): ) activity_serializer = activitypub.Quotation - pure_type = "Note" -class Review(Status): +class Review(BookStatus): """a book review""" name = fields.CharField(max_length=255, null=True) - book = fields.ForeignKey( - "Edition", on_delete=models.PROTECT, activitypub_field="inReplyToBook" - ) rating = fields.DecimalField( default=None, null=True, diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index e10bcd29..0ef23d3f 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -104,6 +104,9 @@ class User(OrderedCollectionPageMixin, AbstractUser): through_fields=("user_subject", "user_object"), related_name="blocked_by", ) + saved_lists = models.ManyToManyField( + "List", symmetrical=False, related_name="saved_lists" + ) favorites = models.ManyToManyField( "Status", symmetrical=False, diff --git a/bookwyrm/redis_store.py b/bookwyrm/redis_store.py index fa5c73a5..521e73b2 100644 --- a/bookwyrm/redis_store.py +++ b/bookwyrm/redis_store.py @@ -33,10 +33,11 @@ class RedisStore(ABC): # and go! return pipeline.execute() - def remove_object_from_related_stores(self, obj): + def remove_object_from_related_stores(self, obj, stores=None): """remove an object from all stores""" + stores = stores or self.get_stores_for_object(obj) pipeline = r.pipeline() - for store in self.get_stores_for_object(obj): + for store in stores: pipeline.zrem(store, -1, obj.id) pipeline.execute() diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 180191d9..c1f90079 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -75,6 +75,7 @@ INSTALLED_APPS = [ "django_rename_app", "bookwyrm", "celery", + "imagekit", "storages", ] @@ -191,6 +192,9 @@ USER_AGENT = "%s (BookWyrm/%s; +https://%s/)" % ( DOMAIN, ) +# Imagekit generated thumbnails +ENABLE_THUMBNAIL_GENERATION = env.bool("ENABLE_THUMBNAIL_GENERATION", False) +IMAGEKIT_CACHEFILE_DIR = "thumbnails" # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/3.2/howto/static-files/ diff --git a/bookwyrm/static/css/bookwyrm.css b/bookwyrm/static/css/bookwyrm.css index 8fbdcfc6..0724c7f1 100644 --- a/bookwyrm/static/css/bookwyrm.css +++ b/bookwyrm/static/css/bookwyrm.css @@ -29,6 +29,10 @@ body { min-width: 75% !important; } +.modal-card-body { + max-height: 70vh; +} + .clip-text { max-height: 35em; overflow: hidden; @@ -232,16 +236,21 @@ body { /* Cover caption * -------------------------------------------------------------------------- */ -.no-cover .cover_caption { +.no-cover .cover-caption { position: absolute; top: 0; right: 0; bottom: 0; left: 0; - padding: 0.25em; + padding: 0.5em; font-size: 0.75em; color: white; background-color: #002549; + display: flex; + align-items: center; + justify-content: center; + white-space: initial; + text-align: center; } /** Avatars diff --git a/bookwyrm/static/css/fonts/icomoon.eot b/bookwyrm/static/css/fonts/icomoon.eot index 566fb13d..2c801b2b 100644 Binary files a/bookwyrm/static/css/fonts/icomoon.eot and b/bookwyrm/static/css/fonts/icomoon.eot differ diff --git a/bookwyrm/static/css/fonts/icomoon.svg b/bookwyrm/static/css/fonts/icomoon.svg index 6be97327..6327b19e 100644 --- a/bookwyrm/static/css/fonts/icomoon.svg +++ b/bookwyrm/static/css/fonts/icomoon.svg @@ -33,13 +33,12 @@ - + - - - - + + + diff --git a/bookwyrm/static/css/fonts/icomoon.ttf b/bookwyrm/static/css/fonts/icomoon.ttf index 55df6418..242ca739 100644 Binary files a/bookwyrm/static/css/fonts/icomoon.ttf and b/bookwyrm/static/css/fonts/icomoon.ttf differ diff --git a/bookwyrm/static/css/fonts/icomoon.woff b/bookwyrm/static/css/fonts/icomoon.woff index fa53e8cf..67b0f0a6 100644 Binary files a/bookwyrm/static/css/fonts/icomoon.woff and b/bookwyrm/static/css/fonts/icomoon.woff differ diff --git a/bookwyrm/static/css/vendor/icons.css b/bookwyrm/static/css/vendor/icons.css index c78af145..db783c24 100644 --- a/bookwyrm/static/css/vendor/icons.css +++ b/bookwyrm/static/css/vendor/icons.css @@ -1,156 +1,150 @@ - -/** @todo Replace icons with SVG symbols. - @see https://www.youtube.com/watch?v=9xXBYcWgCHA */ @font-face { - font-family: 'icomoon'; - src: url('../fonts/icomoon.eot?n5x55'); - src: url('../fonts/icomoon.eot?n5x55#iefix') format('embedded-opentype'), - url('../fonts/icomoon.ttf?n5x55') format('truetype'), - url('../fonts/icomoon.woff?n5x55') format('woff'), - url('../fonts/icomoon.svg?n5x55#icomoon') format('svg'); - font-weight: normal; - font-style: normal; - font-display: block; + font-family: 'icomoon'; + src: url('../fonts/icomoon.eot?19nagi'); + src: url('../fonts/icomoon.eot?19nagi#iefix') format('embedded-opentype'), + url('../fonts/icomoon.ttf?19nagi') format('truetype'), + url('../fonts/icomoon.woff?19nagi') format('woff'), + url('../fonts/icomoon.svg?19nagi#icomoon') format('svg'); + font-weight: normal; + font-style: normal; + font-display: block; } [class^="icon-"], [class*=" icon-"] { - /* use !important to prevent issues with browser extensions that change fonts */ - font-family: 'icomoon' !important; - speak: never; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'icomoon' !important; + speak: never; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } .icon-graphic-heart:before { - content: "\e91e"; + content: "\e91e"; } .icon-graphic-paperplane:before { - content: "\e91f"; + content: "\e91f"; } .icon-graphic-banknote:before { - content: "\e920"; -} -.icon-stars:before { - content: "\e91a"; + content: "\e920"; } .icon-warning:before { - content: "\e91b"; + content: "\e91b"; } .icon-book:before { - content: "\e900"; + content: "\e900"; } .icon-bookmark:before { - content: "\e91c"; + content: "\e91a"; } .icon-rss:before { - content: "\e91d"; + content: "\e91d"; } .icon-envelope:before { - content: "\e901"; + content: "\e901"; } .icon-arrow-right:before { - content: "\e902"; + content: "\e902"; } .icon-bell:before { - content: "\e903"; + content: "\e903"; } .icon-x:before { - content: "\e904"; + content: "\e904"; } .icon-quote-close:before { - content: "\e905"; + content: "\e905"; } .icon-quote-open:before { - content: "\e906"; + content: "\e906"; } .icon-image:before { - content: "\e907"; + content: "\e907"; } .icon-pencil:before { - content: "\e908"; + content: "\e908"; } .icon-list:before { - content: "\e909"; + content: "\e909"; } .icon-unlock:before { - content: "\e90a"; + content: "\e90a"; } .icon-unlisted:before { - content: "\e90a"; + content: "\e90a"; } .icon-globe:before { - content: "\e90b"; + content: "\e90b"; } .icon-public:before { - content: "\e90b"; + content: "\e90b"; } .icon-lock:before { - content: "\e90c"; + content: "\e90c"; } .icon-followers:before { - content: "\e90c"; + content: "\e90c"; } .icon-chain-broken:before { - content: "\e90d"; + content: "\e90d"; } .icon-chain:before { - content: "\e90e"; + content: "\e90e"; } .icon-comments:before { - content: "\e90f"; + content: "\e90f"; } .icon-comment:before { - content: "\e910"; + content: "\e910"; } .icon-boost:before { - content: "\e911"; + content: "\e911"; } .icon-arrow-left:before { - content: "\e912"; + content: "\e912"; } .icon-arrow-up:before { - content: "\e913"; + content: "\e913"; } .icon-arrow-down:before { - content: "\e914"; + content: "\e914"; } .icon-home:before { - content: "\e915"; + content: "\e915"; } .icon-local:before { - content: "\e916"; + content: "\e916"; } .icon-dots-three:before { - content: "\e917"; + content: "\e917"; } .icon-check:before { - content: "\e918"; + content: "\e918"; } .icon-dots-three-vertical:before { - content: "\e919"; + content: "\e919"; } .icon-search:before { - content: "\e986"; + content: "\e986"; } .icon-star-empty:before { - content: "\e9d7"; + content: "\e9d7"; } .icon-star-half:before { - content: "\e9d8"; + content: "\e9d8"; } .icon-star-full:before { - content: "\e9d9"; + content: "\e9d9"; } .icon-heart:before { - content: "\e9da"; + content: "\e9da"; } .icon-plus:before { - content: "\ea0a"; + content: "\ea0a"; } diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index a4002c2d..894b1fb6 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -138,8 +138,11 @@ let BookWyrm = new class { * @return {undefined} */ toggleAction(event) { - event.preventDefault(); let trigger = event.currentTarget; + + if (!trigger.dataset.allowDefault || event.currentTarget == event.target) { + event.preventDefault(); + } let pressed = trigger.getAttribute('aria-pressed') === 'false'; let targetId = trigger.dataset.controls; @@ -177,6 +180,13 @@ let BookWyrm = new class { this.toggleCheckbox(checkbox, pressed); } + // Toggle form disabled, if appropriate + let disable = trigger.dataset.disables; + + if (disable) { + this.toggleDisabled(disable, !pressed); + } + // Set focus, if appropriate. let focus = trigger.dataset.focusTarget; @@ -227,6 +237,17 @@ let BookWyrm = new class { document.getElementById(checkbox).checked = !!pressed; } + /** + * Enable or disable a form element or fieldset + * + * @param {string} form_element - id of the element + * @param {boolean} pressed - Is the trigger pressed? + * @return {undefined} + */ + toggleDisabled(form_element, pressed) { + document.getElementById(form_element).disabled = !!pressed; + } + /** * Give the focus to an element. * Only move the focus based on user interactions. diff --git a/bookwyrm/storage_backends.py b/bookwyrm/storage_backends.py index e10dfb84..4fb0feff 100644 --- a/bookwyrm/storage_backends.py +++ b/bookwyrm/storage_backends.py @@ -1,4 +1,6 @@ """Handles backends for storages""" +import os +from tempfile import SpooledTemporaryFile from storages.backends.s3boto3 import S3Boto3Storage @@ -15,3 +17,33 @@ class ImagesStorage(S3Boto3Storage): # pylint: disable=abstract-method location = "images" default_acl = "public-read" file_overwrite = False + + """ + This is our custom version of S3Boto3Storage that fixes a bug in + boto3 where the passed in file is closed upon upload. + From: + https://github.com/matthewwithanm/django-imagekit/issues/391#issuecomment-275367006 + https://github.com/boto/boto3/issues/929 + https://github.com/matthewwithanm/django-imagekit/issues/391 + """ + + def _save(self, name, content): + """ + We create a clone of the content file as when this is passed to + boto3 it wrongly closes the file upon upload where as the storage + backend expects it to still be open + """ + # Seek our content back to the start + content.seek(0, os.SEEK_SET) + + # Create a temporary file that will write to disk after a specified + # size. This file will be automatically deleted when closed by + # boto3 or after exiting the `with` statement if the boto3 is fixed + with SpooledTemporaryFile() as content_autoclose: + + # Write our original content into our copy that will be closed by boto3 + content_autoclose.write(content.read()) + + # Upload the object which will auto close the + # content_autoclose instance + return super()._save(name, content_autoclose) diff --git a/bookwyrm/templates/author/author.html b/bookwyrm/templates/author/author.html index 0bc42775..77c7b901 100644 --- a/bookwyrm/templates/author/author.html +++ b/bookwyrm/templates/author/author.html @@ -57,7 +57,7 @@ {% if author.wikipedia_link %}

- + {% trans "Wikipedia" %}

@@ -70,7 +70,7 @@

{% endif %} - + {% if author.inventaire_id %}

@@ -86,7 +86,7 @@

{% endif %} - + {% if author.goodreads_key %}

@@ -109,7 +109,7 @@

diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 2e8ff0d0..e504041b 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -62,7 +62,7 @@
- {% include 'snippets/book_cover.html' with book=book cover_class='is-h-m-mobile' %} + {% include 'snippets/book_cover.html' with size='xxlarge' size_mobile='medium' book=book cover_class='is-h-m-mobile' %} {% include 'snippets/rate_action.html' with user=request.user book=book %}
@@ -134,7 +134,7 @@
{% csrf_token %}

- +

diff --git a/bookwyrm/templates/book/edit_book.html b/bookwyrm/templates/book/edit_book.html index 32018a25..2f6ca324 100644 --- a/bookwyrm/templates/book/edit_book.html +++ b/bookwyrm/templates/book/edit_book.html @@ -42,11 +42,18 @@
{% endif %} -{% if book %} - -{% else %} - -{% endif %} + {% csrf_token %} {% if confirm_mode %} @@ -220,7 +227,7 @@

{% trans "Cover" %}

- {% include 'snippets/book_cover.html' with book=book cover_class='is-h-xl-mobile is-w-auto-tablet' %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-xl-mobile is-w-auto-tablet' size_mobile='xlarge' size='large' %}
diff --git a/bookwyrm/templates/book/edition_filters.html b/bookwyrm/templates/book/edition_filters.html index a55b72af..c41ab0c0 100644 --- a/bookwyrm/templates/book/edition_filters.html +++ b/bookwyrm/templates/book/edition_filters.html @@ -1,6 +1,7 @@ {% extends 'snippets/filters_panel/filters_panel.html' %} {% block filter_fields %} +{% include 'book/search_filter.html' %} {% include 'book/language_filter.html' %} {% include 'book/format_filter.html' %} {% endblock %} diff --git a/bookwyrm/templates/book/editions.html b/bookwyrm/templates/book/editions.html index e2a0bdda..7a4338f1 100644 --- a/bookwyrm/templates/book/editions.html +++ b/bookwyrm/templates/book/editions.html @@ -15,7 +15,7 @@
diff --git a/bookwyrm/templates/book/readthrough.html b/bookwyrm/templates/book/readthrough.html index 05ed3c63..12430f75 100644 --- a/bookwyrm/templates/book/readthrough.html +++ b/bookwyrm/templates/book/readthrough.html @@ -6,7 +6,6 @@
{% trans "Progress Updates:" %} -
    {% if readthrough.finish_date or readthrough.progress %}
  • diff --git a/bookwyrm/templates/book/search_filter.html b/bookwyrm/templates/book/search_filter.html new file mode 100644 index 00000000..f2345a68 --- /dev/null +++ b/bookwyrm/templates/book/search_filter.html @@ -0,0 +1,8 @@ +{% extends 'snippets/filters_panel/filter_field.html' %} +{% load i18n %} + +{% block filter %} + + +{% endblock %} + diff --git a/bookwyrm/templates/discover/large-book.html b/bookwyrm/templates/discover/large-book.html index 81654d57..6d80c3da 100644 --- a/bookwyrm/templates/discover/large-book.html +++ b/bookwyrm/templates/discover/large-book.html @@ -10,7 +10,7 @@ {% include 'snippets/book_cover.html' with cover_class='is-w-l-mobile is-w-auto-tablet' %} + >{% include 'snippets/book_cover.html' with cover_class='is-w-l-mobile is-w-auto-tablet' size='xxlarge' %} {% include 'snippets/stars.html' with rating=book|rating:request.user %}

    diff --git a/bookwyrm/templates/discover/small-book.html b/bookwyrm/templates/discover/small-book.html index 79fbd77c..5b207018 100644 --- a/bookwyrm/templates/discover/small-book.html +++ b/bookwyrm/templates/discover/small-book.html @@ -6,7 +6,7 @@ {% if status.book or status.mention_books.exists %} {% load_book status as book %} - {% include 'snippets/book_cover.html' with cover_class='is-w-l-mobile is-w-auto align to-b to-l' %} + {% include 'snippets/book_cover.html' with cover_class='is-w-l-mobile is-w-auto align to-b to-l' size='xxlarge' %}
    diff --git a/bookwyrm/templates/email/preview.html b/bookwyrm/templates/email/preview.html index 66d856c0..ab432305 100644 --- a/bookwyrm/templates/email/preview.html +++ b/bookwyrm/templates/email/preview.html @@ -1,4 +1,4 @@ - +
    Subject: {% include subject_path %} diff --git a/bookwyrm/templates/feed/feed.html b/bookwyrm/templates/feed/feed.html index 39eebb26..265a467a 100644 --- a/bookwyrm/templates/feed/feed.html +++ b/bookwyrm/templates/feed/feed.html @@ -40,11 +40,10 @@ {% if suggested_users %} {# suggested users for when things are very lonely #} {% include 'feed/suggested_users.html' with suggested_users=suggested_users %} + {% endif %}
    {% endif %} -{% endif %} - {% for activity in activities %} {% if not activities.number > 1 and forloop.counter0 == 2 and suggested_users %} diff --git a/bookwyrm/templates/feed/suggested_users.html b/bookwyrm/templates/feed/suggested_users.html index c095faa5..1de1ae13 100644 --- a/bookwyrm/templates/feed/suggested_users.html +++ b/bookwyrm/templates/feed/suggested_users.html @@ -2,5 +2,5 @@

    {% trans "Who to follow" %}

    {% include 'snippets/suggested_users.html' with suggested_users=suggested_users %} - View directory + {% trans "View directory" %}
    diff --git a/bookwyrm/templates/get_started/book_preview.html b/bookwyrm/templates/get_started/book_preview.html index d8941ad5..893e7593 100644 --- a/bookwyrm/templates/get_started/book_preview.html +++ b/bookwyrm/templates/get_started/book_preview.html @@ -1,6 +1,6 @@ {% load i18n %}
    - {% include 'snippets/book_cover.html' with book=book cover_class='is-h-l is-h-m-mobile' %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-l is-h-m-mobile' size_mobile='medium' size='large' %}
    +{% endblock %} + +{% block reading-dates %} +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +{% endblock %} diff --git a/bookwyrm/templates/snippets/reading_modals/form.html b/bookwyrm/templates/snippets/reading_modals/form.html new file mode 100644 index 00000000..d1ba916f --- /dev/null +++ b/bookwyrm/templates/snippets/reading_modals/form.html @@ -0,0 +1,15 @@ +{% extends "snippets/create_status/layout.html" %} +{% load i18n %} + +{% block form_open %}{% endblock %} + +{% block content_label %} +{% trans "Comment:" %} +{% trans "(Optional)" %} +{% endblock %} + +{% block initial_fields %} + + + +{% endblock %} diff --git a/bookwyrm/templates/snippets/reading_modals/layout.html b/bookwyrm/templates/snippets/reading_modals/layout.html new file mode 100644 index 00000000..0f5dedb0 --- /dev/null +++ b/bookwyrm/templates/snippets/reading_modals/layout.html @@ -0,0 +1,28 @@ +{% extends 'components/modal.html' %} +{% load i18n %} +{% load utilities %} + +{% block modal-body %} + +{% block reading-dates %}{% endblock %} + +{% with 0|uuid as local_uuid %} +
    + + +
    + +
    + +
    + {% include "snippets/reading_modals/form.html" with optional=True %} +
    +
    +{% endwith %} + +{% endblock %} diff --git a/bookwyrm/templates/snippets/shelve_button/progress_update_modal.html b/bookwyrm/templates/snippets/reading_modals/progress_update_modal.html similarity index 100% rename from bookwyrm/templates/snippets/shelve_button/progress_update_modal.html rename to bookwyrm/templates/snippets/reading_modals/progress_update_modal.html diff --git a/bookwyrm/templates/snippets/reading_modals/start_reading_modal.html b/bookwyrm/templates/snippets/reading_modals/start_reading_modal.html new file mode 100644 index 00000000..099fd915 --- /dev/null +++ b/bookwyrm/templates/snippets/reading_modals/start_reading_modal.html @@ -0,0 +1,24 @@ +{% extends 'snippets/reading_modals/layout.html' %} +{% load i18n %} +{% load utilities %} + +{% block modal-title %} +{% blocktrans trimmed with book_title=book|book_title %} +Start "{{ book_title }}" +{% endblocktrans %} +{% endblock %} + +{% block modal-form-open %} + + +{% csrf_token %} +{% endblock %} + +{% block reading-dates %} +
    + + +
    +{% endblock %} diff --git a/bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html b/bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html new file mode 100644 index 00000000..1213b18e --- /dev/null +++ b/bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html @@ -0,0 +1,15 @@ +{% extends 'snippets/reading_modals/layout.html' %} +{% load i18n %} +{% load utilities %} + +{% block modal-title %} +{% blocktrans trimmed with book_title=book|book_title %} +Want to Read "{{ book_title }}" +{% endblocktrans %} +{% endblock %} + +{% block modal-form-open %} + + +{% csrf_token %} +{% endblock %} diff --git a/bookwyrm/templates/snippets/search_result_text.html b/bookwyrm/templates/snippets/search_result_text.html index e39d3410..40fa5a3d 100644 --- a/bookwyrm/templates/snippets/search_result_text.html +++ b/bookwyrm/templates/snippets/search_result_text.html @@ -1,7 +1,7 @@ {% load i18n %}
    - {% include 'snippets/book_cover.html' with book=result cover_class='is-w-xs is-h-xs' img_path=false %} + {% include 'snippets/book_cover.html' with book=result cover_class='is-w-xs is-h-xs' external_path=True %}
    @@ -10,7 +10,7 @@ {{ result.title }} diff --git a/bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html b/bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html deleted file mode 100644 index 36addc7b..00000000 --- a/bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html +++ /dev/null @@ -1,48 +0,0 @@ -{% extends 'components/modal.html' %} -{% load i18n %} - -{% block modal-title %} -{% blocktrans with book_title=book.title %}Finish "{{ book_title }}"{% endblocktrans %} -{% endblock %} - - -{% block modal-form-open %} - -{% endblock %} - -{% block modal-body %} - -{% endblock %} - -{% block modal-footer %} -
    -
    - - {% include 'snippets/privacy_select.html' %} -
    -
    - - {% trans "Cancel" as button_text %} - {% include 'snippets/toggle/close_button.html' with text=button_text controls_text="finish-reading" controls_uid=uuid %} -
    -
    -{% endblock %} -{% block modal-form-close %}{% endblock %} diff --git a/bookwyrm/templates/snippets/shelve_button/shelve_button.html b/bookwyrm/templates/snippets/shelve_button/shelve_button.html index 40a9f6e7..18941812 100644 --- a/bookwyrm/templates/snippets/shelve_button/shelve_button.html +++ b/bookwyrm/templates/snippets/shelve_button/shelve_button.html @@ -19,13 +19,13 @@ {% endif %}
    -{% include 'snippets/shelve_button/want_to_read_modal.html' with book=active_shelf.book controls_text="want_to_read" controls_uid=uuid %} +{% include 'snippets/reading_modals/want_to_read_modal.html' with book=active_shelf.book controls_text="want_to_read" controls_uid=uuid %} -{% include 'snippets/shelve_button/start_reading_modal.html' with book=active_shelf.book controls_text="start_reading" controls_uid=uuid %} +{% include 'snippets/reading_modals/start_reading_modal.html' with book=active_shelf.book controls_text="start_reading" controls_uid=uuid %} -{% include 'snippets/shelve_button/finish_reading_modal.html' with book=active_shelf.book controls_text="finish_reading" controls_uid=uuid readthrough=readthrough %} +{% include 'snippets/reading_modals/finish_reading_modal.html' with book=active_shelf.book controls_text="finish_reading" controls_uid=uuid readthrough=readthrough %} -{% include 'snippets/shelve_button/progress_update_modal.html' with book=active_shelf_book.book controls_text="progress_update" controls_uid=uuid readthrough=readthrough %} +{% include 'snippets/reading_modals/progress_update_modal.html' with book=active_shelf_book.book controls_text="progress_update" controls_uid=uuid readthrough=readthrough %} {% endwith %} {% endif %} diff --git a/bookwyrm/templates/snippets/shelve_button/shelve_button_options.html b/bookwyrm/templates/snippets/shelve_button/shelve_button_options.html index 41e0c9ba..5cce1477 100644 --- a/bookwyrm/templates/snippets/shelve_button/shelve_button_options.html +++ b/bookwyrm/templates/snippets/shelve_button/shelve_button_options.html @@ -13,7 +13,9 @@ {% include 'snippets/toggle/toggle_button.html' with class=class text=button_text controls_text="start_reading" controls_uid=button_uuid focus="modal_title_start_reading" disabled=is_current fallback_url=fallback_url %} {% endif %}{% elif shelf.identifier == 'read' and active_shelf.shelf.identifier == 'read' %}{% if not dropdown or active_shelf.shelf.identifier|next_shelf != shelf.identifier %} - {% endif %}{% elif shelf.identifier == 'read' %}{% if not dropdown or active_shelf.shelf.identifier|next_shelf != shelf.identifier %} {% trans "Finish reading" as button_text %} diff --git a/bookwyrm/templates/snippets/shelve_button/start_reading_modal.html b/bookwyrm/templates/snippets/shelve_button/start_reading_modal.html deleted file mode 100644 index 1858313b..00000000 --- a/bookwyrm/templates/snippets/shelve_button/start_reading_modal.html +++ /dev/null @@ -1,42 +0,0 @@ -{% extends 'components/modal.html' %} -{% load i18n %} - -{% block modal-title %} -{% blocktrans trimmed with book_title=book.title %} -Start "{{ book_title }}" -{% endblocktrans %} -{% endblock %} - -{% block modal-form-open %} -
    -{% endblock %} - -{% block modal-body %} - -{% endblock %} - -{% block modal-footer %} -
    -
    - - {% include 'snippets/privacy_select.html' %} -
    -
    - - {% trans "Cancel" as button_text %} - {% include 'snippets/toggle/toggle_button.html' with text=button_text controls_text="start-reading" controls_uid=uuid %} -
    -
    -{% endblock %} -{% block modal-form-close %}
    {% endblock %} diff --git a/bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html b/bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html deleted file mode 100644 index 643e4a20..00000000 --- a/bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends 'components/modal.html' %} -{% load i18n %} - -{% block modal-title %} -{% blocktrans with book_title=book.title %}Want to Read "{{ book_title }}"{% endblocktrans %} -{% endblock %} - -{% block modal-form-open %} -
    - {% csrf_token %} - - -{% endblock %} - -{% block modal-footer %} -
    -
    - - {% include 'snippets/privacy_select.html' %} -
    -
    - - {% trans "Cancel" as button_text %} - {% include 'snippets/toggle/toggle_button.html' with text=button_text controls_text="want-to-read" controls_uid=uuid %} -
    -
    -{% endblock %} -{% block modal-form-close %}
    {% endblock %} diff --git a/bookwyrm/templates/snippets/status/body.html b/bookwyrm/templates/snippets/status/body.html index d205f423..2c8a0e04 100644 --- a/bookwyrm/templates/snippets/status/body.html +++ b/bookwyrm/templates/snippets/status/body.html @@ -3,7 +3,7 @@ {% block card-content %} {% with status_type=status.status_type %} -{% if status_type == 'GeneratedNote' or status_type == 'Rating' or not status.content %} +{% if status_type == 'GeneratedNote' or status_type == 'Rating' %} {% include 'snippets/status/generated_status.html' with status=status %} {% else %} {% include 'snippets/status/content_status.html' with status=status %} diff --git a/bookwyrm/templates/snippets/status/content_status.html b/bookwyrm/templates/snippets/status/content_status.html index ec959d59..781af279 100644 --- a/bookwyrm/templates/snippets/status/content_status.html +++ b/bookwyrm/templates/snippets/status/content_status.html @@ -19,7 +19,7 @@
    - {% include 'snippets/book_cover.html' with book=book cover_class='is-w-s-mobile is-h-l-tablet' %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-w-s-mobile is-h-l-tablet' size_mobile='medium' size='large' %} {% include 'snippets/stars.html' with rating=book|rating:request.user %} diff --git a/bookwyrm/templates/snippets/status/generated_status.html b/bookwyrm/templates/snippets/status/generated_status.html index 71ce2d99..e73b9c32 100644 --- a/bookwyrm/templates/snippets/status/generated_status.html +++ b/bookwyrm/templates/snippets/status/generated_status.html @@ -8,7 +8,7 @@ {% with book=status.book|default:status.mention_books.first %}
    - {% include 'snippets/book_cover.html' with book=book cover_class='is-h-xs is-h-s-tablet' %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-xs is-h-s-tablet' size='small' size_mobile='xsmall' %}
    diff --git a/bookwyrm/templates/snippets/status/headers/comment.html b/bookwyrm/templates/snippets/status/headers/comment.html index 6886cfed..88ba30ca 100644 --- a/bookwyrm/templates/snippets/status/headers/comment.html +++ b/bookwyrm/templates/snippets/status/headers/comment.html @@ -1,2 +1,2 @@ {% load i18n %}{% load utilities %} -{% blocktrans with book_path=book.local_path book=status.book|book_title %}commented on {{ book }}{% endblocktrans %} +{% blocktrans with book_path=status.book.local_path book=status.book|book_title %}commented on {{ book }}{% endblocktrans %} diff --git a/bookwyrm/templates/snippets/status/headers/note.html b/bookwyrm/templates/snippets/status/headers/note.html index 58c76f64..b07b9109 100644 --- a/bookwyrm/templates/snippets/status/headers/note.html +++ b/bookwyrm/templates/snippets/status/headers/note.html @@ -13,7 +13,7 @@ {% with parent_status=status|parent %} {% if parent_status %} {% blocktrans trimmed with username=parent_status.user.display_name user_path=parent_status.user.local_path status_path=parent_status.local_path %} -replied to {{ username}}'s status +replied to {{ username}}'s status {% endblocktrans %} {% endif %} {% endwith %} diff --git a/bookwyrm/templates/snippets/status/headers/read.html b/bookwyrm/templates/snippets/status/headers/read.html index f942c0f0..bc6147df 100644 --- a/bookwyrm/templates/snippets/status/headers/read.html +++ b/bookwyrm/templates/snippets/status/headers/read.html @@ -1,7 +1,8 @@ {% spaceless %} -{% load i18n %}{% load utilities %} +{% load i18n %} +{% load utilities %} +{% load status_display %} -{% with book=status.mention_books.first %} +{% load_book status as book %} {% blocktrans with book_path=book.remote_id book=book|book_title %}finished reading {{ book }}{% endblocktrans %} -{% endwith %} {% endspaceless %} diff --git a/bookwyrm/templates/snippets/status/headers/reading.html b/bookwyrm/templates/snippets/status/headers/reading.html index 460c4cae..e8b51f7b 100644 --- a/bookwyrm/templates/snippets/status/headers/reading.html +++ b/bookwyrm/templates/snippets/status/headers/reading.html @@ -1,9 +1,8 @@ {% spaceless %} {% load i18n %} {% load utilities %} +{% load status_display %} -{% with book=status.mention_books.first %} +{% load_book status as book %} {% blocktrans with book_path=book.remote_id book=book|book_title %}started reading {{ book }}{% endblocktrans %} -{% endwith %} - {% endspaceless %} diff --git a/bookwyrm/templates/snippets/status/headers/to_read.html b/bookwyrm/templates/snippets/status/headers/to_read.html index 7b89a775..c252e71d 100644 --- a/bookwyrm/templates/snippets/status/headers/to_read.html +++ b/bookwyrm/templates/snippets/status/headers/to_read.html @@ -1,8 +1,8 @@ {% spaceless %} {% load i18n %} {% load utilities %} +{% load status_display %} -{% with book=status.mention_books.first %} +{% load_book status as book %} {% blocktrans with book_path=book.remote_id book=book|book_title %}{{ username }} wants to read {{ book }}{% endblocktrans %} -{% endwith %} {% endspaceless %} diff --git a/bookwyrm/templates/snippets/trimmed_text.html b/bookwyrm/templates/snippets/trimmed_text.html index d2e8bc30..e0227a44 100644 --- a/bookwyrm/templates/snippets/trimmed_text.html +++ b/bookwyrm/templates/snippets/trimmed_text.html @@ -25,7 +25,7 @@
    {{ full }}
    @@ -41,7 +41,7 @@
    {{ full }}
    diff --git a/bookwyrm/templates/user/layout.html b/bookwyrm/templates/user/layout.html old mode 100644 new mode 100755 index 41d52812..8ca3bd18 --- a/bookwyrm/templates/user/layout.html +++ b/bookwyrm/templates/user/layout.html @@ -31,8 +31,8 @@ {% spaceless %}
    {{ user.summary|to_markdown|safe }} - {% endspaceless %}
    + {% endspaceless %} {% endif %}
    {% if not is_self and request.user.is_authenticated %} diff --git a/bookwyrm/templates/user/lists.html b/bookwyrm/templates/user/lists.html old mode 100644 new mode 100755 diff --git a/bookwyrm/templates/user/shelf/shelf.html b/bookwyrm/templates/user/shelf/shelf.html index 32cad25d..61458fcc 100644 --- a/bookwyrm/templates/user/shelf/shelf.html +++ b/bookwyrm/templates/user/shelf/shelf.html @@ -1,4 +1,4 @@ -{% extends 'user/layout.html' %} +{% extends 'layout.html' %} {% load bookwyrm_tags %} {% load utilities %} {% load humanize %} @@ -8,15 +8,17 @@ {% include 'user/shelf/books_header.html' %} {% endblock %} -{% block header %} -
    +{% block opengraph_images %} + {% include 'snippets/opengraph_images.html' with image=user.preview_image %} +{% endblock %} + +{% block content %} +

    {% include 'user/shelf/books_header.html' %}

    -{% endblock %} -{% block tabs %}
    @@ -41,9 +43,7 @@
    {% endif %}
    -{% endblock %} -{% block panel %}
    {% include 'user/shelf/create_shelf_form.html' with controls_text='create_shelf_form' %}
    @@ -94,7 +94,7 @@ {% spaceless %} - {% include 'snippets/book_cover.html' with book=book cover_class='is-w-s-tablet is-h-s' %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-w-s-tablet is-h-s' size='small' %} {{ book.title }} diff --git a/bookwyrm/templates/user/user.html b/bookwyrm/templates/user/user.html old mode 100644 new mode 100755 index ee924977..f360a30a --- a/bookwyrm/templates/user/user.html +++ b/bookwyrm/templates/user/user.html @@ -35,7 +35,7 @@ {% for book in shelf.books %} {% endfor %} @@ -71,7 +71,7 @@ {% endfor %} {% if not activities %}
    -

    {% trans "No activities yet!" %} +

    {% trans "No activities yet!" %}

    {% endif %} diff --git a/bookwyrm/templates/user/user_preview.html b/bookwyrm/templates/user/user_preview.html old mode 100644 new mode 100755 diff --git a/bookwyrm/templates/user_admin/user_admin_filters.html b/bookwyrm/templates/user_admin/user_admin_filters.html index 57e017e5..5283b4e9 100644 --- a/bookwyrm/templates/user_admin/user_admin_filters.html +++ b/bookwyrm/templates/user_admin/user_admin_filters.html @@ -3,4 +3,5 @@ {% block filter_fields %} {% include 'user_admin/server_filter.html' %} {% include 'user_admin/username_filter.html' %} +{% include 'directory/community_filter.html' %} {% endblock %} diff --git a/bookwyrm/templates/widgets/clearable_file_input_with_warning.html b/bookwyrm/templates/widgets/clearable_file_input_with_warning.html index e4906cb9..6370ba39 100644 --- a/bookwyrm/templates/widgets/clearable_file_input_with_warning.html +++ b/bookwyrm/templates/widgets/clearable_file_input_with_warning.html @@ -2,23 +2,30 @@ {% load utilities %} {% if widget.is_initial %} -

    - {{ widget.initial_text }}: - {{ widget.value|truncatepath:10 }} -

    -{% if not widget.required %} -

    -

    + {{ widget.initial_text }}: + {{ widget.value|truncatepath:10 }} +

    + + {% if not widget.required %} +

    + {% endif %} -

    -

    -{{ widget.input_text }}: -{% else %} -

    + +

    + {% endif %} + {% endif %} - - + +

    + {% if widget.is_initial %} + {{ widget.input_text }}: + {% endif %} + + +

    diff --git a/bookwyrm/templatetags/interaction.py b/bookwyrm/templatetags/interaction.py index bbe74600..64c91f89 100644 --- a/bookwyrm/templatetags/interaction.py +++ b/bookwyrm/templatetags/interaction.py @@ -16,3 +16,9 @@ def get_user_liked(user, status): def get_user_boosted(user, status): """did the given user fav a status?""" return status.boosters.filter(user=user).exists() + + +@register.filter(name="saved") +def get_user_saved_lists(user, book_list): + """did the user save a list""" + return user.saved_lists.filter(id=book_list.id).exists() diff --git a/bookwyrm/templatetags/status_display.py b/bookwyrm/templatetags/status_display.py index 0d013775..c92b1877 100644 --- a/bookwyrm/templatetags/status_display.py +++ b/bookwyrm/templatetags/status_display.py @@ -70,7 +70,13 @@ def get_header_template(status): """get the path for the status template""" if isinstance(status, models.Boost): status = status.boosted_status - filename = "snippets/status/headers/{:s}.html".format(status.status_type.lower()) + try: + header_type = status.reading_status.replace("-", "_") + if not header_type: + raise AttributeError() + except AttributeError: + header_type = status.status_type.lower() + filename = f"snippets/status/headers/{header_type}.html" header_template = select_template([filename, "snippets/status/headers/note.html"]) return header_template.render({"status": status}) diff --git a/bookwyrm/templatetags/utilities.py b/bookwyrm/templatetags/utilities.py index 23b6685d..abb52499 100644 --- a/bookwyrm/templatetags/utilities.py +++ b/bookwyrm/templatetags/utilities.py @@ -3,6 +3,7 @@ import os from uuid import uuid4 from django import template from django.utils.translation import gettext_lazy as _ +from django.templatetags.static import static register = template.Library() @@ -50,3 +51,15 @@ def truncatepath(value, arg): except ValueError: # invalid literal for int() return path_list[-1] # Fail silently. return "%s/…%s" % (path_list[0], path_list[-1][-length:]) + + +@register.simple_tag(takes_context=False) +def get_book_cover_thumbnail(book, size="medium", ext="jpg"): + """Returns a book thumbnail at the specified size and extension, with fallback if needed""" + if size == "": + size = "medium" + try: + cover_thumbnail = getattr(book, "cover_bw_book_%s_%s" % (size, ext)) + return cover_thumbnail.url + except OSError: + return static("images/no_cover.jpg") diff --git a/bookwyrm/tests/test_activitystreams.py b/bookwyrm/tests/test_activitystreams.py index ac57d8b3..56ba844a 100644 --- a/bookwyrm/tests/test_activitystreams.py +++ b/bookwyrm/tests/test_activitystreams.py @@ -8,6 +8,7 @@ from bookwyrm import activitystreams, models @patch("bookwyrm.activitystreams.ActivityStream.add_status") @patch("bookwyrm.activitystreams.BooksStream.add_book_statuses") @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +# pylint: disable=too-many-public-methods class Activitystreams(TestCase): """using redis to build activity streams""" @@ -286,3 +287,76 @@ class Activitystreams(TestCase): # yes book, yes audience result = activitystreams.BooksStream().get_statuses_for_user(self.local_user) self.assertEqual(list(result), [status]) + + @patch("bookwyrm.activitystreams.LocalStream.remove_object_from_related_stores") + @patch("bookwyrm.activitystreams.BooksStream.remove_object_from_related_stores") + def test_boost_to_another_timeline(self, *_): + """add a boost and deduplicate the boosted status on the timeline""" + status = models.Status.objects.create(user=self.local_user, content="hi") + with patch( + "bookwyrm.activitystreams.HomeStream.remove_object_from_related_stores" + ): + boost = models.Boost.objects.create( + boosted_status=status, + user=self.another_user, + ) + with patch( + "bookwyrm.activitystreams.HomeStream.remove_object_from_related_stores" + ) as mock: + activitystreams.add_status_on_create(models.Boost, boost, True) + self.assertTrue(mock.called) + call_args = mock.call_args + self.assertEqual(call_args[0][0], status) + self.assertEqual( + call_args[1]["stores"], ["{:d}-home".format(self.another_user.id)] + ) + + @patch("bookwyrm.activitystreams.LocalStream.remove_object_from_related_stores") + @patch("bookwyrm.activitystreams.BooksStream.remove_object_from_related_stores") + def test_boost_to_following_timeline(self, *_): + """add a boost and deduplicate the boosted status on the timeline""" + self.local_user.following.add(self.another_user) + status = models.Status.objects.create(user=self.local_user, content="hi") + with patch( + "bookwyrm.activitystreams.HomeStream.remove_object_from_related_stores" + ): + boost = models.Boost.objects.create( + boosted_status=status, + user=self.another_user, + ) + with patch( + "bookwyrm.activitystreams.HomeStream.remove_object_from_related_stores" + ) as mock: + activitystreams.add_status_on_create(models.Boost, boost, True) + self.assertTrue(mock.called) + call_args = mock.call_args + self.assertEqual(call_args[0][0], status) + self.assertTrue( + "{:d}-home".format(self.another_user.id) in call_args[1]["stores"] + ) + self.assertTrue( + "{:d}-home".format(self.local_user.id) in call_args[1]["stores"] + ) + + @patch("bookwyrm.activitystreams.LocalStream.remove_object_from_related_stores") + @patch("bookwyrm.activitystreams.BooksStream.remove_object_from_related_stores") + def test_boost_to_same_timeline(self, *_): + """add a boost and deduplicate the boosted status on the timeline""" + status = models.Status.objects.create(user=self.local_user, content="hi") + with patch( + "bookwyrm.activitystreams.HomeStream.remove_object_from_related_stores" + ): + boost = models.Boost.objects.create( + boosted_status=status, + user=self.local_user, + ) + with patch( + "bookwyrm.activitystreams.HomeStream.remove_object_from_related_stores" + ) as mock: + activitystreams.add_status_on_create(models.Boost, boost, True) + self.assertTrue(mock.called) + call_args = mock.call_args + self.assertEqual(call_args[0][0], status) + self.assertEqual( + call_args[1]["stores"], ["{:d}-home".format(self.local_user.id)] + ) diff --git a/bookwyrm/tests/views/inbox/test_inbox_create.py b/bookwyrm/tests/views/inbox/test_inbox_create.py index 6e891723..059d0522 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_create.py +++ b/bookwyrm/tests/views/inbox/test_inbox_create.py @@ -77,6 +77,33 @@ class InboxCreate(TestCase): views.inbox.activity_task(activity) self.assertEqual(models.Status.objects.count(), 1) + @patch("bookwyrm.activitystreams.ActivityStream.add_status") + def test_create_comment_with_reading_status(self, *_): + """the "it justs works" mode""" + datafile = pathlib.Path(__file__).parent.joinpath("../../data/ap_comment.json") + status_data = json.loads(datafile.read_bytes()) + status_data["readingStatus"] = "to-read" + + models.Edition.objects.create( + title="Test Book", remote_id="https://example.com/book/1" + ) + activity = self.create_json + activity["object"] = status_data + + with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: + views.inbox.activity_task(activity) + self.assertTrue(redis_mock.called) + + status = models.Comment.objects.get() + self.assertEqual(status.remote_id, "https://example.com/user/mouse/comment/6") + self.assertEqual(status.content, "commentary") + self.assertEqual(status.reading_status, "to-read") + self.assertEqual(status.user, self.local_user) + + # while we're here, lets ensure we avoid dupes + views.inbox.activity_task(activity) + self.assertEqual(models.Status.objects.count(), 1) + def test_create_status_remote_note_with_mention(self, _): """should only create it under the right circumstances""" self.assertFalse( diff --git a/bookwyrm/tests/views/test_book.py b/bookwyrm/tests/views/test_book.py index c5d86a12..2cd50302 100644 --- a/bookwyrm/tests/views/test_book.py +++ b/bookwyrm/tests/views/test_book.py @@ -280,49 +280,6 @@ class BookViews(TestCase): self.assertEqual(book.authors.first().name, "Sappho") self.assertEqual(book.authors.first(), book.parent_work.authors.first()) - @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") - def test_switch_edition(self, _): - """updates user's relationships to a book""" - work = models.Work.objects.create(title="test work") - edition1 = models.Edition.objects.create(title="first ed", parent_work=work) - edition2 = models.Edition.objects.create(title="second ed", parent_work=work) - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - shelf = models.Shelf.objects.create(name="Test Shelf", user=self.local_user) - models.ShelfBook.objects.create( - book=edition1, - user=self.local_user, - shelf=shelf, - ) - models.ReadThrough.objects.create(user=self.local_user, book=edition1) - - self.assertEqual(models.ShelfBook.objects.get().book, edition1) - self.assertEqual(models.ReadThrough.objects.get().book, edition1) - request = self.factory.post("", {"edition": edition2.id}) - request.user = self.local_user - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - views.switch_edition(request) - - self.assertEqual(models.ShelfBook.objects.get().book, edition2) - self.assertEqual(models.ReadThrough.objects.get().book, edition2) - - def test_editions_page(self): - """there are so many views, this just makes sure it LOADS""" - view = views.Editions.as_view() - request = self.factory.get("") - with patch("bookwyrm.views.books.is_api_request") as is_api: - is_api.return_value = False - result = view(request, self.work.id) - self.assertIsInstance(result, TemplateResponse) - result.render() - self.assertEqual(result.status_code, 200) - - request = self.factory.get("") - with patch("bookwyrm.views.books.is_api_request") as is_api: - is_api.return_value = True - result = view(request, self.work.id) - self.assertIsInstance(result, ActivitypubResponse) - self.assertEqual(result.status_code, 200) - def test_upload_cover_file(self): """add a cover via file upload""" self.assertFalse(self.book.cover) diff --git a/bookwyrm/tests/views/test_editions.py b/bookwyrm/tests/views/test_editions.py new file mode 100644 index 00000000..1bd23ae1 --- /dev/null +++ b/bookwyrm/tests/views/test_editions.py @@ -0,0 +1,126 @@ +""" test for app action functionality """ +from unittest.mock import patch + +from django.template.response import TemplateResponse +from django.test import TestCase +from django.test.client import RequestFactory + +from bookwyrm import models, views +from bookwyrm.activitypub import ActivitypubResponse + + +class BookViews(TestCase): + """books books books""" + + def setUp(self): + """we need basic test data and mocks""" + self.factory = RequestFactory() + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + self.local_user = models.User.objects.create_user( + "mouse@local.com", + "mouse@mouse.com", + "mouseword", + local=True, + localname="mouse", + remote_id="https://example.com/users/mouse", + ) + self.work = models.Work.objects.create(title="Test Work") + self.book = models.Edition.objects.create( + title="Example Edition", + remote_id="https://example.com/book/1", + parent_work=self.work, + physical_format="paperback", + ) + + models.SiteSettings.objects.create() + + def test_editions_page(self): + """there are so many views, this just makes sure it LOADS""" + view = views.Editions.as_view() + request = self.factory.get("") + with patch("bookwyrm.views.editions.is_api_request") as is_api: + is_api.return_value = False + result = view(request, self.work.id) + self.assertIsInstance(result, TemplateResponse) + result.render() + self.assertEqual(result.status_code, 200) + self.assertTrue("paperback" in result.context_data["formats"]) + + def test_editions_page_filtered(self): + """editions view with filters""" + models.Edition.objects.create( + title="Fish", + physical_format="okay", + parent_work=self.work, + ) + view = views.Editions.as_view() + request = self.factory.get("") + with patch("bookwyrm.views.editions.is_api_request") as is_api: + is_api.return_value = False + result = view(request, self.work.id) + self.assertIsInstance(result, TemplateResponse) + result.render() + self.assertEqual(result.status_code, 200) + self.assertEqual(len(result.context_data["editions"].object_list), 2) + self.assertEqual(len(result.context_data["formats"]), 2) + self.assertTrue("paperback" in result.context_data["formats"]) + self.assertTrue("okay" in result.context_data["formats"]) + + request = self.factory.get("", {"q": "fish"}) + with patch("bookwyrm.views.editions.is_api_request") as is_api: + is_api.return_value = False + result = view(request, self.work.id) + result.render() + self.assertEqual(result.status_code, 200) + self.assertEqual(len(result.context_data["editions"].object_list), 1) + + request = self.factory.get("", {"q": "okay"}) + with patch("bookwyrm.views.editions.is_api_request") as is_api: + is_api.return_value = False + result = view(request, self.work.id) + result.render() + self.assertEqual(result.status_code, 200) + self.assertEqual(len(result.context_data["editions"].object_list), 1) + + request = self.factory.get("", {"format": "okay"}) + with patch("bookwyrm.views.editions.is_api_request") as is_api: + is_api.return_value = False + result = view(request, self.work.id) + result.render() + self.assertEqual(result.status_code, 200) + self.assertEqual(len(result.context_data["editions"].object_list), 1) + + def test_editions_page_api(self): + """there are so many views, this just makes sure it LOADS""" + view = views.Editions.as_view() + request = self.factory.get("") + with patch("bookwyrm.views.editions.is_api_request") as is_api: + is_api.return_value = True + result = view(request, self.work.id) + self.assertIsInstance(result, ActivitypubResponse) + self.assertEqual(result.status_code, 200) + + @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") + def test_switch_edition(self, _): + """updates user's relationships to a book""" + work = models.Work.objects.create(title="test work") + edition1 = models.Edition.objects.create(title="first ed", parent_work=work) + edition2 = models.Edition.objects.create(title="second ed", parent_work=work) + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): + shelf = models.Shelf.objects.create(name="Test Shelf", user=self.local_user) + models.ShelfBook.objects.create( + book=edition1, + user=self.local_user, + shelf=shelf, + ) + models.ReadThrough.objects.create(user=self.local_user, book=edition1) + + self.assertEqual(models.ShelfBook.objects.get().book, edition1) + self.assertEqual(models.ReadThrough.objects.get().book, edition1) + request = self.factory.post("", {"edition": edition2.id}) + request.user = self.local_user + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): + views.switch_edition(request) + + self.assertEqual(models.ShelfBook.objects.get().book, edition2) + self.assertEqual(models.ReadThrough.objects.get().book, edition2) diff --git a/bookwyrm/tests/views/test_list.py b/bookwyrm/tests/views/test_list.py index 988d8d4a..d5e917c3 100644 --- a/bookwyrm/tests/views/test_list.py +++ b/bookwyrm/tests/views/test_list.py @@ -91,6 +91,52 @@ class ListViews(TestCase): result.render() self.assertEqual(result.status_code, 200) + def test_saved_lists_page(self): + """there are so many views, this just makes sure it LOADS""" + view = views.SavedLists.as_view() + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): + booklist = models.List.objects.create( + name="Public list", user=self.local_user + ) + models.List.objects.create( + name="Private list", privacy="direct", user=self.local_user + ) + self.local_user.saved_lists.add(booklist) + request = self.factory.get("") + request.user = self.local_user + + result = view(request) + self.assertIsInstance(result, TemplateResponse) + result.render() + self.assertEqual(result.status_code, 200) + self.assertEqual(result.context_data["lists"].object_list, [booklist]) + + def test_saved_lists_page_empty(self): + """there are so many views, this just makes sure it LOADS""" + view = views.SavedLists.as_view() + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): + models.List.objects.create(name="Public list", user=self.local_user) + models.List.objects.create( + name="Private list", privacy="direct", user=self.local_user + ) + request = self.factory.get("") + request.user = self.local_user + + result = view(request) + self.assertIsInstance(result, TemplateResponse) + result.render() + self.assertEqual(result.status_code, 200) + self.assertEqual(len(result.context_data["lists"].object_list), 0) + + def test_saved_lists_page_logged_out(self): + """logged out saved lists""" + view = views.SavedLists.as_view() + request = self.factory.get("") + request.user = self.anonymous_user + + result = view(request) + self.assertEqual(result.status_code, 302) + def test_lists_create(self): """create list view""" view = views.Lists.as_view() @@ -328,15 +374,8 @@ class ListViews(TestCase): def test_user_lists_page_logged_out(self): """there are so many views, this just makes sure it LOADS""" view = views.UserLists.as_view() - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - models.List.objects.create(name="Public list", user=self.local_user) - models.List.objects.create( - name="Private list", privacy="direct", user=self.local_user - ) request = self.factory.get("") request.user = self.anonymous_user result = view(request, self.local_user.username) - self.assertIsInstance(result, TemplateResponse) - result.render() - self.assertEqual(result.status_code, 200) + self.assertEqual(result.status_code, 302) diff --git a/bookwyrm/tests/views/test_rss_feed.py b/bookwyrm/tests/views/test_rss_feed.py index 3608b043..f2d3baf2 100644 --- a/bookwyrm/tests/views/test_rss_feed.py +++ b/bookwyrm/tests/views/test_rss_feed.py @@ -1,5 +1,4 @@ """ testing import """ - from unittest.mock import patch from django.test import RequestFactory, TestCase @@ -7,59 +6,77 @@ from bookwyrm import models from bookwyrm.views import rss_feed +@patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") +@patch("bookwyrm.activitystreams.ActivityStream.get_activity_stream") +@patch("bookwyrm.activitystreams.ActivityStream.add_status") class RssFeedView(TestCase): """rss feed behaves as expected""" def setUp(self): - """test data""" - self.site = models.SiteSettings.objects.create() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): - self.user = models.User.objects.create_user( + self.local_user = models.User.objects.create_user( "rss_user", "rss@test.rss", "password", local=True ) - work = models.Work.objects.create(title="Test Work") self.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, ) - - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): - self.review = models.Review.objects.create( - name="Review name", - content="test content", - rating=3, - user=self.user, - book=self.book, - ) - - self.quote = models.Quotation.objects.create( - quote="a sickening sense", - content="test content", - user=self.user, - book=self.book, - ) - - self.generatednote = models.GeneratedNote.objects.create( - content="test content", user=self.user - ) - self.factory = RequestFactory() - @patch("bookwyrm.activitystreams.ActivityStream.get_activity_stream") - def test_rss_feed(self, _): + models.SiteSettings.objects.create() + + def test_rss_empty(self, *_): """load an rss feed""" view = rss_feed.RssFeed() request = self.factory.get("/user/rss_user/rss") - request.user = self.user - with patch("bookwyrm.models.SiteSettings.objects.get") as site: - site.return_value = self.site - result = view(request, username=self.user.username) + request.user = self.local_user + result = view(request, username=self.local_user.username) + self.assertEqual(result.status_code, 200) + self.assertIn(b"Status updates from rss_user", result.content) + + def test_rss_comment(self, *_): + """load an rss feed""" + models.Comment.objects.create( + content="comment test content", + user=self.local_user, + book=self.book, + ) + view = rss_feed.RssFeed() + request = self.factory.get("/user/rss_user/rss") + request.user = self.local_user + result = view(request, username=self.local_user.username) + self.assertEqual(result.status_code, 200) + self.assertIn(b"Example Edition", result.content) + + def test_rss_review(self, *_): + """load an rss feed""" + models.Review.objects.create( + name="Review name", + content="test content", + rating=3, + user=self.local_user, + book=self.book, + ) + view = rss_feed.RssFeed() + request = self.factory.get("/user/rss_user/rss") + request.user = self.local_user + result = view(request, username=self.local_user.username) + self.assertEqual(result.status_code, 200) + + def test_rss_quotation(self, *_): + """load an rss feed""" + models.Quotation.objects.create( + quote="a sickening sense", + content="test content", + user=self.local_user, + book=self.book, + ) + view = rss_feed.RssFeed() + request = self.factory.get("/user/rss_user/rss") + request.user = self.local_user + result = view(request, username=self.local_user.username) self.assertEqual(result.status_code, 200) - self.assertIn(b"Status updates from rss_user", result.content) self.assertIn(b"a sickening sense", result.content) - self.assertIn(b"Example Edition", result.content) diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 4c85954b..1dbd67a7 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -218,6 +218,7 @@ urlpatterns = [ # lists re_path(r"%s/lists/?$" % USER_PATH, views.UserLists.as_view(), name="user-lists"), re_path(r"^list/?$", views.Lists.as_view(), name="lists"), + re_path(r"^list/saved/?$", views.SavedLists.as_view(), name="saved-lists"), re_path(r"^list/(?P\d+)(.json)?/?$", views.List.as_view(), name="list"), re_path(r"^list/add-book/?$", views.list.add_book, name="list-add-book"), re_path( @@ -233,6 +234,8 @@ urlpatterns = [ re_path( r"^list/(?P\d+)/curate/?$", views.Curate.as_view(), name="list-curate" ), + re_path(r"^save-list/(?P\d+)/?$", views.save_list, name="list-save"), + re_path(r"^unsave-list/(?P\d+)/?$", views.unsave_list, name="list-unsave"), # User books re_path(r"%s/books/?$" % USER_PATH, views.Shelf.as_view(), name="user-shelves"), re_path( @@ -294,8 +297,10 @@ urlpatterns = [ name="redraft", ), # interact - re_path(r"^favorite/(?P\d+)/?$", views.Favorite.as_view()), - re_path(r"^unfavorite/(?P\d+)/?$", views.Unfavorite.as_view()), + re_path(r"^favorite/(?P\d+)/?$", views.Favorite.as_view(), name="fav"), + re_path( + r"^unfavorite/(?P\d+)/?$", views.Unfavorite.as_view(), name="unfav" + ), re_path(r"^boost/(?P\d+)/?$", views.Boost.as_view()), re_path(r"^unboost/(?P\d+)/?$", views.Unboost.as_view()), # books diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 15b55acc..f4204925 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -4,11 +4,12 @@ from .authentication import Login, Register, Logout from .authentication import ConfirmEmail, ConfirmEmailCode, resend_link from .author import Author, EditAuthor from .block import Block, unblock -from .books import Book, EditBook, ConfirmEditBook, Editions -from .books import upload_cover, add_description, switch_edition, resolve_book +from .books import Book, EditBook, ConfirmEditBook +from .books import upload_cover, add_description, resolve_book from .directory import Directory from .discover import Discover from .edit_user import EditUser, DeleteUser +from .editions import Editions, switch_edition from .federation import Federation, FederatedServer from .federation import AddFederatedServer, ImportServerBlocklist from .federation import block_server, unblock_server @@ -24,7 +25,8 @@ from .invite import ManageInvites, Invite, InviteRequest from .invite import ManageInviteRequests, ignore_invite_request from .isbn import Isbn from .landing import About, Home, Landing -from .list import Lists, List, Curate, UserLists +from .list import Lists, SavedLists, List, Curate, UserLists +from .list import save_list, unsave_list from .notifications import Notifications from .outbox import Outbox from .reading import edit_readthrough, create_readthrough diff --git a/bookwyrm/views/books.py b/bookwyrm/views/books.py index 6cd0427c..c2525295 100644 --- a/bookwyrm/views/books.py +++ b/bookwyrm/views/books.py @@ -24,7 +24,7 @@ from bookwyrm.settings import PAGE_LENGTH from .helpers import is_api_request, get_edition, privacy_filter -# pylint: disable= no-self-use +# pylint: disable=no-self-use class Book(View): """a book! this is the stuff""" @@ -62,7 +62,7 @@ class Book(View): queryset = queryset.filter(user=request.user, deleted=False) else: queryset = reviews.exclude(Q(content__isnull=True) | Q(content="")) - queryset = queryset.select_related("user") + queryset = queryset.select_related("user").order_by("-published_date") paginated = Paginator(queryset, PAGE_LENGTH) lists = privacy_filter( @@ -270,37 +270,6 @@ class ConfirmEditBook(View): return redirect("/book/%s" % book.id) -class Editions(View): - """list of editions""" - - def get(self, request, book_id): - """list of editions of a book""" - work = get_object_or_404(models.Work, id=book_id) - - if is_api_request(request): - return ActivitypubResponse(work.to_edition_list(**request.GET)) - filters = {} - - if request.GET.get("language"): - filters["languages__contains"] = [request.GET.get("language")] - if request.GET.get("format"): - filters["physical_format__iexact"] = request.GET.get("format") - - editions = work.editions.order_by("-edition_rank") - languages = set(sum([e.languages for e in editions], [])) - - paginated = Paginator(editions.filter(**filters), PAGE_LENGTH) - data = { - "editions": paginated.get_page(request.GET.get("page")), - "work": work, - "languages": languages, - "formats": set( - e.physical_format.lower() for e in editions if e.physical_format - ), - } - return TemplateResponse(request, "book/editions.html", data) - - @login_required @require_POST def upload_cover(request, book_id): @@ -363,33 +332,3 @@ def resolve_book(request): book = connector.get_or_create_book(remote_id) return redirect("book", book.id) - - -@login_required -@require_POST -@transaction.atomic -def switch_edition(request): - """switch your copy of a book to a different edition""" - edition_id = request.POST.get("edition") - new_edition = get_object_or_404(models.Edition, id=edition_id) - shelfbooks = models.ShelfBook.objects.filter( - book__parent_work=new_edition.parent_work, shelf__user=request.user - ) - for shelfbook in shelfbooks.all(): - with transaction.atomic(): - models.ShelfBook.objects.create( - created_date=shelfbook.created_date, - user=shelfbook.user, - shelf=shelfbook.shelf, - book=new_edition, - ) - shelfbook.delete() - - readthroughs = models.ReadThrough.objects.filter( - book__parent_work=new_edition.parent_work, user=request.user - ) - for readthrough in readthroughs.all(): - readthrough.book = new_edition - readthrough.save() - - return redirect("/book/%d" % new_edition.id) diff --git a/bookwyrm/views/editions.py b/bookwyrm/views/editions.py new file mode 100644 index 00000000..7615c497 --- /dev/null +++ b/bookwyrm/views/editions.py @@ -0,0 +1,99 @@ +""" the good stuff! the books! """ +from functools import reduce +import operator + +from django.contrib.auth.decorators import login_required +from django.core.paginator import Paginator +from django.db import transaction +from django.db.models import Q +from django.shortcuts import get_object_or_404, redirect +from django.template.response import TemplateResponse +from django.views import View +from django.views.decorators.http import require_POST + +from bookwyrm import models +from bookwyrm.activitypub import ActivitypubResponse +from bookwyrm.settings import PAGE_LENGTH +from .helpers import is_api_request + + +# pylint: disable=no-self-use +class Editions(View): + """list of editions""" + + def get(self, request, book_id): + """list of editions of a book""" + work = get_object_or_404(models.Work, id=book_id) + + if is_api_request(request): + return ActivitypubResponse(work.to_edition_list(**request.GET)) + filters = {} + + if request.GET.get("language"): + filters["languages__contains"] = [request.GET.get("language")] + if request.GET.get("format"): + filters["physical_format__iexact"] = request.GET.get("format") + + editions = work.editions.order_by("-edition_rank") + languages = set(sum(editions.values_list("languages", flat=True), [])) + + editions = editions.filter(**filters) + + query = request.GET.get("q") + if query: + searchable_array_fields = ["languages", "publishers"] + searchable_fields = [ + "title", + "physical_format", + "isbn_10", + "isbn_13", + "oclc_number", + "asin", + ] + search_filter_entries = [ + {f"{f}__icontains": query} for f in searchable_fields + ] + [{f"{f}__iexact": query} for f in searchable_array_fields] + editions = editions.filter( + reduce(operator.or_, (Q(**f) for f in search_filter_entries)) + ) + + paginated = Paginator(editions, PAGE_LENGTH) + data = { + "editions": paginated.get_page(request.GET.get("page")), + "work": work, + "languages": languages, + "formats": set( + e.physical_format.lower() for e in editions if e.physical_format + ), + } + return TemplateResponse(request, "book/editions.html", data) + + +@login_required +@require_POST +@transaction.atomic +def switch_edition(request): + """switch your copy of a book to a different edition""" + edition_id = request.POST.get("edition") + new_edition = get_object_or_404(models.Edition, id=edition_id) + shelfbooks = models.ShelfBook.objects.filter( + book__parent_work=new_edition.parent_work, shelf__user=request.user + ) + for shelfbook in shelfbooks.all(): + with transaction.atomic(): + models.ShelfBook.objects.create( + created_date=shelfbook.created_date, + user=shelfbook.user, + shelf=shelfbook.shelf, + book=new_edition, + ) + shelfbook.delete() + + readthroughs = models.ReadThrough.objects.filter( + book__parent_work=new_edition.parent_work, user=request.user + ) + for readthrough in readthroughs.all(): + readthrough.book = new_edition + readthrough.save() + + return redirect("/book/%d" % new_edition.id) diff --git a/bookwyrm/views/isbn.py b/bookwyrm/views/isbn.py index 12208a3d..3055a354 100644 --- a/bookwyrm/views/isbn.py +++ b/bookwyrm/views/isbn.py @@ -1,9 +1,11 @@ """ isbn search view """ +from django.core.paginator import Paginator from django.http import JsonResponse from django.template.response import TemplateResponse from django.views import View from bookwyrm.connectors import connector_manager +from bookwyrm.settings import PAGE_LENGTH from .helpers import is_api_request # pylint: disable= no-self-use @@ -17,8 +19,12 @@ class Isbn(View): if is_api_request(request): return JsonResponse([r.json() for r in book_results], safe=False) + paginated = Paginator(book_results, PAGE_LENGTH).get_page( + request.GET.get("page") + ) data = { - "results": book_results, + "results": [{"results": paginated}], "query": isbn, + "type": "book", } - return TemplateResponse(request, "isbn_search_results.html", data) + return TemplateResponse(request, "search/book.html", data) diff --git a/bookwyrm/views/list.py b/bookwyrm/views/list.py index 6e872434..e6ef52ba 100644 --- a/bookwyrm/views/list.py +++ b/bookwyrm/views/list.py @@ -63,6 +63,25 @@ class Lists(View): return redirect(book_list.local_path) +@method_decorator(login_required, name="dispatch") +class SavedLists(View): + """saved book list page""" + + def get(self, request): + """display book lists""" + # hide lists with no approved books + lists = request.user.saved_lists.order_by("-updated_date") + + paginated = Paginator(lists, 12) + data = { + "lists": paginated.get_page(request.GET.get("page")), + "list_form": forms.ListForm(), + "path": "/list", + } + return TemplateResponse(request, "lists/lists.html", data) + + +@method_decorator(login_required, name="dispatch") class UserLists(View): """a user's book list page""" @@ -116,7 +135,7 @@ class List(View): if direction == "descending": directional_sort_by = "-" + directional_sort_by - items = book_list.listitem_set + items = book_list.listitem_set.prefetch_related("user", "book", "book__authors") if sort_by == "rating": items = items.annotate( average_rating=Avg( @@ -224,6 +243,25 @@ class Curate(View): @require_POST +@login_required +def save_list(request, list_id): + """save a list""" + book_list = get_object_or_404(models.List, id=list_id) + request.user.saved_lists.add(book_list) + return redirect("list", list_id) + + +@require_POST +@login_required +def unsave_list(request, list_id): + """unsave a list""" + book_list = get_object_or_404(models.List, id=list_id) + request.user.saved_lists.remove(book_list) + return redirect("list", list_id) + + +@require_POST +@login_required def add_book(request): """put a book on a list""" book_list = get_object_or_404(models.List, id=request.POST.get("list")) @@ -273,6 +311,7 @@ def add_book(request): @require_POST +@login_required def remove_book(request, list_id): """remove a book from a list""" with transaction.atomic(): @@ -289,6 +328,7 @@ def remove_book(request, list_id): @require_POST +@login_required def set_book_position(request, list_item_id): """ Action for when the list user manually specifies a list position, takes diff --git a/bookwyrm/views/password.py b/bookwyrm/views/password.py index 18fcb02c..6d202ce2 100644 --- a/bookwyrm/views/password.py +++ b/bookwyrm/views/password.py @@ -5,7 +5,7 @@ from django.core.exceptions import PermissionDenied from django.shortcuts import redirect from django.template.response import TemplateResponse from django.utils.decorators import method_decorator -from django.utils.translation import gettext as _ +from django.utils.translation import gettext_lazy as _ from django.views import View from bookwyrm import models diff --git a/bookwyrm/views/reading.py b/bookwyrm/views/reading.py index 1c897ab3..9100e1d4 100644 --- a/bookwyrm/views/reading.py +++ b/bookwyrm/views/reading.py @@ -12,7 +12,7 @@ from django.utils.decorators import method_decorator from django.views import View from django.views.decorators.http import require_POST -from bookwyrm import models +from bookwyrm import forms, models from .helpers import get_edition, handle_reading_status @@ -76,8 +76,17 @@ class ReadingStatus(View): # post about it (if you want) if request.POST.get("post-status"): - privacy = request.POST.get("privacy") - handle_reading_status(request.user, desired_shelf, book, privacy) + # is it a comment? + if request.POST.get("content"): + form = forms.CommentForm(request.POST) + if form.is_valid(): + form.save() + else: + # uh oh + raise Exception(form.errors) + else: + privacy = request.POST.get("privacy") + handle_reading_status(request.user, desired_shelf, book, privacy) return redirect(request.headers.get("Referer", "/")) diff --git a/bookwyrm/views/rss_feed.py b/bookwyrm/views/rss_feed.py index 0d3a8902..5faa1624 100644 --- a/bookwyrm/views/rss_feed.py +++ b/bookwyrm/views/rss_feed.py @@ -1,6 +1,9 @@ """ serialize user's posts in rss feed """ from django.contrib.syndication.views import Feed +from django.template.loader import get_template +from django.utils.translation import gettext_lazy as _ + from .helpers import get_user_from_username, privacy_filter # pylint: disable=no-self-use, unused-argument @@ -8,7 +11,15 @@ class RssFeed(Feed): """serialize user's posts in rss feed""" description_template = "rss/content.html" - title_template = "rss/title.html" + + def item_title(self, item): + """render the item title""" + if hasattr(item, "pure_name") and item.pure_name: + return item.pure_name + title_template = get_template("snippets/status/header_content.html") + title = title_template.render({"status": item}) + template = get_template("rss/title.html") + return template.render({"user": item.user, "item_title": title}).strip() def get_object(self, request, username): # pylint: disable=arguments-differ """the user who's posts get serialized""" @@ -20,7 +31,7 @@ class RssFeed(Feed): def title(self, obj): """title of the rss feed entry""" - return f"Status updates from {obj.display_name}" + return _(f"Status updates from {obj.display_name}") def items(self, obj): """the user's activity feed""" diff --git a/bookwyrm/views/shelf.py b/bookwyrm/views/shelf.py index e9ad074d..ba9f6a3c 100644 --- a/bookwyrm/views/shelf.py +++ b/bookwyrm/views/shelf.py @@ -9,7 +9,7 @@ from django.http import HttpResponseBadRequest, HttpResponseNotFound from django.shortcuts import get_object_or_404, redirect from django.template.response import TemplateResponse from django.utils.decorators import method_decorator -from django.utils.translation import gettext as _ +from django.utils.translation import gettext_lazy as _ from django.views import View from django.views.decorators.http import require_POST diff --git a/bookwyrm/views/user_admin.py b/bookwyrm/views/user_admin.py index 9d08e930..7cfefb0f 100644 --- a/bookwyrm/views/user_admin.py +++ b/bookwyrm/views/user_admin.py @@ -30,6 +30,9 @@ class UserAdminList(View): username = request.GET.get("username") if username: filters["username__icontains"] = username + scope = request.GET.get("scope") + if scope: + filters["local"] = scope == "local" users = models.User.objects.filter(**filters) diff --git a/bw-dev b/bw-dev index a2f04bfb..f103de20 100755 --- a/bw-dev +++ b/bw-dev @@ -126,6 +126,9 @@ case "$CMD" in populate_suggestions) runweb python manage.py populate_suggestions ;; + generate_thumbnails) + runweb python manage.py generateimages + ;; generate_preview_images) runweb python manage.py generate_preview_images $@ ;; @@ -171,6 +174,7 @@ case "$CMD" in echo " black" echo " populate_streams [--stream=]" echo " populate_suggestions" + echo " generate_thumbnails" echo " generate_preview_images [--all]" echo " copy_media_to_s3" echo " set_cors_to_s3 [cors file]" diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index 4906082a..00fbd0e8 100644 --- a/locale/de_DE/LC_MESSAGES/django.po +++ b/locale/de_DE/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-07 01:35+0000\n" +"POT-Creation-Date: 2021-08-16 21:26+0000\n" "PO-Revision-Date: 2021-03-02 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -18,66 +18,67 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: bookwyrm/forms.py:232 +#: bookwyrm/forms.py:233 #, fuzzy #| msgid "A user with that username already exists." msgid "A user with this email already exists." msgstr "Dieser Benutzename ist bereits vergeben." -#: bookwyrm/forms.py:246 +#: bookwyrm/forms.py:247 msgid "One Day" msgstr "Ein Tag" -#: bookwyrm/forms.py:247 +#: bookwyrm/forms.py:248 msgid "One Week" msgstr "Eine Woche" -#: bookwyrm/forms.py:248 +#: bookwyrm/forms.py:249 msgid "One Month" msgstr "Ein Monat" -#: bookwyrm/forms.py:249 +#: bookwyrm/forms.py:250 msgid "Does Not Expire" msgstr "Läuft nicht aus" -#: bookwyrm/forms.py:254 +#: bookwyrm/forms.py:255 #, python-format msgid "%(count)d uses" msgstr "%(count)d Benutzungen" -#: bookwyrm/forms.py:257 +#: bookwyrm/forms.py:258 #, fuzzy #| msgid "Unlisted" msgid "Unlimited" msgstr "Ungelistet" -#: bookwyrm/forms.py:307 +#: bookwyrm/forms.py:308 msgid "List Order" msgstr "" -#: bookwyrm/forms.py:308 +#: bookwyrm/forms.py:309 #, fuzzy #| msgid "Title" msgid "Book Title" msgstr "Titel" -#: bookwyrm/forms.py:309 bookwyrm/templates/snippets/create_status_form.html:34 +#: bookwyrm/forms.py:310 +#: bookwyrm/templates/snippets/create_status/review.html:25 #: bookwyrm/templates/user/shelf/shelf.html:85 #: bookwyrm/templates/user/shelf/shelf.html:116 msgid "Rating" msgstr "" -#: bookwyrm/forms.py:311 bookwyrm/templates/lists/list.html:107 +#: bookwyrm/forms.py:312 bookwyrm/templates/lists/list.html:107 msgid "Sort By" msgstr "" -#: bookwyrm/forms.py:315 +#: bookwyrm/forms.py:316 #, fuzzy #| msgid "Started reading" msgid "Ascending" msgstr "Zu lesen angefangen" -#: bookwyrm/forms.py:316 +#: bookwyrm/forms.py:317 #, fuzzy #| msgid "Started reading" msgid "Descending" @@ -93,7 +94,7 @@ msgstr "%(value)s ist keine gültige remote_id" msgid "%(value)s is not a valid username" msgstr "%(value)s ist kein gültiger Username" -#: bookwyrm/models/fields.py:174 bookwyrm/templates/layout.html:159 +#: bookwyrm/models/fields.py:174 bookwyrm/templates/layout.html:164 msgid "username" msgstr "Username" @@ -307,9 +308,8 @@ msgstr "" #: bookwyrm/templates/settings/edit_server.html:68 #: bookwyrm/templates/settings/federated_server.html:98 #: bookwyrm/templates/settings/site.html:108 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:36 +#: bookwyrm/templates/snippets/reading_modals/layout.html:16 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:42 #: bookwyrm/templates/user_admin/user_moderation_actions.html:45 msgid "Save" msgstr "Speichern" @@ -323,16 +323,14 @@ msgstr "Speichern" #: bookwyrm/templates/settings/federated_server.html:99 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/goal_form.html:32 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:43 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:43 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:37 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:28 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:43 msgid "Cancel" msgstr "Abbrechen" #: bookwyrm/templates/book/book.html:48 -#: bookwyrm/templates/discover/large-book.html:25 -#: bookwyrm/templates/discover/small-book.html:19 +#: bookwyrm/templates/discover/large-book.html:22 +#: bookwyrm/templates/landing/large-book.html:25 +#: bookwyrm/templates/landing/small-book.html:18 msgid "by" msgstr "von" @@ -537,6 +535,7 @@ msgid "Back" msgstr "Zurück" #: bookwyrm/templates/book/edit_book.html:120 +#: bookwyrm/templates/snippets/create_status/review.html:18 msgid "Title:" msgstr "Titel:" @@ -766,7 +765,7 @@ msgid "Confirmation code:" msgstr "Passwort bestätigen:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 -#: bookwyrm/templates/discover/landing_layout.html:70 +#: bookwyrm/templates/landing/landing_layout.html:70 #: bookwyrm/templates/moderation/report_modal.html:33 msgid "Submit" msgstr "Absenden" @@ -780,7 +779,7 @@ msgid "Resend confirmation link" msgstr "" #: bookwyrm/templates/confirm_email/resend_form.html:11 -#: bookwyrm/templates/discover/landing_layout.html:64 +#: bookwyrm/templates/landing/landing_layout.html:64 #: bookwyrm/templates/password_reset_request.html:18 #: bookwyrm/templates/preferences/edit_user.html:38 #: bookwyrm/templates/snippets/register_form.html:13 @@ -811,7 +810,7 @@ msgstr "Föderiert" #: bookwyrm/templates/directory/directory.html:4 #: bookwyrm/templates/directory/directory.html:9 -#: bookwyrm/templates/layout.html:71 +#: bookwyrm/templates/layout.html:94 msgid "Directory" msgstr "" @@ -892,63 +891,45 @@ msgstr "" msgid "All known users" msgstr "" -#: bookwyrm/templates/discover/about.html:7 +#: bookwyrm/templates/discover/discover.html:4 +#: bookwyrm/templates/discover/discover.html:10 +#: bookwyrm/templates/layout.html:71 +#, fuzzy +#| msgid "Discard" +msgid "Discover" +msgstr "Ablehnen" + +#: bookwyrm/templates/discover/discover.html:12 #, python-format -msgid "About %(site_name)s" -msgstr "Über %(site_name)s" - -#: bookwyrm/templates/discover/about.html:10 -#: bookwyrm/templates/discover/about.html:20 -msgid "Code of Conduct" +msgid "See what's new in the local %(site_name)s community" msgstr "" -#: bookwyrm/templates/discover/about.html:13 -#: bookwyrm/templates/discover/about.html:29 -msgid "Privacy Policy" -msgstr "Datenschutzerklärung" - -#: bookwyrm/templates/discover/discover.html:6 -msgid "Recent Books" -msgstr "Aktive Bücher" - -#: bookwyrm/templates/discover/landing_layout.html:5 -#: bookwyrm/templates/get_started/layout.html:5 -msgid "Welcome" -msgstr "Willkommen" - -#: bookwyrm/templates/discover/landing_layout.html:17 -msgid "Decentralized" -msgstr "Dezentral" - -#: bookwyrm/templates/discover/landing_layout.html:23 -msgid "Friendly" -msgstr "Freundlich" - -#: bookwyrm/templates/discover/landing_layout.html:29 -msgid "Anti-Corporate" +#: bookwyrm/templates/discover/large-book.html:46 +#: bookwyrm/templates/discover/small-book.html:32 +msgid "rated" msgstr "" -#: bookwyrm/templates/discover/landing_layout.html:44 -#, python-format -msgid "Join %(name)s" -msgstr "Tritt %(name)s bei" +#: bookwyrm/templates/discover/large-book.html:48 +#: bookwyrm/templates/discover/small-book.html:34 +msgid "reviewed" +msgstr "bewertete" -#: bookwyrm/templates/discover/landing_layout.html:51 -#: bookwyrm/templates/login.html:56 -msgid "This instance is closed" -msgstr "Diese Instanz ist geschlossen" +#: bookwyrm/templates/discover/large-book.html:50 +#: bookwyrm/templates/discover/small-book.html:36 +msgid "commented on" +msgstr "kommentierte" -#: bookwyrm/templates/discover/landing_layout.html:57 -msgid "Thank you! Your request has been received." -msgstr "" +#: bookwyrm/templates/discover/large-book.html:52 +#: bookwyrm/templates/discover/small-book.html:38 +msgid "quoted" +msgstr "zitierte" -#: bookwyrm/templates/discover/landing_layout.html:60 -msgid "Request an Invitation" -msgstr "" - -#: bookwyrm/templates/discover/landing_layout.html:79 -msgid "Your Account" -msgstr "Dein Account" +#: bookwyrm/templates/discover/large-book.html:68 +#: bookwyrm/templates/discover/small-book.html:52 +#, fuzzy +#| msgid "Like status" +msgid "View status" +msgstr "Status favorisieren" #: bookwyrm/templates/email/confirm/html_content.html:6 #: bookwyrm/templates/email/confirm/text_content.html:4 @@ -962,10 +943,20 @@ msgstr "" msgid "Confirm Email" msgstr "Bestätigen" +#: bookwyrm/templates/email/confirm/html_content.html:15 +#, python-format +msgid "Or enter the code \"%(confirmation_code)s\" at login." +msgstr "" + #: bookwyrm/templates/email/confirm/subject.html:2 msgid "Please confirm your email" msgstr "" +#: bookwyrm/templates/email/confirm/text_content.html:10 +#, python-format +msgid "Or enter the code \"%(confirmation_code)s\" at login." +msgstr "" + #: bookwyrm/templates/email/html_layout.html:15 #: bookwyrm/templates/email/text_layout.html:2 msgid "Hi there," @@ -1038,7 +1029,7 @@ msgid "Direct Messages with %(username)s" msgstr "Direktnachrichten mit %(username)s" #: bookwyrm/templates/feed/direct_messages.html:10 -#: bookwyrm/templates/layout.html:99 +#: bookwyrm/templates/layout.html:104 msgid "Direct Messages" msgstr "Direktnachrichten" @@ -1052,7 +1043,7 @@ msgstr "Du hast momentan keine Nachrichten." #: bookwyrm/templates/feed/feed.html:22 #, python-format -msgid "load 0 unread status(es)" +msgid "load 0 unread status(es)" msgstr "" #: bookwyrm/templates/feed/feed.html:38 @@ -1164,6 +1155,11 @@ msgstr "Keine Bücher gefunden" msgid "Save & continue" msgstr "" +#: bookwyrm/templates/get_started/layout.html:5 +#: bookwyrm/templates/landing/landing_layout.html:5 +msgid "Welcome" +msgstr "Willkommen" + #: bookwyrm/templates/get_started/layout.html:15 #, fuzzy, python-format #| msgid "About %(site_name)s" @@ -1381,7 +1377,6 @@ msgid "Book" msgstr "Buch" #: bookwyrm/templates/import_status.html:122 -#: bookwyrm/templates/snippets/create_status_form.html:13 #: bookwyrm/templates/user/shelf/shelf.html:79 #: bookwyrm/templates/user/shelf/shelf.html:99 msgid "Title" @@ -1423,6 +1418,59 @@ msgstr "Suchergebnisse für \"%(query)s\"" msgid "Matching Books" msgstr "Passende Bücher" +#: bookwyrm/templates/landing/about.html:7 +#, python-format +msgid "About %(site_name)s" +msgstr "Über %(site_name)s" + +#: bookwyrm/templates/landing/about.html:10 +#: bookwyrm/templates/landing/about.html:20 +msgid "Code of Conduct" +msgstr "" + +#: bookwyrm/templates/landing/about.html:13 +#: bookwyrm/templates/landing/about.html:29 +msgid "Privacy Policy" +msgstr "Datenschutzerklärung" + +#: bookwyrm/templates/landing/landing.html:6 +msgid "Recent Books" +msgstr "Aktive Bücher" + +#: bookwyrm/templates/landing/landing_layout.html:17 +msgid "Decentralized" +msgstr "Dezentral" + +#: bookwyrm/templates/landing/landing_layout.html:23 +msgid "Friendly" +msgstr "Freundlich" + +#: bookwyrm/templates/landing/landing_layout.html:29 +msgid "Anti-Corporate" +msgstr "" + +#: bookwyrm/templates/landing/landing_layout.html:44 +#, python-format +msgid "Join %(name)s" +msgstr "Tritt %(name)s bei" + +#: bookwyrm/templates/landing/landing_layout.html:51 +#: bookwyrm/templates/login.html:56 +msgid "This instance is closed" +msgstr "Diese Instanz ist geschlossen" + +#: bookwyrm/templates/landing/landing_layout.html:57 +msgid "Thank you! Your request has been received." +msgstr "" + +#: bookwyrm/templates/landing/landing_layout.html:60 +msgid "Request an Invitation" +msgstr "" + +#: bookwyrm/templates/landing/landing_layout.html:79 +msgid "Your Account" +msgstr "Dein Account" + #: bookwyrm/templates/layout.html:40 msgid "Search for a book or user" msgstr "Suche nach Buch oder Benutzer*in" @@ -1435,17 +1483,17 @@ msgstr "Navigationshauptmenü" msgid "Feed" msgstr "" -#: bookwyrm/templates/layout.html:94 +#: bookwyrm/templates/layout.html:99 #, fuzzy #| msgid "Your books" msgid "Your Books" msgstr "Deine Bücher" -#: bookwyrm/templates/layout.html:104 +#: bookwyrm/templates/layout.html:109 msgid "Settings" msgstr "Einstellungen" -#: bookwyrm/templates/layout.html:113 +#: bookwyrm/templates/layout.html:118 #: bookwyrm/templates/settings/admin_layout.html:31 #: bookwyrm/templates/settings/manage_invite_requests.html:15 #: bookwyrm/templates/settings/manage_invites.html:3 @@ -1453,65 +1501,65 @@ msgstr "Einstellungen" msgid "Invites" msgstr "Einladungen" -#: bookwyrm/templates/layout.html:120 +#: bookwyrm/templates/layout.html:125 msgid "Admin" msgstr "" -#: bookwyrm/templates/layout.html:127 +#: bookwyrm/templates/layout.html:132 msgid "Log out" msgstr "Abmelden" -#: bookwyrm/templates/layout.html:135 bookwyrm/templates/layout.html:136 +#: bookwyrm/templates/layout.html:140 bookwyrm/templates/layout.html:141 #: bookwyrm/templates/notifications.html:6 #: bookwyrm/templates/notifications.html:11 msgid "Notifications" msgstr "Benachrichtigungen" -#: bookwyrm/templates/layout.html:158 bookwyrm/templates/layout.html:162 +#: bookwyrm/templates/layout.html:163 bookwyrm/templates/layout.html:167 #: bookwyrm/templates/login.html:22 #: bookwyrm/templates/snippets/register_form.html:4 msgid "Username:" msgstr "" -#: bookwyrm/templates/layout.html:163 +#: bookwyrm/templates/layout.html:168 msgid "password" msgstr "Passwort" -#: bookwyrm/templates/layout.html:164 bookwyrm/templates/login.html:41 +#: bookwyrm/templates/layout.html:169 bookwyrm/templates/login.html:41 msgid "Forgot your password?" msgstr "Passwort vergessen?" -#: bookwyrm/templates/layout.html:167 bookwyrm/templates/login.html:10 +#: bookwyrm/templates/layout.html:172 bookwyrm/templates/login.html:10 #: bookwyrm/templates/login.html:38 msgid "Log in" msgstr "Anmelden" -#: bookwyrm/templates/layout.html:175 +#: bookwyrm/templates/layout.html:180 msgid "Join" msgstr "" -#: bookwyrm/templates/layout.html:213 +#: bookwyrm/templates/layout.html:218 #, fuzzy #| msgid "About this server" msgid "About this instance" msgstr "Über diesen Server" -#: bookwyrm/templates/layout.html:217 +#: bookwyrm/templates/layout.html:222 msgid "Contact site admin" msgstr "Admin kontaktieren" -#: bookwyrm/templates/layout.html:221 +#: bookwyrm/templates/layout.html:226 #, fuzzy #| msgid "List curation:" msgid "Documentation" msgstr "Listenkuratierung:" -#: bookwyrm/templates/layout.html:228 +#: bookwyrm/templates/layout.html:233 #, python-format msgid "Support %(site_name)s on %(support_title)s" msgstr "%(site_name)s auf %(support_title)s unterstützen" -#: bookwyrm/templates/layout.html:232 +#: bookwyrm/templates/layout.html:237 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." @@ -1709,7 +1757,6 @@ msgstr "Moderator:innenkommentare" #: bookwyrm/templates/moderation/report.html:40 #: bookwyrm/templates/snippets/create_status.html:28 -#: bookwyrm/templates/snippets/create_status_form.html:66 msgid "Comment" msgstr "Kommentieren" @@ -2029,26 +2076,6 @@ msgstr "Editionen von %(book_title)s" msgid "Want to Read \"%(book_title)s\"" msgstr "\"%(book_title)s\" auf Leseliste setzen" -#: bookwyrm/templates/rss/title.html:5 -#: bookwyrm/templates/snippets/status/status_header.html:36 -msgid "rated" -msgstr "" - -#: bookwyrm/templates/rss/title.html:7 -#: bookwyrm/templates/snippets/status/status_header.html:38 -msgid "reviewed" -msgstr "bewertete" - -#: bookwyrm/templates/rss/title.html:9 -#: bookwyrm/templates/snippets/status/status_header.html:40 -msgid "commented on" -msgstr "kommentierte" - -#: bookwyrm/templates/rss/title.html:11 -#: bookwyrm/templates/snippets/status/status_header.html:42 -msgid "quoted" -msgstr "zitierte" - #: bookwyrm/templates/search/book.html:64 #, fuzzy #| msgid "Show results from other catalogues" @@ -2665,14 +2692,6 @@ msgstr "teilt" msgid "Un-boost" msgstr "Teilen zurücknehmen" -#: bookwyrm/templates/snippets/content_warning_field.html:3 -msgid "Spoiler alert:" -msgstr "Spoileralarm:" - -#: bookwyrm/templates/snippets/content_warning_field.html:10 -msgid "Spoilers ahead!" -msgstr "Spoileralarm!" - #: bookwyrm/templates/snippets/create_status.html:17 msgid "Review" msgstr "Bewerten" @@ -2681,75 +2700,100 @@ msgstr "Bewerten" msgid "Quote" msgstr "Zitieren" -#: bookwyrm/templates/snippets/create_status_form.html:23 -#, fuzzy -#| msgid "Comment" -msgid "Comment:" -msgstr "Kommentieren" +#: bookwyrm/templates/snippets/create_status/comment.html:15 +msgid "Some thoughts on the book" +msgstr "" -#: bookwyrm/templates/snippets/create_status_form.html:25 -#, fuzzy -#| msgid "Quote" -msgid "Quote:" -msgstr "Zitieren" +#: bookwyrm/templates/snippets/create_status/comment.html:26 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:16 +msgid "Progress:" +msgstr "Fortschritt:" -#: bookwyrm/templates/snippets/create_status_form.html:27 -#, fuzzy -#| msgid "Review" -msgid "Review:" -msgstr "Bewerten" +#: bookwyrm/templates/snippets/create_status/comment.html:34 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:30 +#: bookwyrm/templates/snippets/readthrough_form.html:22 +msgid "pages" +msgstr "Seiten" -#: bookwyrm/templates/snippets/create_status_form.html:56 -#: bookwyrm/templates/snippets/status/layout.html:29 -#: bookwyrm/templates/snippets/status/layout.html:47 -#: bookwyrm/templates/snippets/status/layout.html:48 +#: bookwyrm/templates/snippets/create_status/comment.html:35 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:31 +#: bookwyrm/templates/snippets/readthrough_form.html:23 +msgid "percent" +msgstr "Prozent" + +#: bookwyrm/templates/snippets/create_status/comment.html:41 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:36 +#, python-format +msgid "of %(pages)s pages" +msgstr "von %(pages)s Seiten" + +#: bookwyrm/templates/snippets/create_status/content_field.html:16 +#: bookwyrm/templates/snippets/status/layout.html:31 +#: bookwyrm/templates/snippets/status/layout.html:49 +#: bookwyrm/templates/snippets/status/layout.html:50 msgid "Reply" msgstr "Antwort" -#: bookwyrm/templates/snippets/create_status_form.html:56 +#: bookwyrm/templates/snippets/create_status/content_field.html:16 #, fuzzy #| msgid "Footer Content" msgid "Content" msgstr "Inhalt des Footers" -#: bookwyrm/templates/snippets/create_status_form.html:80 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 -msgid "Progress:" -msgstr "Fortschritt:" +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:3 +msgid "Spoiler alert:" +msgstr "Spoileralarm:" -#: bookwyrm/templates/snippets/create_status_form.html:88 -#: bookwyrm/templates/snippets/readthrough_form.html:22 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30 -msgid "pages" -msgstr "Seiten" +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:10 +msgid "Spoilers ahead!" +msgstr "Spoileralarm!" -#: bookwyrm/templates/snippets/create_status_form.html:89 -#: bookwyrm/templates/snippets/readthrough_form.html:23 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31 -msgid "percent" -msgstr "Prozent" - -#: bookwyrm/templates/snippets/create_status_form.html:95 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 -#, python-format -msgid "of %(pages)s pages" -msgstr "von %(pages)s Seiten" - -#: bookwyrm/templates/snippets/create_status_form.html:110 +#: bookwyrm/templates/snippets/create_status/content_warning_toggle.html:5 msgid "Include spoiler alert" msgstr "Spoileralarm aktivieren" -#: bookwyrm/templates/snippets/create_status_form.html:117 +#: bookwyrm/templates/snippets/create_status/layout.html:38 +#: bookwyrm/templates/snippets/reading_modals/form.html:7 +#, fuzzy +#| msgid "Comment" +msgid "Comment:" +msgstr "Kommentieren" + +#: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 #: bookwyrm/templates/snippets/privacy_select.html:20 msgid "Private" msgstr "Privat" -#: bookwyrm/templates/snippets/create_status_form.html:128 +#: bookwyrm/templates/snippets/create_status/post_options_block.html:19 msgid "Post" msgstr "Absenden" +#: bookwyrm/templates/snippets/create_status/quotation.html:19 +#, fuzzy +#| msgid "Quote" +msgid "Quote:" +msgstr "Zitieren" + +#: bookwyrm/templates/snippets/create_status/quotation.html:27 +#, fuzzy, python-format +#| msgid "Editions of %(book_title)s" +msgid "An excerpt from '%(book_title)s'" +msgstr "Editionen von %(book_title)s" + +#: bookwyrm/templates/snippets/create_status/review.html:20 +#, fuzzy, python-format +#| msgid "Editions of %(book_title)s" +msgid "Your review of '%(book_title)s'" +msgstr "Editionen von %(book_title)s" + +#: bookwyrm/templates/snippets/create_status/review.html:32 +#, fuzzy +#| msgid "Review" +msgid "Review:" +msgstr "Bewerten" + #: bookwyrm/templates/snippets/delete_readthrough_modal.html:4 msgid "Delete these read dates?" msgstr "Diese Lesedaten löschen?" @@ -2791,17 +2835,29 @@ msgstr "" msgid "Clear filters" msgstr "Suche leeren" -#: bookwyrm/templates/snippets/follow_button.html:12 +#: bookwyrm/templates/snippets/follow_button.html:14 +#, fuzzy, python-format +#| msgid "Lists: %(username)s" +msgid "Follow @%(username)s" +msgstr "Listen: %(username)s" + +#: bookwyrm/templates/snippets/follow_button.html:16 msgid "Follow" msgstr "Folgen" -#: bookwyrm/templates/snippets/follow_button.html:18 +#: bookwyrm/templates/snippets/follow_button.html:25 #, fuzzy #| msgid "Send follow request" msgid "Undo follow request" msgstr "Folgeanfrage senden" -#: bookwyrm/templates/snippets/follow_button.html:20 +#: bookwyrm/templates/snippets/follow_button.html:30 +#, fuzzy, python-format +#| msgid "Lists: %(username)s" +msgid "Unfollow @%(username)s" +msgstr "Listen: %(username)s" + +#: bookwyrm/templates/snippets/follow_button.html:32 msgid "Unfollow" msgstr "Entfolgen" @@ -2822,7 +2878,7 @@ msgid_plural "%(rating)s stars" msgstr[0] "" msgstr[1] "" -#: bookwyrm/templates/snippets/generated_status/goal.html:1 +#: bookwyrm/templates/snippets/generated_status/goal.html:2 #, python-format msgid "set a goal to read %(counter)s book in %(year)s" msgid_plural "set a goal to read %(counter)s books in %(year)s" @@ -2832,8 +2888,8 @@ msgstr[1] "Setze das Ziel, %(year)s %(counter)s Bücher zu lesen" #: bookwyrm/templates/snippets/generated_status/rating.html:3 #, fuzzy, python-format #| msgid "%(title)s by " -msgid "Rated %(title)s: %(display_rating)s star" -msgid_plural "Rated %(title)s: %(display_rating)s stars" +msgid "rated %(title)s: %(display_rating)s star" +msgid_plural "rated %(title)s: %(display_rating)s stars" msgstr[0] "%(title)s von " msgstr[1] "%(title)s von " @@ -2867,9 +2923,7 @@ msgid "Goal privacy:" msgstr "Sichtbarkeit des Ziels" #: bookwyrm/templates/snippets/goal_form.html:26 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:37 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:31 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:20 +#: bookwyrm/templates/snippets/reading_modals/layout.html:13 msgid "Post to feed" msgstr "Posten" @@ -2946,21 +3000,47 @@ msgstr "Raten" msgid "Rate" msgstr "" +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6 +#, python-format +msgid "Finish \"%(book_title)s\"" +msgstr "\"%(book_title)s\" abschließen" + +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:22 +#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:20 #: bookwyrm/templates/snippets/readthrough_form.html:7 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:19 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:19 msgid "Started reading" msgstr "Zu lesen angefangen" +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:30 +#: bookwyrm/templates/snippets/readthrough_form.html:30 +msgid "Finished reading" +msgstr "Lesen abgeschlossen" + +#: bookwyrm/templates/snippets/reading_modals/form.html:8 +msgid "(Optional)" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:5 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 +#, fuzzy +#| msgid "Progress" +msgid "Update progress" +msgstr "Fortschritt" + +#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6 +#, python-format +msgid "Start \"%(book_title)s\"" +msgstr "\"%(book_title)s\" beginnen" + +#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 +#, python-format +msgid "Want to Read \"%(book_title)s\"" +msgstr "\"%(book_title)s\" auf Leseliste setzen" + #: bookwyrm/templates/snippets/readthrough_form.html:14 msgid "Progress" msgstr "Fortschritt" -#: bookwyrm/templates/snippets/readthrough_form.html:30 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:25 -msgid "Finished reading" -msgstr "Lesen abgeschlossen" - #: bookwyrm/templates/snippets/register_form.html:32 msgid "Sign Up" msgstr "Registrieren" @@ -2981,18 +3061,6 @@ msgstr "Buch importieren" msgid "Move book" msgstr "Deine Bücher" -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5 -#, python-format -msgid "Finish \"%(book_title)s\"" -msgstr "\"%(book_title)s\" abschließen" - -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 -#, fuzzy -#| msgid "Progress" -msgid "Update progress" -msgstr "Fortschritt" - #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 msgid "More shelves" msgstr "Mehr Regale" @@ -3006,7 +3074,6 @@ msgid "Finish reading" msgstr "Lesen abschließen" #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:26 msgid "Want to read" msgstr "Auf Leseliste setzen" @@ -3016,23 +3083,13 @@ msgstr "Auf Leseliste setzen" msgid "Remove from %(name)s" msgstr "Listen: %(username)s" -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5 -#, python-format -msgid "Start \"%(book_title)s\"" -msgstr "\"%(book_title)s\" beginnen" - -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5 -#, python-format -msgid "Want to Read \"%(book_title)s\"" -msgstr "\"%(book_title)s\" auf Leseliste setzen" - #: bookwyrm/templates/snippets/status/content_status.html:72 -#: bookwyrm/templates/snippets/trimmed_text.html:15 +#: bookwyrm/templates/snippets/trimmed_text.html:17 msgid "Show more" msgstr "Mehr anzeigen" #: bookwyrm/templates/snippets/status/content_status.html:87 -#: bookwyrm/templates/snippets/trimmed_text.html:30 +#: bookwyrm/templates/snippets/trimmed_text.html:34 msgid "Show less" msgstr "Weniger anzeigen" @@ -3040,18 +3097,66 @@ msgstr "Weniger anzeigen" msgid "Open image in new window" msgstr "Bild in neuem Fenster öffnen" +#: bookwyrm/templates/snippets/status/headers/comment.html:2 +#, fuzzy, python-format +#| msgid "Editions of \"%(work_title)s\"" +msgid "commented on %(book)s" +msgstr "Editionen von \"%(work_title)s\"" + +#: bookwyrm/templates/snippets/status/headers/note.html:15 +#, fuzzy, python-format +#| msgid "replied to your status" +msgid "replied to %(username)s's status" +msgstr "hat auf deinen Status geantwortet" + +#: bookwyrm/templates/snippets/status/headers/quotation.html:2 +#, fuzzy, python-format +#| msgid "Direct Messages with %(username)s" +msgid "quoted %(book)s" +msgstr "Direktnachrichten mit %(username)s" + +#: bookwyrm/templates/snippets/status/headers/rating.html:3 +#, fuzzy, python-format +#| msgid "Direct Messages with %(username)s" +msgid "rated %(book)s:" +msgstr "Direktnachrichten mit %(username)s" + +#: bookwyrm/templates/snippets/status/headers/read.html:7 +#, fuzzy, python-format +#| msgid "Editions of \"%(work_title)s\"" +msgid "finished reading %(book)s" +msgstr "Editionen von \"%(work_title)s\"" + +#: bookwyrm/templates/snippets/status/headers/reading.html:7 +#, fuzzy, python-format +#| msgid "Direct Messages with %(username)s" +msgid "started reading %(book)s" +msgstr "Direktnachrichten mit %(username)s" + +#: bookwyrm/templates/snippets/status/headers/review.html:3 +#, fuzzy, python-format +#| msgid "Direct Messages with %(username)s" +msgid "reviewed %(book)s" +msgstr "Direktnachrichten mit %(username)s" + +#: bookwyrm/templates/snippets/status/headers/to_read.html:7 +#, fuzzy, python-format +#| msgid "replied to your status" +msgid "%(username)s wants to read %(book)s" +msgstr "hat auf deinen Status geantwortet" + #: bookwyrm/templates/snippets/status/layout.html:21 #: bookwyrm/templates/snippets/status/status_options.html:17 msgid "Delete status" msgstr "Post löschen" -#: bookwyrm/templates/snippets/status/layout.html:51 -#: bookwyrm/templates/snippets/status/layout.html:52 +#: bookwyrm/templates/snippets/status/layout.html:53 +#: bookwyrm/templates/snippets/status/layout.html:54 msgid "Boost status" msgstr "Status teilen" -#: bookwyrm/templates/snippets/status/layout.html:55 -#: bookwyrm/templates/snippets/status/layout.html:56 +#: bookwyrm/templates/snippets/status/layout.html:57 +#: bookwyrm/templates/snippets/status/layout.html:58 msgid "Like status" msgstr "Status favorisieren" @@ -3059,12 +3164,6 @@ msgstr "Status favorisieren" msgid "boosted" msgstr "teilt" -#: bookwyrm/templates/snippets/status/status_header.html:46 -#, fuzzy, python-format -#| msgid "replied to your status" -msgid "replied to %(username)s's status" -msgstr "hat auf deinen Status geantwortet" - #: bookwyrm/templates/snippets/status/status_options.html:7 #: bookwyrm/templates/snippets/user_options.html:7 msgid "More options" @@ -3384,6 +3483,11 @@ msgstr "Dieser Benutzename ist bereits vergeben." msgid "A password reset link sent to %s" msgstr "" +#: bookwyrm/views/rss_feed.py:34 +#, python-brace-format +msgid "Status updates from {obj.display_name}" +msgstr "" + #, fuzzy #~| msgid "Federated Servers" #~ msgid "Federated Timeline" @@ -3392,11 +3496,6 @@ msgstr "" #~ msgid "Local" #~ msgstr "Lokal" -#, fuzzy -#~| msgid "Direct Messages with %(username)s" -#~ msgid "Remove %(name)s" -#~ msgstr "Direktnachrichten mit %(username)s" - #, fuzzy #~| msgid "Lists: %(username)s" #~ msgid "Reports: %(server_name)s" @@ -3723,11 +3822,6 @@ msgstr "" #~ msgid "replied to %(username)s's comment" #~ msgstr "hat auf deinen Status geantwortet" -#, fuzzy -#~| msgid "replied to your status" -#~ msgid "replied to %(username)s's quote" -#~ msgstr "hat auf deinen Status geantwortet" - #~ msgid "Remove tag" #~ msgstr "Tag entfernen" diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index e8e3b0b3..ac2acf35 100644 --- a/locale/en_US/LC_MESSAGES/django.po +++ b/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-07 01:35+0000\n" +"POT-Creation-Date: 2021-08-16 21:26+0000\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -18,58 +18,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: bookwyrm/forms.py:232 +#: bookwyrm/forms.py:233 msgid "A user with this email already exists." msgstr "" -#: bookwyrm/forms.py:246 +#: bookwyrm/forms.py:247 msgid "One Day" msgstr "" -#: bookwyrm/forms.py:247 +#: bookwyrm/forms.py:248 msgid "One Week" msgstr "" -#: bookwyrm/forms.py:248 +#: bookwyrm/forms.py:249 msgid "One Month" msgstr "" -#: bookwyrm/forms.py:249 +#: bookwyrm/forms.py:250 msgid "Does Not Expire" msgstr "" -#: bookwyrm/forms.py:254 +#: bookwyrm/forms.py:255 #, python-format msgid "%(count)d uses" msgstr "" -#: bookwyrm/forms.py:257 +#: bookwyrm/forms.py:258 msgid "Unlimited" msgstr "" -#: bookwyrm/forms.py:307 +#: bookwyrm/forms.py:308 msgid "List Order" msgstr "" -#: bookwyrm/forms.py:308 +#: bookwyrm/forms.py:309 msgid "Book Title" msgstr "" -#: bookwyrm/forms.py:309 bookwyrm/templates/snippets/create_status_form.html:34 +#: bookwyrm/forms.py:310 +#: bookwyrm/templates/snippets/create_status/review.html:25 #: bookwyrm/templates/user/shelf/shelf.html:85 #: bookwyrm/templates/user/shelf/shelf.html:116 msgid "Rating" msgstr "" -#: bookwyrm/forms.py:311 bookwyrm/templates/lists/list.html:107 +#: bookwyrm/forms.py:312 bookwyrm/templates/lists/list.html:107 msgid "Sort By" msgstr "" -#: bookwyrm/forms.py:315 +#: bookwyrm/forms.py:316 msgid "Ascending" msgstr "" -#: bookwyrm/forms.py:316 +#: bookwyrm/forms.py:317 msgid "Descending" msgstr "" @@ -83,7 +84,7 @@ msgstr "" msgid "%(value)s is not a valid username" msgstr "" -#: bookwyrm/models/fields.py:174 bookwyrm/templates/layout.html:159 +#: bookwyrm/models/fields.py:174 bookwyrm/templates/layout.html:164 msgid "username" msgstr "" @@ -283,9 +284,8 @@ msgstr "" #: bookwyrm/templates/settings/edit_server.html:68 #: bookwyrm/templates/settings/federated_server.html:98 #: bookwyrm/templates/settings/site.html:108 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:36 +#: bookwyrm/templates/snippets/reading_modals/layout.html:16 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:42 #: bookwyrm/templates/user_admin/user_moderation_actions.html:45 msgid "Save" msgstr "" @@ -299,16 +299,14 @@ msgstr "" #: bookwyrm/templates/settings/federated_server.html:99 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/goal_form.html:32 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:43 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:43 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:37 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:28 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:43 msgid "Cancel" msgstr "" #: bookwyrm/templates/book/book.html:48 -#: bookwyrm/templates/discover/large-book.html:25 -#: bookwyrm/templates/discover/small-book.html:19 +#: bookwyrm/templates/discover/large-book.html:22 +#: bookwyrm/templates/landing/large-book.html:25 +#: bookwyrm/templates/landing/small-book.html:18 msgid "by" msgstr "" @@ -492,6 +490,7 @@ msgid "Back" msgstr "" #: bookwyrm/templates/book/edit_book.html:120 +#: bookwyrm/templates/snippets/create_status/review.html:18 msgid "Title:" msgstr "" @@ -701,7 +700,7 @@ msgid "Confirmation code:" msgstr "" #: bookwyrm/templates/confirm_email/confirm_email.html:25 -#: bookwyrm/templates/discover/landing_layout.html:70 +#: bookwyrm/templates/landing/landing_layout.html:70 #: bookwyrm/templates/moderation/report_modal.html:33 msgid "Submit" msgstr "" @@ -715,7 +714,7 @@ msgid "Resend confirmation link" msgstr "" #: bookwyrm/templates/confirm_email/resend_form.html:11 -#: bookwyrm/templates/discover/landing_layout.html:64 +#: bookwyrm/templates/landing/landing_layout.html:64 #: bookwyrm/templates/password_reset_request.html:18 #: bookwyrm/templates/preferences/edit_user.html:38 #: bookwyrm/templates/snippets/register_form.html:13 @@ -740,7 +739,7 @@ msgstr "" #: bookwyrm/templates/directory/directory.html:4 #: bookwyrm/templates/directory/directory.html:9 -#: bookwyrm/templates/layout.html:71 +#: bookwyrm/templates/layout.html:94 msgid "Directory" msgstr "" @@ -810,62 +809,40 @@ msgstr "" msgid "All known users" msgstr "" -#: bookwyrm/templates/discover/about.html:7 +#: bookwyrm/templates/discover/discover.html:4 +#: bookwyrm/templates/discover/discover.html:10 +#: bookwyrm/templates/layout.html:71 +msgid "Discover" +msgstr "" + +#: bookwyrm/templates/discover/discover.html:12 #, python-format -msgid "About %(site_name)s" +msgid "See what's new in the local %(site_name)s community" msgstr "" -#: bookwyrm/templates/discover/about.html:10 -#: bookwyrm/templates/discover/about.html:20 -msgid "Code of Conduct" +#: bookwyrm/templates/discover/large-book.html:46 +#: bookwyrm/templates/discover/small-book.html:32 +msgid "rated" msgstr "" -#: bookwyrm/templates/discover/about.html:13 -#: bookwyrm/templates/discover/about.html:29 -msgid "Privacy Policy" +#: bookwyrm/templates/discover/large-book.html:48 +#: bookwyrm/templates/discover/small-book.html:34 +msgid "reviewed" msgstr "" -#: bookwyrm/templates/discover/discover.html:6 -msgid "Recent Books" +#: bookwyrm/templates/discover/large-book.html:50 +#: bookwyrm/templates/discover/small-book.html:36 +msgid "commented on" msgstr "" -#: bookwyrm/templates/discover/landing_layout.html:5 -#: bookwyrm/templates/get_started/layout.html:5 -msgid "Welcome" +#: bookwyrm/templates/discover/large-book.html:52 +#: bookwyrm/templates/discover/small-book.html:38 +msgid "quoted" msgstr "" -#: bookwyrm/templates/discover/landing_layout.html:17 -msgid "Decentralized" -msgstr "" - -#: bookwyrm/templates/discover/landing_layout.html:23 -msgid "Friendly" -msgstr "" - -#: bookwyrm/templates/discover/landing_layout.html:29 -msgid "Anti-Corporate" -msgstr "" - -#: bookwyrm/templates/discover/landing_layout.html:44 -#, python-format -msgid "Join %(name)s" -msgstr "" - -#: bookwyrm/templates/discover/landing_layout.html:51 -#: bookwyrm/templates/login.html:56 -msgid "This instance is closed" -msgstr "" - -#: bookwyrm/templates/discover/landing_layout.html:57 -msgid "Thank you! Your request has been received." -msgstr "" - -#: bookwyrm/templates/discover/landing_layout.html:60 -msgid "Request an Invitation" -msgstr "" - -#: bookwyrm/templates/discover/landing_layout.html:79 -msgid "Your Account" +#: bookwyrm/templates/discover/large-book.html:68 +#: bookwyrm/templates/discover/small-book.html:52 +msgid "View status" msgstr "" #: bookwyrm/templates/email/confirm/html_content.html:6 @@ -878,10 +855,20 @@ msgstr "" msgid "Confirm Email" msgstr "" +#: bookwyrm/templates/email/confirm/html_content.html:15 +#, python-format +msgid "Or enter the code \"%(confirmation_code)s\" at login." +msgstr "" + #: bookwyrm/templates/email/confirm/subject.html:2 msgid "Please confirm your email" msgstr "" +#: bookwyrm/templates/email/confirm/text_content.html:10 +#, python-format +msgid "Or enter the code \"%(confirmation_code)s\" at login." +msgstr "" + #: bookwyrm/templates/email/html_layout.html:15 #: bookwyrm/templates/email/text_layout.html:2 msgid "Hi there," @@ -950,7 +937,7 @@ msgid "Direct Messages with %(username)s" msgstr "" #: bookwyrm/templates/feed/direct_messages.html:10 -#: bookwyrm/templates/layout.html:99 +#: bookwyrm/templates/layout.html:104 msgid "Direct Messages" msgstr "" @@ -964,7 +951,7 @@ msgstr "" #: bookwyrm/templates/feed/feed.html:22 #, python-format -msgid "load 0 unread status(es)" +msgid "load 0 unread status(es)" msgstr "" #: bookwyrm/templates/feed/feed.html:38 @@ -1066,6 +1053,11 @@ msgstr "" msgid "Save & continue" msgstr "" +#: bookwyrm/templates/get_started/layout.html:5 +#: bookwyrm/templates/landing/landing_layout.html:5 +msgid "Welcome" +msgstr "" + #: bookwyrm/templates/get_started/layout.html:15 #, python-format msgid "Welcome to %(site_name)s!" @@ -1266,7 +1258,6 @@ msgid "Book" msgstr "" #: bookwyrm/templates/import_status.html:122 -#: bookwyrm/templates/snippets/create_status_form.html:13 #: bookwyrm/templates/user/shelf/shelf.html:79 #: bookwyrm/templates/user/shelf/shelf.html:99 msgid "Title" @@ -1308,6 +1299,59 @@ msgstr "" msgid "Matching Books" msgstr "" +#: bookwyrm/templates/landing/about.html:7 +#, python-format +msgid "About %(site_name)s" +msgstr "" + +#: bookwyrm/templates/landing/about.html:10 +#: bookwyrm/templates/landing/about.html:20 +msgid "Code of Conduct" +msgstr "" + +#: bookwyrm/templates/landing/about.html:13 +#: bookwyrm/templates/landing/about.html:29 +msgid "Privacy Policy" +msgstr "" + +#: bookwyrm/templates/landing/landing.html:6 +msgid "Recent Books" +msgstr "" + +#: bookwyrm/templates/landing/landing_layout.html:17 +msgid "Decentralized" +msgstr "" + +#: bookwyrm/templates/landing/landing_layout.html:23 +msgid "Friendly" +msgstr "" + +#: bookwyrm/templates/landing/landing_layout.html:29 +msgid "Anti-Corporate" +msgstr "" + +#: bookwyrm/templates/landing/landing_layout.html:44 +#, python-format +msgid "Join %(name)s" +msgstr "" + +#: bookwyrm/templates/landing/landing_layout.html:51 +#: bookwyrm/templates/login.html:56 +msgid "This instance is closed" +msgstr "" + +#: bookwyrm/templates/landing/landing_layout.html:57 +msgid "Thank you! Your request has been received." +msgstr "" + +#: bookwyrm/templates/landing/landing_layout.html:60 +msgid "Request an Invitation" +msgstr "" + +#: bookwyrm/templates/landing/landing_layout.html:79 +msgid "Your Account" +msgstr "" + #: bookwyrm/templates/layout.html:40 msgid "Search for a book or user" msgstr "" @@ -1320,15 +1364,15 @@ msgstr "" msgid "Feed" msgstr "" -#: bookwyrm/templates/layout.html:94 +#: bookwyrm/templates/layout.html:99 msgid "Your Books" msgstr "" -#: bookwyrm/templates/layout.html:104 +#: bookwyrm/templates/layout.html:109 msgid "Settings" msgstr "" -#: bookwyrm/templates/layout.html:113 +#: bookwyrm/templates/layout.html:118 #: bookwyrm/templates/settings/admin_layout.html:31 #: bookwyrm/templates/settings/manage_invite_requests.html:15 #: bookwyrm/templates/settings/manage_invites.html:3 @@ -1336,61 +1380,61 @@ msgstr "" msgid "Invites" msgstr "" -#: bookwyrm/templates/layout.html:120 +#: bookwyrm/templates/layout.html:125 msgid "Admin" msgstr "" -#: bookwyrm/templates/layout.html:127 +#: bookwyrm/templates/layout.html:132 msgid "Log out" msgstr "" -#: bookwyrm/templates/layout.html:135 bookwyrm/templates/layout.html:136 +#: bookwyrm/templates/layout.html:140 bookwyrm/templates/layout.html:141 #: bookwyrm/templates/notifications.html:6 #: bookwyrm/templates/notifications.html:11 msgid "Notifications" msgstr "" -#: bookwyrm/templates/layout.html:158 bookwyrm/templates/layout.html:162 +#: bookwyrm/templates/layout.html:163 bookwyrm/templates/layout.html:167 #: bookwyrm/templates/login.html:22 #: bookwyrm/templates/snippets/register_form.html:4 msgid "Username:" msgstr "" -#: bookwyrm/templates/layout.html:163 +#: bookwyrm/templates/layout.html:168 msgid "password" msgstr "" -#: bookwyrm/templates/layout.html:164 bookwyrm/templates/login.html:41 +#: bookwyrm/templates/layout.html:169 bookwyrm/templates/login.html:41 msgid "Forgot your password?" msgstr "" -#: bookwyrm/templates/layout.html:167 bookwyrm/templates/login.html:10 +#: bookwyrm/templates/layout.html:172 bookwyrm/templates/login.html:10 #: bookwyrm/templates/login.html:38 msgid "Log in" msgstr "" -#: bookwyrm/templates/layout.html:175 +#: bookwyrm/templates/layout.html:180 msgid "Join" msgstr "" -#: bookwyrm/templates/layout.html:213 +#: bookwyrm/templates/layout.html:218 msgid "About this instance" msgstr "" -#: bookwyrm/templates/layout.html:217 +#: bookwyrm/templates/layout.html:222 msgid "Contact site admin" msgstr "" -#: bookwyrm/templates/layout.html:221 +#: bookwyrm/templates/layout.html:226 msgid "Documentation" msgstr "" -#: bookwyrm/templates/layout.html:228 +#: bookwyrm/templates/layout.html:233 #, python-format msgid "Support %(site_name)s on %(support_title)s" msgstr "" -#: bookwyrm/templates/layout.html:232 +#: bookwyrm/templates/layout.html:237 msgid "BookWyrm's source code is freely available. You can contribute or report issues on GitHub." msgstr "" @@ -1575,7 +1619,6 @@ msgstr "" #: bookwyrm/templates/moderation/report.html:40 #: bookwyrm/templates/snippets/create_status.html:28 -#: bookwyrm/templates/snippets/create_status_form.html:66 msgid "Comment" msgstr "" @@ -1869,26 +1912,6 @@ msgstr "" msgid "Want to Read \"%(book_title)s\"" msgstr "" -#: bookwyrm/templates/rss/title.html:5 -#: bookwyrm/templates/snippets/status/status_header.html:36 -msgid "rated" -msgstr "" - -#: bookwyrm/templates/rss/title.html:7 -#: bookwyrm/templates/snippets/status/status_header.html:38 -msgid "reviewed" -msgstr "" - -#: bookwyrm/templates/rss/title.html:9 -#: bookwyrm/templates/snippets/status/status_header.html:40 -msgid "commented on" -msgstr "" - -#: bookwyrm/templates/rss/title.html:11 -#: bookwyrm/templates/snippets/status/status_header.html:42 -msgid "quoted" -msgstr "" - #: bookwyrm/templates/search/book.html:64 msgid "Load results from other catalogues" msgstr "" @@ -2410,14 +2433,6 @@ msgstr "" msgid "Un-boost" msgstr "" -#: bookwyrm/templates/snippets/content_warning_field.html:3 -msgid "Spoiler alert:" -msgstr "" - -#: bookwyrm/templates/snippets/content_warning_field.html:10 -msgid "Spoilers ahead!" -msgstr "" - #: bookwyrm/templates/snippets/create_status.html:17 msgid "Review" msgstr "" @@ -2426,67 +2441,90 @@ msgstr "" msgid "Quote" msgstr "" -#: bookwyrm/templates/snippets/create_status_form.html:23 -msgid "Comment:" +#: bookwyrm/templates/snippets/create_status/comment.html:15 +msgid "Some thoughts on the book" msgstr "" -#: bookwyrm/templates/snippets/create_status_form.html:25 -msgid "Quote:" -msgstr "" - -#: bookwyrm/templates/snippets/create_status_form.html:27 -msgid "Review:" -msgstr "" - -#: bookwyrm/templates/snippets/create_status_form.html:56 -#: bookwyrm/templates/snippets/status/layout.html:29 -#: bookwyrm/templates/snippets/status/layout.html:47 -#: bookwyrm/templates/snippets/status/layout.html:48 -msgid "Reply" -msgstr "" - -#: bookwyrm/templates/snippets/create_status_form.html:56 -msgid "Content" -msgstr "" - -#: bookwyrm/templates/snippets/create_status_form.html:80 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 +#: bookwyrm/templates/snippets/create_status/comment.html:26 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:16 msgid "Progress:" msgstr "" -#: bookwyrm/templates/snippets/create_status_form.html:88 +#: bookwyrm/templates/snippets/create_status/comment.html:34 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:30 #: bookwyrm/templates/snippets/readthrough_form.html:22 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30 msgid "pages" msgstr "" -#: bookwyrm/templates/snippets/create_status_form.html:89 +#: bookwyrm/templates/snippets/create_status/comment.html:35 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:31 #: bookwyrm/templates/snippets/readthrough_form.html:23 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31 msgid "percent" msgstr "" -#: bookwyrm/templates/snippets/create_status_form.html:95 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 +#: bookwyrm/templates/snippets/create_status/comment.html:41 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:36 #, python-format msgid "of %(pages)s pages" msgstr "" -#: bookwyrm/templates/snippets/create_status_form.html:110 +#: bookwyrm/templates/snippets/create_status/content_field.html:16 +#: bookwyrm/templates/snippets/status/layout.html:31 +#: bookwyrm/templates/snippets/status/layout.html:49 +#: bookwyrm/templates/snippets/status/layout.html:50 +msgid "Reply" +msgstr "" + +#: bookwyrm/templates/snippets/create_status/content_field.html:16 +msgid "Content" +msgstr "" + +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:3 +msgid "Spoiler alert:" +msgstr "" + +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:10 +msgid "Spoilers ahead!" +msgstr "" + +#: bookwyrm/templates/snippets/create_status/content_warning_toggle.html:5 msgid "Include spoiler alert" msgstr "" -#: bookwyrm/templates/snippets/create_status_form.html:117 +#: bookwyrm/templates/snippets/create_status/layout.html:38 +#: bookwyrm/templates/snippets/reading_modals/form.html:7 +msgid "Comment:" +msgstr "" + +#: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 #: bookwyrm/templates/snippets/privacy_select.html:20 msgid "Private" msgstr "" -#: bookwyrm/templates/snippets/create_status_form.html:128 +#: bookwyrm/templates/snippets/create_status/post_options_block.html:19 msgid "Post" msgstr "" +#: bookwyrm/templates/snippets/create_status/quotation.html:19 +msgid "Quote:" +msgstr "" + +#: bookwyrm/templates/snippets/create_status/quotation.html:27 +#, python-format +msgid "An excerpt from '%(book_title)s'" +msgstr "" + +#: bookwyrm/templates/snippets/create_status/review.html:20 +#, python-format +msgid "Your review of '%(book_title)s'" +msgstr "" + +#: bookwyrm/templates/snippets/create_status/review.html:32 +msgid "Review:" +msgstr "" + #: bookwyrm/templates/snippets/delete_readthrough_modal.html:4 msgid "Delete these read dates?" msgstr "" @@ -2522,15 +2560,25 @@ msgstr "" msgid "Clear filters" msgstr "" -#: bookwyrm/templates/snippets/follow_button.html:12 +#: bookwyrm/templates/snippets/follow_button.html:14 +#, python-format +msgid "Follow @%(username)s" +msgstr "" + +#: bookwyrm/templates/snippets/follow_button.html:16 msgid "Follow" msgstr "" -#: bookwyrm/templates/snippets/follow_button.html:18 +#: bookwyrm/templates/snippets/follow_button.html:25 msgid "Undo follow request" msgstr "" -#: bookwyrm/templates/snippets/follow_button.html:20 +#: bookwyrm/templates/snippets/follow_button.html:30 +#, python-format +msgid "Unfollow @%(username)s" +msgstr "" + +#: bookwyrm/templates/snippets/follow_button.html:32 msgid "Unfollow" msgstr "" @@ -2551,7 +2599,7 @@ msgid_plural "%(rating)s stars" msgstr[0] "" msgstr[1] "" -#: bookwyrm/templates/snippets/generated_status/goal.html:1 +#: bookwyrm/templates/snippets/generated_status/goal.html:2 #, python-format msgid "set a goal to read %(counter)s book in %(year)s" msgid_plural "set a goal to read %(counter)s books in %(year)s" @@ -2560,8 +2608,8 @@ msgstr[1] "" #: bookwyrm/templates/snippets/generated_status/rating.html:3 #, python-format -msgid "Rated %(title)s: %(display_rating)s star" -msgid_plural "Rated %(title)s: %(display_rating)s stars" +msgid "rated %(title)s: %(display_rating)s star" +msgid_plural "rated %(title)s: %(display_rating)s stars" msgstr[0] "" msgstr[1] "" @@ -2595,9 +2643,7 @@ msgid "Goal privacy:" msgstr "" #: bookwyrm/templates/snippets/goal_form.html:26 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:37 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:31 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:20 +#: bookwyrm/templates/snippets/reading_modals/layout.html:13 msgid "Post to feed" msgstr "" @@ -2672,21 +2718,45 @@ msgstr "" msgid "Rate" msgstr "" +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6 +#, python-format +msgid "Finish \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:22 +#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:20 #: bookwyrm/templates/snippets/readthrough_form.html:7 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:19 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:19 msgid "Started reading" msgstr "" +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:30 +#: bookwyrm/templates/snippets/readthrough_form.html:30 +msgid "Finished reading" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/form.html:8 +msgid "(Optional)" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:5 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 +msgid "Update progress" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6 +#, python-format +msgid "Start \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 +#, python-format +msgid "Want to Read \"%(book_title)s\"" +msgstr "" + #: bookwyrm/templates/snippets/readthrough_form.html:14 msgid "Progress" msgstr "" -#: bookwyrm/templates/snippets/readthrough_form.html:30 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:25 -msgid "Finished reading" -msgstr "" - #: bookwyrm/templates/snippets/register_form.html:32 msgid "Sign Up" msgstr "" @@ -2703,16 +2773,6 @@ msgstr "" msgid "Move book" msgstr "" -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5 -#, python-format -msgid "Finish \"%(book_title)s\"" -msgstr "" - -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 -msgid "Update progress" -msgstr "" - #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 msgid "More shelves" msgstr "" @@ -2726,7 +2786,6 @@ msgid "Finish reading" msgstr "" #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:26 msgid "Want to read" msgstr "" @@ -2735,23 +2794,13 @@ msgstr "" msgid "Remove from %(name)s" msgstr "" -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5 -#, python-format -msgid "Start \"%(book_title)s\"" -msgstr "" - -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5 -#, python-format -msgid "Want to Read \"%(book_title)s\"" -msgstr "" - #: bookwyrm/templates/snippets/status/content_status.html:72 -#: bookwyrm/templates/snippets/trimmed_text.html:15 +#: bookwyrm/templates/snippets/trimmed_text.html:17 msgid "Show more" msgstr "" #: bookwyrm/templates/snippets/status/content_status.html:87 -#: bookwyrm/templates/snippets/trimmed_text.html:30 +#: bookwyrm/templates/snippets/trimmed_text.html:34 msgid "Show less" msgstr "" @@ -2759,18 +2808,58 @@ msgstr "" msgid "Open image in new window" msgstr "" +#: bookwyrm/templates/snippets/status/headers/comment.html:2 +#, python-format +msgid "commented on %(book)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/note.html:15 +#, python-format +msgid "replied to %(username)s's status" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/quotation.html:2 +#, python-format +msgid "quoted %(book)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/rating.html:3 +#, python-format +msgid "rated %(book)s:" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/read.html:7 +#, python-format +msgid "finished reading %(book)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/reading.html:7 +#, python-format +msgid "started reading %(book)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/review.html:3 +#, python-format +msgid "reviewed %(book)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/to_read.html:7 +#, python-format +msgid "%(username)s wants to read %(book)s" +msgstr "" + #: bookwyrm/templates/snippets/status/layout.html:21 #: bookwyrm/templates/snippets/status/status_options.html:17 msgid "Delete status" msgstr "" -#: bookwyrm/templates/snippets/status/layout.html:51 -#: bookwyrm/templates/snippets/status/layout.html:52 +#: bookwyrm/templates/snippets/status/layout.html:53 +#: bookwyrm/templates/snippets/status/layout.html:54 msgid "Boost status" msgstr "" -#: bookwyrm/templates/snippets/status/layout.html:55 -#: bookwyrm/templates/snippets/status/layout.html:56 +#: bookwyrm/templates/snippets/status/layout.html:57 +#: bookwyrm/templates/snippets/status/layout.html:58 msgid "Like status" msgstr "" @@ -2778,11 +2867,6 @@ msgstr "" msgid "boosted" msgstr "" -#: bookwyrm/templates/snippets/status/status_header.html:46 -#, python-format -msgid "replied to %(username)s's status" -msgstr "" - #: bookwyrm/templates/snippets/status/status_options.html:7 #: bookwyrm/templates/snippets/user_options.html:7 msgid "More options" @@ -3067,3 +3151,8 @@ msgstr "" #, python-format msgid "A password reset link sent to %s" msgstr "" + +#: bookwyrm/views/rss_feed.py:34 +#, python-brace-format +msgid "Status updates from {obj.display_name}" +msgstr "" diff --git a/locale/es/LC_MESSAGES/django.mo b/locale/es/LC_MESSAGES/django.mo index b513f8be..a7b3e181 100644 Binary files a/locale/es/LC_MESSAGES/django.mo and b/locale/es/LC_MESSAGES/django.mo differ diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po index 6051b159..04497a2a 100644 --- a/locale/es/LC_MESSAGES/django.po +++ b/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-10 02:58+0000\n" +"POT-Creation-Date: 2021-08-16 21:26+0000\n" "PO-Revision-Date: 2021-03-19 11:49+0800\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,59 +18,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: bookwyrm/forms.py:232 +#: bookwyrm/forms.py:233 msgid "A user with this email already exists." msgstr "Ya existe un usuario con ese correo electrónico." -#: bookwyrm/forms.py:246 +#: bookwyrm/forms.py:247 msgid "One Day" msgstr "Un día" -#: bookwyrm/forms.py:247 +#: bookwyrm/forms.py:248 msgid "One Week" msgstr "Una semana" -#: bookwyrm/forms.py:248 +#: bookwyrm/forms.py:249 msgid "One Month" msgstr "Un mes" -#: bookwyrm/forms.py:249 +#: bookwyrm/forms.py:250 msgid "Does Not Expire" msgstr "Nunca se vence" -#: bookwyrm/forms.py:254 +#: bookwyrm/forms.py:255 #, python-format msgid "%(count)d uses" msgstr "%(count)d usos" -#: bookwyrm/forms.py:257 +#: bookwyrm/forms.py:258 msgid "Unlimited" msgstr "Sin límite" -#: bookwyrm/forms.py:307 +#: bookwyrm/forms.py:308 msgid "List Order" msgstr "Orden de la lista" -#: bookwyrm/forms.py:308 +#: bookwyrm/forms.py:309 msgid "Book Title" msgstr "Título" -#: bookwyrm/forms.py:309 +#: bookwyrm/forms.py:310 #: bookwyrm/templates/snippets/create_status/review.html:25 #: bookwyrm/templates/user/shelf/shelf.html:85 #: bookwyrm/templates/user/shelf/shelf.html:116 msgid "Rating" msgstr "Calificación" -#: bookwyrm/forms.py:311 bookwyrm/templates/lists/list.html:107 +#: bookwyrm/forms.py:312 bookwyrm/templates/lists/list.html:107 msgid "Sort By" msgstr "Ordenar por" -#: bookwyrm/forms.py:315 +#: bookwyrm/forms.py:316 msgid "Ascending" msgstr "Ascendente" -#: bookwyrm/forms.py:316 +#: bookwyrm/forms.py:317 msgid "Descending" msgstr "Descendente" @@ -284,9 +284,8 @@ msgstr "Clave Goodreads:" #: bookwyrm/templates/settings/edit_server.html:68 #: bookwyrm/templates/settings/federated_server.html:98 #: bookwyrm/templates/settings/site.html:108 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:36 +#: bookwyrm/templates/snippets/reading_modals/layout.html:16 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:42 #: bookwyrm/templates/user_admin/user_moderation_actions.html:45 msgid "Save" msgstr "Guardar" @@ -300,10 +299,7 @@ msgstr "Guardar" #: bookwyrm/templates/settings/federated_server.html:99 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/goal_form.html:32 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:43 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:43 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:37 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:28 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:43 msgid "Cancel" msgstr "Cancelar" @@ -954,8 +950,9 @@ msgid "You have no messages right now." msgstr "No tienes ningún mensaje en este momento." #: bookwyrm/templates/feed/feed.html:22 -#, python-format -msgid "load 0 unread status(es)" +#, fuzzy, python-format +#| msgid "load 0 unread status(es)" +msgid "load 0 unread status(es)" msgstr "cargar 0 status(es) no leído(s)" #: bookwyrm/templates/feed/feed.html:38 @@ -2450,24 +2447,24 @@ msgid "Some thoughts on the book" msgstr "Algunos pensamientos sobre el libro" #: bookwyrm/templates/snippets/create_status/comment.html:26 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:16 msgid "Progress:" msgstr "Progreso:" #: bookwyrm/templates/snippets/create_status/comment.html:34 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:30 #: bookwyrm/templates/snippets/readthrough_form.html:22 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30 msgid "pages" msgstr "páginas" #: bookwyrm/templates/snippets/create_status/comment.html:35 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:31 #: bookwyrm/templates/snippets/readthrough_form.html:23 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31 msgid "percent" msgstr "por ciento" #: bookwyrm/templates/snippets/create_status/comment.html:41 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:36 #, python-format msgid "of %(pages)s pages" msgstr "de %(pages)s páginas" @@ -2496,6 +2493,7 @@ msgid "Include spoiler alert" msgstr "Incluir alerta de spoiler" #: bookwyrm/templates/snippets/create_status/layout.html:38 +#: bookwyrm/templates/snippets/reading_modals/form.html:7 msgid "Comment:" msgstr "Comentario:" @@ -2515,10 +2513,12 @@ msgid "Quote:" msgstr "Cita:" #: bookwyrm/templates/snippets/create_status/quotation.html:27 +#, python-format msgid "An excerpt from '%(book_title)s'" msgstr "Un extracto de '%(book_title)s'" #: bookwyrm/templates/snippets/create_status/review.html:20 +#, python-format msgid "Your review of '%(book_title)s'" msgstr "Tu reseña de '%(book_title)s'" @@ -2562,6 +2562,7 @@ msgid "Clear filters" msgstr "Borrar filtros" #: bookwyrm/templates/snippets/follow_button.html:14 +#, python-format msgid "Follow @%(username)s" msgstr "Seguir @%(username)s" @@ -2574,6 +2575,7 @@ msgid "Undo follow request" msgstr "Des-enviar solicitud de seguidor" #: bookwyrm/templates/snippets/follow_button.html:30 +#, python-format msgid "Unfollow @%(username)s" msgstr "Dejar de seguir @%(username)s" @@ -2606,6 +2608,7 @@ msgstr[0] "estableció una meta de leer %(counter)s libro en %(year)s" msgstr[1] "estableció una meta de leer %(counter)s libros en %(year)s" #: bookwyrm/templates/snippets/generated_status/rating.html:3 +#, python-format msgid "rated %(title)s: %(display_rating)s star" msgid_plural "rated %(title)s: %(display_rating)s stars" msgstr[0] "reseñó %(title)s: %(display_rating)s estrella" @@ -2641,9 +2644,7 @@ msgid "Goal privacy:" msgstr "Privacidad de meta:" #: bookwyrm/templates/snippets/goal_form.html:26 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:37 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:31 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:20 +#: bookwyrm/templates/snippets/reading_modals/layout.html:13 msgid "Post to feed" msgstr "Compartir con tu feed" @@ -2672,6 +2673,8 @@ msgid "page %(page)s of %(total_pages)s" msgstr "página %(page)s de %(total_pages)s" #: bookwyrm/templates/snippets/page_text.html:6 +#, fuzzy, python-format +#| msgid "page %(page)s" msgid "page %(page)s" msgstr "página %(pages)s" @@ -2717,21 +2720,45 @@ msgstr "Da una calificación" msgid "Rate" msgstr "Calificar" +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6 +#, python-format +msgid "Finish \"%(book_title)s\"" +msgstr "Terminar \"%(book_title)s\"" + +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:22 +#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:20 #: bookwyrm/templates/snippets/readthrough_form.html:7 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:19 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:19 msgid "Started reading" msgstr "Lectura se empezó" +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:30 +#: bookwyrm/templates/snippets/readthrough_form.html:30 +msgid "Finished reading" +msgstr "Lectura se terminó" + +#: bookwyrm/templates/snippets/reading_modals/form.html:8 +msgid "(Optional)" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:5 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 +msgid "Update progress" +msgstr "Progreso de actualización" + +#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6 +#, python-format +msgid "Start \"%(book_title)s\"" +msgstr "Empezar \"%(book_title)s\"" + +#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 +#, python-format +msgid "Want to Read \"%(book_title)s\"" +msgstr "Quiero leer \"%(book_title)s\"" + #: bookwyrm/templates/snippets/readthrough_form.html:14 msgid "Progress" msgstr "Progreso" -#: bookwyrm/templates/snippets/readthrough_form.html:30 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:25 -msgid "Finished reading" -msgstr "Lectura se terminó" - #: bookwyrm/templates/snippets/register_form.html:32 msgid "Sign Up" msgstr "Inscribirse" @@ -2748,16 +2775,6 @@ msgstr "Importar libro" msgid "Move book" msgstr "Mover libro" -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5 -#, python-format -msgid "Finish \"%(book_title)s\"" -msgstr "Terminar \"%(book_title)s\"" - -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 -msgid "Update progress" -msgstr "Progreso de actualización" - #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 msgid "More shelves" msgstr "Más estantes" @@ -2771,7 +2788,6 @@ msgid "Finish reading" msgstr "Terminar de leer" #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:26 msgid "Want to read" msgstr "Quiero leer" @@ -2780,16 +2796,6 @@ msgstr "Quiero leer" msgid "Remove from %(name)s" msgstr "Quitar de %(name)s" -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5 -#, python-format -msgid "Start \"%(book_title)s\"" -msgstr "Empezar \"%(book_title)s\"" - -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5 -#, python-format -msgid "Want to Read \"%(book_title)s\"" -msgstr "Quiero leer \"%(book_title)s\"" - #: bookwyrm/templates/snippets/status/content_status.html:72 #: bookwyrm/templates/snippets/trimmed_text.html:17 msgid "Show more" @@ -2805,35 +2811,42 @@ msgid "Open image in new window" msgstr "Abrir imagen en una nueva ventana" #: bookwyrm/templates/snippets/status/headers/comment.html:2 +#, python-format msgid "commented on %(book)s" msgstr "comentó en \"%(book)s\"" #: bookwyrm/templates/snippets/status/headers/note.html:15 #, python-format -msgid "replied to %(username)s's status" +msgid "replied to %(username)s's status" msgstr "respondió al status de %(username)s " #: bookwyrm/templates/snippets/status/headers/quotation.html:2 +#, python-format msgid "quoted %(book)s" msgstr "citó a %(book)s" #: bookwyrm/templates/snippets/status/headers/rating.html:3 +#, python-format msgid "rated %(book)s:" msgstr "calificó %(book)s:" -#: bookwyrm/templates/snippets/status/headers/read.html:5 +#: bookwyrm/templates/snippets/status/headers/read.html:7 +#, python-format msgid "finished reading %(book)s" msgstr "terminó de leer %(book)s" -#: bookwyrm/templates/snippets/status/headers/reading.html:6 +#: bookwyrm/templates/snippets/status/headers/reading.html:7 +#, python-format msgid "started reading %(book)s" msgstr "empezó a leer %(book)s" #: bookwyrm/templates/snippets/status/headers/review.html:3 +#, python-format msgid "reviewed %(book)s" msgstr "reseñó a %(book)s" -#: bookwyrm/templates/snippets/status/headers/to_read.html:6 +#: bookwyrm/templates/snippets/status/headers/to_read.html:7 +#, python-format msgid "%(username)s wants to read %(book)s" msgstr "%(username)s quiere leer %(book)s" @@ -3141,6 +3154,11 @@ msgstr "No se pudo encontrar un usuario con esa dirección de correo electrónic msgid "A password reset link sent to %s" msgstr "Un enlace para reestablecer tu contraseña se enviará a %s" +#: bookwyrm/views/rss_feed.py:34 +#, python-brace-format +msgid "Status updates from {obj.display_name}" +msgstr "" + #~ msgid "Local Timeline" #~ msgstr "Línea temporal local" diff --git a/locale/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo index 98bc2909..75ac69eb 100644 Binary files a/locale/fr_FR/LC_MESSAGES/django.mo and b/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/locale/fr_FR/LC_MESSAGES/django.po b/locale/fr_FR/LC_MESSAGES/django.po index badfcdca..46416931 100644 --- a/locale/fr_FR/LC_MESSAGES/django.po +++ b/locale/fr_FR/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-07 01:35+0000\n" +"POT-Creation-Date: 2021-08-16 21:26+0000\n" "PO-Revision-Date: 2021-04-05 12:44+0100\n" "Last-Translator: Fabien Basmaison \n" "Language-Team: Mouse Reeve \n" @@ -18,58 +18,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: bookwyrm/forms.py:232 +#: bookwyrm/forms.py:233 msgid "A user with this email already exists." msgstr "Cet email est déjà associé à un compte." -#: bookwyrm/forms.py:246 +#: bookwyrm/forms.py:247 msgid "One Day" msgstr "Un jour" -#: bookwyrm/forms.py:247 +#: bookwyrm/forms.py:248 msgid "One Week" msgstr "Une semaine" -#: bookwyrm/forms.py:248 +#: bookwyrm/forms.py:249 msgid "One Month" msgstr "Un mois" -#: bookwyrm/forms.py:249 +#: bookwyrm/forms.py:250 msgid "Does Not Expire" msgstr "Sans expiration" -#: bookwyrm/forms.py:254 +#: bookwyrm/forms.py:255 #, python-format msgid "%(count)d uses" msgstr "%(count)d utilisations" -#: bookwyrm/forms.py:257 +#: bookwyrm/forms.py:258 msgid "Unlimited" msgstr "Sans limite" -#: bookwyrm/forms.py:307 +#: bookwyrm/forms.py:308 msgid "List Order" msgstr "Ordre de la liste" -#: bookwyrm/forms.py:308 +#: bookwyrm/forms.py:309 msgid "Book Title" msgstr "Titre du livre" -#: bookwyrm/forms.py:309 bookwyrm/templates/snippets/create_status_form.html:34 +#: bookwyrm/forms.py:310 +#: bookwyrm/templates/snippets/create_status/review.html:25 #: bookwyrm/templates/user/shelf/shelf.html:85 #: bookwyrm/templates/user/shelf/shelf.html:116 msgid "Rating" msgstr "Note" -#: bookwyrm/forms.py:311 bookwyrm/templates/lists/list.html:107 +#: bookwyrm/forms.py:312 bookwyrm/templates/lists/list.html:107 msgid "Sort By" msgstr "Trier par" -#: bookwyrm/forms.py:315 +#: bookwyrm/forms.py:316 msgid "Ascending" msgstr "Ordre croissant" -#: bookwyrm/forms.py:316 +#: bookwyrm/forms.py:317 msgid "Descending" msgstr "Ordre décroissant" @@ -83,7 +84,7 @@ msgstr "%(value)s n’est pas une remote_id valide." msgid "%(value)s is not a valid username" msgstr "%(value)s n’est pas un nom de compte valide." -#: bookwyrm/models/fields.py:174 bookwyrm/templates/layout.html:159 +#: bookwyrm/models/fields.py:174 bookwyrm/templates/layout.html:164 msgid "username" msgstr "nom du compte :" @@ -287,9 +288,8 @@ msgstr "Clé Goodreads :" #: bookwyrm/templates/settings/edit_server.html:68 #: bookwyrm/templates/settings/federated_server.html:98 #: bookwyrm/templates/settings/site.html:108 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:36 +#: bookwyrm/templates/snippets/reading_modals/layout.html:16 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:42 #: bookwyrm/templates/user_admin/user_moderation_actions.html:45 msgid "Save" msgstr "Enregistrer" @@ -303,16 +303,14 @@ msgstr "Enregistrer" #: bookwyrm/templates/settings/federated_server.html:99 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/goal_form.html:32 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:43 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:43 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:37 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:28 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:43 msgid "Cancel" msgstr "Annuler" #: bookwyrm/templates/book/book.html:48 -#: bookwyrm/templates/discover/large-book.html:25 -#: bookwyrm/templates/discover/small-book.html:19 +#: bookwyrm/templates/discover/large-book.html:22 +#: bookwyrm/templates/landing/large-book.html:25 +#: bookwyrm/templates/landing/small-book.html:18 msgid "by" msgstr "par" @@ -496,6 +494,7 @@ msgid "Back" msgstr "Retour" #: bookwyrm/templates/book/edit_book.html:120 +#: bookwyrm/templates/snippets/create_status/review.html:18 msgid "Title:" msgstr "Titre :" @@ -705,7 +704,7 @@ msgid "Confirmation code:" msgstr "Code de confirmation :" #: bookwyrm/templates/confirm_email/confirm_email.html:25 -#: bookwyrm/templates/discover/landing_layout.html:70 +#: bookwyrm/templates/landing/landing_layout.html:70 #: bookwyrm/templates/moderation/report_modal.html:33 msgid "Submit" msgstr "Valider" @@ -719,7 +718,7 @@ msgid "Resend confirmation link" msgstr "Envoyer le lien de confirmation de nouveau" #: bookwyrm/templates/confirm_email/resend_form.html:11 -#: bookwyrm/templates/discover/landing_layout.html:64 +#: bookwyrm/templates/landing/landing_layout.html:64 #: bookwyrm/templates/password_reset_request.html:18 #: bookwyrm/templates/preferences/edit_user.html:38 #: bookwyrm/templates/snippets/register_form.html:13 @@ -744,7 +743,7 @@ msgstr "Communauté fédérée" #: bookwyrm/templates/directory/directory.html:4 #: bookwyrm/templates/directory/directory.html:9 -#: bookwyrm/templates/layout.html:71 +#: bookwyrm/templates/layout.html:94 msgid "Directory" msgstr "Répertoire" @@ -816,63 +815,45 @@ msgstr "Comptes BookWyrm" msgid "All known users" msgstr "Tous les comptes connus" -#: bookwyrm/templates/discover/about.html:7 +#: bookwyrm/templates/discover/discover.html:4 +#: bookwyrm/templates/discover/discover.html:10 +#: bookwyrm/templates/layout.html:71 +#, fuzzy +#| msgid "Discard" +msgid "Discover" +msgstr "Rejeter" + +#: bookwyrm/templates/discover/discover.html:12 #, python-format -msgid "About %(site_name)s" -msgstr "À propos de %(site_name)s" +msgid "See what's new in the local %(site_name)s community" +msgstr "" -#: bookwyrm/templates/discover/about.html:10 -#: bookwyrm/templates/discover/about.html:20 -msgid "Code of Conduct" -msgstr "Code de conduite" +#: bookwyrm/templates/discover/large-book.html:46 +#: bookwyrm/templates/discover/small-book.html:32 +msgid "rated" +msgstr "a noté" -#: bookwyrm/templates/discover/about.html:13 -#: bookwyrm/templates/discover/about.html:29 -msgid "Privacy Policy" -msgstr "Politique de vie privée" +#: bookwyrm/templates/discover/large-book.html:48 +#: bookwyrm/templates/discover/small-book.html:34 +msgid "reviewed" +msgstr "a écrit une critique de" -#: bookwyrm/templates/discover/discover.html:6 -msgid "Recent Books" -msgstr "Livres récents" +#: bookwyrm/templates/discover/large-book.html:50 +#: bookwyrm/templates/discover/small-book.html:36 +msgid "commented on" +msgstr "a commenté" -#: bookwyrm/templates/discover/landing_layout.html:5 -#: bookwyrm/templates/get_started/layout.html:5 -msgid "Welcome" -msgstr "Bienvenue" +#: bookwyrm/templates/discover/large-book.html:52 +#: bookwyrm/templates/discover/small-book.html:38 +msgid "quoted" +msgstr "a cité" -#: bookwyrm/templates/discover/landing_layout.html:17 -msgid "Decentralized" -msgstr "Décentralisé" - -#: bookwyrm/templates/discover/landing_layout.html:23 -msgid "Friendly" -msgstr "Sympa" - -#: bookwyrm/templates/discover/landing_layout.html:29 -msgid "Anti-Corporate" -msgstr "Anti‑commercial" - -#: bookwyrm/templates/discover/landing_layout.html:44 -#, python-format -msgid "Join %(name)s" -msgstr "Rejoignez %(name)s" - -#: bookwyrm/templates/discover/landing_layout.html:51 -#: bookwyrm/templates/login.html:56 -msgid "This instance is closed" -msgstr "Cette instance est fermée" - -#: bookwyrm/templates/discover/landing_layout.html:57 -msgid "Thank you! Your request has been received." -msgstr "Merci ! Votre demande a bien été reçue." - -#: bookwyrm/templates/discover/landing_layout.html:60 -msgid "Request an Invitation" -msgstr "Demander une invitation" - -#: bookwyrm/templates/discover/landing_layout.html:79 -msgid "Your Account" -msgstr "Votre compte" +#: bookwyrm/templates/discover/large-book.html:68 +#: bookwyrm/templates/discover/small-book.html:52 +#, fuzzy +#| msgid "Like status" +msgid "View status" +msgstr "Ajouter le statut aux favoris" #: bookwyrm/templates/email/confirm/html_content.html:6 #: bookwyrm/templates/email/confirm/text_content.html:4 @@ -884,10 +865,20 @@ msgstr "Une dernière petite étape avant de rejoindre %(site_name)s ! Veuille msgid "Confirm Email" msgstr "Confirmation de l’email" +#: bookwyrm/templates/email/confirm/html_content.html:15 +#, python-format +msgid "Or enter the code \"%(confirmation_code)s\" at login." +msgstr "" + #: bookwyrm/templates/email/confirm/subject.html:2 msgid "Please confirm your email" msgstr "Veuillez confirmer votre adresse email" +#: bookwyrm/templates/email/confirm/text_content.html:10 +#, python-format +msgid "Or enter the code \"%(confirmation_code)s\" at login." +msgstr "" + #: bookwyrm/templates/email/html_layout.html:15 #: bookwyrm/templates/email/text_layout.html:2 msgid "Hi there," @@ -956,7 +947,7 @@ msgid "Direct Messages with %(username)s" msgstr "Messages directs avec %(username)s" #: bookwyrm/templates/feed/direct_messages.html:10 -#: bookwyrm/templates/layout.html:99 +#: bookwyrm/templates/layout.html:104 msgid "Direct Messages" msgstr "Messages directs" @@ -971,7 +962,7 @@ msgstr "Vous n’avez aucun message pour l’instant." #: bookwyrm/templates/feed/feed.html:22 #, fuzzy, python-format #| msgid "load 0 unread status(es)" -msgid "load 0 unread status(es)" +msgid "load 0 unread status(es)" msgstr "charger le(s) 0 statut(s) non lu(s)" #: bookwyrm/templates/feed/feed.html:38 @@ -1073,6 +1064,11 @@ msgstr "Aucun livre trouvé" msgid "Save & continue" msgstr "Enregistrer & continuer" +#: bookwyrm/templates/get_started/layout.html:5 +#: bookwyrm/templates/landing/landing_layout.html:5 +msgid "Welcome" +msgstr "Bienvenue" + #: bookwyrm/templates/get_started/layout.html:15 #, python-format msgid "Welcome to %(site_name)s!" @@ -1277,7 +1273,6 @@ msgid "Book" msgstr "Livre" #: bookwyrm/templates/import_status.html:122 -#: bookwyrm/templates/snippets/create_status_form.html:13 #: bookwyrm/templates/user/shelf/shelf.html:79 #: bookwyrm/templates/user/shelf/shelf.html:99 msgid "Title" @@ -1319,6 +1314,59 @@ msgstr "Résultats de recherche pour « %(query)s »" msgid "Matching Books" msgstr "Livres correspondants" +#: bookwyrm/templates/landing/about.html:7 +#, python-format +msgid "About %(site_name)s" +msgstr "À propos de %(site_name)s" + +#: bookwyrm/templates/landing/about.html:10 +#: bookwyrm/templates/landing/about.html:20 +msgid "Code of Conduct" +msgstr "Code de conduite" + +#: bookwyrm/templates/landing/about.html:13 +#: bookwyrm/templates/landing/about.html:29 +msgid "Privacy Policy" +msgstr "Politique de vie privée" + +#: bookwyrm/templates/landing/landing.html:6 +msgid "Recent Books" +msgstr "Livres récents" + +#: bookwyrm/templates/landing/landing_layout.html:17 +msgid "Decentralized" +msgstr "Décentralisé" + +#: bookwyrm/templates/landing/landing_layout.html:23 +msgid "Friendly" +msgstr "Sympa" + +#: bookwyrm/templates/landing/landing_layout.html:29 +msgid "Anti-Corporate" +msgstr "Anti‑commercial" + +#: bookwyrm/templates/landing/landing_layout.html:44 +#, python-format +msgid "Join %(name)s" +msgstr "Rejoignez %(name)s" + +#: bookwyrm/templates/landing/landing_layout.html:51 +#: bookwyrm/templates/login.html:56 +msgid "This instance is closed" +msgstr "Cette instance est fermée" + +#: bookwyrm/templates/landing/landing_layout.html:57 +msgid "Thank you! Your request has been received." +msgstr "Merci ! Votre demande a bien été reçue." + +#: bookwyrm/templates/landing/landing_layout.html:60 +msgid "Request an Invitation" +msgstr "Demander une invitation" + +#: bookwyrm/templates/landing/landing_layout.html:79 +msgid "Your Account" +msgstr "Votre compte" + #: bookwyrm/templates/layout.html:40 msgid "Search for a book or user" msgstr "Chercher un livre ou un compte" @@ -1331,15 +1379,15 @@ msgstr "Menu de navigation principal " msgid "Feed" msgstr "Fil d’actualité" -#: bookwyrm/templates/layout.html:94 +#: bookwyrm/templates/layout.html:99 msgid "Your Books" msgstr "Vos Livres" -#: bookwyrm/templates/layout.html:104 +#: bookwyrm/templates/layout.html:109 msgid "Settings" msgstr "Paramètres" -#: bookwyrm/templates/layout.html:113 +#: bookwyrm/templates/layout.html:118 #: bookwyrm/templates/settings/admin_layout.html:31 #: bookwyrm/templates/settings/manage_invite_requests.html:15 #: bookwyrm/templates/settings/manage_invites.html:3 @@ -1347,61 +1395,61 @@ msgstr "Paramètres" msgid "Invites" msgstr "Invitations" -#: bookwyrm/templates/layout.html:120 +#: bookwyrm/templates/layout.html:125 msgid "Admin" msgstr "Admin" -#: bookwyrm/templates/layout.html:127 +#: bookwyrm/templates/layout.html:132 msgid "Log out" msgstr "Se déconnecter" -#: bookwyrm/templates/layout.html:135 bookwyrm/templates/layout.html:136 +#: bookwyrm/templates/layout.html:140 bookwyrm/templates/layout.html:141 #: bookwyrm/templates/notifications.html:6 #: bookwyrm/templates/notifications.html:11 msgid "Notifications" msgstr "Notifications" -#: bookwyrm/templates/layout.html:158 bookwyrm/templates/layout.html:162 +#: bookwyrm/templates/layout.html:163 bookwyrm/templates/layout.html:167 #: bookwyrm/templates/login.html:22 #: bookwyrm/templates/snippets/register_form.html:4 msgid "Username:" msgstr "Nom du compte :" -#: bookwyrm/templates/layout.html:163 +#: bookwyrm/templates/layout.html:168 msgid "password" msgstr "Mot de passe" -#: bookwyrm/templates/layout.html:164 bookwyrm/templates/login.html:41 +#: bookwyrm/templates/layout.html:169 bookwyrm/templates/login.html:41 msgid "Forgot your password?" msgstr "Mot de passe oublié ?" -#: bookwyrm/templates/layout.html:167 bookwyrm/templates/login.html:10 +#: bookwyrm/templates/layout.html:172 bookwyrm/templates/login.html:10 #: bookwyrm/templates/login.html:38 msgid "Log in" msgstr "Se connecter" -#: bookwyrm/templates/layout.html:175 +#: bookwyrm/templates/layout.html:180 msgid "Join" msgstr "Rejoindre" -#: bookwyrm/templates/layout.html:213 +#: bookwyrm/templates/layout.html:218 msgid "About this instance" msgstr "À propos de cette instance" -#: bookwyrm/templates/layout.html:217 +#: bookwyrm/templates/layout.html:222 msgid "Contact site admin" msgstr "Contacter l’administrateur du site" -#: bookwyrm/templates/layout.html:221 +#: bookwyrm/templates/layout.html:226 msgid "Documentation" msgstr "Documentation" -#: bookwyrm/templates/layout.html:228 +#: bookwyrm/templates/layout.html:233 #, python-format msgid "Support %(site_name)s on %(support_title)s" msgstr "Soutenez %(site_name)s avec %(support_title)s" -#: bookwyrm/templates/layout.html:232 +#: bookwyrm/templates/layout.html:237 msgid "BookWyrm's source code is freely available. You can contribute or report issues on GitHub." msgstr "BookWyrm est un logiciel libre. Vous pouvez contribuer ou faire des rapports de bogues via GitHub." @@ -1586,7 +1634,6 @@ msgstr "Commentaires de l’équipe de modération" #: bookwyrm/templates/moderation/report.html:40 #: bookwyrm/templates/snippets/create_status.html:28 -#: bookwyrm/templates/snippets/create_status_form.html:66 msgid "Comment" msgstr "Commentaire" @@ -1887,26 +1934,6 @@ msgstr "Modifier « %(book_title)s »" msgid "Want to Read \"%(book_title)s\"" msgstr "Ajouter « %(book_title)s » aux envies de lecture" -#: bookwyrm/templates/rss/title.html:5 -#: bookwyrm/templates/snippets/status/status_header.html:36 -msgid "rated" -msgstr "a noté" - -#: bookwyrm/templates/rss/title.html:7 -#: bookwyrm/templates/snippets/status/status_header.html:38 -msgid "reviewed" -msgstr "a écrit une critique de" - -#: bookwyrm/templates/rss/title.html:9 -#: bookwyrm/templates/snippets/status/status_header.html:40 -msgid "commented on" -msgstr "a commenté" - -#: bookwyrm/templates/rss/title.html:11 -#: bookwyrm/templates/snippets/status/status_header.html:42 -msgid "quoted" -msgstr "a cité" - #: bookwyrm/templates/search/book.html:64 msgid "Load results from other catalogues" msgstr "Charger les résultats d’autres catalogues" @@ -2429,14 +2456,6 @@ msgstr "Partager" msgid "Un-boost" msgstr "Annuler le partage" -#: bookwyrm/templates/snippets/content_warning_field.html:3 -msgid "Spoiler alert:" -msgstr "Alerte Spoiler :" - -#: bookwyrm/templates/snippets/content_warning_field.html:10 -msgid "Spoilers ahead!" -msgstr "Attention spoilers !" - #: bookwyrm/templates/snippets/create_status.html:17 msgid "Review" msgstr "Critique" @@ -2445,67 +2464,92 @@ msgstr "Critique" msgid "Quote" msgstr "Citation" -#: bookwyrm/templates/snippets/create_status_form.html:23 -msgid "Comment:" -msgstr "Commentaire :" +#: bookwyrm/templates/snippets/create_status/comment.html:15 +msgid "Some thoughts on the book" +msgstr "" -#: bookwyrm/templates/snippets/create_status_form.html:25 -msgid "Quote:" -msgstr "Citation :" - -#: bookwyrm/templates/snippets/create_status_form.html:27 -msgid "Review:" -msgstr "Critique :" - -#: bookwyrm/templates/snippets/create_status_form.html:56 -#: bookwyrm/templates/snippets/status/layout.html:29 -#: bookwyrm/templates/snippets/status/layout.html:47 -#: bookwyrm/templates/snippets/status/layout.html:48 -msgid "Reply" -msgstr "Répondre" - -#: bookwyrm/templates/snippets/create_status_form.html:56 -msgid "Content" -msgstr "Contenu" - -#: bookwyrm/templates/snippets/create_status_form.html:80 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 +#: bookwyrm/templates/snippets/create_status/comment.html:26 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:16 msgid "Progress:" msgstr "Progression :" -#: bookwyrm/templates/snippets/create_status_form.html:88 +#: bookwyrm/templates/snippets/create_status/comment.html:34 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:30 #: bookwyrm/templates/snippets/readthrough_form.html:22 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30 msgid "pages" msgstr "pages" -#: bookwyrm/templates/snippets/create_status_form.html:89 +#: bookwyrm/templates/snippets/create_status/comment.html:35 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:31 #: bookwyrm/templates/snippets/readthrough_form.html:23 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31 msgid "percent" msgstr "pourcent" -#: bookwyrm/templates/snippets/create_status_form.html:95 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 +#: bookwyrm/templates/snippets/create_status/comment.html:41 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:36 #, python-format msgid "of %(pages)s pages" msgstr "sur %(pages)s pages" -#: bookwyrm/templates/snippets/create_status_form.html:110 +#: bookwyrm/templates/snippets/create_status/content_field.html:16 +#: bookwyrm/templates/snippets/status/layout.html:31 +#: bookwyrm/templates/snippets/status/layout.html:49 +#: bookwyrm/templates/snippets/status/layout.html:50 +msgid "Reply" +msgstr "Répondre" + +#: bookwyrm/templates/snippets/create_status/content_field.html:16 +msgid "Content" +msgstr "Contenu" + +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:3 +msgid "Spoiler alert:" +msgstr "Alerte Spoiler :" + +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:10 +msgid "Spoilers ahead!" +msgstr "Attention spoilers !" + +#: bookwyrm/templates/snippets/create_status/content_warning_toggle.html:5 msgid "Include spoiler alert" msgstr "Afficher une alerte spoiler" -#: bookwyrm/templates/snippets/create_status_form.html:117 +#: bookwyrm/templates/snippets/create_status/layout.html:38 +#: bookwyrm/templates/snippets/reading_modals/form.html:7 +msgid "Comment:" +msgstr "Commentaire :" + +#: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 #: bookwyrm/templates/snippets/privacy_select.html:20 msgid "Private" msgstr "Privé" -#: bookwyrm/templates/snippets/create_status_form.html:128 +#: bookwyrm/templates/snippets/create_status/post_options_block.html:19 msgid "Post" msgstr "Publier" +#: bookwyrm/templates/snippets/create_status/quotation.html:19 +msgid "Quote:" +msgstr "Citation :" + +#: bookwyrm/templates/snippets/create_status/quotation.html:27 +#, fuzzy, python-format +#| msgid "Edit \"%(book_title)s\"" +msgid "An excerpt from '%(book_title)s'" +msgstr "Modifier « %(book_title)s »" + +#: bookwyrm/templates/snippets/create_status/review.html:20 +#, fuzzy, python-format +#| msgid "Editions of %(book_title)s" +msgid "Your review of '%(book_title)s'" +msgstr "Éditions de %(book_title)s" + +#: bookwyrm/templates/snippets/create_status/review.html:32 +msgid "Review:" +msgstr "Critique :" + #: bookwyrm/templates/snippets/delete_readthrough_modal.html:4 msgid "Delete these read dates?" msgstr "Supprimer ces dates de lecture ?" @@ -2541,15 +2585,27 @@ msgstr "Appliquer les filtres" msgid "Clear filters" msgstr "Annuler les filtres" -#: bookwyrm/templates/snippets/follow_button.html:12 +#: bookwyrm/templates/snippets/follow_button.html:14 +#, fuzzy, python-format +#| msgid "Report @%(username)s" +msgid "Follow @%(username)s" +msgstr "Signaler @%(username)s" + +#: bookwyrm/templates/snippets/follow_button.html:16 msgid "Follow" msgstr "S’abonner" -#: bookwyrm/templates/snippets/follow_button.html:18 +#: bookwyrm/templates/snippets/follow_button.html:25 msgid "Undo follow request" msgstr "Annuler la demande d’abonnement" -#: bookwyrm/templates/snippets/follow_button.html:20 +#: bookwyrm/templates/snippets/follow_button.html:30 +#, fuzzy, python-format +#| msgid "Report @%(username)s" +msgid "Unfollow @%(username)s" +msgstr "Signaler @%(username)s" + +#: bookwyrm/templates/snippets/follow_button.html:32 msgid "Unfollow" msgstr "Se désabonner" @@ -2570,7 +2626,7 @@ msgid_plural "%(rating)s stars" msgstr[0] "%(rating)s étoile" msgstr[1] "%(rating)s étoiles" -#: bookwyrm/templates/snippets/generated_status/goal.html:1 +#: bookwyrm/templates/snippets/generated_status/goal.html:2 #, python-format msgid "set a goal to read %(counter)s book in %(year)s" msgid_plural "set a goal to read %(counter)s books in %(year)s" @@ -2578,9 +2634,11 @@ msgstr[0] "souhaite lire %(counter)s livre en %(year)s" msgstr[1] "souhaite lire %(counter)s livres en %(year)s" #: bookwyrm/templates/snippets/generated_status/rating.html:3 -#, python-format -msgid "Rated %(title)s: %(display_rating)s star" -msgid_plural "Rated %(title)s: %(display_rating)s stars" +#, fuzzy, python-format +#| msgid "Rated %(title)s: %(display_rating)s star" +#| msgid_plural "Rated %(title)s: %(display_rating)s stars" +msgid "rated %(title)s: %(display_rating)s star" +msgid_plural "rated %(title)s: %(display_rating)s stars" msgstr[0] "A noté %(title)s : %(display_rating)s star" msgstr[1] "A noté %(title)s : %(display_rating)s stars" @@ -2614,9 +2672,7 @@ msgid "Goal privacy:" msgstr "Confidentialité du défi :" #: bookwyrm/templates/snippets/goal_form.html:26 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:37 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:31 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:20 +#: bookwyrm/templates/snippets/reading_modals/layout.html:13 msgid "Post to feed" msgstr "Publier sur le fil d’actualité" @@ -2691,21 +2747,45 @@ msgstr "Laisser une note" msgid "Rate" msgstr "Noter" +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6 +#, python-format +msgid "Finish \"%(book_title)s\"" +msgstr "Terminer « %(book_title)s »" + +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:22 +#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:20 #: bookwyrm/templates/snippets/readthrough_form.html:7 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:19 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:19 msgid "Started reading" msgstr "Lecture commencée le" +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:30 +#: bookwyrm/templates/snippets/readthrough_form.html:30 +msgid "Finished reading" +msgstr "Lecture terminée le" + +#: bookwyrm/templates/snippets/reading_modals/form.html:8 +msgid "(Optional)" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:5 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 +msgid "Update progress" +msgstr "Progression de la mise à jour" + +#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6 +#, python-format +msgid "Start \"%(book_title)s\"" +msgstr "Commencer « %(book_title)s »" + +#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 +#, python-format +msgid "Want to Read \"%(book_title)s\"" +msgstr "Ajouter « %(book_title)s » aux envies de lecture" + #: bookwyrm/templates/snippets/readthrough_form.html:14 msgid "Progress" msgstr "Progression" -#: bookwyrm/templates/snippets/readthrough_form.html:30 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:25 -msgid "Finished reading" -msgstr "Lecture terminée le" - #: bookwyrm/templates/snippets/register_form.html:32 msgid "Sign Up" msgstr "S’enregistrer" @@ -2722,16 +2802,6 @@ msgstr "Importer le livre" msgid "Move book" msgstr "Déplacer le livre" -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5 -#, python-format -msgid "Finish \"%(book_title)s\"" -msgstr "Terminer « %(book_title)s »" - -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 -msgid "Update progress" -msgstr "Progression de la mise à jour" - #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 msgid "More shelves" msgstr "Plus d’étagères" @@ -2745,7 +2815,6 @@ msgid "Finish reading" msgstr "Terminer la lecture" #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:26 msgid "Want to read" msgstr "Je veux le lire" @@ -2754,23 +2823,13 @@ msgstr "Je veux le lire" msgid "Remove from %(name)s" msgstr "Retirer de %(name)s" -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5 -#, python-format -msgid "Start \"%(book_title)s\"" -msgstr "Commencer « %(book_title)s »" - -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5 -#, python-format -msgid "Want to Read \"%(book_title)s\"" -msgstr "Ajouter « %(book_title)s » aux envies de lecture" - #: bookwyrm/templates/snippets/status/content_status.html:72 -#: bookwyrm/templates/snippets/trimmed_text.html:15 +#: bookwyrm/templates/snippets/trimmed_text.html:17 msgid "Show more" msgstr "Déplier" #: bookwyrm/templates/snippets/status/content_status.html:87 -#: bookwyrm/templates/snippets/trimmed_text.html:30 +#: bookwyrm/templates/snippets/trimmed_text.html:34 msgid "Show less" msgstr "Replier" @@ -2778,18 +2837,65 @@ msgstr "Replier" msgid "Open image in new window" msgstr "Ouvrir l’image dans une nouvelle fenêtre" +#: bookwyrm/templates/snippets/status/headers/comment.html:2 +#, fuzzy, python-format +#| msgid "Editions of \"%(work_title)s\"" +msgid "commented on %(book)s" +msgstr "Éditions de « %(work_title)s »" + +#: bookwyrm/templates/snippets/status/headers/note.html:15 +#, python-format +msgid "replied to %(username)s's status" +msgstr "a répondu au statut de %(username)s" + +#: bookwyrm/templates/snippets/status/headers/quotation.html:2 +#, fuzzy, python-format +#| msgid "Reported by %(username)s" +msgid "quoted %(book)s" +msgstr "Signalé par %(username)s" + +#: bookwyrm/templates/snippets/status/headers/rating.html:3 +#, fuzzy, python-format +#| msgid "Created by %(username)s" +msgid "rated %(book)s:" +msgstr "Créée par %(username)s" + +#: bookwyrm/templates/snippets/status/headers/read.html:7 +#, fuzzy, python-format +#| msgid "Editions of \"%(work_title)s\"" +msgid "finished reading %(book)s" +msgstr "Éditions de « %(work_title)s »" + +#: bookwyrm/templates/snippets/status/headers/reading.html:7 +#, fuzzy, python-format +#| msgid "Created by %(username)s" +msgid "started reading %(book)s" +msgstr "Créée par %(username)s" + +#: bookwyrm/templates/snippets/status/headers/review.html:3 +#, fuzzy, python-format +#| msgid "Created by %(username)s" +msgid "reviewed %(book)s" +msgstr "Créée par %(username)s" + +#: bookwyrm/templates/snippets/status/headers/to_read.html:7 +#, fuzzy, python-format +#| msgid "replied to %(username)s's quote" +msgid "%(username)s wants to read %(book)s" +msgstr "a répondu à la citation de %(username)s" + #: bookwyrm/templates/snippets/status/layout.html:21 #: bookwyrm/templates/snippets/status/status_options.html:17 msgid "Delete status" msgstr "Supprimer le statut" -#: bookwyrm/templates/snippets/status/layout.html:51 -#: bookwyrm/templates/snippets/status/layout.html:52 +#: bookwyrm/templates/snippets/status/layout.html:53 +#: bookwyrm/templates/snippets/status/layout.html:54 msgid "Boost status" msgstr "Partager le statut" -#: bookwyrm/templates/snippets/status/layout.html:55 -#: bookwyrm/templates/snippets/status/layout.html:56 +#: bookwyrm/templates/snippets/status/layout.html:57 +#: bookwyrm/templates/snippets/status/layout.html:58 msgid "Like status" msgstr "Ajouter le statut aux favoris" @@ -2797,11 +2903,6 @@ msgstr "Ajouter le statut aux favoris" msgid "boosted" msgstr "a partagé" -#: bookwyrm/templates/snippets/status/status_header.html:46 -#, python-format -msgid "replied to %(username)s's status" -msgstr "a répondu au statut de %(username)s" - #: bookwyrm/templates/snippets/status/status_options.html:7 #: bookwyrm/templates/snippets/user_options.html:7 msgid "More options" @@ -3092,6 +3193,11 @@ msgstr "Aucun compte avec cette adresse email n’a été trouvé." msgid "A password reset link sent to %s" msgstr "Un lien de réinitialisation a été envoyé à %s." +#: bookwyrm/views/rss_feed.py:34 +#, python-brace-format +msgid "Status updates from {obj.display_name}" +msgstr "" + #~ msgid "Local Timeline" #~ msgstr "Fil d’actualité local" @@ -3392,9 +3498,6 @@ msgstr "Un lien de réinitialisation a été envoyé à %s." #~ msgid "replied to %(username)s's comment" #~ msgstr "a répondu au commentaire de %(username)s" -#~ msgid "replied to %(username)s's quote" -#~ msgstr "a répondu à la citation de %(username)s" - #~ msgid "Remove tag" #~ msgstr "Supprimer le tag" diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo index 66450333..67393992 100644 Binary files a/locale/zh_Hans/LC_MESSAGES/django.mo and b/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index adb0d36c..75def373 100644 --- a/locale/zh_Hans/LC_MESSAGES/django.po +++ b/locale/zh_Hans/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-07 01:35+0000\n" +"POT-Creation-Date: 2021-08-16 21:26+0000\n" "PO-Revision-Date: 2021-03-20 00:56+0000\n" "Last-Translator: Kana \n" "Language-Team: Mouse Reeve \n" @@ -18,58 +18,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: bookwyrm/forms.py:232 +#: bookwyrm/forms.py:233 msgid "A user with this email already exists." msgstr "已经存在使用该邮箱的用户。" -#: bookwyrm/forms.py:246 +#: bookwyrm/forms.py:247 msgid "One Day" msgstr "一天" -#: bookwyrm/forms.py:247 +#: bookwyrm/forms.py:248 msgid "One Week" msgstr "一周" -#: bookwyrm/forms.py:248 +#: bookwyrm/forms.py:249 msgid "One Month" msgstr "一个月" -#: bookwyrm/forms.py:249 +#: bookwyrm/forms.py:250 msgid "Does Not Expire" msgstr "永不失效" -#: bookwyrm/forms.py:254 +#: bookwyrm/forms.py:255 #, python-format msgid "%(count)d uses" msgstr "%(count)d 次使用" -#: bookwyrm/forms.py:257 +#: bookwyrm/forms.py:258 msgid "Unlimited" msgstr "不受限" -#: bookwyrm/forms.py:307 +#: bookwyrm/forms.py:308 msgid "List Order" msgstr "列表顺序" -#: bookwyrm/forms.py:308 +#: bookwyrm/forms.py:309 msgid "Book Title" msgstr "书名" -#: bookwyrm/forms.py:309 bookwyrm/templates/snippets/create_status_form.html:34 +#: bookwyrm/forms.py:310 +#: bookwyrm/templates/snippets/create_status/review.html:25 #: bookwyrm/templates/user/shelf/shelf.html:85 #: bookwyrm/templates/user/shelf/shelf.html:116 msgid "Rating" msgstr "评价" -#: bookwyrm/forms.py:311 bookwyrm/templates/lists/list.html:107 +#: bookwyrm/forms.py:312 bookwyrm/templates/lists/list.html:107 msgid "Sort By" msgstr "排序方式" -#: bookwyrm/forms.py:315 +#: bookwyrm/forms.py:316 msgid "Ascending" msgstr "升序" -#: bookwyrm/forms.py:316 +#: bookwyrm/forms.py:317 msgid "Descending" msgstr "降序" @@ -83,7 +84,7 @@ msgstr "%(value)s 不是有效的 remote_id" msgid "%(value)s is not a valid username" msgstr "%(value)s 不是有效的用户名" -#: bookwyrm/models/fields.py:174 bookwyrm/templates/layout.html:159 +#: bookwyrm/models/fields.py:174 bookwyrm/templates/layout.html:164 msgid "username" msgstr "用户名" @@ -100,10 +101,8 @@ msgid "Home" msgstr "主页" #: bookwyrm/settings.py:124 -#, fuzzy -#| msgid "Book Title" msgid "Books Timeline" -msgstr "书名" +msgstr "书目时间线" #: bookwyrm/settings.py:124 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 @@ -285,9 +284,8 @@ msgstr "Goodreads key:" #: bookwyrm/templates/settings/edit_server.html:68 #: bookwyrm/templates/settings/federated_server.html:98 #: bookwyrm/templates/settings/site.html:108 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:36 +#: bookwyrm/templates/snippets/reading_modals/layout.html:16 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:42 #: bookwyrm/templates/user_admin/user_moderation_actions.html:45 msgid "Save" msgstr "保存" @@ -301,16 +299,14 @@ msgstr "保存" #: bookwyrm/templates/settings/federated_server.html:99 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/goal_form.html:32 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:43 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:43 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:37 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:28 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:43 msgid "Cancel" msgstr "取消" #: bookwyrm/templates/book/book.html:48 -#: bookwyrm/templates/discover/large-book.html:25 -#: bookwyrm/templates/discover/small-book.html:19 +#: bookwyrm/templates/discover/large-book.html:22 +#: bookwyrm/templates/landing/large-book.html:25 +#: bookwyrm/templates/landing/small-book.html:18 msgid "by" msgstr "作者" @@ -444,7 +440,7 @@ msgstr "从网址加载封面:" #: bookwyrm/templates/book/edit_book.html:11 #, python-format msgid "Edit \"%(book_title)s\"" -msgstr "编辑 \"%(book_title)s\"" +msgstr "编辑《%(book_title)s》" #: bookwyrm/templates/book/edit_book.html:5 #: bookwyrm/templates/book/edit_book.html:13 @@ -458,7 +454,7 @@ msgstr "确认书目信息" #: bookwyrm/templates/book/edit_book.html:62 #, python-format msgid "Is \"%(name)s\" an existing author?" -msgstr "\"%(name)s\" 是已存在的作者吗?" +msgstr "“%(name)s” 是已存在的作者吗?" #: bookwyrm/templates/book/edit_book.html:71 #, python-format @@ -472,7 +468,7 @@ msgstr "这是一位新的作者" #: bookwyrm/templates/book/edit_book.html:82 #, python-format msgid "Creating a new author: %(name)s" -msgstr "正在创建新的作者: %(name)s" +msgstr "正在创建新的作者: %(name)s" #: bookwyrm/templates/book/edit_book.html:89 msgid "Is this an edition of an existing work?" @@ -493,6 +489,7 @@ msgid "Back" msgstr "返回" #: bookwyrm/templates/book/edit_book.html:120 +#: bookwyrm/templates/snippets/create_status/review.html:18 msgid "Title:" msgstr "标题:" @@ -588,7 +585,7 @@ msgstr "%(book_title)s 的各版本" #: bookwyrm/templates/book/editions.html:8 #, python-format msgid "Editions of \"%(work_title)s\"" -msgstr "\"%(work_title)s\" 的各版本" +msgstr "《%(work_title)s》 的各版本" #: bookwyrm/templates/book/format_filter.html:8 #: bookwyrm/templates/book/language_filter.html:8 @@ -682,47 +679,41 @@ msgid "Compose status" msgstr "撰写状态" #: bookwyrm/templates/confirm_email/confirm_email.html:4 -#, fuzzy -#| msgid "Confirm" msgid "Confirm email" -msgstr "确认" +msgstr "确认邮箱" #: bookwyrm/templates/confirm_email/confirm_email.html:7 -#, fuzzy -#| msgid "Email address:" msgid "Confirm your email address" -msgstr "邮箱地址:" +msgstr "确认你的邮箱地址:" #: bookwyrm/templates/confirm_email/confirm_email.html:13 msgid "A confirmation code has been sent to the email address you used to register your account." -msgstr "" +msgstr "确认码已经被发送到了你注册时所使用的邮箱地址。" #: bookwyrm/templates/confirm_email/confirm_email.html:15 msgid "Sorry! We couldn't find that code." -msgstr "" +msgstr "抱歉!我们无法找到该代码。" #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#, fuzzy -#| msgid "Confirm password:" msgid "Confirmation code:" -msgstr "确认密码:" +msgstr "确认代码:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 -#: bookwyrm/templates/discover/landing_layout.html:70 +#: bookwyrm/templates/landing/landing_layout.html:70 #: bookwyrm/templates/moderation/report_modal.html:33 msgid "Submit" msgstr "提交" #: bookwyrm/templates/confirm_email/confirm_email.html:32 msgid "Can't find your code?" -msgstr "" +msgstr "找不到你的代码?" #: bookwyrm/templates/confirm_email/resend_form.html:4 msgid "Resend confirmation link" -msgstr "" +msgstr "重新发送确认链接" #: bookwyrm/templates/confirm_email/resend_form.html:11 -#: bookwyrm/templates/discover/landing_layout.html:64 +#: bookwyrm/templates/landing/landing_layout.html:64 #: bookwyrm/templates/password_reset_request.html:18 #: bookwyrm/templates/preferences/edit_user.html:38 #: bookwyrm/templates/snippets/register_form.html:13 @@ -730,10 +721,8 @@ msgid "Email address:" msgstr "邮箱地址:" #: bookwyrm/templates/confirm_email/resend_form.html:17 -#, fuzzy -#| msgid "Re-send invite" msgid "Resend link" -msgstr "重新发送请求" +msgstr "重新发送链接" #: bookwyrm/templates/directory/community_filter.html:5 msgid "Community" @@ -749,7 +738,7 @@ msgstr "跨站社区" #: bookwyrm/templates/directory/directory.html:4 #: bookwyrm/templates/directory/directory.html:9 -#: bookwyrm/templates/layout.html:71 +#: bookwyrm/templates/layout.html:94 msgid "Directory" msgstr "目录" @@ -784,10 +773,8 @@ msgstr "最近活跃" #: bookwyrm/templates/directory/user_card.html:18 #: bookwyrm/templates/user/user_preview.html:16 #: bookwyrm/templates/user/user_preview.html:17 -#, fuzzy -#| msgid "Your Account" msgid "Locked account" -msgstr "你的帐号" +msgstr "帐号已上锁" #: bookwyrm/templates/directory/user_card.html:40 msgid "follower you follow" @@ -819,79 +806,65 @@ msgstr "BookWyrm 用户" msgid "All known users" msgstr "所有已知用户" -#: bookwyrm/templates/discover/about.html:7 +#: bookwyrm/templates/discover/discover.html:4 +#: bookwyrm/templates/discover/discover.html:10 +#: bookwyrm/templates/layout.html:71 +msgid "Discover" +msgstr "发现" + +#: bookwyrm/templates/discover/discover.html:12 #, python-format -msgid "About %(site_name)s" -msgstr "关于 %(site_name)s" +msgid "See what's new in the local %(site_name)s community" +msgstr "看看本地 %(site_name)s 社区的新消息" -#: bookwyrm/templates/discover/about.html:10 -#: bookwyrm/templates/discover/about.html:20 -msgid "Code of Conduct" -msgstr "行为准则" +#: bookwyrm/templates/discover/large-book.html:46 +#: bookwyrm/templates/discover/small-book.html:32 +msgid "rated" +msgstr "评价了" -#: bookwyrm/templates/discover/about.html:13 -#: bookwyrm/templates/discover/about.html:29 -msgid "Privacy Policy" -msgstr "隐私政策" +#: bookwyrm/templates/discover/large-book.html:48 +#: bookwyrm/templates/discover/small-book.html:34 +msgid "reviewed" +msgstr "写了书评给" -#: bookwyrm/templates/discover/discover.html:6 -msgid "Recent Books" -msgstr "最近书目" +#: bookwyrm/templates/discover/large-book.html:50 +#: bookwyrm/templates/discover/small-book.html:36 +msgid "commented on" +msgstr "评论了" -#: bookwyrm/templates/discover/landing_layout.html:5 -#: bookwyrm/templates/get_started/layout.html:5 -msgid "Welcome" -msgstr "欢迎" +#: bookwyrm/templates/discover/large-book.html:52 +#: bookwyrm/templates/discover/small-book.html:38 +msgid "quoted" +msgstr "引用了" -#: bookwyrm/templates/discover/landing_layout.html:17 -msgid "Decentralized" -msgstr "去中心化" - -#: bookwyrm/templates/discover/landing_layout.html:23 -msgid "Friendly" -msgstr "友好" - -#: bookwyrm/templates/discover/landing_layout.html:29 -msgid "Anti-Corporate" -msgstr "反企业" - -#: bookwyrm/templates/discover/landing_layout.html:44 -#, python-format -msgid "Join %(name)s" -msgstr "加入 %(name)s" - -#: bookwyrm/templates/discover/landing_layout.html:51 -#: bookwyrm/templates/login.html:56 -msgid "This instance is closed" -msgstr "本实例不开放。" - -#: bookwyrm/templates/discover/landing_layout.html:57 -msgid "Thank you! Your request has been received." -msgstr "谢谢你!我们已经收到了你的请求。" - -#: bookwyrm/templates/discover/landing_layout.html:60 -msgid "Request an Invitation" -msgstr "请求邀请" - -#: bookwyrm/templates/discover/landing_layout.html:79 -msgid "Your Account" -msgstr "你的帐号" +#: bookwyrm/templates/discover/large-book.html:68 +#: bookwyrm/templates/discover/small-book.html:52 +msgid "View status" +msgstr "浏览状态" #: bookwyrm/templates/email/confirm/html_content.html:6 #: bookwyrm/templates/email/confirm/text_content.html:4 #, python-format msgid "One last step before you join %(site_name)s! Please confirm your email address by clicking the link below:" -msgstr "" +msgstr "在加入 %(site_name)s 前的最后一步!请点击以下链接以确认你的邮箱:" #: bookwyrm/templates/email/confirm/html_content.html:11 -#, fuzzy -#| msgid "Confirm" msgid "Confirm Email" -msgstr "确认" +msgstr "确认邮箱" + +#: bookwyrm/templates/email/confirm/html_content.html:15 +#, python-format +msgid "Or enter the code \"%(confirmation_code)s\" at login." +msgstr "或者在登录时输入代码 “%(confirmation_code)s”。" #: bookwyrm/templates/email/confirm/subject.html:2 msgid "Please confirm your email" -msgstr "" +msgstr "请确认你的邮箱" + +#: bookwyrm/templates/email/confirm/text_content.html:10 +#, python-format +msgid "Or enter the code \"%(confirmation_code)s\" at login." +msgstr "或者在登录时输入代码 “%(confirmation_code)s”。" #: bookwyrm/templates/email/html_layout.html:15 #: bookwyrm/templates/email/text_layout.html:2 @@ -961,7 +934,7 @@ msgid "Direct Messages with %(username)s" msgstr "与 %(username)s 私信" #: bookwyrm/templates/feed/direct_messages.html:10 -#: bookwyrm/templates/layout.html:99 +#: bookwyrm/templates/layout.html:104 msgid "Direct Messages" msgstr "私信" @@ -974,10 +947,9 @@ msgid "You have no messages right now." msgstr "你现在没有消息。" #: bookwyrm/templates/feed/feed.html:22 -#, fuzzy, python-format -#| msgid "load 0 unread status(es)" -msgid "load 0 unread status(es)" -msgstr "加载 0 条未读状态" +#, python-format +msgid "load 0 unread status(es)" +msgstr "加载 0 条未读状态" #: bookwyrm/templates/feed/feed.html:38 msgid "There aren't any activities right now! Try following a user to get started" @@ -1078,6 +1050,11 @@ msgstr "没有找到书目" msgid "Save & continue" msgstr "保存 & 继续" +#: bookwyrm/templates/get_started/layout.html:5 +#: bookwyrm/templates/landing/landing_layout.html:5 +msgid "Welcome" +msgstr "欢迎" + #: bookwyrm/templates/get_started/layout.html:15 #, python-format msgid "Welcome to %(site_name)s!" @@ -1278,7 +1255,6 @@ msgid "Book" msgstr "书目" #: bookwyrm/templates/import_status.html:122 -#: bookwyrm/templates/snippets/create_status_form.html:13 #: bookwyrm/templates/user/shelf/shelf.html:79 #: bookwyrm/templates/user/shelf/shelf.html:99 msgid "Title" @@ -1320,6 +1296,59 @@ msgstr "\"%(query)s\" 的搜索结果" msgid "Matching Books" msgstr "匹配的书目" +#: bookwyrm/templates/landing/about.html:7 +#, python-format +msgid "About %(site_name)s" +msgstr "关于 %(site_name)s" + +#: bookwyrm/templates/landing/about.html:10 +#: bookwyrm/templates/landing/about.html:20 +msgid "Code of Conduct" +msgstr "行为准则" + +#: bookwyrm/templates/landing/about.html:13 +#: bookwyrm/templates/landing/about.html:29 +msgid "Privacy Policy" +msgstr "隐私政策" + +#: bookwyrm/templates/landing/landing.html:6 +msgid "Recent Books" +msgstr "最近书目" + +#: bookwyrm/templates/landing/landing_layout.html:17 +msgid "Decentralized" +msgstr "去中心化" + +#: bookwyrm/templates/landing/landing_layout.html:23 +msgid "Friendly" +msgstr "友好" + +#: bookwyrm/templates/landing/landing_layout.html:29 +msgid "Anti-Corporate" +msgstr "反企业" + +#: bookwyrm/templates/landing/landing_layout.html:44 +#, python-format +msgid "Join %(name)s" +msgstr "加入 %(name)s" + +#: bookwyrm/templates/landing/landing_layout.html:51 +#: bookwyrm/templates/login.html:56 +msgid "This instance is closed" +msgstr "本实例不开放。" + +#: bookwyrm/templates/landing/landing_layout.html:57 +msgid "Thank you! Your request has been received." +msgstr "谢谢你!我们已经收到了你的请求。" + +#: bookwyrm/templates/landing/landing_layout.html:60 +msgid "Request an Invitation" +msgstr "请求邀请" + +#: bookwyrm/templates/landing/landing_layout.html:79 +msgid "Your Account" +msgstr "你的帐号" + #: bookwyrm/templates/layout.html:40 msgid "Search for a book or user" msgstr "搜索书目或用户" @@ -1332,15 +1361,15 @@ msgstr "主导航菜单" msgid "Feed" msgstr "动态" -#: bookwyrm/templates/layout.html:94 +#: bookwyrm/templates/layout.html:99 msgid "Your Books" msgstr "你的书目" -#: bookwyrm/templates/layout.html:104 +#: bookwyrm/templates/layout.html:109 msgid "Settings" msgstr "设置" -#: bookwyrm/templates/layout.html:113 +#: bookwyrm/templates/layout.html:118 #: bookwyrm/templates/settings/admin_layout.html:31 #: bookwyrm/templates/settings/manage_invite_requests.html:15 #: bookwyrm/templates/settings/manage_invites.html:3 @@ -1348,61 +1377,61 @@ msgstr "设置" msgid "Invites" msgstr "邀请" -#: bookwyrm/templates/layout.html:120 +#: bookwyrm/templates/layout.html:125 msgid "Admin" msgstr "管理员" -#: bookwyrm/templates/layout.html:127 +#: bookwyrm/templates/layout.html:132 msgid "Log out" msgstr "登出" -#: bookwyrm/templates/layout.html:135 bookwyrm/templates/layout.html:136 +#: bookwyrm/templates/layout.html:140 bookwyrm/templates/layout.html:141 #: bookwyrm/templates/notifications.html:6 #: bookwyrm/templates/notifications.html:11 msgid "Notifications" msgstr "通知" -#: bookwyrm/templates/layout.html:158 bookwyrm/templates/layout.html:162 +#: bookwyrm/templates/layout.html:163 bookwyrm/templates/layout.html:167 #: bookwyrm/templates/login.html:22 #: bookwyrm/templates/snippets/register_form.html:4 msgid "Username:" msgstr "用户名:" -#: bookwyrm/templates/layout.html:163 +#: bookwyrm/templates/layout.html:168 msgid "password" msgstr "密码" -#: bookwyrm/templates/layout.html:164 bookwyrm/templates/login.html:41 +#: bookwyrm/templates/layout.html:169 bookwyrm/templates/login.html:41 msgid "Forgot your password?" msgstr "忘记了密码?" -#: bookwyrm/templates/layout.html:167 bookwyrm/templates/login.html:10 +#: bookwyrm/templates/layout.html:172 bookwyrm/templates/login.html:10 #: bookwyrm/templates/login.html:38 msgid "Log in" msgstr "登录" -#: bookwyrm/templates/layout.html:175 +#: bookwyrm/templates/layout.html:180 msgid "Join" msgstr "加入" -#: bookwyrm/templates/layout.html:213 +#: bookwyrm/templates/layout.html:218 msgid "About this instance" msgstr "关于本实例" -#: bookwyrm/templates/layout.html:217 +#: bookwyrm/templates/layout.html:222 msgid "Contact site admin" msgstr "联系站点管理员" -#: bookwyrm/templates/layout.html:221 +#: bookwyrm/templates/layout.html:226 msgid "Documentation" -msgstr "文档:" +msgstr "文档" -#: bookwyrm/templates/layout.html:228 +#: bookwyrm/templates/layout.html:233 #, python-format msgid "Support %(site_name)s on %(support_title)s" msgstr "在 %(support_title)s 上支持 %(site_name)s" -#: bookwyrm/templates/layout.html:232 +#: bookwyrm/templates/layout.html:237 msgid "BookWyrm's source code is freely available. You can contribute or report issues on GitHub." msgstr "BookWyrm 是开源软件。你可以在 GitHub 贡献或报告问题。" @@ -1539,7 +1568,7 @@ msgstr "清除搜索" #: bookwyrm/templates/lists/list.html:151 #, python-format msgid "No books found matching the query \"%(query)s\"" -msgstr "没有符合 \"%(query)s\" 请求的书目" +msgstr "没有符合 “%(query)s” 请求的书目" #: bookwyrm/templates/lists/list.html:179 msgid "Suggest" @@ -1555,7 +1584,7 @@ msgstr "登录" #: bookwyrm/templates/login.html:16 msgid "Success! Email address confirmed." -msgstr "" +msgstr "成功!邮箱地址已确认。" #: bookwyrm/templates/login.html:28 bookwyrm/templates/password_reset.html:17 #: bookwyrm/templates/snippets/register_form.html:22 @@ -1587,7 +1616,6 @@ msgstr "监察员评论" #: bookwyrm/templates/moderation/report.html:40 #: bookwyrm/templates/snippets/create_status.html:28 -#: bookwyrm/templates/snippets/create_status_form.html:66 msgid "Comment" msgstr "评论" @@ -1759,14 +1787,15 @@ msgid "boosted your status" msgstr "转发了你的 状态" #: bookwyrm/templates/notifications.html:121 -#, python-format +#, fuzzy, python-format +#| msgid " added %(book_title)s to your list “%(list_name)s”" msgid " added %(book_title)s to your list \"%(list_name)s\"" -msgstr " 添加了 %(book_title)s 到你的列表 \"%(list_name)s\"" +msgstr " 添加了 %(book_title)s 到你的列表 “%(list_name)s”" #: bookwyrm/templates/notifications.html:123 #, python-format msgid " suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr " 推荐添加 %(book_title)s 到你的列表 \"%(list_name)s\"" +msgstr " 推荐添加 %(book_title)s 到你的列表 “%(list_name)s”" #: bookwyrm/templates/notifications.html:128 #, python-format @@ -1842,10 +1871,8 @@ msgid "Show set reading goal prompt in feed:" msgstr "在消息流中显示设置阅读目标的提示:" #: bookwyrm/templates/preferences/edit_user.html:58 -#, fuzzy -#| msgid "Post privacy" msgid "Default post privacy:" -msgstr "发文隐私" +msgstr "默认发文隐私:" #: bookwyrm/templates/preferences/edit_user.html:70 #, python-format @@ -1871,37 +1898,17 @@ msgstr "关系" #: bookwyrm/templates/reading_progress/finish.html:5 #, python-format msgid "Finish \"%(book_title)s\"" -msgstr "完成 \"%(book_title)s\"" +msgstr "完成《%(book_title)s》" #: bookwyrm/templates/reading_progress/start.html:5 #, python-format msgid "Start \"%(book_title)s\"" -msgstr "开始 \"%(book_title)s\"" +msgstr "开始《%(book_title)s》" #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" -msgstr "想要阅读 \"%(book_title)s\"" - -#: bookwyrm/templates/rss/title.html:5 -#: bookwyrm/templates/snippets/status/status_header.html:36 -msgid "rated" -msgstr "评价了" - -#: bookwyrm/templates/rss/title.html:7 -#: bookwyrm/templates/snippets/status/status_header.html:38 -msgid "reviewed" -msgstr "写了书评给" - -#: bookwyrm/templates/rss/title.html:9 -#: bookwyrm/templates/snippets/status/status_header.html:40 -msgid "commented on" -msgstr "评论了" - -#: bookwyrm/templates/rss/title.html:11 -#: bookwyrm/templates/snippets/status/status_header.html:42 -msgid "quoted" -msgstr "引用了" +msgstr "想要阅读《%(book_title)s》" #: bookwyrm/templates/search/book.html:64 msgid "Load results from other catalogues" @@ -1913,7 +1920,7 @@ msgstr "手动添加书目" #: bookwyrm/templates/search/book.html:73 msgid "Log in to import or add books." -msgstr "登陆以导入或添加书目。" +msgstr "登录以导入或添加书目。" #: bookwyrm/templates/search/layout.html:16 msgid "Search query" @@ -1934,7 +1941,7 @@ msgstr "用户" #: bookwyrm/templates/search/layout.html:58 #, python-format msgid "No results found for \"%(query)s\"" -msgstr "没有找到 \"%(query)s\" 的搜索结果" +msgstr "没有找到 “%(query)s” 的搜索结果" #: bookwyrm/templates/settings/admin_layout.html:4 msgid "Administration" @@ -2383,11 +2390,11 @@ msgstr "允许请求邀请" #: bookwyrm/templates/settings/site.html:97 msgid "Require users to confirm email address" -msgstr "" +msgstr "要求用户确认邮箱地址" #: bookwyrm/templates/settings/site.html:99 msgid "(Recommended if registration is open)" -msgstr "" +msgstr "(当开放注册时推荐)" #: bookwyrm/templates/settings/site.html:102 msgid "Registration closed text:" @@ -2402,15 +2409,14 @@ msgstr "由 %(username)s 发布" #, python-format msgid "and %(remainder_count_display)s other" msgid_plural "and %(remainder_count_display)s others" -msgstr[0] "" +msgstr[0] "与其它 %(remainder_count_display)s 位" #: bookwyrm/templates/snippets/book_cover.html:32 msgid "No cover" msgstr "没有封面" #: bookwyrm/templates/snippets/book_titleby.html:6 -#, fuzzy, python-format -#| msgid "%(title)s by " +#, python-format msgid "%(title)s by" msgstr "%(title)s 来自" @@ -2424,14 +2430,6 @@ msgstr "转发" msgid "Un-boost" msgstr "取消转发" -#: bookwyrm/templates/snippets/content_warning_field.html:3 -msgid "Spoiler alert:" -msgstr "剧透警告:" - -#: bookwyrm/templates/snippets/content_warning_field.html:10 -msgid "Spoilers ahead!" -msgstr "前有剧透!" - #: bookwyrm/templates/snippets/create_status.html:17 msgid "Review" msgstr "书评" @@ -2440,67 +2438,90 @@ msgstr "书评" msgid "Quote" msgstr "引用" -#: bookwyrm/templates/snippets/create_status_form.html:23 -msgid "Comment:" -msgstr "评论:" +#: bookwyrm/templates/snippets/create_status/comment.html:15 +msgid "Some thoughts on the book" +msgstr "对书的一些看法" -#: bookwyrm/templates/snippets/create_status_form.html:25 -msgid "Quote:" -msgstr "引用:" - -#: bookwyrm/templates/snippets/create_status_form.html:27 -msgid "Review:" -msgstr "书评:" - -#: bookwyrm/templates/snippets/create_status_form.html:56 -#: bookwyrm/templates/snippets/status/layout.html:29 -#: bookwyrm/templates/snippets/status/layout.html:47 -#: bookwyrm/templates/snippets/status/layout.html:48 -msgid "Reply" -msgstr "回复" - -#: bookwyrm/templates/snippets/create_status_form.html:56 -msgid "Content" -msgstr "内容" - -#: bookwyrm/templates/snippets/create_status_form.html:80 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 +#: bookwyrm/templates/snippets/create_status/comment.html:26 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:16 msgid "Progress:" msgstr "进度:" -#: bookwyrm/templates/snippets/create_status_form.html:88 +#: bookwyrm/templates/snippets/create_status/comment.html:34 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:30 #: bookwyrm/templates/snippets/readthrough_form.html:22 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30 msgid "pages" msgstr "页数" -#: bookwyrm/templates/snippets/create_status_form.html:89 +#: bookwyrm/templates/snippets/create_status/comment.html:35 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:31 #: bookwyrm/templates/snippets/readthrough_form.html:23 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31 msgid "percent" msgstr "百分比" -#: bookwyrm/templates/snippets/create_status_form.html:95 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 +#: bookwyrm/templates/snippets/create_status/comment.html:41 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:36 #, python-format msgid "of %(pages)s pages" msgstr "全书 %(pages)s 页" -#: bookwyrm/templates/snippets/create_status_form.html:110 +#: bookwyrm/templates/snippets/create_status/content_field.html:16 +#: bookwyrm/templates/snippets/status/layout.html:31 +#: bookwyrm/templates/snippets/status/layout.html:49 +#: bookwyrm/templates/snippets/status/layout.html:50 +msgid "Reply" +msgstr "回复" + +#: bookwyrm/templates/snippets/create_status/content_field.html:16 +msgid "Content" +msgstr "内容" + +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:3 +msgid "Spoiler alert:" +msgstr "剧透警告:" + +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:10 +msgid "Spoilers ahead!" +msgstr "前有剧透!" + +#: bookwyrm/templates/snippets/create_status/content_warning_toggle.html:5 msgid "Include spoiler alert" msgstr "加入剧透警告" -#: bookwyrm/templates/snippets/create_status_form.html:117 +#: bookwyrm/templates/snippets/create_status/layout.html:38 +#: bookwyrm/templates/snippets/reading_modals/form.html:7 +msgid "Comment:" +msgstr "评论:" + +#: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 #: bookwyrm/templates/snippets/privacy_select.html:20 msgid "Private" msgstr "私密" -#: bookwyrm/templates/snippets/create_status_form.html:128 +#: bookwyrm/templates/snippets/create_status/post_options_block.html:19 msgid "Post" msgstr "发布" +#: bookwyrm/templates/snippets/create_status/quotation.html:19 +msgid "Quote:" +msgstr "引用:" + +#: bookwyrm/templates/snippets/create_status/quotation.html:27 +#, python-format +msgid "An excerpt from '%(book_title)s'" +msgstr "摘自《%(book_title)s》的节录" + +#: bookwyrm/templates/snippets/create_status/review.html:20 +#, python-format +msgid "Your review of '%(book_title)s'" +msgstr "你对《%(book_title)s》的书评" + +#: bookwyrm/templates/snippets/create_status/review.html:32 +msgid "Review:" +msgstr "书评:" + #: bookwyrm/templates/snippets/delete_readthrough_modal.html:4 msgid "Delete these read dates?" msgstr "删除这些阅读日期吗?" @@ -2536,15 +2557,25 @@ msgstr "应用过滤器" msgid "Clear filters" msgstr "清除过滤器" -#: bookwyrm/templates/snippets/follow_button.html:12 +#: bookwyrm/templates/snippets/follow_button.html:14 +#, python-format +msgid "Follow @%(username)s" +msgstr "关注 @%(username)s" + +#: bookwyrm/templates/snippets/follow_button.html:16 msgid "Follow" msgstr "关注" -#: bookwyrm/templates/snippets/follow_button.html:18 +#: bookwyrm/templates/snippets/follow_button.html:25 msgid "Undo follow request" msgstr "撤回关注请求" -#: bookwyrm/templates/snippets/follow_button.html:20 +#: bookwyrm/templates/snippets/follow_button.html:30 +#, python-format +msgid "Unfollow @%(username)s" +msgstr "取消关注 @%(username)s" + +#: bookwyrm/templates/snippets/follow_button.html:32 msgid "Unfollow" msgstr "取消关注" @@ -2564,7 +2595,7 @@ msgid "%(rating)s star" msgid_plural "%(rating)s stars" msgstr[0] "%(rating)s 星" -#: bookwyrm/templates/snippets/generated_status/goal.html:1 +#: bookwyrm/templates/snippets/generated_status/goal.html:2 #, python-format msgid "set a goal to read %(counter)s book in %(year)s" msgid_plural "set a goal to read %(counter)s books in %(year)s" @@ -2572,20 +2603,20 @@ msgstr[0] "设定了在 %(year)s 内要读 %(counter)s 本书的目标" #: bookwyrm/templates/snippets/generated_status/rating.html:3 #, python-format -msgid "Rated %(title)s: %(display_rating)s star" -msgid_plural "Rated %(title)s: %(display_rating)s stars" +msgid "rated %(title)s: %(display_rating)s star" +msgid_plural "rated %(title)s: %(display_rating)s stars" msgstr[0] "为 %(title)s 打了分: %(display_rating)s 星" #: bookwyrm/templates/snippets/generated_status/review_pure_name.html:4 #, 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] "\"%(book_title)s\" 的书评(%(display_rating)s 星): %(review_title)s" +msgstr[0] "《%(book_title)s》的书评(%(display_rating)s 星): %(review_title)s" #: bookwyrm/templates/snippets/generated_status/review_pure_name.html:8 #, python-format msgid "Review of \"%(book_title)s\": %(review_title)s" -msgstr "\"%(book_title)s\" 的书评: %(review_title)s" +msgstr "《%(book_title)s》的书评: %(review_title)s" #: bookwyrm/templates/snippets/goal_card.html:23 #, python-format @@ -2605,9 +2636,7 @@ msgid "Goal privacy:" msgstr "目标隐私:" #: bookwyrm/templates/snippets/goal_form.html:26 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:37 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:31 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:20 +#: bookwyrm/templates/snippets/reading_modals/layout.html:13 msgid "Post to feed" msgstr "发布到消息流中" @@ -2682,21 +2711,45 @@ msgstr "留下评价" msgid "Rate" msgstr "评价" +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6 +#, python-format +msgid "Finish \"%(book_title)s\"" +msgstr "完成《%(book_title)s》" + +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:22 +#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:20 #: bookwyrm/templates/snippets/readthrough_form.html:7 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:19 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:19 msgid "Started reading" msgstr "已开始阅读" +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:30 +#: bookwyrm/templates/snippets/readthrough_form.html:30 +msgid "Finished reading" +msgstr "已完成阅读" + +#: bookwyrm/templates/snippets/reading_modals/form.html:8 +msgid "(Optional)" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:5 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 +msgid "Update progress" +msgstr "更新进度" + +#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6 +#, python-format +msgid "Start \"%(book_title)s\"" +msgstr "开始《%(book_title)s》" + +#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 +#, python-format +msgid "Want to Read \"%(book_title)s\"" +msgstr "想要阅读《%(book_title)s》" + #: bookwyrm/templates/snippets/readthrough_form.html:14 msgid "Progress" msgstr "进度" -#: bookwyrm/templates/snippets/readthrough_form.html:30 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:25 -msgid "Finished reading" -msgstr "已完成阅读" - #: bookwyrm/templates/snippets/register_form.html:32 msgid "Sign Up" msgstr "注册" @@ -2713,16 +2766,6 @@ msgstr "导入书目" msgid "Move book" msgstr "移动书目" -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5 -#, python-format -msgid "Finish \"%(book_title)s\"" -msgstr "完成 \"%(book_title)s\"" - -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 -msgid "Update progress" -msgstr "更新进度" - #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 msgid "More shelves" msgstr "更多书架" @@ -2736,7 +2779,6 @@ msgid "Finish reading" msgstr "完成阅读" #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:26 msgid "Want to read" msgstr "想要阅读" @@ -2745,23 +2787,13 @@ msgstr "想要阅读" msgid "Remove from %(name)s" msgstr "从 %(name)s 移除" -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5 -#, python-format -msgid "Start \"%(book_title)s\"" -msgstr "开始 \"%(book_title)s\"" - -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5 -#, python-format -msgid "Want to Read \"%(book_title)s\"" -msgstr "想要阅读 \"%(book_title)s\"" - #: bookwyrm/templates/snippets/status/content_status.html:72 -#: bookwyrm/templates/snippets/trimmed_text.html:15 +#: bookwyrm/templates/snippets/trimmed_text.html:17 msgid "Show more" msgstr "显示更多" #: bookwyrm/templates/snippets/status/content_status.html:87 -#: bookwyrm/templates/snippets/trimmed_text.html:30 +#: bookwyrm/templates/snippets/trimmed_text.html:34 msgid "Show less" msgstr "显示更少" @@ -2769,18 +2801,58 @@ msgstr "显示更少" msgid "Open image in new window" msgstr "在新窗口中打开图像" +#: bookwyrm/templates/snippets/status/headers/comment.html:2 +#, python-format +msgid "commented on %(book)s" +msgstr "评论了 %(book)s" + +#: bookwyrm/templates/snippets/status/headers/note.html:15 +#, python-format +msgid "replied to %(username)s's status" +msgstr "回复了 %(username)s状态" + +#: bookwyrm/templates/snippets/status/headers/quotation.html:2 +#, python-format +msgid "quoted %(book)s" +msgstr "引用了 %(book)s" + +#: bookwyrm/templates/snippets/status/headers/rating.html:3 +#, python-format +msgid "rated %(book)s:" +msgstr "为 %(book)s 打了分:" + +#: bookwyrm/templates/snippets/status/headers/read.html:7 +#, python-format +msgid "finished reading %(book)s" +msgstr "完成阅读 %(book)s" + +#: bookwyrm/templates/snippets/status/headers/reading.html:7 +#, python-format +msgid "started reading %(book)s" +msgstr "开始阅读 %(book)s" + +#: bookwyrm/templates/snippets/status/headers/review.html:3 +#, python-format +msgid "reviewed %(book)s" +msgstr "为 %(book)s 撰写了书评" + +#: bookwyrm/templates/snippets/status/headers/to_read.html:7 +#, python-format +msgid "%(username)s wants to read %(book)s" +msgstr "%(username)s 想要阅读 %(book)s" + #: bookwyrm/templates/snippets/status/layout.html:21 #: bookwyrm/templates/snippets/status/status_options.html:17 msgid "Delete status" msgstr "删除发文" -#: bookwyrm/templates/snippets/status/layout.html:51 -#: bookwyrm/templates/snippets/status/layout.html:52 +#: bookwyrm/templates/snippets/status/layout.html:53 +#: bookwyrm/templates/snippets/status/layout.html:54 msgid "Boost status" msgstr "转发状态" -#: bookwyrm/templates/snippets/status/layout.html:55 -#: bookwyrm/templates/snippets/status/layout.html:56 +#: bookwyrm/templates/snippets/status/layout.html:57 +#: bookwyrm/templates/snippets/status/layout.html:58 msgid "Like status" msgstr "喜欢状态" @@ -2788,11 +2860,6 @@ msgstr "喜欢状态" msgid "boosted" msgstr "转发了" -#: bookwyrm/templates/snippets/status/status_header.html:46 -#, python-format -msgid "replied to %(username)s's status" -msgstr "回复了 %(username)s状态" - #: bookwyrm/templates/snippets/status/status_options.html:7 #: bookwyrm/templates/snippets/user_options.html:7 msgid "More options" @@ -2822,10 +2889,8 @@ msgstr[0] "%(shared_books)s 本在你书架上也有的书" #: bookwyrm/templates/snippets/suggested_users.html:31 #: bookwyrm/templates/user/user_preview.html:36 -#, fuzzy -#| msgid "followed you" msgid "Follows you" -msgstr "关注了你" +msgstr "正在关注着你" #: bookwyrm/templates/snippets/switch_edition_button.html:5 msgid "Switch to this edition" @@ -2976,11 +3041,8 @@ msgid_plural "%(mutuals_display)s followers you follow" msgstr[0] "%(mutuals_display)s 个你也关注的关注者" #: bookwyrm/templates/user/user_preview.html:38 -#, fuzzy -#| msgid "follower you follow" -#| msgid_plural "followers you follow" msgid "No followers you follow" -msgstr "你关注的关注者" +msgstr "没有你关注的关注者" #: bookwyrm/templates/user_admin/user.html:9 msgid "Back to users" @@ -3064,7 +3126,7 @@ msgstr "%(title)s:%(subtitle)s" #: bookwyrm/views/authentication.py:69 msgid "Username or password are incorrect" -msgstr "" +msgstr "用户名或密码不正确" #: bookwyrm/views/import_data.py:67 msgid "Not a valid csv file" @@ -3079,6 +3141,11 @@ msgstr "没有找到使用该邮箱的用户。" msgid "A password reset link sent to %s" msgstr "密码重置连接已发送给 %s" +#: bookwyrm/views/rss_feed.py:34 +#, python-brace-format +msgid "Status updates from {obj.display_name}" +msgstr "" + #~ msgid "Local Timeline" #~ msgstr "本地时间线" diff --git a/locale/zh_Hant/LC_MESSAGES/django.mo b/locale/zh_Hant/LC_MESSAGES/django.mo index 552fea2a..a1075ef4 100644 Binary files a/locale/zh_Hant/LC_MESSAGES/django.mo and b/locale/zh_Hant/LC_MESSAGES/django.mo differ diff --git a/locale/zh_Hant/LC_MESSAGES/django.po b/locale/zh_Hant/LC_MESSAGES/django.po index c496bb92..2a39f388 100644 --- a/locale/zh_Hant/LC_MESSAGES/django.po +++ b/locale/zh_Hant/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-07 01:35+0000\n" +"POT-Creation-Date: 2021-08-16 21:26+0000\n" "PO-Revision-Date: 2021-06-30 10:36+0000\n" "Last-Translator: Grace Cheng \n" "Language-Team: LANGUAGE \n" @@ -18,58 +18,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: bookwyrm/forms.py:232 +#: bookwyrm/forms.py:233 msgid "A user with this email already exists." msgstr "已經存在使用該郵箱的使用者。" -#: bookwyrm/forms.py:246 +#: bookwyrm/forms.py:247 msgid "One Day" msgstr "一天" -#: bookwyrm/forms.py:247 +#: bookwyrm/forms.py:248 msgid "One Week" msgstr "一週" -#: bookwyrm/forms.py:248 +#: bookwyrm/forms.py:249 msgid "One Month" msgstr "一個月" -#: bookwyrm/forms.py:249 +#: bookwyrm/forms.py:250 msgid "Does Not Expire" msgstr "永不失效" -#: bookwyrm/forms.py:254 +#: bookwyrm/forms.py:255 #, python-format msgid "%(count)d uses" msgstr "%(count)d 次使用" -#: bookwyrm/forms.py:257 +#: bookwyrm/forms.py:258 msgid "Unlimited" msgstr "不受限" -#: bookwyrm/forms.py:307 +#: bookwyrm/forms.py:308 msgid "List Order" msgstr "列表順序" -#: bookwyrm/forms.py:308 +#: bookwyrm/forms.py:309 msgid "Book Title" msgstr "書名" -#: bookwyrm/forms.py:309 bookwyrm/templates/snippets/create_status_form.html:34 +#: bookwyrm/forms.py:310 +#: bookwyrm/templates/snippets/create_status/review.html:25 #: bookwyrm/templates/user/shelf/shelf.html:85 #: bookwyrm/templates/user/shelf/shelf.html:116 msgid "Rating" msgstr "評價" -#: bookwyrm/forms.py:311 bookwyrm/templates/lists/list.html:107 +#: bookwyrm/forms.py:312 bookwyrm/templates/lists/list.html:107 msgid "Sort By" msgstr "排序方式" -#: bookwyrm/forms.py:315 +#: bookwyrm/forms.py:316 msgid "Ascending" msgstr "升序" -#: bookwyrm/forms.py:316 +#: bookwyrm/forms.py:317 msgid "Descending" msgstr "降序" @@ -83,7 +84,7 @@ msgstr "%(value)s 不是有效的 remote_id" msgid "%(value)s is not a valid username" msgstr "%(value)s 不是有效的使用者名稱" -#: bookwyrm/models/fields.py:174 bookwyrm/templates/layout.html:159 +#: bookwyrm/models/fields.py:174 bookwyrm/templates/layout.html:164 msgid "username" msgstr "使用者名稱" @@ -289,9 +290,8 @@ msgstr "Goodreads key:" #: bookwyrm/templates/settings/edit_server.html:68 #: bookwyrm/templates/settings/federated_server.html:98 #: bookwyrm/templates/settings/site.html:108 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:36 +#: bookwyrm/templates/snippets/reading_modals/layout.html:16 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:42 #: bookwyrm/templates/user_admin/user_moderation_actions.html:45 msgid "Save" msgstr "儲存" @@ -305,16 +305,14 @@ msgstr "儲存" #: bookwyrm/templates/settings/federated_server.html:99 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/goal_form.html:32 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:43 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:43 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:37 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:28 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:43 msgid "Cancel" msgstr "取消" #: bookwyrm/templates/book/book.html:48 -#: bookwyrm/templates/discover/large-book.html:25 -#: bookwyrm/templates/discover/small-book.html:19 +#: bookwyrm/templates/discover/large-book.html:22 +#: bookwyrm/templates/landing/large-book.html:25 +#: bookwyrm/templates/landing/small-book.html:18 msgid "by" msgstr "作者" @@ -497,6 +495,7 @@ msgid "Back" msgstr "返回" #: bookwyrm/templates/book/edit_book.html:120 +#: bookwyrm/templates/snippets/create_status/review.html:18 msgid "Title:" msgstr "標題:" @@ -714,7 +713,7 @@ msgid "Confirmation code:" msgstr "確認密碼:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 -#: bookwyrm/templates/discover/landing_layout.html:70 +#: bookwyrm/templates/landing/landing_layout.html:70 #: bookwyrm/templates/moderation/report_modal.html:33 msgid "Submit" msgstr "提交" @@ -728,7 +727,7 @@ msgid "Resend confirmation link" msgstr "" #: bookwyrm/templates/confirm_email/resend_form.html:11 -#: bookwyrm/templates/discover/landing_layout.html:64 +#: bookwyrm/templates/landing/landing_layout.html:64 #: bookwyrm/templates/password_reset_request.html:18 #: bookwyrm/templates/preferences/edit_user.html:38 #: bookwyrm/templates/snippets/register_form.html:13 @@ -755,7 +754,7 @@ msgstr "跨站社群" #: bookwyrm/templates/directory/directory.html:4 #: bookwyrm/templates/directory/directory.html:9 -#: bookwyrm/templates/layout.html:71 +#: bookwyrm/templates/layout.html:94 msgid "Directory" msgstr "目錄" @@ -825,63 +824,45 @@ msgstr "BookWyrm 使用者" msgid "All known users" msgstr "所有已知使用者" -#: bookwyrm/templates/discover/about.html:7 +#: bookwyrm/templates/discover/discover.html:4 +#: bookwyrm/templates/discover/discover.html:10 +#: bookwyrm/templates/layout.html:71 +#, fuzzy +#| msgid "Discard" +msgid "Discover" +msgstr "放棄" + +#: bookwyrm/templates/discover/discover.html:12 #, python-format -msgid "About %(site_name)s" -msgstr "關於 %(site_name)s" +msgid "See what's new in the local %(site_name)s community" +msgstr "" -#: bookwyrm/templates/discover/about.html:10 -#: bookwyrm/templates/discover/about.html:20 -msgid "Code of Conduct" -msgstr "行為準則" +#: bookwyrm/templates/discover/large-book.html:46 +#: bookwyrm/templates/discover/small-book.html:32 +msgid "rated" +msgstr "評價了" -#: bookwyrm/templates/discover/about.html:13 -#: bookwyrm/templates/discover/about.html:29 -msgid "Privacy Policy" -msgstr "隱私政策" +#: bookwyrm/templates/discover/large-book.html:48 +#: bookwyrm/templates/discover/small-book.html:34 +msgid "reviewed" +msgstr "寫了書評給" -#: bookwyrm/templates/discover/discover.html:6 -msgid "Recent Books" -msgstr "最近書目" +#: bookwyrm/templates/discover/large-book.html:50 +#: bookwyrm/templates/discover/small-book.html:36 +msgid "commented on" +msgstr "評論了" -#: bookwyrm/templates/discover/landing_layout.html:5 -#: bookwyrm/templates/get_started/layout.html:5 -msgid "Welcome" -msgstr "歡迎" +#: bookwyrm/templates/discover/large-book.html:52 +#: bookwyrm/templates/discover/small-book.html:38 +msgid "quoted" +msgstr "引用了" -#: bookwyrm/templates/discover/landing_layout.html:17 -msgid "Decentralized" -msgstr "去中心化" - -#: bookwyrm/templates/discover/landing_layout.html:23 -msgid "Friendly" -msgstr "友好" - -#: bookwyrm/templates/discover/landing_layout.html:29 -msgid "Anti-Corporate" -msgstr "反企業" - -#: bookwyrm/templates/discover/landing_layout.html:44 -#, python-format -msgid "Join %(name)s" -msgstr "加入 %(name)s" - -#: bookwyrm/templates/discover/landing_layout.html:51 -#: bookwyrm/templates/login.html:56 -msgid "This instance is closed" -msgstr "本實例不開放。" - -#: bookwyrm/templates/discover/landing_layout.html:57 -msgid "Thank you! Your request has been received." -msgstr "謝謝你!我們已經受到了你的請求。" - -#: bookwyrm/templates/discover/landing_layout.html:60 -msgid "Request an Invitation" -msgstr "請求邀請" - -#: bookwyrm/templates/discover/landing_layout.html:79 -msgid "Your Account" -msgstr "你的帳號" +#: bookwyrm/templates/discover/large-book.html:68 +#: bookwyrm/templates/discover/small-book.html:52 +#, fuzzy +#| msgid "Like status" +msgid "View status" +msgstr "喜歡狀態" #: bookwyrm/templates/email/confirm/html_content.html:6 #: bookwyrm/templates/email/confirm/text_content.html:4 @@ -895,10 +876,20 @@ msgstr "" msgid "Confirm Email" msgstr "確認" +#: bookwyrm/templates/email/confirm/html_content.html:15 +#, python-format +msgid "Or enter the code \"%(confirmation_code)s\" at login." +msgstr "" + #: bookwyrm/templates/email/confirm/subject.html:2 msgid "Please confirm your email" msgstr "" +#: bookwyrm/templates/email/confirm/text_content.html:10 +#, python-format +msgid "Or enter the code \"%(confirmation_code)s\" at login." +msgstr "" + #: bookwyrm/templates/email/html_layout.html:15 #: bookwyrm/templates/email/text_layout.html:2 msgid "Hi there," @@ -967,7 +958,7 @@ msgid "Direct Messages with %(username)s" msgstr "與 %(username)s 私信" #: bookwyrm/templates/feed/direct_messages.html:10 -#: bookwyrm/templates/layout.html:99 +#: bookwyrm/templates/layout.html:104 msgid "Direct Messages" msgstr "私信" @@ -982,7 +973,7 @@ msgstr "你現在沒有訊息。" #: bookwyrm/templates/feed/feed.html:22 #, fuzzy, python-format #| msgid "load 0 unread status(es)" -msgid "load 0 unread status(es)" +msgid "load 0 unread status(es)" msgstr "載入 0 條未讀狀態" #: bookwyrm/templates/feed/feed.html:38 @@ -1084,6 +1075,11 @@ msgstr "沒有找到書目" msgid "Save & continue" msgstr "儲存 & 繼續" +#: bookwyrm/templates/get_started/layout.html:5 +#: bookwyrm/templates/landing/landing_layout.html:5 +msgid "Welcome" +msgstr "歡迎" + #: bookwyrm/templates/get_started/layout.html:15 #, python-format msgid "Welcome to %(site_name)s!" @@ -1288,7 +1284,6 @@ msgid "Book" msgstr "書目" #: bookwyrm/templates/import_status.html:122 -#: bookwyrm/templates/snippets/create_status_form.html:13 #: bookwyrm/templates/user/shelf/shelf.html:79 #: bookwyrm/templates/user/shelf/shelf.html:99 msgid "Title" @@ -1330,6 +1325,59 @@ msgstr "\"%(query)s\" 的搜尋結果" msgid "Matching Books" msgstr "匹配的書目" +#: bookwyrm/templates/landing/about.html:7 +#, python-format +msgid "About %(site_name)s" +msgstr "關於 %(site_name)s" + +#: bookwyrm/templates/landing/about.html:10 +#: bookwyrm/templates/landing/about.html:20 +msgid "Code of Conduct" +msgstr "行為準則" + +#: bookwyrm/templates/landing/about.html:13 +#: bookwyrm/templates/landing/about.html:29 +msgid "Privacy Policy" +msgstr "隱私政策" + +#: bookwyrm/templates/landing/landing.html:6 +msgid "Recent Books" +msgstr "最近書目" + +#: bookwyrm/templates/landing/landing_layout.html:17 +msgid "Decentralized" +msgstr "去中心化" + +#: bookwyrm/templates/landing/landing_layout.html:23 +msgid "Friendly" +msgstr "友好" + +#: bookwyrm/templates/landing/landing_layout.html:29 +msgid "Anti-Corporate" +msgstr "反企業" + +#: bookwyrm/templates/landing/landing_layout.html:44 +#, python-format +msgid "Join %(name)s" +msgstr "加入 %(name)s" + +#: bookwyrm/templates/landing/landing_layout.html:51 +#: bookwyrm/templates/login.html:56 +msgid "This instance is closed" +msgstr "本實例不開放。" + +#: bookwyrm/templates/landing/landing_layout.html:57 +msgid "Thank you! Your request has been received." +msgstr "謝謝你!我們已經受到了你的請求。" + +#: bookwyrm/templates/landing/landing_layout.html:60 +msgid "Request an Invitation" +msgstr "請求邀請" + +#: bookwyrm/templates/landing/landing_layout.html:79 +msgid "Your Account" +msgstr "你的帳號" + #: bookwyrm/templates/layout.html:40 msgid "Search for a book or user" msgstr "搜尋書目或使用者" @@ -1342,15 +1390,15 @@ msgstr "主導航選單" msgid "Feed" msgstr "動態" -#: bookwyrm/templates/layout.html:94 +#: bookwyrm/templates/layout.html:99 msgid "Your Books" msgstr "你的書目" -#: bookwyrm/templates/layout.html:104 +#: bookwyrm/templates/layout.html:109 msgid "Settings" msgstr "設定" -#: bookwyrm/templates/layout.html:113 +#: bookwyrm/templates/layout.html:118 #: bookwyrm/templates/settings/admin_layout.html:31 #: bookwyrm/templates/settings/manage_invite_requests.html:15 #: bookwyrm/templates/settings/manage_invites.html:3 @@ -1358,61 +1406,61 @@ msgstr "設定" msgid "Invites" msgstr "邀請" -#: bookwyrm/templates/layout.html:120 +#: bookwyrm/templates/layout.html:125 msgid "Admin" msgstr "管理員" -#: bookwyrm/templates/layout.html:127 +#: bookwyrm/templates/layout.html:132 msgid "Log out" msgstr "登出" -#: bookwyrm/templates/layout.html:135 bookwyrm/templates/layout.html:136 +#: bookwyrm/templates/layout.html:140 bookwyrm/templates/layout.html:141 #: bookwyrm/templates/notifications.html:6 #: bookwyrm/templates/notifications.html:11 msgid "Notifications" msgstr "通知" -#: bookwyrm/templates/layout.html:158 bookwyrm/templates/layout.html:162 +#: bookwyrm/templates/layout.html:163 bookwyrm/templates/layout.html:167 #: bookwyrm/templates/login.html:22 #: bookwyrm/templates/snippets/register_form.html:4 msgid "Username:" msgstr "使用者名稱:" -#: bookwyrm/templates/layout.html:163 +#: bookwyrm/templates/layout.html:168 msgid "password" msgstr "密碼" -#: bookwyrm/templates/layout.html:164 bookwyrm/templates/login.html:41 +#: bookwyrm/templates/layout.html:169 bookwyrm/templates/login.html:41 msgid "Forgot your password?" msgstr "忘記了密碼?" -#: bookwyrm/templates/layout.html:167 bookwyrm/templates/login.html:10 +#: bookwyrm/templates/layout.html:172 bookwyrm/templates/login.html:10 #: bookwyrm/templates/login.html:38 msgid "Log in" msgstr "登入" -#: bookwyrm/templates/layout.html:175 +#: bookwyrm/templates/layout.html:180 msgid "Join" msgstr "加入" -#: bookwyrm/templates/layout.html:213 +#: bookwyrm/templates/layout.html:218 msgid "About this instance" msgstr "關於本實例" -#: bookwyrm/templates/layout.html:217 +#: bookwyrm/templates/layout.html:222 msgid "Contact site admin" msgstr "聯絡網站管理員" -#: bookwyrm/templates/layout.html:221 +#: bookwyrm/templates/layout.html:226 msgid "Documentation" msgstr "文件:" -#: bookwyrm/templates/layout.html:228 +#: bookwyrm/templates/layout.html:233 #, python-format msgid "Support %(site_name)s on %(support_title)s" msgstr "在 %(support_title)s 上支援 %(site_name)s" -#: bookwyrm/templates/layout.html:232 +#: bookwyrm/templates/layout.html:237 msgid "BookWyrm's source code is freely available. You can contribute or report issues on GitHub." msgstr "BookWyrm 是開源軟體。你可以在 GitHub 貢獻或報告問題。" @@ -1597,7 +1645,6 @@ msgstr "監察員評論" #: bookwyrm/templates/moderation/report.html:40 #: bookwyrm/templates/snippets/create_status.html:28 -#: bookwyrm/templates/snippets/create_status_form.html:66 msgid "Comment" msgstr "評論" @@ -1898,26 +1945,6 @@ msgstr "編輯 \"%(book_title)s\"" msgid "Want to Read \"%(book_title)s\"" msgstr "想要閱讀 \"%(book_title)s\"" -#: bookwyrm/templates/rss/title.html:5 -#: bookwyrm/templates/snippets/status/status_header.html:36 -msgid "rated" -msgstr "評價了" - -#: bookwyrm/templates/rss/title.html:7 -#: bookwyrm/templates/snippets/status/status_header.html:38 -msgid "reviewed" -msgstr "寫了書評給" - -#: bookwyrm/templates/rss/title.html:9 -#: bookwyrm/templates/snippets/status/status_header.html:40 -msgid "commented on" -msgstr "評論了" - -#: bookwyrm/templates/rss/title.html:11 -#: bookwyrm/templates/snippets/status/status_header.html:42 -msgid "quoted" -msgstr "引用了" - #: bookwyrm/templates/search/book.html:64 msgid "Load results from other catalogues" msgstr "從其它分類載入結果" @@ -2443,14 +2470,6 @@ msgstr "轉發" msgid "Un-boost" msgstr "取消轉發" -#: bookwyrm/templates/snippets/content_warning_field.html:3 -msgid "Spoiler alert:" -msgstr "劇透警告:" - -#: bookwyrm/templates/snippets/content_warning_field.html:10 -msgid "Spoilers ahead!" -msgstr "前有劇透!" - #: bookwyrm/templates/snippets/create_status.html:17 msgid "Review" msgstr "書評" @@ -2459,67 +2478,92 @@ msgstr "書評" msgid "Quote" msgstr "引用" -#: bookwyrm/templates/snippets/create_status_form.html:23 -msgid "Comment:" -msgstr "評論:" +#: bookwyrm/templates/snippets/create_status/comment.html:15 +msgid "Some thoughts on the book" +msgstr "" -#: bookwyrm/templates/snippets/create_status_form.html:25 -msgid "Quote:" -msgstr "引用:" - -#: bookwyrm/templates/snippets/create_status_form.html:27 -msgid "Review:" -msgstr "書評:" - -#: bookwyrm/templates/snippets/create_status_form.html:56 -#: bookwyrm/templates/snippets/status/layout.html:29 -#: bookwyrm/templates/snippets/status/layout.html:47 -#: bookwyrm/templates/snippets/status/layout.html:48 -msgid "Reply" -msgstr "回覆" - -#: bookwyrm/templates/snippets/create_status_form.html:56 -msgid "Content" -msgstr "內容" - -#: bookwyrm/templates/snippets/create_status_form.html:80 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 +#: bookwyrm/templates/snippets/create_status/comment.html:26 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:16 msgid "Progress:" msgstr "進度:" -#: bookwyrm/templates/snippets/create_status_form.html:88 +#: bookwyrm/templates/snippets/create_status/comment.html:34 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:30 #: bookwyrm/templates/snippets/readthrough_form.html:22 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30 msgid "pages" msgstr "頁數" -#: bookwyrm/templates/snippets/create_status_form.html:89 +#: bookwyrm/templates/snippets/create_status/comment.html:35 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:31 #: bookwyrm/templates/snippets/readthrough_form.html:23 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31 msgid "percent" msgstr "百分比" -#: bookwyrm/templates/snippets/create_status_form.html:95 -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 +#: bookwyrm/templates/snippets/create_status/comment.html:41 +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:36 #, python-format msgid "of %(pages)s pages" msgstr "全書 %(pages)s 頁" -#: bookwyrm/templates/snippets/create_status_form.html:110 +#: bookwyrm/templates/snippets/create_status/content_field.html:16 +#: bookwyrm/templates/snippets/status/layout.html:31 +#: bookwyrm/templates/snippets/status/layout.html:49 +#: bookwyrm/templates/snippets/status/layout.html:50 +msgid "Reply" +msgstr "回覆" + +#: bookwyrm/templates/snippets/create_status/content_field.html:16 +msgid "Content" +msgstr "內容" + +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:3 +msgid "Spoiler alert:" +msgstr "劇透警告:" + +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:10 +msgid "Spoilers ahead!" +msgstr "前有劇透!" + +#: bookwyrm/templates/snippets/create_status/content_warning_toggle.html:5 msgid "Include spoiler alert" msgstr "加入劇透警告" -#: bookwyrm/templates/snippets/create_status_form.html:117 +#: bookwyrm/templates/snippets/create_status/layout.html:38 +#: bookwyrm/templates/snippets/reading_modals/form.html:7 +msgid "Comment:" +msgstr "評論:" + +#: bookwyrm/templates/snippets/create_status/post_options_block.html:8 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 #: bookwyrm/templates/snippets/privacy_select.html:20 msgid "Private" msgstr "私密" -#: bookwyrm/templates/snippets/create_status_form.html:128 +#: bookwyrm/templates/snippets/create_status/post_options_block.html:19 msgid "Post" msgstr "釋出" +#: bookwyrm/templates/snippets/create_status/quotation.html:19 +msgid "Quote:" +msgstr "引用:" + +#: bookwyrm/templates/snippets/create_status/quotation.html:27 +#, fuzzy, python-format +#| msgid "Edit \"%(book_title)s\"" +msgid "An excerpt from '%(book_title)s'" +msgstr "編輯 \"%(book_title)s\"" + +#: bookwyrm/templates/snippets/create_status/review.html:20 +#, fuzzy, python-format +#| msgid "Editions of %(book_title)s" +msgid "Your review of '%(book_title)s'" +msgstr "%(book_title)s 的各版本" + +#: bookwyrm/templates/snippets/create_status/review.html:32 +msgid "Review:" +msgstr "書評:" + #: bookwyrm/templates/snippets/delete_readthrough_modal.html:4 msgid "Delete these read dates?" msgstr "刪除這些閱讀日期嗎?" @@ -2555,15 +2599,27 @@ msgstr "使用過濾器" msgid "Clear filters" msgstr "清除過濾器" -#: bookwyrm/templates/snippets/follow_button.html:12 +#: bookwyrm/templates/snippets/follow_button.html:14 +#, fuzzy, python-format +#| msgid "Report @%(username)s" +msgid "Follow @%(username)s" +msgstr "舉報 %(username)s" + +#: bookwyrm/templates/snippets/follow_button.html:16 msgid "Follow" msgstr "關注" -#: bookwyrm/templates/snippets/follow_button.html:18 +#: bookwyrm/templates/snippets/follow_button.html:25 msgid "Undo follow request" msgstr "撤回關注請求" -#: bookwyrm/templates/snippets/follow_button.html:20 +#: bookwyrm/templates/snippets/follow_button.html:30 +#, fuzzy, python-format +#| msgid "Report @%(username)s" +msgid "Unfollow @%(username)s" +msgstr "舉報 %(username)s" + +#: bookwyrm/templates/snippets/follow_button.html:32 msgid "Unfollow" msgstr "取消關注" @@ -2583,16 +2639,18 @@ msgid "%(rating)s star" msgid_plural "%(rating)s stars" msgstr[0] "%(rating)s 星" -#: bookwyrm/templates/snippets/generated_status/goal.html:1 +#: bookwyrm/templates/snippets/generated_status/goal.html:2 #, python-format msgid "set a goal to read %(counter)s book in %(year)s" msgid_plural "set a goal to read %(counter)s books in %(year)s" msgstr[0] "設定了在 %(year)s 內要讀 %(counter)s 本書的目標" #: bookwyrm/templates/snippets/generated_status/rating.html:3 -#, python-format -msgid "Rated %(title)s: %(display_rating)s star" -msgid_plural "Rated %(title)s: %(display_rating)s stars" +#, fuzzy, python-format +#| msgid "Rated %(title)s: %(display_rating)s star" +#| msgid_plural "Rated %(title)s: %(display_rating)s stars" +msgid "rated %(title)s: %(display_rating)s star" +msgid_plural "rated %(title)s: %(display_rating)s stars" msgstr[0] "為 %(title)s 打了分: %(display_rating)s 星" #: bookwyrm/templates/snippets/generated_status/review_pure_name.html:4 @@ -2624,9 +2682,7 @@ msgid "Goal privacy:" msgstr "目標隱私:" #: bookwyrm/templates/snippets/goal_form.html:26 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:37 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:31 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:20 +#: bookwyrm/templates/snippets/reading_modals/layout.html:13 msgid "Post to feed" msgstr "發佈到即時動態" @@ -2701,21 +2757,45 @@ msgstr "留下評價" msgid "Rate" msgstr "評價" +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6 +#, python-format +msgid "Finish \"%(book_title)s\"" +msgstr "完成 \"%(book_title)s\"" + +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:22 +#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:20 #: bookwyrm/templates/snippets/readthrough_form.html:7 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:19 -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:19 msgid "Started reading" msgstr "已開始閱讀" +#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:30 +#: bookwyrm/templates/snippets/readthrough_form.html:30 +msgid "Finished reading" +msgstr "已完成閱讀" + +#: bookwyrm/templates/snippets/reading_modals/form.html:8 +msgid "(Optional)" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:5 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 +msgid "Update progress" +msgstr "更新進度" + +#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6 +#, python-format +msgid "Start \"%(book_title)s\"" +msgstr "開始 \"%(book_title)s\"" + +#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 +#, python-format +msgid "Want to Read \"%(book_title)s\"" +msgstr "想要閱讀 \"%(book_title)s\"" + #: bookwyrm/templates/snippets/readthrough_form.html:14 msgid "Progress" msgstr "進度" -#: bookwyrm/templates/snippets/readthrough_form.html:30 -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:25 -msgid "Finished reading" -msgstr "已完成閱讀" - #: bookwyrm/templates/snippets/register_form.html:32 msgid "Sign Up" msgstr "註冊" @@ -2732,16 +2812,6 @@ msgstr "匯入書目" msgid "Move book" msgstr "移動書目" -#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5 -#, python-format -msgid "Finish \"%(book_title)s\"" -msgstr "完成 \"%(book_title)s\"" - -#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 -msgid "Update progress" -msgstr "更新進度" - #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 msgid "More shelves" msgstr "更多書架" @@ -2755,7 +2825,6 @@ msgid "Finish reading" msgstr "完成閱讀" #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25 -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:26 msgid "Want to read" msgstr "想要閱讀" @@ -2764,23 +2833,13 @@ msgstr "想要閱讀" msgid "Remove from %(name)s" msgstr "從 %(name)s 移除" -#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5 -#, python-format -msgid "Start \"%(book_title)s\"" -msgstr "開始 \"%(book_title)s\"" - -#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5 -#, python-format -msgid "Want to Read \"%(book_title)s\"" -msgstr "想要閱讀 \"%(book_title)s\"" - #: bookwyrm/templates/snippets/status/content_status.html:72 -#: bookwyrm/templates/snippets/trimmed_text.html:15 +#: bookwyrm/templates/snippets/trimmed_text.html:17 msgid "Show more" msgstr "顯示更多" #: bookwyrm/templates/snippets/status/content_status.html:87 -#: bookwyrm/templates/snippets/trimmed_text.html:30 +#: bookwyrm/templates/snippets/trimmed_text.html:34 msgid "Show less" msgstr "顯示更少" @@ -2788,18 +2847,65 @@ msgstr "顯示更少" msgid "Open image in new window" msgstr "在新視窗中開啟圖片" +#: bookwyrm/templates/snippets/status/headers/comment.html:2 +#, fuzzy, python-format +#| msgid "Editions of \"%(work_title)s\"" +msgid "commented on %(book)s" +msgstr "\"%(work_title)s\" 的各版本" + +#: bookwyrm/templates/snippets/status/headers/note.html:15 +#, python-format +msgid "replied to %(username)s's status" +msgstr "回覆了 %(username)s狀態" + +#: bookwyrm/templates/snippets/status/headers/quotation.html:2 +#, fuzzy, python-format +#| msgid "Remove %(name)s" +msgid "quoted %(book)s" +msgstr "移除 %(name)s" + +#: bookwyrm/templates/snippets/status/headers/rating.html:3 +#, fuzzy, python-format +#| msgid "Created by %(username)s" +msgid "rated %(book)s:" +msgstr "由 %(username)s 建立" + +#: bookwyrm/templates/snippets/status/headers/read.html:7 +#, fuzzy, python-format +#| msgid "Editions of \"%(work_title)s\"" +msgid "finished reading %(book)s" +msgstr "\"%(work_title)s\" 的各版本" + +#: bookwyrm/templates/snippets/status/headers/reading.html:7 +#, fuzzy, python-format +#| msgid "Created by %(username)s" +msgid "started reading %(book)s" +msgstr "由 %(username)s 建立" + +#: bookwyrm/templates/snippets/status/headers/review.html:3 +#, fuzzy, python-format +#| msgid "Remove %(name)s" +msgid "reviewed %(book)s" +msgstr "移除 %(name)s" + +#: bookwyrm/templates/snippets/status/headers/to_read.html:7 +#, fuzzy, python-format +#| msgid "replied to %(username)s's status" +msgid "%(username)s wants to read %(book)s" +msgstr "回覆了 %(username)s狀態" + #: bookwyrm/templates/snippets/status/layout.html:21 #: bookwyrm/templates/snippets/status/status_options.html:17 msgid "Delete status" msgstr "刪除狀態" -#: bookwyrm/templates/snippets/status/layout.html:51 -#: bookwyrm/templates/snippets/status/layout.html:52 +#: bookwyrm/templates/snippets/status/layout.html:53 +#: bookwyrm/templates/snippets/status/layout.html:54 msgid "Boost status" msgstr "轉發狀態" -#: bookwyrm/templates/snippets/status/layout.html:55 -#: bookwyrm/templates/snippets/status/layout.html:56 +#: bookwyrm/templates/snippets/status/layout.html:57 +#: bookwyrm/templates/snippets/status/layout.html:58 msgid "Like status" msgstr "喜歡狀態" @@ -2807,11 +2913,6 @@ msgstr "喜歡狀態" msgid "boosted" msgstr "轉發了" -#: bookwyrm/templates/snippets/status/status_header.html:46 -#, python-format -msgid "replied to %(username)s's status" -msgstr "回覆了 %(username)s狀態" - #: bookwyrm/templates/snippets/status/status_options.html:7 #: bookwyrm/templates/snippets/user_options.html:7 msgid "More options" @@ -3098,6 +3199,11 @@ msgstr "沒有找到使用該郵箱的使用者。" msgid "A password reset link sent to %s" msgstr "密碼重置連結已傳送給 %s" +#: bookwyrm/views/rss_feed.py:34 +#, python-brace-format +msgid "Status updates from {obj.display_name}" +msgstr "" + #~ msgid "Local Timeline" #~ msgstr "本地時間線" @@ -3106,6 +3212,3 @@ msgstr "密碼重置連結已傳送給 %s" #~ msgid "Local" #~ msgstr "本站" - -#~ msgid "Remove %(name)s" -#~ msgstr "移除 %(name)s" diff --git a/requirements.txt b/requirements.txt index ec0eb1a8..37be8944 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,12 @@ celery==4.4.2 colorthief==0.2.1 Django==3.2.4 +django-imagekit==4.0.2 django-model-utils==4.0.0 environs==7.2.0 flower==0.9.4 Markdown==3.3.3 -Pillow>=7.1.0 +Pillow>=8.2.0 psycopg2==2.8.4 pycryptodome==3.9.4 python-dateutil==2.8.1 diff --git a/yarn.lock b/yarn.lock index 7686fd11..af20d142 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1520,9 +1520,9 @@ path-key@^3.1.0: integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^4.0.0: version "4.0.0"