diff --git a/.github/workflows/django-tests.yml b/.github/workflows/django-tests.yml index 00e08dadb..97a744813 100644 --- a/.github/workflows/django-tests.yml +++ b/.github/workflows/django-tests.yml @@ -55,5 +55,6 @@ jobs: EMAIL_HOST_PASSWORD: "" EMAIL_USE_TLS: true ENABLE_PREVIEW_IMAGES: false + ENABLE_THUMBNAIL_GENERATION: true run: | pytest -n 3 diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 08661e9c2..a3117f7cb 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -21,8 +21,7 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements.txt - pip install pylint - name: Analysing the code with pylint run: | - pylint bookwyrm/ --ignore=migrations --disable=E1101,E1135,E1136,R0903,R0901,R0902,W0707,W0511,W0406,R0401,R0801 + pylint bookwyrm/ diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 000000000..464638853 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,9 @@ +[MAIN] +ignore=migrations +load-plugins=pylint.extensions.no_self_use + +[MESSAGES CONTROL] +disable=E1101,E1135,E1136,R0903,R0901,R0902,W0707,W0511,W0406,R0401,R0801,C3001,import-error + +[FORMAT] +max-line-length=88 diff --git a/Dockerfile b/Dockerfile index 8be0a12f8..219cfa595 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,8 +6,8 @@ RUN mkdir /app /app/static /app/images WORKDIR /app +RUN apt-get update && apt-get install -y gettext libgettextpo-dev tidy && apt-get clean + COPY pyproject.toml poetry.lock ./ RUN poetry install --no-dev - -COPY ./bookwyrm ./celerywyrm ${APP_DIR}/ diff --git a/README.md b/README.md index c0ca2a255..5dd5e19a7 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,49 @@ -# BookWyrm Nix Edition +# BookWyrm -Social reading and reviewing, decentralized with ActivityPub. This branch is a fork of upstream Bookwyrm adapted to run on NixOS (outside of Docker). For more details on this, see [nix/README.md](./nix/README.md) The rest of this document is the upstream README. +**Note:** This branch is a fork of upstream Bookwyrm adapted to run on NixOS (outside of Docker). For more details on this, see [nix/README.md](./nix/README.md) The rest of this document is the upstream README. -## Contents -- [Joining BookWyrm](#joining-bookwyrm) -- [Contributing](#contributing) -- [About BookWyrm](#about-bookwyrm) - - [What it is and isn't](#what-it-is-and-isnt) - - [The role of federation](#the-role-of-federation) - - [Features](#features) -- [Set up BookWyrm](#set-up-bookwyrm) +---- -## Joining BookWyrm -If you'd like to join an instance, you can check out the [instances](https://joinbookwyrm.com/instances/) list. +[![](https://img.shields.io/github/release/bookwyrm-social/bookwyrm.svg?colorB=58839b)](https://github.com/bookwyrm-social/bookwyrm/releases) +[![Run Python Tests](https://github.com/bookwyrm-social/bookwyrm/actions/workflows/django-tests.yml/badge.svg)](https://github.com/bookwyrm-social/bookwyrm/actions/workflows/django-tests.yml) +[![Pylint](https://github.com/bookwyrm-social/bookwyrm/actions/workflows/pylint.yml/badge.svg)](https://github.com/bookwyrm-social/bookwyrm/actions/workflows/pylint.yml) + +BookWyrm is a social network for tracking your reading, talking about books, writing reviews, and discovering what to read next. Federation allows BookWyrm users to join small, trusted communities that can connect with one another, and with other ActivityPub services like [Mastodon](https://joinmastodon.org/) and [Pleroma](http://pleroma.social/). -## Contributing -See [contributing](https://docs.joinbookwyrm.com/contributing.html) for code, translation or monetary contributions. +## Links + +[![Mastodon Follow](https://img.shields.io/mastodon/follow/000146121?domain=https%3A%2F%2Ftech.lgbt&style=social)](https://tech.lgbt/@bookwyrm) +[![Twitter Follow](https://img.shields.io/twitter/follow/BookWyrmSocial?style=social)](https://twitter.com/BookWyrmSocial) + + - [Project homepage](https://joinbookwyrm.com/) + - [Support](https://patreon.com/bookwyrm) + - [Documentation](https://docs.joinbookwyrm.com/) + ## About BookWyrm -### What it is and isn't BookWyrm is a platform for social reading. You can use it to track what you're reading, review books, and follow your friends. It isn't primarily meant for cataloguing or as a data-source for books, but it does do both of those things to some degree. -### The role of federation +## Federation BookWyrm is built on [ActivityPub](http://activitypub.rocks/). With ActivityPub, it inter-operates with different instances of BookWyrm, and other ActivityPub compliant services, like Mastodon. This means you can run an instance for your book club, and still follow your friend who posts on a server devoted to 20th century Russian speculative fiction. It also means that your friend on mastodon can read and comment on a book review that you post on your BookWyrm instance. Federation makes it possible to have small, self-determining communities, in contrast to the monolithic service you find on GoodReads or Twitter. An instance can be focused on a particular interest, be just for a group of friends, or anything else that brings people together. Each community can choose which other instances they want to federate with, and moderate and run their community autonomously. Check out https://runyourown.social/ to get a sense of the philosophy and logistics behind small, high-trust social networks. -### Features -Since the project is still in its early stages, the features are growing every day, and there is plenty of room for suggestions and ideas. Open an [issue](https://github.com/bookwyrm-social/bookwyrm/issues) to get the conversation going! -- Posting about books - - Compose reviews, with or without ratings, which are aggregated in the book page - - Compose other kinds of statuses about books, such as: - - Comments on a book - - Quotes or excerpts - - Reply to statuses - - View aggregate reviews of a book across connected BookWyrm instances - - Differentiate local and federated reviews and rating in your activity feed -- Track reading activity - - Shelve books on default "to-read," "currently reading," and "read" shelves - - Create custom shelves - - Store started reading/finished reading dates, as well as progress updates along the way - - Update followers about reading activity (optionally, and with granular privacy controls) - - Create lists of books which can be open to submissions from anyone, curated, or only edited by the creator -- Federation with ActivityPub - - Broadcast and receive user statuses and activity - - Share book data between instances to create a networked database of metadata - - Identify shared books across instances and aggregate related content - - Follow and interact with users across BookWyrm instances - - Inter-operate with non-BookWyrm ActivityPub services (currently, Mastodon is supported) -- Granular privacy controls - - Private, followers-only, and public privacy levels for posting, shelves, and lists - - Option for users to manually approve followers - - Allow blocking and flagging for moderation +## Features -### The Tech Stack +### Post about books +Compose reviews, comment on what you're reading, and post quotes from books. You can converse with other BookWyrm users across the network about what they're reading. + +### Track reading activity +Keep track of what books you've read, and what books you'd like to read in the future. + +### Federation with ActivityPub +Federation allows you to interact with users on other instances and services, and also shares metadata about books and authors, which collaboratively builds a decentralized database of books. + +### Privacy and moderation +Users and administrators can control who can see thier posts and what other instances to federate with. + +## Tech Stack Web backend - [Django](https://www.djangoproject.com/) web server - [PostgreSQL](https://www.postgresql.org/) database diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..c4e5e9cf9 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,5 @@ +# Security Policy + +## Reporting a Vulnerability + +Please report security issues to `mousereeve@riseup.net` \ No newline at end of file diff --git a/bookwyrm/book_search.py b/bookwyrm/book_search.py index e42a6d8c3..4b0a6eab9 100644 --- a/bookwyrm/book_search.py +++ b/bookwyrm/book_search.py @@ -148,8 +148,8 @@ class SearchResult: def __repr__(self): # pylint: disable=consider-using-f-string - return "".format( - self.key, self.title, self.author + return "".format( + self.key, self.title, self.author, self.confidence ) def json(self): diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index 56e273886..dc4be4b3d 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -1,9 +1,8 @@ """ functionality outline for a book data connector """ from abc import ABC, abstractmethod import imghdr -import ipaddress import logging -from urllib.parse import urlparse +import re from django.core.files.base import ContentFile from django.db import transaction @@ -11,7 +10,7 @@ import requests from requests.exceptions import RequestException from bookwyrm import activitypub, models, settings -from .connector_manager import load_more_data, ConnectorException +from .connector_manager import load_more_data, ConnectorException, raise_not_valid_url from .format_mappings import format_mappings @@ -39,62 +38,34 @@ class AbstractMinimalConnector(ABC): for field in self_fields: setattr(self, field, getattr(info, field)) - def search(self, query, min_confidence=None, timeout=settings.QUERY_TIMEOUT): - """free text search""" - params = {} - if min_confidence: - params["min_confidence"] = min_confidence + def get_search_url(self, query): + """format the query url""" + # Check if the query resembles an ISBN + if maybe_isbn(query) and self.isbn_search_url and self.isbn_search_url != "": + return f"{self.isbn_search_url}{query}" - data = self.get_search_data( - f"{self.search_url}{query}", - params=params, - timeout=timeout, - ) - results = [] + # NOTE: previously, we tried searching isbn and if that produces no results, + # searched as free text. This, instead, only searches isbn if it's isbn-y + return f"{self.search_url}{query}" - for doc in self.parse_search_data(data)[:10]: - results.append(self.format_search_result(doc)) - return results - - def isbn_search(self, query, timeout=settings.QUERY_TIMEOUT): - """isbn search""" - params = {} - data = self.get_search_data( - f"{self.isbn_search_url}{query}", - params=params, - timeout=timeout, - ) - results = [] - - # this shouldn't be returning mutliple results, but just in case - for doc in self.parse_isbn_search_data(data)[:10]: - results.append(self.format_isbn_search_result(doc)) - return results - - def get_search_data(self, remote_id, **kwargs): # pylint: disable=no-self-use - """this allows connectors to override the default behavior""" - return get_data(remote_id, **kwargs) + def process_search_response(self, query, data, min_confidence): + """Format the search results based on the formt of the query""" + if maybe_isbn(query): + return list(self.parse_isbn_search_data(data))[:10] + return list(self.parse_search_data(data, min_confidence))[:10] @abstractmethod def get_or_create_book(self, remote_id): """pull up a book record by whatever means possible""" @abstractmethod - def parse_search_data(self, data): + def parse_search_data(self, data, min_confidence): """turn the result json from a search into a list""" - @abstractmethod - def format_search_result(self, search_result): - """create a SearchResult obj from json""" - @abstractmethod def parse_isbn_search_data(self, data): """turn the result json from a search into a list""" - @abstractmethod - def format_isbn_search_result(self, search_result): - """create a SearchResult obj from json""" - class AbstractConnector(AbstractMinimalConnector): """generic book data connector""" @@ -254,9 +225,6 @@ def get_data(url, params=None, timeout=10): # check if the url is blocked raise_not_valid_url(url) - if models.FederatedServer.is_blocked(url): - raise ConnectorException(f"Attempting to load data from blocked url: {url}") - try: resp = requests.get( url, @@ -311,20 +279,6 @@ def get_image(url, timeout=10): return image_content, extension -def raise_not_valid_url(url): - """do some basic reality checks on the url""" - parsed = urlparse(url) - if not parsed.scheme in ["http", "https"]: - raise ConnectorException("Invalid scheme: ", url) - - try: - ipaddress.ip_address(parsed.netloc) - raise ConnectorException("Provided url is an IP address: ", url) - except ValueError: - # it's not an IP address, which is good - pass - - class Mapping: """associate a local database field with a field in an external dataset""" @@ -366,3 +320,9 @@ def unique_physical_format(format_text): # try a direct match, so saving this would be redundant return None return format_text + + +def maybe_isbn(query): + """check if a query looks like an isbn""" + isbn = re.sub(r"[\W_]", "", query) # removes filler characters + return len(isbn) in [10, 13] # ISBN10 or ISBN13 diff --git a/bookwyrm/connectors/bookwyrm_connector.py b/bookwyrm/connectors/bookwyrm_connector.py index 6dcba7c31..e07a0b281 100644 --- a/bookwyrm/connectors/bookwyrm_connector.py +++ b/bookwyrm/connectors/bookwyrm_connector.py @@ -10,15 +10,12 @@ class Connector(AbstractMinimalConnector): def get_or_create_book(self, remote_id): return activitypub.resolve_remote_id(remote_id, model=models.Edition) - def parse_search_data(self, data): - return data - - def format_search_result(self, search_result): - search_result["connector"] = self - return SearchResult(**search_result) + def parse_search_data(self, data, min_confidence): + for search_result in data: + search_result["connector"] = self + yield SearchResult(**search_result) def parse_isbn_search_data(self, data): - return data - - def format_isbn_search_result(self, search_result): - return self.format_search_result(search_result) + for search_result in data: + search_result["connector"] = self + yield SearchResult(**search_result) diff --git a/bookwyrm/connectors/connector_manager.py b/bookwyrm/connectors/connector_manager.py index 14bb702cb..385880e5a 100644 --- a/bookwyrm/connectors/connector_manager.py +++ b/bookwyrm/connectors/connector_manager.py @@ -1,17 +1,18 @@ """ interface with whatever connectors the app has """ -from datetime import datetime +import asyncio import importlib +import ipaddress import logging -import re from urllib.parse import urlparse +import aiohttp from django.dispatch import receiver from django.db.models import signals from requests import HTTPError from bookwyrm import book_search, models -from bookwyrm.settings import SEARCH_TIMEOUT +from bookwyrm.settings import SEARCH_TIMEOUT, USER_AGENT from bookwyrm.tasks import app logger = logging.getLogger(__name__) @@ -21,53 +22,85 @@ class ConnectorException(HTTPError): """when the connector can't do what was asked""" +async def get_results(session, url, min_confidence, query, connector): + """try this specific connector""" + # pylint: disable=line-too-long + headers = { + "Accept": ( + 'application/json, application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"; charset=utf-8' + ), + "User-Agent": USER_AGENT, + } + params = {"min_confidence": min_confidence} + try: + async with session.get(url, headers=headers, params=params) as response: + if not response.ok: + logger.info("Unable to connect to %s: %s", url, response.reason) + return + + try: + raw_data = await response.json() + except aiohttp.client_exceptions.ContentTypeError as err: + logger.exception(err) + return + + return { + "connector": connector, + "results": connector.process_search_response( + query, raw_data, min_confidence + ), + } + except asyncio.TimeoutError: + logger.info("Connection timed out for url: %s", url) + except aiohttp.ClientError as err: + logger.info(err) + + +async def async_connector_search(query, items, min_confidence): + """Try a number of requests simultaneously""" + timeout = aiohttp.ClientTimeout(total=SEARCH_TIMEOUT) + async with aiohttp.ClientSession(timeout=timeout) as session: + tasks = [] + for url, connector in items: + tasks.append( + asyncio.ensure_future( + get_results(session, url, min_confidence, query, connector) + ) + ) + + results = await asyncio.gather(*tasks) + return results + + def search(query, min_confidence=0.1, return_first=False): """find books based on arbitary keywords""" if not query: return [] results = [] - # Have we got a ISBN ? - isbn = re.sub(r"[\W_]", "", query) - maybe_isbn = len(isbn) in [10, 13] # ISBN10 or ISBN13 - - start_time = datetime.now() + items = [] for connector in get_connectors(): - result_set = None - if maybe_isbn and connector.isbn_search_url and connector.isbn_search_url != "": - # Search on ISBN - try: - result_set = connector.isbn_search(isbn) - except Exception as err: # pylint: disable=broad-except - logger.info(err) - # if this fails, we can still try regular search + # get the search url from the connector before sending + url = connector.get_search_url(query) + try: + raise_not_valid_url(url) + except ConnectorException: + # if this URL is invalid we should skip it and move on + logger.info("Request denied to blocked domain: %s", url) + continue + items.append((url, connector)) - # if no isbn search results, we fallback to generic search - if not result_set: - try: - result_set = connector.search(query, min_confidence=min_confidence) - except Exception as err: # pylint: disable=broad-except - # we don't want *any* error to crash the whole search page - logger.info(err) - continue - - if return_first and result_set: - # if we found anything, return it - return result_set[0] - - if result_set: - results.append( - { - "connector": connector, - "results": result_set, - } - ) - if (datetime.now() - start_time).seconds >= SEARCH_TIMEOUT: - break + # load as many results as we can + results = asyncio.run(async_connector_search(query, items, min_confidence)) + results = [r for r in results if r] if return_first: - return None + # find the best result from all the responses and return that + all_results = [r for con in results for r in con["results"]] + all_results = sorted(all_results, key=lambda r: r.confidence, reverse=True) + return all_results[0] if all_results else None + # failed requests will return None, so filter those out return results @@ -119,6 +152,15 @@ def load_more_data(connector_id, book_id): connector.expand_book_data(book) +@app.task(queue="low_priority") +def create_edition_task(connector_id, work_id, data): + """separate task for each of the 10,000 editions of LoTR""" + connector_info = models.Connector.objects.get(id=connector_id) + connector = load_connector(connector_info) + work = models.Work.objects.select_subclasses().get(id=work_id) + connector.create_edition_from_data(work, data) + + def load_connector(connector_info): """instantiate the connector class""" connector = importlib.import_module( @@ -133,3 +175,20 @@ def create_connector(sender, instance, created, *args, **kwargs): """create a connector to an external bookwyrm server""" if instance.application_type == "bookwyrm": get_or_create_connector(f"https://{instance.server_name}") + + +def raise_not_valid_url(url): + """do some basic reality checks on the url""" + parsed = urlparse(url) + if not parsed.scheme in ["http", "https"]: + raise ConnectorException("Invalid scheme: ", url) + + try: + ipaddress.ip_address(parsed.netloc) + raise ConnectorException("Provided url is an IP address: ", url) + except ValueError: + # it's not an IP address, which is good + pass + + if models.FederatedServer.is_blocked(url): + raise ConnectorException(f"Attempting to load data from blocked url: {url}") diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index a9aeb94f9..df9b2e43a 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -5,7 +5,7 @@ from bookwyrm import models from bookwyrm.book_search import SearchResult from .abstract_connector import AbstractConnector, Mapping from .abstract_connector import get_data -from .connector_manager import ConnectorException +from .connector_manager import ConnectorException, create_edition_task class Connector(AbstractConnector): @@ -77,53 +77,42 @@ class Connector(AbstractConnector): **{k: data.get(k) for k in ["uri", "image", "labels", "sitelinks", "type"]}, } - def search(self, query, min_confidence=None): # pylint: disable=arguments-differ - """overrides default search function with confidence ranking""" - results = super().search(query) - if min_confidence: - # filter the search results after the fact - return [r for r in results if r.confidence >= min_confidence] - return results - - def parse_search_data(self, data): - return data.get("results") - - def format_search_result(self, search_result): - images = search_result.get("image") - cover = f"{self.covers_url}/img/entities/{images[0]}" if images else None - # a deeply messy translation of inventaire's scores - confidence = float(search_result.get("_score", 0.1)) - confidence = 0.1 if confidence < 150 else 0.999 - return SearchResult( - title=search_result.get("label"), - key=self.get_remote_id(search_result.get("uri")), - author=search_result.get("description"), - view_link=f"{self.base_url}/entity/{search_result.get('uri')}", - cover=cover, - confidence=confidence, - connector=self, - ) + def parse_search_data(self, data, min_confidence): + for search_result in data.get("results", []): + images = search_result.get("image") + cover = f"{self.covers_url}/img/entities/{images[0]}" if images else None + # a deeply messy translation of inventaire's scores + confidence = float(search_result.get("_score", 0.1)) + confidence = 0.1 if confidence < 150 else 0.999 + if confidence < min_confidence: + continue + yield SearchResult( + title=search_result.get("label"), + key=self.get_remote_id(search_result.get("uri")), + author=search_result.get("description"), + view_link=f"{self.base_url}/entity/{search_result.get('uri')}", + cover=cover, + confidence=confidence, + connector=self, + ) def parse_isbn_search_data(self, data): """got some daaaata""" results = data.get("entities") if not results: - return [] - return list(results.values()) - - def format_isbn_search_result(self, search_result): - """totally different format than a regular search result""" - title = search_result.get("claims", {}).get("wdt:P1476", []) - if not title: - return None - return SearchResult( - title=title[0], - key=self.get_remote_id(search_result.get("uri")), - author=search_result.get("description"), - view_link=f"{self.base_url}/entity/{search_result.get('uri')}", - cover=self.get_cover_url(search_result.get("image")), - connector=self, - ) + return + for search_result in list(results.values()): + title = search_result.get("claims", {}).get("wdt:P1476", []) + if not title: + continue + yield SearchResult( + title=title[0], + key=self.get_remote_id(search_result.get("uri")), + author=search_result.get("description"), + view_link=f"{self.base_url}/entity/{search_result.get('uri')}", + cover=self.get_cover_url(search_result.get("image")), + connector=self, + ) def is_work_data(self, data): return data.get("type") == "work" @@ -167,12 +156,17 @@ class Connector(AbstractConnector): for edition_uri in edition_options.get("uris"): remote_id = self.get_remote_id(edition_uri) + create_edition_task.delay(self.connector.id, work.id, remote_id) + + def create_edition_from_data(self, work, edition_data, instance=None): + """pass in the url as data and then call the version in abstract connector""" + if isinstance(edition_data, str): try: - data = self.get_book_data(remote_id) + edition_data = self.get_book_data(edition_data) except ConnectorException: # who, indeed, knows - continue - self.create_edition_from_data(work, data) + return + super().create_edition_from_data(work, edition_data, instance=instance) def get_cover_url(self, cover_blob, *_): """format the relative cover url into an absolute one: diff --git a/bookwyrm/connectors/openlibrary.py b/bookwyrm/connectors/openlibrary.py index 118222a16..0fd786660 100644 --- a/bookwyrm/connectors/openlibrary.py +++ b/bookwyrm/connectors/openlibrary.py @@ -5,7 +5,7 @@ from bookwyrm import models from bookwyrm.book_search import SearchResult from .abstract_connector import AbstractConnector, Mapping from .abstract_connector import get_data, infer_physical_format, unique_physical_format -from .connector_manager import ConnectorException +from .connector_manager import ConnectorException, create_edition_task from .openlibrary_languages import languages @@ -152,39 +152,41 @@ class Connector(AbstractConnector): image_name = f"{cover_id}-{size}.jpg" return f"{self.covers_url}/b/id/{image_name}" - def parse_search_data(self, data): - return data.get("docs") + def parse_search_data(self, data, min_confidence): + for idx, search_result in enumerate(data.get("docs")): + # build the remote id from the openlibrary key + key = self.books_url + search_result["key"] + author = search_result.get("author_name") or ["Unknown"] + cover_blob = search_result.get("cover_i") + cover = self.get_cover_url([cover_blob], size="M") if cover_blob else None - def format_search_result(self, search_result): - # build the remote id from the openlibrary key - key = self.books_url + search_result["key"] - author = search_result.get("author_name") or ["Unknown"] - cover_blob = search_result.get("cover_i") - cover = self.get_cover_url([cover_blob], size="M") if cover_blob else None - return SearchResult( - title=search_result.get("title"), - key=key, - author=", ".join(author), - connector=self, - year=search_result.get("first_publish_year"), - cover=cover, - ) + # OL doesn't provide confidence, but it does sort by an internal ranking, so + # this confidence value is relative to the list position + confidence = 1 / (idx + 1) + + yield SearchResult( + title=search_result.get("title"), + key=key, + author=", ".join(author), + connector=self, + year=search_result.get("first_publish_year"), + cover=cover, + confidence=confidence, + ) def parse_isbn_search_data(self, data): - return list(data.values()) - - def format_isbn_search_result(self, search_result): - # build the remote id from the openlibrary key - key = self.books_url + search_result["key"] - authors = search_result.get("authors") or [{"name": "Unknown"}] - author_names = [author.get("name") for author in authors] - return SearchResult( - title=search_result.get("title"), - key=key, - author=", ".join(author_names), - connector=self, - year=search_result.get("publish_date"), - ) + for search_result in list(data.values()): + # build the remote id from the openlibrary key + key = self.books_url + search_result["key"] + authors = search_result.get("authors") or [{"name": "Unknown"}] + author_names = [author.get("name") for author in authors] + yield SearchResult( + title=search_result.get("title"), + key=key, + author=", ".join(author_names), + connector=self, + year=search_result.get("publish_date"), + ) def load_edition_data(self, olkey): """query openlibrary for editions of a work""" @@ -208,7 +210,7 @@ class Connector(AbstractConnector): # does this edition have ANY interesting data? if ignore_edition(edition_data): continue - self.create_edition_from_data(work, edition_data) + create_edition_task.delay(self.connector.id, work.id, edition_data) def ignore_edition(edition_data): diff --git a/bookwyrm/emailing.py b/bookwyrm/emailing.py index 80aca071b..9349b8ae2 100644 --- a/bookwyrm/emailing.py +++ b/bookwyrm/emailing.py @@ -45,7 +45,8 @@ def moderation_report_email(report): """a report was created""" data = email_data() data["reporter"] = report.reporter.localname or report.reporter.username - data["reportee"] = report.user.localname or report.user.username + if report.user: + data["reportee"] = report.user.localname or report.user.username data["report_link"] = report.remote_id for admin in models.User.objects.filter( diff --git a/bookwyrm/forms/__init__.py b/bookwyrm/forms/__init__.py index 075752936..a37d126ac 100644 --- a/bookwyrm/forms/__init__.py +++ b/bookwyrm/forms/__init__.py @@ -10,3 +10,4 @@ from .landing import * from .links import * from .lists import * from .status import * +from .user_admin import * diff --git a/bookwyrm/forms/edit_user.py b/bookwyrm/forms/edit_user.py index d609f15dc..a291c6441 100644 --- a/bookwyrm/forms/edit_user.py +++ b/bookwyrm/forms/edit_user.py @@ -1,5 +1,8 @@ """ using django model forms """ from django import forms +from django.contrib.auth.password_validation import validate_password +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ from bookwyrm import models from bookwyrm.models.fields import ClearableFileInputWithWarning @@ -66,3 +69,33 @@ class DeleteUserForm(CustomForm): class Meta: model = models.User fields = ["password"] + + +class ChangePasswordForm(CustomForm): + current_password = forms.CharField(widget=forms.PasswordInput) + confirm_password = forms.CharField(widget=forms.PasswordInput) + + class Meta: + model = models.User + fields = ["password"] + widgets = { + "password": forms.PasswordInput(), + } + + def clean(self): + """Make sure passwords match and are valid""" + current_password = self.data.get("current_password") + if not self.instance.check_password(current_password): + self.add_error("current_password", _("Incorrect password")) + + cleaned_data = super().clean() + new_password = cleaned_data.get("password") + confirm_password = self.data.get("confirm_password") + + if new_password != confirm_password: + self.add_error("confirm_password", _("Password does not match")) + + try: + validate_password(new_password) + except ValidationError as err: + self.add_error("password", err) diff --git a/bookwyrm/forms/groups.py b/bookwyrm/forms/groups.py index 15b27c0ae..90aace3ba 100644 --- a/bookwyrm/forms/groups.py +++ b/bookwyrm/forms/groups.py @@ -4,12 +4,6 @@ from .custom_form import CustomForm # pylint: disable=missing-class-docstring -class UserGroupForm(CustomForm): - class Meta: - model = models.User - fields = ["groups"] - - class GroupForm(CustomForm): class Meta: model = models.Group diff --git a/bookwyrm/forms/landing.py b/bookwyrm/forms/landing.py index b01c2cc98..a31e8a7c4 100644 --- a/bookwyrm/forms/landing.py +++ b/bookwyrm/forms/landing.py @@ -1,5 +1,7 @@ """ Forms for the landing pages """ -from django.forms import PasswordInput +from django import forms +from django.contrib.auth.password_validation import validate_password +from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ from bookwyrm import models @@ -13,7 +15,7 @@ class LoginForm(CustomForm): fields = ["localname", "password"] help_texts = {f: None for f in fields} widgets = { - "password": PasswordInput(), + "password": forms.PasswordInput(), } @@ -22,12 +24,16 @@ class RegisterForm(CustomForm): model = models.User fields = ["localname", "email", "password"] help_texts = {f: None for f in fields} - widgets = {"password": PasswordInput()} + widgets = {"password": forms.PasswordInput()} def clean(self): """Check if the username is taken""" cleaned_data = super().clean() localname = cleaned_data.get("localname").strip() + try: + validate_password(cleaned_data.get("password")) + except ValidationError as err: + self.add_error("password", err) if models.User.objects.filter(localname=localname).first(): self.add_error("localname", _("User with this username already exists")) @@ -43,3 +49,28 @@ class InviteRequestForm(CustomForm): class Meta: model = models.InviteRequest fields = ["email", "answer"] + + +class PasswordResetForm(CustomForm): + confirm_password = forms.CharField(widget=forms.PasswordInput) + + class Meta: + model = models.User + fields = ["password"] + widgets = { + "password": forms.PasswordInput(), + } + + def clean(self): + """Make sure the passwords match and are valid""" + cleaned_data = super().clean() + new_password = cleaned_data.get("password") + confirm_password = self.data.get("confirm_password") + + if new_password != confirm_password: + self.add_error("confirm_password", _("Password does not match")) + + try: + validate_password(new_password) + except ValidationError as err: + self.add_error("password", err) diff --git a/bookwyrm/forms/user_admin.py b/bookwyrm/forms/user_admin.py new file mode 100644 index 000000000..a3bf6fa8e --- /dev/null +++ b/bookwyrm/forms/user_admin.py @@ -0,0 +1,10 @@ +""" using django model forms """ +from bookwyrm import models +from .custom_form import CustomForm + + +# pylint: disable=missing-class-docstring +class UserGroupForm(CustomForm): + class Meta: + model = models.User + fields = ["groups"] diff --git a/bookwyrm/importers/calibre_import.py b/bookwyrm/importers/calibre_import.py index 7395e2f7b..5426e9333 100644 --- a/bookwyrm/importers/calibre_import.py +++ b/bookwyrm/importers/calibre_import.py @@ -24,5 +24,5 @@ class CalibreImporter(Importer): super().__init__(*args, **kwargs) def get_shelf(self, normalized_row): - # Calibre export does not indicate which shelf to use. Go with a default one for now + # Calibre export does not indicate which shelf to use. Use a default one for now return Shelf.TO_READ diff --git a/bookwyrm/lists_stream.py b/bookwyrm/lists_stream.py index f6a35cc25..0977ad8c2 100644 --- a/bookwyrm/lists_stream.py +++ b/bookwyrm/lists_stream.py @@ -114,12 +114,20 @@ class ListsStream(RedisStore): @receiver(signals.post_save, sender=models.List) # pylint: disable=unused-argument -def add_list_on_create(sender, instance, created, *args, **kwargs): - """add newly created lists streamsstreams""" - if not created: +def add_list_on_create(sender, instance, created, *args, update_fields=None, **kwargs): + """add newly created lists streams""" + if created: + # when creating new things, gotta wait on the transaction + transaction.on_commit(lambda: add_list_on_create_command(instance.id)) return - # when creating new things, gotta wait on the transaction - transaction.on_commit(lambda: add_list_on_create_command(instance.id)) + + # if update_fields was specified, we can check if privacy was updated, but if + # it wasn't specified (ie, by an activitypub update), there's no way to know + if update_fields and "privacy" not in update_fields: + return + + # the privacy may have changed, so we need to re-do the whole thing + remove_list_task.delay(instance.id, re_add=True) @receiver(signals.post_delete, sender=models.List) @@ -217,7 +225,7 @@ def populate_lists_task(user_id): @app.task(queue=MEDIUM) -def remove_list_task(list_id): +def remove_list_task(list_id, re_add=False): """remove a list from any stream it might be in""" stores = models.User.objects.filter(local=True, is_active=True).values_list( "id", flat=True @@ -227,6 +235,9 @@ def remove_list_task(list_id): stores = [ListsStream().stream_id(idx) for idx in stores] ListsStream().remove_object_from_related_stores(list_id, stores=stores) + if re_add: + add_list_task.delay(list_id) + @app.task(queue=HIGH) def add_list_task(list_id): diff --git a/bookwyrm/management/commands/generate_preview_images.py b/bookwyrm/management/commands/generate_preview_images.py index 0454e5e51..9ff16c26a 100644 --- a/bookwyrm/management/commands/generate_preview_images.py +++ b/bookwyrm/management/commands/generate_preview_images.py @@ -56,12 +56,17 @@ class Command(BaseCommand): self.stdout.write(" OK 🖼") # Books - books = models.Book.objects.select_subclasses().filter() - self.stdout.write( - " → Book preview images ({}): ".format(len(books)), ending="" + book_ids = ( + models.Book.objects.select_subclasses() + .filter() + .values_list("id", flat=True) ) - for book in books: - preview_images.generate_edition_preview_image_task.delay(book.id) + + self.stdout.write( + " → Book preview images ({}): ".format(len(book_ids)), ending="" + ) + for book_id in book_ids: + preview_images.generate_edition_preview_image_task.delay(book_id) self.stdout.write(".", ending="") self.stdout.write(" OK 🖼") diff --git a/bookwyrm/management/commands/initdb.py b/bookwyrm/management/commands/initdb.py index 160502ca0..23020a0a6 100644 --- a/bookwyrm/management/commands/initdb.py +++ b/bookwyrm/management/commands/initdb.py @@ -89,7 +89,7 @@ def init_connectors(): covers_url="https://inventaire.io", search_url="https://inventaire.io/api/search?types=works&types=works&search=", isbn_search_url="https://inventaire.io/api/entities?action=by-uris&uris=isbn%3A", - priority=3, + priority=1, ) models.Connector.objects.create( @@ -101,7 +101,7 @@ def init_connectors(): covers_url="https://covers.openlibrary.org", search_url="https://openlibrary.org/search?q=", isbn_search_url="https://openlibrary.org/api/books?jscmd=data&format=json&bibkeys=ISBN:", - priority=3, + priority=1, ) diff --git a/bookwyrm/migrations/0151_alter_report_user.py b/bookwyrm/migrations/0151_alter_report_user.py new file mode 100644 index 000000000..4c3f9dbda --- /dev/null +++ b/bookwyrm/migrations/0151_alter_report_user.py @@ -0,0 +1,24 @@ +# Generated by Django 3.2.13 on 2022-07-05 23:54 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0150_readthrough_stopped_date"), + ] + + operations = [ + migrations.AlterField( + model_name="report", + name="user", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.PROTECT, + to=settings.AUTH_USER_MODEL, + ), + ), + ] diff --git a/bookwyrm/migrations/0151_auto_20220705_0049.py b/bookwyrm/migrations/0151_auto_20220705_0049.py new file mode 100644 index 000000000..6010e38e5 --- /dev/null +++ b/bookwyrm/migrations/0151_auto_20220705_0049.py @@ -0,0 +1,90 @@ +# Generated by Django 3.2.13 on 2022-07-05 00:49 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0150_readthrough_stopped_date"), + ] + + operations = [ + migrations.RemoveField( + model_name="notification", + name="related_book", + ), + migrations.AddField( + model_name="notification", + name="related_list_items", + field=models.ManyToManyField( + related_name="notifications", to="bookwyrm.ListItem" + ), + ), + migrations.AddField( + model_name="notification", + name="related_reports", + field=models.ManyToManyField(to="bookwyrm.Report"), + ), + migrations.AddField( + model_name="notification", + name="related_users", + field=models.ManyToManyField( + related_name="notifications", to=settings.AUTH_USER_MODEL + ), + ), + migrations.AlterField( + model_name="notification", + name="related_list_item", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="notifications_tmp", + to="bookwyrm.listitem", + ), + ), + migrations.AlterField( + model_name="notification", + name="related_report", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="notifications_tmp", + to="bookwyrm.report", + ), + ), + migrations.RunSQL( + sql=""" + INSERT INTO bookwyrm_notification_related_users (notification_id, user_id) + SELECT id, related_user_id + FROM bookwyrm_notification + WHERE bookwyrm_notification.related_user_id IS NOT NULL; + + INSERT INTO bookwyrm_notification_related_list_items (notification_id, listitem_id) + SELECT id, related_list_item_id + FROM bookwyrm_notification + WHERE bookwyrm_notification.related_list_item_id IS NOT NULL; + + INSERT INTO bookwyrm_notification_related_reports (notification_id, report_id) + SELECT id, related_report_id + FROM bookwyrm_notification + WHERE bookwyrm_notification.related_report_id IS NOT NULL; + + """, + reverse_sql=migrations.RunSQL.noop, + ), + migrations.RemoveField( + model_name="notification", + name="related_list_item", + ), + migrations.RemoveField( + model_name="notification", + name="related_report", + ), + migrations.RemoveField( + model_name="notification", + name="related_user", + ), + ] diff --git a/bookwyrm/migrations/0152_alter_report_user.py b/bookwyrm/migrations/0152_alter_report_user.py new file mode 100644 index 000000000..1a67871c8 --- /dev/null +++ b/bookwyrm/migrations/0152_alter_report_user.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.13 on 2022-07-06 19:16 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0151_alter_report_user"), + ] + + operations = [ + migrations.AlterField( + model_name="report", + name="user", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + to=settings.AUTH_USER_MODEL, + ), + ), + ] diff --git a/bookwyrm/migrations/0152_remove_notification_notification_type_valid.py b/bookwyrm/migrations/0152_remove_notification_notification_type_valid.py new file mode 100644 index 000000000..f7471c0d2 --- /dev/null +++ b/bookwyrm/migrations/0152_remove_notification_notification_type_valid.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.13 on 2022-07-05 03:16 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0151_auto_20220705_0049"), + ] + + operations = [ + migrations.RemoveConstraint( + model_name="notification", + name="notification_type_valid", + ), + ] diff --git a/bookwyrm/migrations/0153_merge_20220706_2141.py b/bookwyrm/migrations/0153_merge_20220706_2141.py new file mode 100644 index 000000000..03959f9ef --- /dev/null +++ b/bookwyrm/migrations/0153_merge_20220706_2141.py @@ -0,0 +1,13 @@ +# Generated by Django 3.2.13 on 2022-07-06 21:41 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0152_alter_report_user"), + ("bookwyrm", "0152_remove_notification_notification_type_valid"), + ] + + operations = [] diff --git a/bookwyrm/models/antispam.py b/bookwyrm/models/antispam.py index f506b6f19..dd2a6df26 100644 --- a/bookwyrm/models/antispam.py +++ b/bookwyrm/models/antispam.py @@ -3,7 +3,7 @@ from functools import reduce import operator from django.apps import apps -from django.db import models +from django.db import models, transaction from django.db.models import Q from django.utils.translation import gettext_lazy as _ @@ -58,25 +58,20 @@ def automod_task(): return reporter = AutoMod.objects.first().created_by reports = automod_users(reporter) + automod_statuses(reporter) - if reports: - admins = User.objects.filter( - models.Q(user_permissions__name__in=["moderate_user", "moderate_post"]) - | models.Q(is_superuser=True) - ).all() - notification_model = apps.get_model( - "bookwyrm", "Notification", require_ready=True - ) + if not reports: + return + + admins = User.objects.filter( + models.Q(user_permissions__name__in=["moderate_user", "moderate_post"]) + | models.Q(is_superuser=True) + ).all() + notification_model = apps.get_model("bookwyrm", "Notification", require_ready=True) + with transaction.atomic(): for admin in admins: - notification_model.objects.bulk_create( - [ - notification_model( - user=admin, - related_report=r, - notification_type="REPORT", - ) - for r in reports - ] + notification, _ = notification_model.objects.get_or_create( + user=admin, notification_type=notification_model.REPORT, read=False ) + notification.related_repors.add(reports) def automod_users(reporter): diff --git a/bookwyrm/models/base_model.py b/bookwyrm/models/base_model.py index eeb2e940d..3ac220bc4 100644 --- a/bookwyrm/models/base_model.py +++ b/bookwyrm/models/base_model.py @@ -132,7 +132,7 @@ class BookWyrmModel(models.Model): return # but generally moderators can delete other people's stuff - if self.user == viewer or viewer.has_perm("moderate_post"): + if self.user == viewer or viewer.has_perm("bookwyrm.moderate_post"): return raise PermissionDenied() diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index 62c61cc40..785f3397c 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -16,7 +16,7 @@ from django.utils.encoding import filepath_to_uri from bookwyrm import activitypub from bookwyrm.connectors import get_image -from bookwyrm.sanitize_html import InputHtmlParser +from bookwyrm.utils.sanitizer import clean from bookwyrm.settings import MEDIA_FULL_URL @@ -497,9 +497,7 @@ class HtmlField(ActivitypubFieldMixin, models.TextField): def field_from_activity(self, value): if not value or value == MISSING: return None - sanitizer = InputHtmlParser() - sanitizer.feed(value) - return sanitizer.get_output() + return clean(value) class ArrayField(ActivitypubFieldMixin, DjangoArrayField): diff --git a/bookwyrm/models/group.py b/bookwyrm/models/group.py index 05ed39a27..003b23d02 100644 --- a/bookwyrm/models/group.py +++ b/bookwyrm/models/group.py @@ -140,16 +140,6 @@ class GroupMemberInvitation(models.Model): # make an invitation super().save(*args, **kwargs) - # now send the invite - model = apps.get_model("bookwyrm.Notification", require_ready=True) - notification_type = "INVITE" - model.objects.create( - user=self.user, - related_user=self.group.user, - related_group=self.group, - notification_type=notification_type, - ) - @transaction.atomic def accept(self): """turn this request into the real deal""" @@ -157,25 +147,24 @@ class GroupMemberInvitation(models.Model): model = apps.get_model("bookwyrm.Notification", require_ready=True) # tell the group owner - model.objects.create( - user=self.group.user, - related_user=self.user, + model.notify( + self.group.user, + self.user, related_group=self.group, - notification_type="ACCEPT", + notification_type=model.ACCEPT, ) # let the other members know about it for membership in self.group.memberships.all(): member = membership.user if member not in (self.user, self.group.user): - model.objects.create( - user=member, - related_user=self.user, + model.notify( + member, + self.user, related_group=self.group, - notification_type="JOIN", + notification_type=model.JOIN, ) def reject(self): """generate a Reject for this membership request""" - self.delete() diff --git a/bookwyrm/models/link.py b/bookwyrm/models/link.py index 0e4148ddd..56b096bc2 100644 --- a/bookwyrm/models/link.py +++ b/bookwyrm/models/link.py @@ -84,7 +84,7 @@ class LinkDomain(BookWyrmModel): ) def raise_not_editable(self, viewer): - if viewer.has_perm("moderate_post"): + if viewer.has_perm("bookwyrm.moderate_post"): return raise PermissionDenied() diff --git a/bookwyrm/models/list.py b/bookwyrm/models/list.py index ea524cc54..63dd5b23f 100644 --- a/bookwyrm/models/list.py +++ b/bookwyrm/models/list.py @@ -1,7 +1,6 @@ """ make a list of books!! """ import uuid -from django.apps import apps from django.core.exceptions import PermissionDenied from django.db import models from django.db.models import Q @@ -129,7 +128,7 @@ class List(OrderedCollectionMixin, BookWyrmModel): """on save, update embed_key and avoid clash with existing code""" if not self.embed_key: self.embed_key = uuid.uuid4() - return super().save(*args, **kwargs) + super().save(*args, **kwargs) class ListItem(CollectionItemMixin, BookWyrmModel): @@ -151,33 +150,11 @@ class ListItem(CollectionItemMixin, BookWyrmModel): collection_field = "book_list" def save(self, *args, **kwargs): - """create a notification too""" - created = not bool(self.id) + """Update the list's date""" super().save(*args, **kwargs) # tick the updated date on the parent list self.book_list.updated_date = timezone.now() - self.book_list.save(broadcast=False) - - list_owner = self.book_list.user - model = apps.get_model("bookwyrm.Notification", require_ready=True) - # create a notification if somoene ELSE added to a local user's list - if created and list_owner.local and list_owner != self.user: - model.objects.create( - user=list_owner, - related_user=self.user, - related_list_item=self, - notification_type="ADD", - ) - - if self.book_list.group: - for membership in self.book_list.group.memberships.all(): - if membership.user != self.user: - model.objects.create( - user=membership.user, - related_user=self.user, - related_list_item=self, - notification_type="ADD", - ) + self.book_list.save(broadcast=False, update_fields=["updated_date"]) def raise_not_deletable(self, viewer): """the associated user OR the list owner can delete""" diff --git a/bookwyrm/models/notification.py b/bookwyrm/models/notification.py index 417bf7591..b0b75a169 100644 --- a/bookwyrm/models/notification.py +++ b/bookwyrm/models/notification.py @@ -1,77 +1,125 @@ """ alert a user to activity """ -from django.db import models +from django.db import models, transaction from django.dispatch import receiver from .base_model import BookWyrmModel -from . import Boost, Favorite, ImportJob, Report, Status, User - -# pylint: disable=line-too-long -NotificationType = models.TextChoices( - "NotificationType", - "FAVORITE REPLY MENTION TAG FOLLOW FOLLOW_REQUEST BOOST IMPORT ADD REPORT INVITE ACCEPT JOIN LEAVE REMOVE GROUP_PRIVACY GROUP_NAME GROUP_DESCRIPTION", -) +from . import Boost, Favorite, GroupMemberInvitation, ImportJob, ListItem, Report +from . import Status, User, UserFollowRequest class Notification(BookWyrmModel): """you've been tagged, liked, followed, etc""" + # Status interactions + FAVORITE = "FAVORITE" + BOOST = "BOOST" + REPLY = "REPLY" + MENTION = "MENTION" + TAG = "TAG" + + # Relationships + FOLLOW = "FOLLOW" + FOLLOW_REQUEST = "FOLLOW_REQUEST" + + # Imports + IMPORT = "IMPORT" + + # List activity + ADD = "ADD" + + # Admin + REPORT = "REPORT" + + # Groups + INVITE = "INVITE" + ACCEPT = "ACCEPT" + JOIN = "JOIN" + LEAVE = "LEAVE" + REMOVE = "REMOVE" + GROUP_PRIVACY = "GROUP_PRIVACY" + GROUP_NAME = "GROUP_NAME" + GROUP_DESCRIPTION = "GROUP_DESCRIPTION" + + # pylint: disable=line-too-long + NotificationType = models.TextChoices( + # there has got be a better way to do this + "NotificationType", + f"{FAVORITE} {REPLY} {MENTION} {TAG} {FOLLOW} {FOLLOW_REQUEST} {BOOST} {IMPORT} {ADD} {REPORT} {INVITE} {ACCEPT} {JOIN} {LEAVE} {REMOVE} {GROUP_PRIVACY} {GROUP_NAME} {GROUP_DESCRIPTION}", + ) + user = models.ForeignKey("User", on_delete=models.CASCADE) - related_book = models.ForeignKey("Edition", on_delete=models.CASCADE, null=True) - related_user = models.ForeignKey( - "User", on_delete=models.CASCADE, null=True, related_name="related_user" + read = models.BooleanField(default=False) + notification_type = models.CharField( + max_length=255, choices=NotificationType.choices + ) + + related_users = models.ManyToManyField( + "User", symmetrical=False, related_name="notifications" ) related_group = models.ForeignKey( "Group", on_delete=models.CASCADE, null=True, related_name="notifications" ) related_status = models.ForeignKey("Status", on_delete=models.CASCADE, null=True) related_import = models.ForeignKey("ImportJob", on_delete=models.CASCADE, null=True) - related_list_item = models.ForeignKey( - "ListItem", on_delete=models.CASCADE, null=True - ) - related_report = models.ForeignKey("Report", on_delete=models.CASCADE, null=True) - read = models.BooleanField(default=False) - notification_type = models.CharField( - max_length=255, choices=NotificationType.choices + related_list_items = models.ManyToManyField( + "ListItem", symmetrical=False, related_name="notifications" ) + related_reports = models.ManyToManyField("Report", symmetrical=False) - def save(self, *args, **kwargs): - """save, but don't make dupes""" - # there's probably a better way to do this - if self.__class__.objects.filter( - user=self.user, - related_book=self.related_book, - related_user=self.related_user, - related_group=self.related_group, - related_status=self.related_status, - related_import=self.related_import, - related_list_item=self.related_list_item, - related_report=self.related_report, - notification_type=self.notification_type, - ).exists(): + @classmethod + @transaction.atomic + def notify(cls, user, related_user, **kwargs): + """Create a notification""" + if related_user and (not user.local or user == related_user): return - super().save(*args, **kwargs) + notification = cls.objects.filter(user=user, **kwargs).first() + if not notification: + notification = cls.objects.create(user=user, **kwargs) + if related_user: + notification.related_users.add(related_user) + notification.read = False + notification.save() - class Meta: - """checks if notifcation is in enum list for valid types""" - - constraints = [ - models.CheckConstraint( - check=models.Q(notification_type__in=NotificationType.values), - name="notification_type_valid", + @classmethod + @transaction.atomic + def notify_list_item(cls, user, list_item): + """Group the notifications around the list items, not the user""" + related_user = list_item.user + notification = cls.objects.filter( + user=user, + related_users=related_user, + related_list_items__book_list=list_item.book_list, + notification_type=Notification.ADD, + ).first() + if not notification: + notification = cls.objects.create( + user=user, notification_type=Notification.ADD ) - ] + notification.related_users.add(related_user) + notification.related_list_items.add(list_item) + notification.read = False + notification.save() + + @classmethod + def unnotify(cls, user, related_user, **kwargs): + """Remove a user from a notification and delete it if that was the only user""" + try: + notification = cls.objects.filter(user=user, **kwargs).get() + except Notification.DoesNotExist: + return + notification.related_users.remove(related_user) + if not notification.related_users.count(): + notification.delete() @receiver(models.signals.post_save, sender=Favorite) # pylint: disable=unused-argument def notify_on_fav(sender, instance, *args, **kwargs): """someone liked your content, you ARE loved""" - if not instance.status.user.local or instance.status.user == instance.user: - return - Notification.objects.create( - user=instance.status.user, - notification_type="FAVORITE", - related_user=instance.user, + Notification.notify( + instance.status.user, + instance.user, related_status=instance.status, + notification_type=Notification.FAVORITE, ) @@ -81,15 +129,16 @@ def notify_on_unfav(sender, instance, *args, **kwargs): """oops, didn't like that after all""" if not instance.status.user.local: return - Notification.objects.filter( - user=instance.status.user, - related_user=instance.user, + Notification.unnotify( + instance.status.user, + instance.user, related_status=instance.status, - notification_type="FAVORITE", - ).delete() + notification_type=Notification.FAVORITE, + ) @receiver(models.signals.post_save) +@transaction.atomic # pylint: disable=unused-argument def notify_user_on_mention(sender, instance, *args, **kwargs): """creating and deleting statuses with @ mentions and replies""" @@ -105,22 +154,23 @@ def notify_user_on_mention(sender, instance, *args, **kwargs): and instance.reply_parent.user != instance.user and instance.reply_parent.user.local ): - Notification.objects.create( - user=instance.reply_parent.user, - notification_type="REPLY", - related_user=instance.user, + Notification.notify( + instance.reply_parent.user, + instance.user, related_status=instance, + notification_type=Notification.REPLY, ) + for mention_user in instance.mention_users.all(): # avoid double-notifying about this status if not mention_user.local or ( instance.reply_parent and mention_user == instance.reply_parent.user ): continue - Notification.objects.create( - user=mention_user, - notification_type="MENTION", - related_user=instance.user, + Notification.notify( + mention_user, + instance.user, + notification_type=Notification.MENTION, related_status=instance, ) @@ -135,11 +185,11 @@ def notify_user_on_boost(sender, instance, *args, **kwargs): ): return - Notification.objects.create( - user=instance.boosted_status.user, + Notification.notify( + instance.boosted_status.user, + instance.user, related_status=instance.boosted_status, - related_user=instance.user, - notification_type="BOOST", + notification_type=Notification.BOOST, ) @@ -147,12 +197,12 @@ def notify_user_on_boost(sender, instance, *args, **kwargs): # pylint: disable=unused-argument def notify_user_on_unboost(sender, instance, *args, **kwargs): """unboosting a status""" - Notification.objects.filter( - user=instance.boosted_status.user, + Notification.unnotify( + instance.boosted_status.user, + instance.user, related_status=instance.boosted_status, - related_user=instance.user, - notification_type="BOOST", - ).delete() + notification_type=Notification.BOOST, + ) @receiver(models.signals.post_save, sender=ImportJob) @@ -166,23 +216,94 @@ def notify_user_on_import_complete( return Notification.objects.create( user=instance.user, - notification_type="IMPORT", + notification_type=Notification.IMPORT, related_import=instance, ) @receiver(models.signals.post_save, sender=Report) +@transaction.atomic # pylint: disable=unused-argument -def notify_admins_on_report(sender, instance, *args, **kwargs): +def notify_admins_on_report(sender, instance, created, *args, **kwargs): """something is up, make sure the admins know""" + if not created: + # otherwise you'll get a notification when you resolve a report + return + # moderators and superusers should be notified admins = User.objects.filter( models.Q(user_permissions__name__in=["moderate_user", "moderate_post"]) | models.Q(is_superuser=True) ).all() for admin in admins: - Notification.objects.create( + notification, _ = Notification.objects.get_or_create( user=admin, - related_report=instance, - notification_type="REPORT", + notification_type=Notification.REPORT, + read=False, + ) + notification.related_reports.add(instance) + + +@receiver(models.signals.post_save, sender=GroupMemberInvitation) +# pylint: disable=unused-argument +def notify_user_on_group_invite(sender, instance, *args, **kwargs): + """Cool kids club here we come""" + Notification.notify( + instance.user, + instance.group.user, + related_group=instance.group, + notification_type=Notification.INVITE, + ) + + +@receiver(models.signals.post_save, sender=ListItem) +@transaction.atomic +# pylint: disable=unused-argument +def notify_user_on_list_item_add(sender, instance, created, *args, **kwargs): + """Someone added to your list""" + if not created: + return + + list_owner = instance.book_list.user + # create a notification if somoene ELSE added to a local user's list + if list_owner.local and list_owner != instance.user: + # keep the related_user singular, group the items + Notification.notify_list_item(list_owner, instance) + + if instance.book_list.group: + for membership in instance.book_list.group.memberships.all(): + if membership.user != instance.user: + Notification.notify_list_item(membership.user, instance) + + +@receiver(models.signals.post_save, sender=UserFollowRequest) +@transaction.atomic +# pylint: disable=unused-argument +def notify_user_on_follow(sender, instance, created, *args, **kwargs): + """Someone added to your list""" + if not created or not instance.user_object.local: + return + + manually_approves = instance.user_object.manually_approves_followers + if manually_approves: + # don't group notifications + notification = Notification.objects.filter( + user=instance.user_object, + related_users=instance.user_subject, + notification_type=Notification.FOLLOW_REQUEST, + ).first() + if not notification: + notification = Notification.objects.create( + user=instance.user_object, notification_type=Notification.FOLLOW_REQUEST + ) + notification.related_users.set([instance.user_subject]) + notification.read = False + notification.save() + else: + # Only group unread follows + Notification.notify( + instance.user_object, + instance.user_subject, + notification_type=Notification.FOLLOW, + read=False, ) diff --git a/bookwyrm/models/relationship.py b/bookwyrm/models/relationship.py index 171f45840..082294c0e 100644 --- a/bookwyrm/models/relationship.py +++ b/bookwyrm/models/relationship.py @@ -1,5 +1,4 @@ """ defines relationships between users """ -from django.apps import apps from django.core.cache import cache from django.db import models, transaction, IntegrityError from django.db.models import Q @@ -148,14 +147,6 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship): if not manually_approves: self.accept() - model = apps.get_model("bookwyrm.Notification", require_ready=True) - notification_type = "FOLLOW_REQUEST" if manually_approves else "FOLLOW" - model.objects.create( - user=self.user_object, - related_user=self.user_subject, - notification_type=notification_type, - ) - def get_accept_reject_id(self, status): """get id for sending an accept or reject of a local user""" @@ -218,7 +209,7 @@ def clear_cache(user_subject, user_object): """clear relationship cache""" cache.delete_many( [ - f"relationship-{user_subject.id}-{user_object.id}", - f"relationship-{user_object.id}-{user_subject.id}", + f"cached-relationship-{user_subject.id}-{user_object.id}", + f"cached-relationship-{user_object.id}-{user_subject.id}", ] ) diff --git a/bookwyrm/models/report.py b/bookwyrm/models/report.py index bf3184f52..d161c0349 100644 --- a/bookwyrm/models/report.py +++ b/bookwyrm/models/report.py @@ -11,7 +11,7 @@ class Report(BookWyrmModel): "User", related_name="reporter", on_delete=models.PROTECT ) note = models.TextField(null=True, blank=True) - user = models.ForeignKey("User", on_delete=models.PROTECT) + user = models.ForeignKey("User", on_delete=models.PROTECT, null=True, blank=True) status = models.ForeignKey( "Status", null=True, diff --git a/bookwyrm/models/shelf.py b/bookwyrm/models/shelf.py index 3291d5653..d955e8d07 100644 --- a/bookwyrm/models/shelf.py +++ b/bookwyrm/models/shelf.py @@ -103,12 +103,25 @@ class ShelfBook(CollectionItemMixin, BookWyrmModel): if not self.user: self.user = self.shelf.user if self.id and self.user.local: - cache.delete(f"book-on-shelf-{self.book.id}-{self.shelf.id}") + # remove all caches related to all editions of this book + cache.delete_many( + [ + f"book-on-shelf-{book.id}-{self.shelf.id}" + for book in self.book.parent_work.editions.all() + ] + ) super().save(*args, **kwargs) def delete(self, *args, **kwargs): if self.id and self.user.local: - cache.delete(f"book-on-shelf-{self.book.id}-{self.shelf.id}") + cache.delete_many( + [ + f"book-on-shelf-{book}-{self.shelf.id}" + for book in self.book.parent_work.editions.values_list( + "id", flat=True + ) + ] + ) super().delete(*args, **kwargs) class Meta: diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index 1e31de774..3949e09a9 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -303,10 +303,17 @@ class Comment(BookStatus): @property def pure_content(self): """indicate the book in question for mastodon (or w/e) users""" - return ( - f'{self.content}

(comment on ' - f'"{self.book.title}")

' - ) + if self.progress_mode == "PG" and self.progress and (self.progress > 0): + return_value = ( + f'{self.content}

(comment on ' + f'"{self.book.title}", page {self.progress})

' + ) + else: + return_value = ( + f'{self.content}

(comment on ' + f'"{self.book.title}")

' + ) + return return_value activity_serializer = activitypub.Comment @@ -332,10 +339,17 @@ class Quotation(BookStatus): """indicate the book in question for mastodon (or w/e) users""" quote = re.sub(r"^

", '

"', self.quote) quote = re.sub(r"

$", '"

', quote) - return ( - f'{quote}

-- ' - f'"{self.book.title}"

{self.content}' - ) + if self.position_mode == "PG" and self.position and (self.position > 0): + return_value = ( + f'{quote}

-- ' + f'"{self.book.title}", page {self.position}

{self.content}' + ) + else: + return_value = ( + f'{quote}

-- ' + f'"{self.book.title}"

{self.content}' + ) + return return_value activity_serializer = activitypub.Quotation @@ -374,7 +388,7 @@ class Review(BookStatus): def save(self, *args, **kwargs): """clear rating caches""" if self.book.parent_work: - cache.delete(f"book-rating-{self.book.parent_work.id}-*") + cache.delete(f"book-rating-{self.book.parent_work.id}") super().save(*args, **kwargs) diff --git a/bookwyrm/sanitize_html.py b/bookwyrm/sanitize_html.py deleted file mode 100644 index 4edd2818e..000000000 --- a/bookwyrm/sanitize_html.py +++ /dev/null @@ -1,71 +0,0 @@ -""" html parser to clean up incoming text from unknown sources """ -from html.parser import HTMLParser - - -class InputHtmlParser(HTMLParser): # pylint: disable=abstract-method - """Removes any html that isn't allowed_tagsed from a block""" - - def __init__(self): - HTMLParser.__init__(self) - self.allowed_tags = [ - "p", - "blockquote", - "br", - "b", - "i", - "strong", - "em", - "pre", - "a", - "span", - "ul", - "ol", - "li", - ] - self.allowed_attrs = ["href", "rel", "src", "alt"] - self.tag_stack = [] - self.output = [] - # if the html appears invalid, we just won't allow any at all - self.allow_html = True - - def handle_starttag(self, tag, attrs): - """check if the tag is valid""" - if self.allow_html and tag in self.allowed_tags: - allowed_attrs = " ".join( - f'{a}="{v}"' for a, v in attrs if a in self.allowed_attrs - ) - reconstructed = f"<{tag}" - if allowed_attrs: - reconstructed += " " + allowed_attrs - reconstructed += ">" - self.output.append(("tag", reconstructed)) - self.tag_stack.append(tag) - else: - self.output.append(("data", "")) - - def handle_endtag(self, tag): - """keep the close tag""" - if not self.allow_html or tag not in self.allowed_tags: - self.output.append(("data", "")) - return - - if not self.tag_stack or self.tag_stack[-1] != tag: - # the end tag doesn't match the most recent start tag - self.allow_html = False - self.output.append(("data", "")) - return - - self.tag_stack = self.tag_stack[:-1] - self.output.append(("tag", f"")) - - def handle_data(self, data): - """extract the answer, if we're in an answer tag""" - self.output.append(("data", data)) - - def get_output(self): - """convert the output from a list of tuples to a string""" - if self.tag_stack: - self.allow_html = False - if not self.allow_html: - return "".join(v for (k, v) in self.output if k == "data") - return "".join(v for (k, v) in self.output) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index ae7864f12..279804e55 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -11,7 +11,7 @@ from django.utils.translation import gettext_lazy as _ env = Env() env.read_env() DOMAIN = env("DOMAIN") -VERSION = "0.4.0" +VERSION = "0.4.3" RELEASE_API = env( "RELEASE_API", @@ -217,7 +217,7 @@ STREAMS = [ # Search configuration # total time in seconds that the instance will spend searching connectors -SEARCH_TIMEOUT = int(env("SEARCH_TIMEOUT", 15)) +SEARCH_TIMEOUT = int(env("SEARCH_TIMEOUT", 8)) # timeout for a query to an individual connector QUERY_TIMEOUT = int(env("QUERY_TIMEOUT", 5)) diff --git a/bookwyrm/static/css/bookwyrm/components/_book_list.scss b/bookwyrm/static/css/bookwyrm/components/_book_list.scss index 0b1093489..3377de6b3 100644 --- a/bookwyrm/static/css/bookwyrm/components/_book_list.scss +++ b/bookwyrm/static/css/bookwyrm/components/_book_list.scss @@ -6,11 +6,11 @@ ol.ordered-list { counter-reset: list-counter; } -ol.ordered-list li { +ol.ordered-list > li { counter-increment: list-counter; } -ol.ordered-list li::before { +ol.ordered-list > li::before { content: counter(list-counter); position: absolute; left: -20px; diff --git a/bookwyrm/status.py b/bookwyrm/status.py index 09fbdc06e..de7682ee7 100644 --- a/bookwyrm/status.py +++ b/bookwyrm/status.py @@ -2,15 +2,13 @@ from django.db import transaction from bookwyrm import models -from bookwyrm.sanitize_html import InputHtmlParser +from bookwyrm.utils import sanitizer def create_generated_note(user, content, mention_books=None, privacy="public"): """a note created by the app about user activity""" # sanitize input html - parser = InputHtmlParser() - parser.feed(content) - content = parser.get_output() + content = sanitizer.clean(content) with transaction.atomic(): # create but don't save diff --git a/bookwyrm/templates/about/layout.html b/bookwyrm/templates/about/layout.html index 458e4b1d1..e921fcd29 100644 --- a/bookwyrm/templates/about/layout.html +++ b/bookwyrm/templates/about/layout.html @@ -50,7 +50,7 @@ -
+
{% block about_content %}{% endblock %}
diff --git a/bookwyrm/templates/book/file_links/edit_links.html b/bookwyrm/templates/book/file_links/edit_links.html index 44206ef77..fb722753f 100644 --- a/bookwyrm/templates/book/file_links/edit_links.html +++ b/bookwyrm/templates/book/file_links/edit_links.html @@ -42,7 +42,11 @@ {{ link.url }} + {% if link.added_by %} {{ link.added_by.display_name }} + {% else %} + {% trans "Unknown user" %} + {% endif %} {{ link.filelink.filetype }} @@ -50,7 +54,7 @@ {{ link.domain.name }}

- {% trans "Report spam" %} + {% trans "Report spam" %}

diff --git a/bookwyrm/templates/book/file_links/verification_modal.html b/bookwyrm/templates/book/file_links/verification_modal.html index 01f17f965..75678763f 100644 --- a/bookwyrm/templates/book/file_links/verification_modal.html +++ b/bookwyrm/templates/book/file_links/verification_modal.html @@ -19,7 +19,7 @@ Is that where you'd like to go? {% block modal-footer %} {% if request.user.is_authenticated %} diff --git a/bookwyrm/templates/confirm_email/resend_modal.html b/bookwyrm/templates/confirm_email/resend_modal.html index beb9318a9..4d155cbb6 100644 --- a/bookwyrm/templates/confirm_email/resend_modal.html +++ b/bookwyrm/templates/confirm_email/resend_modal.html @@ -19,16 +19,8 @@ name="email" class="input" id="email" - aria-described-by="id_email_errors" required > - {% if error %} -
-

- {% trans "No user matching this email address found." %} -

-
- {% endif %} {% endblock %} diff --git a/bookwyrm/templates/email/moderation_report/html_content.html b/bookwyrm/templates/email/moderation_report/html_content.html index 10df380f2..3828ff70c 100644 --- a/bookwyrm/templates/email/moderation_report/html_content.html +++ b/bookwyrm/templates/email/moderation_report/html_content.html @@ -3,7 +3,19 @@ {% block content %}

-{% blocktrans %}@{{ reporter }} has flagged behavior by @{{ reportee }} for moderation. {% endblocktrans %} +{% if report_link %} + + {% blocktrans trimmed %} + @{{ reporter }} has flagged a link domain for moderation. + {% endblocktrans %} + +{% else %} + + {% blocktrans trimmed %} + @{{ reporter }} has flagged behavior by @{{ reportee }} for moderation. + {% endblocktrans %} + +{% endif %}

{% trans "View report" as text %} diff --git a/bookwyrm/templates/email/moderation_report/text_content.html b/bookwyrm/templates/email/moderation_report/text_content.html index 57d37d446..764a3c72a 100644 --- a/bookwyrm/templates/email/moderation_report/text_content.html +++ b/bookwyrm/templates/email/moderation_report/text_content.html @@ -2,7 +2,15 @@ {% load i18n %} {% block content %} -{% blocktrans %}@{{ reporter}} has flagged behavior by @{{ reportee }} for moderation. {% endblocktrans %} +{% if report_link %} +{% blocktrans trimmed %} +@{{ reporter }} has flagged a link domain for moderation. +{% endblocktrans %} +{% else %} +{% blocktrans trimmed %} +@{{ reporter }} has flagged behavior by @{{ reportee }} for moderation. +{% endblocktrans %} +{% endif %} {% trans "View report" %} {{ report_link }} diff --git a/bookwyrm/templates/feed/direct_messages.html b/bookwyrm/templates/feed/direct_messages.html index 77f9aac19..115e1e6f4 100644 --- a/bookwyrm/templates/feed/direct_messages.html +++ b/bookwyrm/templates/feed/direct_messages.html @@ -14,7 +14,7 @@
- {% include 'snippets/create_status/status.html' with type="direct" uuid=1 mention=partner no_script=True %} + {% include 'snippets/create_status/status.html' with type="direct" uuid=1 mention=partner %}
diff --git a/bookwyrm/templates/landing/password_reset.html b/bookwyrm/templates/landing/password_reset.html index 8348efd4f..786eaa0ab 100644 --- a/bookwyrm/templates/landing/password_reset.html +++ b/bookwyrm/templates/landing/password_reset.html @@ -26,7 +26,16 @@ {% trans "Password:" %}
- + + {% include 'snippets/form_errors.html' with errors_list=form.password.errors id="desc_password" %}
@@ -34,7 +43,8 @@ {% trans "Confirm password:" %}
- + {{ form.confirm_password }} + {% include 'snippets/form_errors.html' with errors_list=form.confirm_password.errors id="desc_confirm_password" %}
diff --git a/bookwyrm/templates/landing/password_reset_request.html b/bookwyrm/templates/landing/password_reset_request.html index 5d877442f..b06668e57 100644 --- a/bookwyrm/templates/landing/password_reset_request.html +++ b/bookwyrm/templates/landing/password_reset_request.html @@ -9,7 +9,13 @@

{% trans "Reset Password" %}

- {% if message %}

{{ message }}

{% endif %} + {% if sent_message %} +

+ {% blocktrans trimmed %} + A password reset link will be sent to {{ email }} if there is an account using that email address. + {% endblocktrans %} +

+ {% endif %}

{% trans "A link to reset your password will be sent to your email address" %}

diff --git a/bookwyrm/templates/notifications/items/accept.html b/bookwyrm/templates/notifications/items/accept.html index 5f26008f4..f97c93c1c 100644 --- a/bookwyrm/templates/notifications/items/accept.html +++ b/bookwyrm/templates/notifications/items/accept.html @@ -13,8 +13,34 @@ {% block description %} +{% if other_user_count == 0 %} + {% blocktrans trimmed with group_name=notification.related_group.name group_path=notification.related_group.local_path %} - accepted your invitation to join group "{{ group_name }}" + {{ related_user }} + accepted your invitation to join group + "{{ group_name }}" {% endblocktrans %} +{% elif other_user_count == 1 %} + + {% blocktrans trimmed with group_name=notification.related_group.name group_path=notification.related_group.local_path %} + {{ related_user }} + and + {{ second_user }} + accepted your invitation to join group + "{{ group_name }}" + {% endblocktrans %} + +{% else %} + + {% blocktrans trimmed with group_name=notification.related_group.name group_path=notification.related_group.local_path %} + {{ related_user }} + and + {{ other_user_display_count }} others + accepted your invitation to join group + "{{ group_name }}" + {% endblocktrans %} + +{% endif %} + {% endblock %} diff --git a/bookwyrm/templates/notifications/items/add.html b/bookwyrm/templates/notifications/items/add.html index 6a0183ebe..fdd480ee1 100644 --- a/bookwyrm/templates/notifications/items/add.html +++ b/bookwyrm/templates/notifications/items/add.html @@ -1,14 +1,16 @@ {% extends 'notifications/items/layout.html' %} - {% load i18n %} {% load utilities %} +{% load humanize %} {% block primary_link %}{% spaceless %} -{% if notification.related_list_item.approved %} - {{ notification.related_list_item.book_list.local_path }} +{% with related_list=notification.related_list_items.first.book_list %} +{% if related_list.curation != "curated" %} + {{ related_list.local_path }} {% else %} - {% url 'list-curate' notification.related_list_item.book_list.id %} + {% url 'list-curate' related_list.id %} {% endif %} +{% endwith %} {% endspaceless %}{% endblock %} {% block icon %} @@ -16,25 +18,89 @@ {% endblock %} {% block description %} -{% with book_path=notification.related_list_item.book.local_path %} -{% with book_title=notification.related_list_item.book|book_title %} -{% with list_name=notification.related_list_item.book_list.name %} +{% with related_list=notification.related_list_items.first.book_list %} +{% with book_path=notification.related_list_items.first.book.local_path %} +{% with book_title=notification.related_list_items.first.book|book_title %} +{% with second_book_path=notification.related_list_items.all.1.book.local_path %} +{% with second_book_title=notification.related_list_items.all.1.book|book_title %} +{% with list_name=related_list.name %} - {% if notification.related_list_item.approved %} - {% blocktrans trimmed with list_path=notification.related_list_item.book_list.local_path %} +{% url 'list' related_list.id as list_path %} +{% url 'list-curate' related_list.id as list_curate_path %} - added {{ book_title }} to your list "{{ list_name }}" - - {% endblocktrans %} +{% if notification.related_list_items.count == 1 %} + {% if related_list.curation != "curated" %} + {% blocktrans trimmed %} + {{ related_user }} + added {{ book_title }} + to your list "{{ list_name }}" + {% endblocktrans %} {% else %} - {% url 'list-curate' notification.related_list_item.book_list.id as list_path %} - {% blocktrans trimmed with list_path=list_path %} - - suggested adding {{ book_title }} to your list "{{ list_name }}" - - {% endblocktrans %} + {% blocktrans trimmed %} + {{ related_user }} + suggested adding {{ book_title }} + to your list "{{ list_name }}" + {% endblocktrans %} {% endif %} +{% elif notification.related_list_items.count == 2 %} + {% if related_list.curation != "curated" %} + {% blocktrans trimmed %} + {{ related_user }} + added {{ book_title }} + and {{ second_book_title }} + to your list "{{ list_name }}" + {% endblocktrans %} + {% else %} + {% blocktrans trimmed %} + {{ related_user }} + suggested adding {{ book_title }} + and {{ second_book_title }} + to your list "{{ list_name }}" + {% endblocktrans %} + {% endif %} +{% else %} + {% with count=notification.related_list_items.count|add:"-2" %} + {% with display_count=count|intcomma %} + {% if related_list.curation != "curated" %} + {% blocktrans trimmed count counter=count %} + {{ related_user }} + added {{ book_title }}, + {{ second_book_title }}, + and {{ display_count }} other book + to your list "{{ list_name }}" + {% plural %} + {{ related_user }} + added {{ book_title }}, + {{ second_book_title }}, + and {{ display_count }} other books + to your list "{{ list_name }}" + {% endblocktrans %} + + {% else %} + + {% blocktrans trimmed count counter=count %} + {{ related_user }} + suggested adding {{ book_title }}, + {{ second_book_title }}, + and {{ display_count }} other book + to your list "{{ list_name }}" + {% plural %} + {{ related_user }} + suggested adding {{ book_title }}, + {{ second_book_title }}, + and {{ display_count }} other books + to your list "{{ list_name }}" + {% endblocktrans %} + + {% endif %} + {% endwith %} + {% endwith %} +{% endif %} + +{% endwith %} +{% endwith %} +{% endwith %} {% endwith %} {% endwith %} {% endwith %} diff --git a/bookwyrm/templates/notifications/items/boost.html b/bookwyrm/templates/notifications/items/boost.html index 5e3e11513..2c2bf695b 100644 --- a/bookwyrm/templates/notifications/items/boost.html +++ b/bookwyrm/templates/notifications/items/boost.html @@ -16,29 +16,97 @@ {% with related_status.local_path as related_path %} {% if related_status.status_type == 'Review' %} - {% blocktrans trimmed %} + {% if other_user_count == 0 %} - boosted your review of {{ book_title }} + {% blocktrans trimmed %} + {{ related_user }} boosted your review of {{ book_title }} + {% endblocktrans %} - {% endblocktrans %} + {% elif other_user_count == 1 %} + + {% blocktrans trimmed %} + {{ related_user }} + and + {{ second_user }} + boosted your review of {{ book_title }} + {% endblocktrans %} + + {% else %} + + {% blocktrans trimmed %} + {{ related_user }} and {{ other_user_display_count }} others boosted your review of {{ book_title }} + {% endblocktrans %} + + {% endif %} {% elif related_status.status_type == 'Comment' %} - {% blocktrans trimmed %} + {% if other_user_count == 0 %} - boosted your comment on{{ book_title }} + {% blocktrans trimmed %} + {{ related_user }} boosted your comment on {{ book_title }} + {% endblocktrans %} - {% endblocktrans %} + {% elif other_user_count == 1 %} + + {% blocktrans trimmed %} + {{ related_user }} + and + {{ second_user }} + boosted your comment on {{ book_title }} + {% endblocktrans %} + + {% else %} + + {% blocktrans trimmed %} + {{ related_user }} and {{ other_user_display_count }} others boosted your comment on {{ book_title }} + {% endblocktrans %} + + {% endif %} {% elif related_status.status_type == 'Quotation' %} - {% blocktrans trimmed %} + {% if other_user_count == 0 %} - boosted your quote from {{ book_title }} + {% blocktrans trimmed %} + {{ related_user }} boosted your quote from {{ book_title }} + {% endblocktrans %} - {% endblocktrans %} + {% elif other_user_count == 1 %} + + {% blocktrans trimmed %} + {{ related_user }} + and + {{ second_user }} + boosted your quote from {{ book_title }} + {% endblocktrans %} + + {% else %} + + {% blocktrans trimmed %} + {{ related_user }} and {{ other_user_display_count }} others boosted your quote from {{ book_title }} + {% endblocktrans %} + + {% endif %} {% else %} - {% blocktrans trimmed %} + {% if other_user_count == 0 %} - boosted your status + {% blocktrans trimmed %} + {{ related_user }} boosted your status + {% endblocktrans %} - {% endblocktrans %} + {% elif other_user_count == 1 %} + + {% blocktrans trimmed %} + {{ related_user }} + and + {{ second_user }} + boosted your status + {% endblocktrans %} + + {% else %} + + {% blocktrans trimmed %} + {{ related_user }} and {{ other_user_display_count }} others boosted your status + {% endblocktrans %} + + {% endif %} {% endif %} {% endwith %} @@ -50,7 +118,7 @@
- {% include 'snippets/status_preview.html' with status=related_status %} + {% include 'notifications/items/status_preview.html' with status=related_status %}
{{ related_status.published_date|timesince }} diff --git a/bookwyrm/templates/notifications/items/fav.html b/bookwyrm/templates/notifications/items/fav.html index eb29ebc26..9cda6b928 100644 --- a/bookwyrm/templates/notifications/items/fav.html +++ b/bookwyrm/templates/notifications/items/fav.html @@ -16,29 +16,98 @@ {% with related_status.local_path as related_path %} {% if related_status.status_type == 'Review' %} - {% blocktrans trimmed %} + {% if other_user_count == 0 %} - liked your review of {{ book_title }} + {% blocktrans trimmed %} + {{ related_user }} liked your review of {{ book_title }} + {% endblocktrans %} - {% endblocktrans %} + {% elif other_user_count == 1 %} + + {% blocktrans trimmed %} + {{ related_user }} + and + {{ second_user }} + liked your review of {{ book_title }} + {% endblocktrans %} + + {% else %} + + {% blocktrans trimmed %} + {{ related_user }} and {{ other_user_display_count }} others liked your review of {{ book_title }} + {% endblocktrans %} + + {% endif %} {% elif related_status.status_type == 'Comment' %} - {% blocktrans trimmed %} + {% if other_user_count == 0 %} - liked your comment on {{ book_title }} + {% blocktrans trimmed %} + {{ related_user }} liked your comment on {{ book_title }} + {% endblocktrans %} - {% endblocktrans %} + {% elif other_user_count == 1 %} + + {% blocktrans trimmed %} + {{ related_user }} + and + {{ second_user }} + liked your comment on {{ book_title }} + {% endblocktrans %} + + {% else %} + + {% blocktrans trimmed %} + {{ related_user }} and {{ other_user_display_count }} others liked your comment on {{ book_title }} + {% endblocktrans %} + + {% endif %} {% elif related_status.status_type == 'Quotation' %} - {% blocktrans trimmed %} + {% if other_user_count == 0 %} - liked your quote from {{ book_title }} + {% blocktrans trimmed %} + {{ related_user }} liked your quote from {{ book_title }} + {% endblocktrans %} - {% endblocktrans %} + {% elif other_user_count == 1 %} + + {% blocktrans trimmed %} + {{ related_user }} + and + {{ second_user }} + liked your quote from {{ book_title }} + {% endblocktrans %} + + {% else %} + + {% blocktrans trimmed %} + {{ related_user }} and {{ other_user_display_count }} others liked your quote from {{ book_title }} + {% endblocktrans %} + + {% endif %} {% else %} - {% blocktrans trimmed %} + {% if other_user_count == 0 %} - liked your status + {% blocktrans trimmed %} + {{ related_user }} liked your status + {% endblocktrans %} + + {% elif other_user_count == 1 %} + + {% blocktrans trimmed %} + {{ related_user }} + and + {{ second_user }} + liked your status + {% endblocktrans %} + + {% else %} + + {% blocktrans trimmed %} + {{ related_user }} and {{ other_user_display_count }} others liked your status + {% endblocktrans %} + + {% endif %} - {% endblocktrans %} {% endif %} {% endwith %} @@ -50,7 +119,7 @@
- {% include 'snippets/status_preview.html' with status=related_status %} + {% include 'notifications/items/status_preview.html' with status=related_status %}
{{ related_status.published_date|timesince }} diff --git a/bookwyrm/templates/notifications/items/follow.html b/bookwyrm/templates/notifications/items/follow.html index 3518e7b1b..7303bb8b8 100644 --- a/bookwyrm/templates/notifications/items/follow.html +++ b/bookwyrm/templates/notifications/items/follow.html @@ -4,7 +4,7 @@ {% load utilities %} {% block primary_link %}{% spaceless %} - {{ notification.related_user.local_path }} +{% url 'user-followers' request.user.localname %} {% endspaceless %}{% endblock %} {% block icon %} @@ -12,6 +12,19 @@ {% endblock %} {% block description %} - {% trans "followed you" %} - {% include 'snippets/follow_button.html' with user=notification.related_user %} +{% if related_user_count == 1 %} + {% blocktrans trimmed %} + {{ related_user }} followed you + {% endblocktrans %} +{% elif related_user_count == 2 %} + {% blocktrans trimmed %} + {{ related_user }} and + {{ second_user }} followed you + {% endblocktrans %} +{% else %} + {% blocktrans trimmed %} + {{ related_user }} and {{ other_user_display_count }} others followed you + {% endblocktrans %} +{% endif %} + {% endblock %} diff --git a/bookwyrm/templates/notifications/items/follow_request.html b/bookwyrm/templates/notifications/items/follow_request.html index 9cec8116a..320c69e43 100644 --- a/bookwyrm/templates/notifications/items/follow_request.html +++ b/bookwyrm/templates/notifications/items/follow_request.html @@ -3,13 +3,19 @@ {% load i18n %} {% load utilities %} +{% block primary_link %}{% spaceless %} +{% url 'user-followers' request.user.localname %} +{% endspaceless %}{% endblock %} + {% block icon %} {% endblock %} {% block description %} - {% trans "sent you a follow request" %} + {% blocktrans trimmed %} + {{ related_user }} sent you a follow request + {% endblocktrans %}
- {% include 'snippets/follow_request_buttons.html' with user=notification.related_user %} + {% include 'snippets/follow_request_buttons.html' with user=notification.related_users.first %}
{% endblock %} diff --git a/bookwyrm/templates/notifications/items/invite.html b/bookwyrm/templates/notifications/items/invite.html index aff416b07..ab92be5a1 100644 --- a/bookwyrm/templates/notifications/items/invite.html +++ b/bookwyrm/templates/notifications/items/invite.html @@ -12,11 +12,15 @@ {% endblock %} {% block description %} + {% blocktrans trimmed with group_name=notification.related_group.name group_path=notification.related_group.local_path %} -invited you to join the group "{{ group_name }}" + {{ related_user }} + invited you to join the group + "{{ group_name }}" {% endblocktrans %} +
{% include 'snippets/join_invitation_buttons.html' with group=notification.related_group %}
-{% endblock %} +{% endblock %} diff --git a/bookwyrm/templates/notifications/items/layout.html b/bookwyrm/templates/notifications/items/layout.html index e7c3b3147..8acbb9fec 100644 --- a/bookwyrm/templates/notifications/items/layout.html +++ b/bookwyrm/templates/notifications/items/layout.html @@ -1,5 +1,9 @@ {% load notification_page_tags %} +{% load humanize %} {% related_status notification as related_status %} + +{% get_related_users notification as related_users %} +{% with related_user_count=notification.related_users.count %}
@@ -9,14 +13,43 @@
+ {% if related_user_count > 1 %} +
+ +
+ {% endif %}
-

- {% if notification.related_user %} - {% include 'snippets/avatar.html' with user=notification.related_user %} - {{ notification.related_user.display_name }} - {% endif %} + {% if related_user_count == 1 %} + {% with user=related_users.0 %} + {% spaceless %} + + {% include 'snippets/avatar.html' with user=user %} + + {% endspaceless %} + {% endwith %} + {% endif %} + + {% with related_user=related_users.0.display_name %} + {% with related_user_link=related_users.0.local_path %} + {% with second_user=related_users.1.display_name %} + {% with second_user_link=related_users.1.local_path %} + {% with other_user_count=related_user_count|add:"-1" %} + {% with other_user_display_count=other_user_count|intcomma %} {% block description %}{% endblock %} -

+ {% endwith %} + {% endwith %} + {% endwith %} + {% endwith %} + {% endwith %} + {% endwith %}
{% if related_status %} @@ -27,4 +60,4 @@
- +{% endwith %} diff --git a/bookwyrm/templates/notifications/items/leave.html b/bookwyrm/templates/notifications/items/leave.html index c17a1986e..99b6a2324 100644 --- a/bookwyrm/templates/notifications/items/leave.html +++ b/bookwyrm/templates/notifications/items/leave.html @@ -13,8 +13,34 @@ {% block description %} +{% if other_user_count == 0 %} + {% blocktrans trimmed with group_name=notification.related_group.name group_path=notification.related_group.local_path %} - has left your group "{{ group_name }}" + {{ related_user }} + has left your group + "{{ group_name }}" {% endblocktrans %} +{% elif other_user_count == 1 %} + + {% blocktrans trimmed with group_name=notification.related_group.name group_path=notification.related_group.local_path %} + {{ related_user }} + and + {{ second_user }} + have left your group + "{{ group_name }}" + {% endblocktrans %} + +{% else %} + + {% blocktrans trimmed with group_name=notification.related_group.name group_path=notification.related_group.local_path %} + {{ related_user }} + and + {{ other_user_display_count }} others + have left your group + "{{ group_name }}" + {% endblocktrans %} + +{% endif %} + {% endblock %} diff --git a/bookwyrm/templates/notifications/items/mention.html b/bookwyrm/templates/notifications/items/mention.html index e4e78a11e..c3b3c1f34 100644 --- a/bookwyrm/templates/notifications/items/mention.html +++ b/bookwyrm/templates/notifications/items/mention.html @@ -19,25 +19,25 @@ {% if related_status.status_type == 'Review' %} {% blocktrans trimmed %} - mentioned you in a review of {{ book_title }} + {{ related_user }} mentioned you in a review of {{ book_title }} {% endblocktrans %} {% elif related_status.status_type == 'Comment' %} {% blocktrans trimmed %} - mentioned you in a comment on {{ book_title }} + {{ related_user }} mentioned you in a comment on {{ book_title }} {% endblocktrans %} {% elif related_status.status_type == 'Quotation' %} {% blocktrans trimmed %} - mentioned you in a quote from {{ book_title }} + {{ related_user }} mentioned you in a quote from {{ book_title }} {% endblocktrans %} {% else %} {% blocktrans trimmed %} - mentioned you in a status + {{ related_user }} mentioned you in a status {% endblocktrans %} {% endif %} @@ -51,7 +51,7 @@
- {% include 'snippets/status_preview.html' with status=related_status %} + {% include 'notifications/items/status_preview.html' with status=related_status %}
{{ related_status.published_date|timesince }} diff --git a/bookwyrm/templates/notifications/items/reply.html b/bookwyrm/templates/notifications/items/reply.html index 30e7eff78..16c84d439 100644 --- a/bookwyrm/templates/notifications/items/reply.html +++ b/bookwyrm/templates/notifications/items/reply.html @@ -20,25 +20,25 @@ {% if related_status.reply_parent.status_type == 'Review' %} {% blocktrans trimmed %} - replied to your review of {{ book_title }} + {{ related_user }} replied to your review of {{ book_title }} {% endblocktrans %} {% elif related_status.reply_parent.status_type == 'Comment' %} {% blocktrans trimmed %} - replied to your comment on {{ book_title }} + {{ related_user }} replied to your comment on {{ book_title }} {% endblocktrans %} {% elif related_status.reply_parent.status_type == 'Quotation' %} {% blocktrans trimmed %} - replied to your quote from {{ book_title }} + {{ related_user }} replied to your quote from {{ book_title }} {% endblocktrans %} {% else %} {% blocktrans trimmed %} - replied to your status + {{ related_user }} replied to your status {% endblocktrans %} {% endif %} @@ -54,7 +54,7 @@
- {% include 'snippets/status_preview.html' with status=related_status %} + {% include 'notifications/items/status_preview.html' with status=related_status %}
{{ related_status.published_date|timesince }} diff --git a/bookwyrm/templates/notifications/items/report.html b/bookwyrm/templates/notifications/items/report.html index fdd5f0094..44756ce16 100644 --- a/bookwyrm/templates/notifications/items/report.html +++ b/bookwyrm/templates/notifications/items/report.html @@ -1,9 +1,9 @@ {% extends 'notifications/items/layout.html' %} - +{% load humanize %} {% load i18n %} {% block primary_link %}{% spaceless %} - {% url 'settings-report' notification.related_report.id %} +{% url 'settings-reports' %} {% endspaceless %}{% endblock %} {% block icon %} @@ -11,6 +11,10 @@ {% endblock %} {% block description %} - {% url 'settings-report' notification.related_report.id as path %} - {% blocktrans %}A new report needs moderation.{% endblocktrans %} + {% url 'settings-reports' as path %} + {% blocktrans trimmed count counter=notification.related_reports.count with display_count=notification.related_reports.count|intcomma %} + A new report needs moderation + {% plural %} + {{ display_count }} new reports need moderation + {% endblocktrans %} {% endblock %} diff --git a/bookwyrm/templates/snippets/status_preview.html b/bookwyrm/templates/notifications/items/status_preview.html similarity index 53% rename from bookwyrm/templates/snippets/status_preview.html rename to bookwyrm/templates/notifications/items/status_preview.html index b1eb3eca7..c5d31599b 100644 --- a/bookwyrm/templates/snippets/status_preview.html +++ b/bookwyrm/templates/notifications/items/status_preview.html @@ -1,4 +1,17 @@ -{% if status.content %} +{% load i18n %} +{% if status.content_warning %} + +{% trans "Content warning" as text %} + + + {{ text }} + + + + {{ status.content_warning }} + + +{% elif status.content %} {{ status.content | safe | truncatewords_html:10 }}{% if status.mention_books %} {{ status.mention_books.first.title }}{% endif %} diff --git a/bookwyrm/templates/preferences/change_password.html b/bookwyrm/templates/preferences/change_password.html index 563bdee4d..3b816779d 100644 --- a/bookwyrm/templates/preferences/change_password.html +++ b/bookwyrm/templates/preferences/change_password.html @@ -8,15 +8,31 @@ {% endblock %} {% block panel %} +{% if success %} +
+ + + {% trans "Successfully changed password" %} + +
+{% endif %} {% csrf_token %} +
+ + {{ form.current_password }} + {% include 'snippets/form_errors.html' with errors_list=form.current_password.errors id="desc_current_password" %} +
+
- + {{ form.password }} + {% include 'snippets/form_errors.html' with errors_list=form.password.errors id="desc_current_password" %}
- + {{ form.confirm_password }} + {% include 'snippets/form_errors.html' with errors_list=form.confirm_password.errors id="desc_confirm_password" %}
diff --git a/bookwyrm/templates/preferences/export.html b/bookwyrm/templates/preferences/export.html index 865051442..61933be3e 100644 --- a/bookwyrm/templates/preferences/export.html +++ b/bookwyrm/templates/preferences/export.html @@ -13,10 +13,13 @@ {% trans "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." %}

- - - Download file - +

+ {% csrf_token %} + +

{% endblock %} diff --git a/bookwyrm/templates/search/barcode_modal.html b/bookwyrm/templates/search/barcode_modal.html index 07e95f59e..70481b20a 100644 --- a/bookwyrm/templates/search/barcode_modal.html +++ b/bookwyrm/templates/search/barcode_modal.html @@ -16,11 +16,11 @@
- +
- {% if reports %} - + {% if email_config_error %} + {% include 'settings/dashboard/warnings/email_config.html' with warning_level="danger" fullwidth=True %} {% endif %} - {% if pending_domains %} - + {% if current_version %} + {% include 'settings/dashboard/warnings/update_version.html' with warning_level="warning" fullwidth=True %} {% endif %} - {% if not site.allow_registration and site.allow_invite_requests and invite_requests %} -
- - {% blocktrans trimmed count counter=invite_requests with display_count=invite_requests|intcomma %} - {{ display_count }} invite request - {% plural %} - {{ display_count }} invite requests - {% endblocktrans %} - + {% if missing_privacy or missing_conduct %} +
+ {% if missing_privacy %} + {% include 'settings/dashboard/warnings/missing_privacy.html' with warning_level="danger" %} + {% endif %} + + {% if missing_conduct %} + {% include 'settings/dashboard/warnings/missing_conduct.html' with warning_level="warning" %} + {% endif %}
{% endif %} {% if current_version %} - + {% include 'settings/dashboard/warnings/update_version.html' with warning_level="warning" fullwidth=True %} + {% endif %} + + {% if reports %} + {% include 'settings/dashboard/warnings/reports.html' with warning_level="warning" %} + {% endif %} + + {% if pending_domains %} + {% include 'settings/dashboard/warnings/domain_review.html' with warning_level="primary" %} + {% endif %} + + {% if not site.allow_registration and site.allow_invite_requests and invite_requests %} + {% include 'settings/dashboard/warnings/invites.html' with warning_level="success" %} {% endif %}
diff --git a/bookwyrm/templates/settings/dashboard/warnings/domain_review.html b/bookwyrm/templates/settings/dashboard/warnings/domain_review.html new file mode 100644 index 000000000..d03971f92 --- /dev/null +++ b/bookwyrm/templates/settings/dashboard/warnings/domain_review.html @@ -0,0 +1,15 @@ +{% extends 'settings/dashboard/warnings/layout.html' %} +{% load i18n %} +{% load humanize %} + +{% block warning_link %}{% url 'settings-link-domain' %}{% endblock %} + +{% block warning_text %} + +{% blocktrans trimmed count counter=pending_domains with display_count=pending_domains|intcomma %} +{{ display_count }} domain needs review +{% plural %} +{{ display_count }} domains need review +{% endblocktrans %} + +{% endblock %} diff --git a/bookwyrm/templates/settings/dashboard/warnings/email_config.html b/bookwyrm/templates/settings/dashboard/warnings/email_config.html new file mode 100644 index 000000000..26ad5b1d7 --- /dev/null +++ b/bookwyrm/templates/settings/dashboard/warnings/email_config.html @@ -0,0 +1,13 @@ +{% extends 'settings/dashboard/warnings/layout.html' %} +{% load i18n %} + +{% block warning_link %}https://docs.joinbookwyrm.com/install-prod.html{% endblock %} + +{% block warning_text %} + +{% blocktrans trimmed %} +Your outgoing email address, {{ email_sender }}, may be misconfigured. +{% endblocktrans %} +{% trans "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." %} + +{% endblock %} diff --git a/bookwyrm/templates/settings/dashboard/warnings/invites.html b/bookwyrm/templates/settings/dashboard/warnings/invites.html new file mode 100644 index 000000000..34d278f40 --- /dev/null +++ b/bookwyrm/templates/settings/dashboard/warnings/invites.html @@ -0,0 +1,15 @@ +{% extends 'settings/dashboard/warnings/layout.html' %} +{% load i18n %} +{% load humanize %} + +{% block warning_link %}{% url 'settings-invite-requests' %}{% endblock %} + +{% block warning_text %} + +{% blocktrans trimmed count counter=invite_requests with display_count=invite_requests|intcomma %} +{{ display_count }} invite request +{% plural %} +{{ display_count }} invite requests +{% endblocktrans %} + +{% endblock %} diff --git a/bookwyrm/templates/settings/dashboard/warnings/layout.html b/bookwyrm/templates/settings/dashboard/warnings/layout.html new file mode 100644 index 000000000..7284530fe --- /dev/null +++ b/bookwyrm/templates/settings/dashboard/warnings/layout.html @@ -0,0 +1,5 @@ + diff --git a/bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html b/bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html new file mode 100644 index 000000000..aa0b431f2 --- /dev/null +++ b/bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html @@ -0,0 +1,10 @@ +{% extends 'settings/dashboard/warnings/layout.html' %} +{% load i18n %} + +{% block warning_link %}{% url 'settings-site' %}#instance-info{% endblock %} + +{% block warning_text %} + +{% trans "Your instance is missing a code of conduct." %} + +{% endblock %} diff --git a/bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html b/bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html new file mode 100644 index 000000000..87407632a --- /dev/null +++ b/bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html @@ -0,0 +1,10 @@ +{% extends 'settings/dashboard/warnings/layout.html' %} +{% load i18n %} + +{% block warning_link %}{% url 'settings-site' %}#instance-info{% endblock %} + +{% block warning_text %} + +{% trans "Your instance is missing a privacy policy." %} + +{% endblock %} diff --git a/bookwyrm/templates/settings/dashboard/warnings/reports.html b/bookwyrm/templates/settings/dashboard/warnings/reports.html new file mode 100644 index 000000000..885f94789 --- /dev/null +++ b/bookwyrm/templates/settings/dashboard/warnings/reports.html @@ -0,0 +1,15 @@ +{% extends 'settings/dashboard/warnings/layout.html' %} +{% load i18n %} +{% load humanize %} + +{% block warning_link %}{% url 'settings-reports' %}{% endblock %} + +{% block warning_text %} + +{% blocktrans trimmed count counter=reports with display_count=reports|intcomma %} +{{ display_count }} open report +{% plural %} +{{ display_count }} open reports +{% endblocktrans %} + +{% endblock %} diff --git a/bookwyrm/templates/settings/dashboard/warnings/update_version.html b/bookwyrm/templates/settings/dashboard/warnings/update_version.html new file mode 100644 index 000000000..b04b0a624 --- /dev/null +++ b/bookwyrm/templates/settings/dashboard/warnings/update_version.html @@ -0,0 +1,12 @@ +{% extends 'settings/dashboard/warnings/layout.html' %} +{% load i18n %} + +{% block warning_link %}https://docs.joinbookwyrm.com/updating.html{% endblock %} + +{% block warning_text %} + +{% blocktrans trimmed with current=current_version available=available_version %} +An update is available! You're running v{{ current }} and the latest release is {{ available }}. +{% endblocktrans %} + +{% endblock %} diff --git a/bookwyrm/templates/settings/federation/instance.html b/bookwyrm/templates/settings/federation/instance.html index cb6b1fc37..0064c4ff3 100644 --- a/bookwyrm/templates/settings/federation/instance.html +++ b/bookwyrm/templates/settings/federation/instance.html @@ -56,7 +56,7 @@
{% trans "Users:" %}
{{ users.count }} - {% if server.user_set.count %}({% trans "View all" %}){% endif %} + {% if server.user_set.count %}({% trans "View all" %}){% endif %}
{% trans "Reports:" %}
diff --git a/bookwyrm/templates/settings/federation/instance_filters.html b/bookwyrm/templates/settings/federation/instance_filters.html index 46ae0c1cf..d6af7e91f 100644 --- a/bookwyrm/templates/settings/federation/instance_filters.html +++ b/bookwyrm/templates/settings/federation/instance_filters.html @@ -2,6 +2,7 @@ {% block filter_fields %} {% include 'settings/federation/software_filter.html' %} +{% include 'settings/users/server_filter.html' %} {% endblock %} diff --git a/bookwyrm/templates/settings/link_domains/link_table.html b/bookwyrm/templates/settings/link_domains/link_table.html index 5518477c8..a8ec18d22 100644 --- a/bookwyrm/templates/settings/link_domains/link_table.html +++ b/bookwyrm/templates/settings/link_domains/link_table.html @@ -15,7 +15,11 @@ {{ link.url }} + {% if link.added_by %} @{{ link.added_by|username }} + {% else %} + {% trans "Unknown user" %} + {% endif %} {% if link.filelink.filetype %} diff --git a/bookwyrm/templates/settings/reports/report.html b/bookwyrm/templates/settings/reports/report.html index 20fdeca36..ca105701f 100644 --- a/bookwyrm/templates/settings/reports/report.html +++ b/bookwyrm/templates/settings/reports/report.html @@ -55,9 +55,11 @@
{% endif %} +{% if report.user %} {% include 'settings/users/user_info.html' with user=report.user %} {% include 'settings/users/user_moderation_actions.html' with user=report.user %} +{% endif %}

{% trans "Moderator Comments" %}

diff --git a/bookwyrm/templates/settings/reports/report_header.html b/bookwyrm/templates/settings/reports/report_header.html index 878a825da..b77c6c6ae 100644 --- a/bookwyrm/templates/settings/reports/report_header.html +++ b/bookwyrm/templates/settings/reports/report_header.html @@ -9,9 +9,15 @@ Report #{{ report_id }}: Status posted by @{{ username }} {% elif report.links.exists %} -{% blocktrans trimmed with report_id=report.id username=report.user|username %} -Report #{{ report_id }}: Link added by @{{ username }} -{% endblocktrans %} + {% if report.user %} + {% blocktrans trimmed with report_id=report.id username=report.user|username %} + Report #{{ report_id }}: Link added by @{{ username }} + {% endblocktrans %} + {% else %} + {% blocktrans trimmed with report_id=report.id %} + Report #{{ report_id }}: Link domain + {% endblocktrans %} + {% endif %} {% else %} diff --git a/bookwyrm/templates/settings/users/user_admin.html b/bookwyrm/templates/settings/users/user_admin.html index 4144f0bde..9bc5805b1 100644 --- a/bookwyrm/templates/settings/users/user_admin.html +++ b/bookwyrm/templates/settings/users/user_admin.html @@ -24,6 +24,10 @@
  • {% trans "Local users" %}
  • + {% url 'settings-users' status="deleted" as url %} +
  • + {% trans "Deleted users" %} +
  • {% url 'settings-users' status="federated" as url %}
  • {% trans "Federated community" %} @@ -36,7 +40,7 @@ {% url 'settings-users' as url %} - @@ -52,7 +56,7 @@ {% trans "Status" as text %} {% include 'snippets/table-sort-header.html' with field="is_active" sort=sort text=text %} - {% if status != "local" %} + {% if status == "federated" %} {% for user in users %} - + @@ -72,6 +79,12 @@ {% trans "Active" %} + {% elif user.deactivation_reason == "moderator_deletion" or user.deactivation_reason == "self_deletion" %} + + {% trans "Deleted" %} + ({{ user.get_deactivation_reason_display }}) {% else %}
    + {% trans "Username" as text %} {% include 'snippets/table-sort-header.html' with field="username" sort=sort text=text %} {% trans "Remote instance" as text %} {% include 'snippets/table-sort-header.html' with field="federated_server__server_name" sort=sort text=text %} @@ -61,7 +65,10 @@
    + + {% include 'snippets/avatar.html' with user=user %} + {{ user|username }} {{ user.created_date }} {% if user.federated_server %} {{ user.federated_server.server_name }} diff --git a/bookwyrm/templates/setup/config.html b/bookwyrm/templates/setup/config.html index b14ad37d1..762fb5663 100644 --- a/bookwyrm/templates/setup/config.html +++ b/bookwyrm/templates/setup/config.html @@ -144,7 +144,7 @@ {% blocktrans trimmed %} You can change your instance settings in the .env file on your server. {% endblocktrans %} - + {% trans "View installation instructions" %}

    diff --git a/bookwyrm/templates/snippets/follow_button.html b/bookwyrm/templates/snippets/follow_button.html index 0482bde0f..2bde47f58 100644 --- a/bookwyrm/templates/snippets/follow_button.html +++ b/bookwyrm/templates/snippets/follow_button.html @@ -26,7 +26,7 @@ diff --git a/bookwyrm/templatetags/interaction.py b/bookwyrm/templatetags/interaction.py index 89a25420a..39bf32b63 100644 --- a/bookwyrm/templatetags/interaction.py +++ b/bookwyrm/templatetags/interaction.py @@ -46,7 +46,7 @@ def get_relationship(context, user_object): get_relationship_name, user, user_object, - timeout=259200, + timeout=60 * 60, ) @@ -61,6 +61,6 @@ def get_relationship_name(user, user_object): types["is_blocked"] = True elif user_object in user.following.all(): types["is_following"] = True - elif user_object in user.follower_requests.all(): + elif user in user_object.follower_requests.all(): types["is_follow_pending"] = True return types diff --git a/bookwyrm/templatetags/notification_page_tags.py b/bookwyrm/templatetags/notification_page_tags.py index 28fa2afb5..7a365e689 100644 --- a/bookwyrm/templatetags/notification_page_tags.py +++ b/bookwyrm/templatetags/notification_page_tags.py @@ -12,3 +12,9 @@ def related_status(notification): if not notification.related_status: return None return load_subclass(notification.related_status) + + +@register.simple_tag(takes_context=False) +def get_related_users(notification): + """Who actually was it who liked your post""" + return list(reversed(list(notification.related_users.distinct())))[:10] diff --git a/bookwyrm/templatetags/rating_tags.py b/bookwyrm/templatetags/rating_tags.py index 670599e25..cc23d3308 100644 --- a/bookwyrm/templatetags/rating_tags.py +++ b/bookwyrm/templatetags/rating_tags.py @@ -13,10 +13,10 @@ register = template.Library() def get_rating(book, user): """get the overall rating of a book""" return cache.get_or_set( - f"book-rating-{book.parent_work.id}-{user.id}", - lambda u, b: models.Review.privacy_filter(u) - .filter(book__parent_work__editions=b, rating__gt=0) - .aggregate(Avg("rating"))["rating__avg"] + f"book-rating-{book.parent_work.id}", + lambda u, b: models.Review.objects.filter( + book__parent_work__editions=b, rating__gt=0 + ).aggregate(Avg("rating"))["rating__avg"] or 0, user, book, diff --git a/bookwyrm/templatetags/shelf_tags.py b/bookwyrm/templatetags/shelf_tags.py index 0eb1d8118..1fb799883 100644 --- a/bookwyrm/templatetags/shelf_tags.py +++ b/bookwyrm/templatetags/shelf_tags.py @@ -17,7 +17,7 @@ def get_is_book_on_shelf(book, shelf): lambda b, s: s.books.filter(id=b.id).exists(), book, shelf, - timeout=15552000, + timeout=60 * 60, # just cache this for an hour ) @@ -68,7 +68,7 @@ def active_shelf(context, book): ), user, book, - timeout=15552000, + timeout=60 * 60, ) or {"book": book} @@ -85,5 +85,5 @@ def latest_read_through(book, user): ), user, book, - timeout=15552000, + timeout=60 * 60, ) diff --git a/bookwyrm/templatetags/utilities.py b/bookwyrm/templatetags/utilities.py index 00fa4035c..834d39a14 100644 --- a/bookwyrm/templatetags/utilities.py +++ b/bookwyrm/templatetags/utilities.py @@ -53,7 +53,7 @@ def comparison_bool(str1, str2, reverse=False): @register.filter(is_safe=True) def truncatepath(value, arg): - """Truncate a path by removing all directories except the first and truncating .""" + """Truncate a path by removing all directories except the first and truncating""" path = os.path.normpath(value.name) path_list = path.split(os.sep) try: diff --git a/bookwyrm/tests/connectors/test_abstract_connector.py b/bookwyrm/tests/connectors/test_abstract_connector.py index 26742c05e..02ac5c66a 100644 --- a/bookwyrm/tests/connectors/test_abstract_connector.py +++ b/bookwyrm/tests/connectors/test_abstract_connector.py @@ -42,15 +42,9 @@ class AbstractConnector(TestCase): generated_remote_link_field = "openlibrary_link" - def format_search_result(self, search_result): - return search_result - - def parse_search_data(self, data): + def parse_search_data(self, data, min_confidence): return data - def format_isbn_search_result(self, search_result): - return search_result - def parse_isbn_search_data(self, data): return data diff --git a/bookwyrm/tests/connectors/test_abstract_minimal_connector.py b/bookwyrm/tests/connectors/test_abstract_minimal_connector.py index a90ce0c7e..119ca3581 100644 --- a/bookwyrm/tests/connectors/test_abstract_minimal_connector.py +++ b/bookwyrm/tests/connectors/test_abstract_minimal_connector.py @@ -1,6 +1,5 @@ """ testing book data connectors """ from django.test import TestCase -import responses from bookwyrm import models from bookwyrm.connectors import abstract_connector @@ -25,18 +24,12 @@ class AbstractConnector(TestCase): class TestConnector(abstract_connector.AbstractMinimalConnector): """nothing added here""" - def format_search_result(self, search_result): - return search_result - def get_or_create_book(self, remote_id): pass - def parse_search_data(self, data): + def parse_search_data(self, data, min_confidence): return data - def format_isbn_search_result(self, search_result): - return search_result - def parse_isbn_search_data(self, data): return data @@ -54,45 +47,6 @@ class AbstractConnector(TestCase): self.assertIsNone(connector.name) self.assertEqual(connector.identifier, "example.com") - @responses.activate - def test_search(self): - """makes an http request to the outside service""" - responses.add( - responses.GET, - "https://example.com/search?q=a%20book%20title", - json=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"], - status=200, - ) - results = self.test_connector.search("a book title") - self.assertEqual(len(results), 10) - self.assertEqual(results[0], "a") - self.assertEqual(results[1], "b") - self.assertEqual(results[2], "c") - - @responses.activate - def test_search_min_confidence(self): - """makes an http request to the outside service""" - responses.add( - responses.GET, - "https://example.com/search?q=a%20book%20title&min_confidence=1", - json=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"], - status=200, - ) - results = self.test_connector.search("a book title", min_confidence=1) - self.assertEqual(len(results), 10) - - @responses.activate - def test_isbn_search(self): - """makes an http request to the outside service""" - responses.add( - responses.GET, - "https://example.com/isbn?q=123456", - json=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"], - status=200, - ) - results = self.test_connector.isbn_search("123456") - self.assertEqual(len(results), 10) - def test_create_mapping(self): """maps remote fields for book data to bookwyrm activitypub fields""" mapping = Mapping("isbn") diff --git a/bookwyrm/tests/connectors/test_bookwyrm_connector.py b/bookwyrm/tests/connectors/test_bookwyrm_connector.py index 585080e66..1e369ca01 100644 --- a/bookwyrm/tests/connectors/test_bookwyrm_connector.py +++ b/bookwyrm/tests/connectors/test_bookwyrm_connector.py @@ -30,14 +30,11 @@ class BookWyrmConnector(TestCase): result = self.connector.get_or_create_book(book.remote_id) self.assertEqual(book, result) - def test_format_search_result(self): + def test_parse_search_data(self): """create a SearchResult object from search response json""" datafile = pathlib.Path(__file__).parent.joinpath("../data/bw_search.json") search_data = json.loads(datafile.read_bytes()) - results = self.connector.parse_search_data(search_data) - self.assertIsInstance(results, list) - - result = self.connector.format_search_result(results[0]) + result = list(self.connector.parse_search_data(search_data, 0))[0] self.assertIsInstance(result, SearchResult) self.assertEqual(result.title, "Jonathan Strange and Mr Norrell") self.assertEqual(result.key, "https://example.com/book/122") @@ -45,10 +42,9 @@ class BookWyrmConnector(TestCase): self.assertEqual(result.year, 2017) self.assertEqual(result.connector, self.connector) - def test_format_isbn_search_result(self): + def test_parse_isbn_search_data(self): """just gotta attach the connector""" datafile = pathlib.Path(__file__).parent.joinpath("../data/bw_search.json") search_data = json.loads(datafile.read_bytes()) - results = self.connector.parse_isbn_search_data(search_data) - result = self.connector.format_isbn_search_result(results[0]) + result = list(self.connector.parse_isbn_search_data(search_data))[0] self.assertEqual(result.connector, self.connector) diff --git a/bookwyrm/tests/connectors/test_connector_manager.py b/bookwyrm/tests/connectors/test_connector_manager.py index c88a8036a..c0c09147e 100644 --- a/bookwyrm/tests/connectors/test_connector_manager.py +++ b/bookwyrm/tests/connectors/test_connector_manager.py @@ -49,39 +49,11 @@ class ConnectorManager(TestCase): self.assertEqual(len(connectors), 1) self.assertIsInstance(connectors[0], BookWyrmConnector) - @responses.activate - def test_search_plaintext(self): - """search all connectors""" - responses.add( - responses.GET, - "http://fake.ciom/search/Example?min_confidence=0.1", - json=[{"title": "Hello", "key": "https://www.example.com/search/1"}], - ) - results = connector_manager.search("Example") - self.assertEqual(len(results), 1) - self.assertEqual(len(results[0]["results"]), 1) - self.assertEqual(results[0]["connector"].identifier, "test_connector_remote") - self.assertEqual(results[0]["results"][0].title, "Hello") - def test_search_empty_query(self): """don't panic on empty queries""" results = connector_manager.search("") self.assertEqual(results, []) - @responses.activate - def test_search_isbn(self): - """special handling if a query resembles an isbn""" - responses.add( - responses.GET, - "http://fake.ciom/isbn/0000000000", - json=[{"title": "Hello", "key": "https://www.example.com/search/1"}], - ) - results = connector_manager.search("0000000000") - self.assertEqual(len(results), 1) - self.assertEqual(len(results[0]["results"]), 1) - self.assertEqual(results[0]["connector"].identifier, "test_connector_remote") - self.assertEqual(results[0]["results"][0].title, "Hello") - def test_first_search_result(self): """only get one search result""" result = connector_manager.first_search_result("Example") diff --git a/bookwyrm/tests/connectors/test_inventaire_connector.py b/bookwyrm/tests/connectors/test_inventaire_connector.py index 55727a600..3bba9ece3 100644 --- a/bookwyrm/tests/connectors/test_inventaire_connector.py +++ b/bookwyrm/tests/connectors/test_inventaire_connector.py @@ -66,38 +66,14 @@ class Inventaire(TestCase): with self.assertRaises(ConnectorException): self.connector.get_book_data("https://test.url/ok") - @responses.activate - def test_search(self): - """min confidence filtering""" - responses.add( - responses.GET, - "https://inventaire.io/search?q=hi", - json={ - "results": [ - { - "_score": 200, - "label": "hello", - }, - { - "_score": 100, - "label": "hi", - }, - ], - }, - ) - results = self.connector.search("hi", min_confidence=0.5) - self.assertEqual(len(results), 1) - self.assertEqual(results[0].title, "hello") - - def test_format_search_result(self): + def test_parse_search_data(self): """json to search result objs""" search_file = pathlib.Path(__file__).parent.joinpath( "../data/inventaire_search.json" ) search_results = json.loads(search_file.read_bytes()) - results = self.connector.parse_search_data(search_results) - formatted = self.connector.format_search_result(results[0]) + formatted = list(self.connector.parse_search_data(search_results, 0))[0] self.assertEqual(formatted.title, "The Stories of Vladimir Nabokov") self.assertEqual( @@ -178,15 +154,14 @@ class Inventaire(TestCase): result = self.connector.resolve_keys(keys) self.assertEqual(result, ["epistolary novel", "crime novel"]) - def test_isbn_search(self): + def test_pase_isbn_search_data(self): """another search type""" search_file = pathlib.Path(__file__).parent.joinpath( "../data/inventaire_isbn_search.json" ) search_results = json.loads(search_file.read_bytes()) - results = self.connector.parse_isbn_search_data(search_results) - formatted = self.connector.format_isbn_search_result(results[0]) + formatted = list(self.connector.parse_isbn_search_data(search_results))[0] self.assertEqual(formatted.title, "L'homme aux cercles bleus") self.assertEqual( @@ -198,25 +173,12 @@ class Inventaire(TestCase): "https://covers.inventaire.io/img/entities/12345", ) - def test_isbn_search_empty(self): + def test_parse_isbn_search_data_empty(self): """another search type""" search_results = {} - results = self.connector.parse_isbn_search_data(search_results) + results = list(self.connector.parse_isbn_search_data(search_results)) self.assertEqual(results, []) - def test_isbn_search_no_title(self): - """another search type""" - search_file = pathlib.Path(__file__).parent.joinpath( - "../data/inventaire_isbn_search.json" - ) - search_results = json.loads(search_file.read_bytes()) - search_results["entities"]["isbn:9782290349229"]["claims"]["wdt:P1476"] = None - - result = self.connector.format_isbn_search_result( - search_results.get("entities") - ) - self.assertIsNone(result) - def test_is_work_data(self): """is it a work""" work_file = pathlib.Path(__file__).parent.joinpath( diff --git a/bookwyrm/tests/connectors/test_openlibrary_connector.py b/bookwyrm/tests/connectors/test_openlibrary_connector.py index c05eb1a94..05ba39ab9 100644 --- a/bookwyrm/tests/connectors/test_openlibrary_connector.py +++ b/bookwyrm/tests/connectors/test_openlibrary_connector.py @@ -122,21 +122,11 @@ class Openlibrary(TestCase): self.assertEqual(result, "https://covers.openlibrary.org/b/id/image-L.jpg") def test_parse_search_result(self): - """extract the results from the search json response""" - datafile = pathlib.Path(__file__).parent.joinpath("../data/ol_search.json") - search_data = json.loads(datafile.read_bytes()) - result = self.connector.parse_search_data(search_data) - self.assertIsInstance(result, list) - self.assertEqual(len(result), 2) - - def test_format_search_result(self): """translate json from openlibrary into SearchResult""" datafile = pathlib.Path(__file__).parent.joinpath("../data/ol_search.json") search_data = json.loads(datafile.read_bytes()) - results = self.connector.parse_search_data(search_data) - self.assertIsInstance(results, list) + result = list(self.connector.parse_search_data(search_data, 0))[0] - result = self.connector.format_search_result(results[0]) self.assertIsInstance(result, SearchResult) self.assertEqual(result.title, "This Is How You Lose the Time War") self.assertEqual(result.key, "https://openlibrary.org/works/OL20639540W") @@ -148,18 +138,10 @@ class Openlibrary(TestCase): """extract the results from the search json response""" datafile = pathlib.Path(__file__).parent.joinpath("../data/ol_isbn_search.json") search_data = json.loads(datafile.read_bytes()) - result = self.connector.parse_isbn_search_data(search_data) - self.assertIsInstance(result, list) + result = list(self.connector.parse_isbn_search_data(search_data)) self.assertEqual(len(result), 1) - def test_format_isbn_search_result(self): - """translate json from openlibrary into SearchResult""" - datafile = pathlib.Path(__file__).parent.joinpath("../data/ol_isbn_search.json") - search_data = json.loads(datafile.read_bytes()) - results = self.connector.parse_isbn_search_data(search_data) - self.assertIsInstance(results, list) - - result = self.connector.format_isbn_search_result(results[0]) + result = result[0] self.assertIsInstance(result, SearchResult) self.assertEqual(result.title, "Les ombres errantes") self.assertEqual(result.key, "https://openlibrary.org/books/OL16262504M") @@ -229,7 +211,7 @@ class Openlibrary(TestCase): status=200, ) with patch( - "bookwyrm.connectors.openlibrary.Connector." "get_authors_from_data" + "bookwyrm.connectors.openlibrary.Connector.get_authors_from_data" ) as mock: mock.return_value = [] result = self.connector.create_edition_from_data(work, self.edition_data) diff --git a/bookwyrm/tests/lists_stream/test_signals.py b/bookwyrm/tests/lists_stream/test_signals.py index f82dba3a4..96f1ae231 100644 --- a/bookwyrm/tests/lists_stream/test_signals.py +++ b/bookwyrm/tests/lists_stream/test_signals.py @@ -32,9 +32,10 @@ class ListsStreamSignals(TestCase): def test_add_list_on_create_command(self, _): """a new lists has entered""" - book_list = models.List.objects.create( - user=self.remote_user, name="hi", privacy="public" - ) + with patch("bookwyrm.lists_stream.remove_list_task.delay"): + book_list = models.List.objects.create( + user=self.remote_user, name="hi", privacy="public" + ) with patch("bookwyrm.lists_stream.add_list_task.delay") as mock: lists_stream.add_list_on_create_command(book_list.id) self.assertEqual(mock.call_count, 1) @@ -43,9 +44,10 @@ class ListsStreamSignals(TestCase): def test_remove_list_on_delete(self, _): """delete a list""" - book_list = models.List.objects.create( - user=self.remote_user, name="hi", privacy="public" - ) + with patch("bookwyrm.lists_stream.remove_list_task.delay"): + book_list = models.List.objects.create( + user=self.remote_user, name="hi", privacy="public" + ) with patch("bookwyrm.lists_stream.remove_list_task.delay") as mock: lists_stream.remove_list_on_delete(models.List, book_list) args = mock.call_args[0] diff --git a/bookwyrm/tests/lists_stream/test_stream.py b/bookwyrm/tests/lists_stream/test_stream.py index 4d8aa52b2..0e87c7436 100644 --- a/bookwyrm/tests/lists_stream/test_stream.py +++ b/bookwyrm/tests/lists_stream/test_stream.py @@ -11,6 +11,7 @@ from bookwyrm import lists_stream, models @patch("bookwyrm.activitystreams.add_book_statuses_task.delay") @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.activitystreams.populate_stream_task.delay") +@patch("bookwyrm.lists_stream.remove_list_task.delay") class ListsStream(TestCase): """using redis to build activity streams""" diff --git a/bookwyrm/tests/lists_stream/test_tasks.py b/bookwyrm/tests/lists_stream/test_tasks.py index 1da36b71b..55c5d98c8 100644 --- a/bookwyrm/tests/lists_stream/test_tasks.py +++ b/bookwyrm/tests/lists_stream/test_tasks.py @@ -35,7 +35,9 @@ class Activitystreams(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_task.delay"): self.list = models.List.objects.create( user=self.local_user, name="hi", privacy="public" ) diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index d4f59fa58..5a2a6c3b6 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -1,6 +1,10 @@ """ testing models """ -from dateutil.parser import parse +from io import BytesIO +import pathlib +from dateutil.parser import parse +from PIL import Image +from django.core.files.base import ContentFile from django.test import TestCase from django.utils import timezone @@ -96,3 +100,28 @@ class Book(TestCase): self.first_edition.description = "hi" self.first_edition.save() self.assertEqual(self.first_edition.edition_rank, 1) + + def test_thumbnail_fields(self): + """Just hit them""" + image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/default_avi.jpg" + ) + image = Image.open(image_file) + output = BytesIO() + image.save(output, format=image.format) + + book = models.Edition.objects.create(title="hello") + book.cover.save("test.jpg", ContentFile(output.getvalue())) + + self.assertIsNotNone(book.cover_bw_book_xsmall_webp.url) + self.assertIsNotNone(book.cover_bw_book_xsmall_jpg.url) + self.assertIsNotNone(book.cover_bw_book_small_webp.url) + self.assertIsNotNone(book.cover_bw_book_small_jpg.url) + self.assertIsNotNone(book.cover_bw_book_medium_webp.url) + self.assertIsNotNone(book.cover_bw_book_medium_jpg.url) + self.assertIsNotNone(book.cover_bw_book_large_webp.url) + self.assertIsNotNone(book.cover_bw_book_large_jpg.url) + self.assertIsNotNone(book.cover_bw_book_xlarge_webp.url) + self.assertIsNotNone(book.cover_bw_book_xlarge_jpg.url) + self.assertIsNotNone(book.cover_bw_book_xxlarge_webp.url) + self.assertIsNotNone(book.cover_bw_book_xxlarge_jpg.url) diff --git a/bookwyrm/tests/models/test_group.py b/bookwyrm/tests/models/test_group.py index 8739f7fee..86cafaa39 100644 --- a/bookwyrm/tests/models/test_group.py +++ b/bookwyrm/tests/models/test_group.py @@ -80,7 +80,9 @@ class Group(TestCase): """follower-only group booklists should not be excluded from group booklist listing for group members who do not follower list owner""" - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_task.delay"): followers_list = models.List.objects.create( name="Followers List", curation="group", @@ -101,8 +103,9 @@ class Group(TestCase): """private group booklists should not be excluded from group booklist listing for group members""" - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_task.delay"): private_list = models.List.objects.create( name="Private List", privacy="direct", diff --git a/bookwyrm/tests/models/test_import_model.py b/bookwyrm/tests/models/test_import_model.py index 7cecfe416..d1ff209f4 100644 --- a/bookwyrm/tests/models/test_import_model.py +++ b/bookwyrm/tests/models/test_import_model.py @@ -195,7 +195,7 @@ class ImportJob(TestCase): ) as search: search.return_value = result with patch( - "bookwyrm.connectors.openlibrary.Connector." "get_authors_from_data" + "bookwyrm.connectors.openlibrary.Connector.get_authors_from_data" ): book = item.get_book_from_identifier() diff --git a/bookwyrm/tests/models/test_list.py b/bookwyrm/tests/models/test_list.py index e4ecfe897..f7e64c6f2 100644 --- a/bookwyrm/tests/models/test_list.py +++ b/bookwyrm/tests/models/test_list.py @@ -7,6 +7,7 @@ from bookwyrm import models, settings @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") +@patch("bookwyrm.lists_stream.remove_list_task.delay") class List(TestCase): """some activitypub oddness ahead""" @@ -21,21 +22,15 @@ class List(TestCase): work = models.Work.objects.create(title="hello") self.book = models.Edition.objects.create(title="hi", parent_work=work) - def test_remote_id(self, _): + def test_remote_id(self, *_): """shelves use custom remote ids""" - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - book_list = models.List.objects.create( - name="Test List", user=self.local_user - ) + book_list = models.List.objects.create(name="Test List", user=self.local_user) expected_id = f"https://{settings.DOMAIN}/list/{book_list.id}" self.assertEqual(book_list.get_remote_id(), expected_id) - def test_to_activity(self, _): + def test_to_activity(self, *_): """jsonify it""" - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - book_list = models.List.objects.create( - name="Test List", user=self.local_user - ) + book_list = models.List.objects.create(name="Test List", user=self.local_user) activity_json = book_list.to_activity() self.assertIsInstance(activity_json, dict) self.assertEqual(activity_json["id"], book_list.remote_id) @@ -44,12 +39,11 @@ class List(TestCase): self.assertEqual(activity_json["name"], "Test List") self.assertEqual(activity_json["owner"], self.local_user.remote_id) - def test_list_item(self, _): + def test_list_item(self, *_): """a list entry""" - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - book_list = models.List.objects.create( - name="Test List", user=self.local_user, privacy="unlisted" - ) + book_list = models.List.objects.create( + name="Test List", user=self.local_user, privacy="unlisted" + ) item = models.ListItem.objects.create( book_list=book_list, @@ -62,12 +56,9 @@ class List(TestCase): self.assertEqual(item.privacy, "unlisted") self.assertEqual(item.recipients, []) - def test_list_item_pending(self, _): + def test_list_item_pending(self, *_): """a list entry""" - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - book_list = models.List.objects.create( - name="Test List", user=self.local_user - ) + book_list = models.List.objects.create(name="Test List", user=self.local_user) item = models.ListItem.objects.create( book_list=book_list, @@ -82,11 +73,8 @@ class List(TestCase): self.assertEqual(item.privacy, "direct") self.assertEqual(item.recipients, []) - def test_embed_key(self, _): + def test_embed_key(self, *_): """embed_key should never be empty""" - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - book_list = models.List.objects.create( - name="Test List", user=self.local_user - ) + book_list = models.List.objects.create(name="Test List", user=self.local_user) self.assertIsInstance(book_list.embed_key, UUID) diff --git a/bookwyrm/tests/models/test_notification.py b/bookwyrm/tests/models/test_notification.py new file mode 100644 index 000000000..0e4fe91c7 --- /dev/null +++ b/bookwyrm/tests/models/test_notification.py @@ -0,0 +1,194 @@ +""" testing models """ +from unittest.mock import patch +from django.test import TestCase +from bookwyrm import models + + +class Notification(TestCase): + """let people know things""" + + def setUp(self): # pylint: disable=invalid-name + """useful things for creating a notification""" + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + self.local_user = models.User.objects.create_user( + "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" + ) + self.another_user = models.User.objects.create_user( + "rat", "rat@rat.rat", "ratword", local=True, localname="rat" + ) + with patch("bookwyrm.models.user.set_remote_server.delay"): + self.remote_user = models.User.objects.create_user( + "rat", + "rat@rat.com", + "ratword", + local=False, + remote_id="https://example.com/users/rat", + inbox="https://example.com/users/rat/inbox", + outbox="https://example.com/users/rat/outbox", + ) + self.work = models.Work.objects.create(title="Test Work") + self.book = models.Edition.objects.create( + title="Test Book", + isbn_13="1234567890123", + remote_id="https://example.com/book/1", + parent_work=self.work, + ) + self.another_book = models.Edition.objects.create( + title="Second Test Book", + parent_work=models.Work.objects.create(title="Test Work"), + ) + + def test_notification(self): + """New notifications are unread""" + notification = models.Notification.objects.create( + user=self.local_user, notification_type=models.Notification.FAVORITE + ) + self.assertFalse(notification.read) + + def test_notify(self): + """Create a notification""" + models.Notification.notify( + self.local_user, + self.remote_user, + notification_type=models.Notification.FAVORITE, + ) + self.assertTrue(models.Notification.objects.exists()) + + def test_notify_grouping(self): + """Bundle notifications""" + models.Notification.notify( + self.local_user, + self.remote_user, + notification_type=models.Notification.FAVORITE, + ) + self.assertEqual(models.Notification.objects.count(), 1) + notification = models.Notification.objects.get() + self.assertEqual(notification.related_users.count(), 1) + + models.Notification.notify( + self.local_user, + self.another_user, + notification_type=models.Notification.FAVORITE, + ) + self.assertEqual(models.Notification.objects.count(), 1) + notification.refresh_from_db() + self.assertEqual(notification.related_users.count(), 2) + + def test_notify_grouping_with_dupes(self): + """If there are multiple options to group with, don't cause an error""" + models.Notification.objects.create( + user=self.local_user, notification_type="FAVORITE" + ) + models.Notification.objects.create( + user=self.local_user, notification_type="FAVORITE" + ) + models.Notification.notify(self.local_user, None, notification_type="FAVORITE") + self.assertEqual(models.Notification.objects.count(), 2) + + def test_notify_remote(self): + """Don't create notifications for remote users""" + models.Notification.notify( + self.remote_user, + self.local_user, + notification_type=models.Notification.FAVORITE, + ) + self.assertFalse(models.Notification.objects.exists()) + + def test_notify_self(self): + """Don't create notifications for yourself""" + models.Notification.notify( + self.local_user, + self.local_user, + notification_type=models.Notification.FAVORITE, + ) + self.assertFalse(models.Notification.objects.exists()) + + @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") + @patch("bookwyrm.lists_stream.remove_list_task.delay") + def test_notify_list_item_own_list(self, *_): + """Don't add list item notification for your own list""" + test_list = models.List.objects.create(user=self.local_user, name="hi") + + models.ListItem.objects.create( + user=self.local_user, book=self.book, book_list=test_list, order=1 + ) + self.assertFalse(models.Notification.objects.exists()) + + @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") + @patch("bookwyrm.lists_stream.remove_list_task.delay") + def test_notify_list_item_remote(self, *_): + """Don't add list item notification for a remote user""" + test_list = models.List.objects.create(user=self.remote_user, name="hi") + + models.ListItem.objects.create( + user=self.local_user, book=self.book, book_list=test_list, order=1 + ) + self.assertFalse(models.Notification.objects.exists()) + + @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") + @patch("bookwyrm.lists_stream.remove_list_task.delay") + def test_notify_list_item(self, *_): + """Add list item notification""" + test_list = models.List.objects.create(user=self.local_user, name="hi") + list_item = models.ListItem.objects.create( + user=self.remote_user, book=self.book, book_list=test_list, order=2 + ) + notification = models.Notification.objects.get() + self.assertEqual(notification.related_users.count(), 1) + self.assertEqual(notification.related_users.first(), self.remote_user) + self.assertEqual(notification.related_list_items.count(), 1) + self.assertEqual(notification.related_list_items.first(), list_item) + + models.ListItem.objects.create( + user=self.remote_user, book=self.another_book, book_list=test_list, order=3 + ) + notification = models.Notification.objects.get() + self.assertEqual(notification.related_users.count(), 1) + self.assertEqual(notification.related_users.first(), self.remote_user) + self.assertEqual(notification.related_list_items.count(), 2) + + def test_unnotify(self): + """Remove a notification""" + models.Notification.notify( + self.local_user, + self.remote_user, + notification_type=models.Notification.FAVORITE, + ) + self.assertTrue(models.Notification.objects.exists()) + + models.Notification.unnotify( + self.local_user, + self.remote_user, + notification_type=models.Notification.FAVORITE, + ) + self.assertFalse(models.Notification.objects.exists()) + + def test_unnotify_multiple_users(self): + """Remove a notification""" + models.Notification.notify( + self.local_user, + self.remote_user, + notification_type=models.Notification.FAVORITE, + ) + models.Notification.notify( + self.local_user, + self.another_user, + notification_type=models.Notification.FAVORITE, + ) + self.assertTrue(models.Notification.objects.exists()) + + models.Notification.unnotify( + self.local_user, + self.remote_user, + notification_type=models.Notification.FAVORITE, + ) + self.assertTrue(models.Notification.objects.exists()) + + models.Notification.unnotify( + self.local_user, + self.another_user, + notification_type=models.Notification.FAVORITE, + ) + self.assertFalse(models.Notification.objects.exists()) diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index 2f1e8670f..aae34b0a5 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -394,18 +394,6 @@ class Status(TestCase): self.assertEqual(activity["type"], "Announce") self.assertEqual(activity, boost.to_activity(pure=True)) - def test_notification(self, *_): - """a simple model""" - notification = models.Notification.objects.create( - user=self.local_user, notification_type="FAVORITE" - ) - self.assertFalse(notification.read) - - with self.assertRaises(IntegrityError): - models.Notification.objects.create( - user=self.local_user, notification_type="GLORB" - ) - # pylint: disable=unused-argument def test_create_broadcast(self, one, two, broadcast_mock, *_): """should send out two verions of a status on create""" diff --git a/bookwyrm/tests/templatetags/test_rating_tags.py b/bookwyrm/tests/templatetags/test_rating_tags.py index c00f20726..a06ee9402 100644 --- a/bookwyrm/tests/templatetags/test_rating_tags.py +++ b/bookwyrm/tests/templatetags/test_rating_tags.py @@ -40,7 +40,8 @@ class RatingTags(TestCase): @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") def test_get_rating(self, *_): - """privacy filtered rating""" + """privacy filtered rating. Commented versions are how it ought to work with + subjective ratings, which are currenly not used for performance reasons.""" # follows-only: not included models.ReviewRating.objects.create( user=self.remote_user, @@ -48,7 +49,8 @@ class RatingTags(TestCase): book=self.book, privacy="followers", ) - self.assertEqual(rating_tags.get_rating(self.book, self.local_user), 0) + # self.assertEqual(rating_tags.get_rating(self.book, self.local_user), 0) + self.assertEqual(rating_tags.get_rating(self.book, self.local_user), 5) # public: included models.ReviewRating.objects.create( diff --git a/bookwyrm/tests/templatetags/test_utilities.py b/bookwyrm/tests/templatetags/test_utilities.py index 0136ca8cd..7738a51d9 100644 --- a/bookwyrm/tests/templatetags/test_utilities.py +++ b/bookwyrm/tests/templatetags/test_utilities.py @@ -1,4 +1,5 @@ """ style fixes and lookups for templates """ +from collections import namedtuple import re from unittest.mock import patch @@ -61,3 +62,18 @@ class UtilitiesTags(TestCase): self.assertEqual(utilities.get_title(self.book), "Test Book") book = models.Edition.objects.create(title="Oh", subtitle="oh my") self.assertEqual(utilities.get_title(book), "Oh: oh my") + + def test_comparison_bool(self, *_): + """just a simple comparison""" + self.assertTrue(utilities.comparison_bool("a", "a")) + self.assertFalse(utilities.comparison_bool("a", "b")) + + self.assertFalse(utilities.comparison_bool("a", "a", reverse=True)) + self.assertTrue(utilities.comparison_bool("a", "b", reverse=True)) + + def test_truncatepath(self, *_): + """truncate a path""" + ValueMock = namedtuple("Value", ("name")) + value = ValueMock("home/one/two/three/four") + self.assertEqual(utilities.truncatepath(value, 2), "home/…ur") + self.assertEqual(utilities.truncatepath(value, "a"), "four") diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index 16435ffff..7274cb49c 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -102,18 +102,12 @@ class BookSearch(TestCase): class TestConnector(AbstractMinimalConnector): """nothing added here""" - def format_search_result(self, search_result): - return search_result - def get_or_create_book(self, remote_id): pass - def parse_search_data(self, data): + def parse_search_data(self, data, min_confidence): return data - def format_isbn_search_result(self, search_result): - return search_result - def parse_isbn_search_data(self, data): return data diff --git a/bookwyrm/tests/test_postgres.py b/bookwyrm/tests/test_postgres.py index 624512575..94a8090f4 100644 --- a/bookwyrm/tests/test_postgres.py +++ b/bookwyrm/tests/test_postgres.py @@ -34,6 +34,7 @@ class PostgresTriggers(TestCase): ) book.authors.add(author) book.refresh_from_db() + # pylint: disable=line-too-long self.assertEqual( book.search_vector, "'cool':5B 'goodby':3A 'long':2A 'name':9 'rays':7C 'seri':8 'the':6C 'wow':4B", diff --git a/bookwyrm/tests/test_sanitize_html.py b/bookwyrm/tests/test_sanitize_html.py index 5814f2207..449acdafb 100644 --- a/bookwyrm/tests/test_sanitize_html.py +++ b/bookwyrm/tests/test_sanitize_html.py @@ -1,7 +1,7 @@ """ make sure only valid html gets to the app """ from django.test import TestCase -from bookwyrm.sanitize_html import InputHtmlParser +from bookwyrm.utils.sanitizer import clean class Sanitizer(TestCase): @@ -10,53 +10,39 @@ class Sanitizer(TestCase): def test_no_html(self): """just text""" input_text = "no html " - parser = InputHtmlParser() - parser.feed(input_text) - output = parser.get_output() + output = clean(input_text) self.assertEqual(input_text, output) def test_valid_html(self): """leave the html untouched""" input_text = "yes html" - parser = InputHtmlParser() - parser.feed(input_text) - output = parser.get_output() + output = clean(input_text) self.assertEqual(input_text, output) def test_valid_html_attrs(self): """and don't remove useful attributes""" input_text = 'yes html' - parser = InputHtmlParser() - parser.feed(input_text) - output = parser.get_output() + output = clean(input_text) self.assertEqual(input_text, output) def test_valid_html_invalid_attrs(self): """do remove un-approved attributes""" input_text = 'yes html' - parser = InputHtmlParser() - parser.feed(input_text) - output = parser.get_output() + output = clean(input_text) self.assertEqual(output, 'yes html') def test_invalid_html(self): - """remove all html when the html is malformed""" + """don't allow malformed html""" input_text = "yes html" - parser = InputHtmlParser() - parser.feed(input_text) - output = parser.get_output() - self.assertEqual("yes html", output) + output = clean(input_text) + self.assertEqual("yes html", output) input_text = "yes html " - parser = InputHtmlParser() - parser.feed(input_text) - output = parser.get_output() - self.assertEqual("yes html ", output) + output = clean(input_text) + self.assertEqual("yes html ", output) def test_disallowed_html(self): """remove disallowed html but keep allowed html""" input_text = "
    yes html
    " - parser = InputHtmlParser() - parser.feed(input_text) - output = parser.get_output() + output = clean(input_text) self.assertEqual(" yes html", output) diff --git a/bookwyrm/tests/test_utils.py b/bookwyrm/tests/test_utils.py new file mode 100644 index 000000000..183548975 --- /dev/null +++ b/bookwyrm/tests/test_utils.py @@ -0,0 +1,13 @@ +""" test searching for books """ +import re +from django.test import TestCase + +from bookwyrm.utils import regex + + +class TestUtils(TestCase): + """utility functions""" + + def test_regex(self): + """Regexes used throughout the app""" + self.assertTrue(re.match(regex.DOMAIN, "xn--69aa8bzb.xn--y9a3aq")) diff --git a/bookwyrm/tests/views/admin/test_automod.py b/bookwyrm/tests/views/admin/test_automod.py index 1ed36caf5..95db4d52f 100644 --- a/bookwyrm/tests/views/admin/test_automod.py +++ b/bookwyrm/tests/views/admin/test_automod.py @@ -1,11 +1,14 @@ """ test for app action functionality """ from unittest.mock import patch +from django.contrib.auth.models import Group from django.template.response import TemplateResponse from django.test import TestCase from django.test.client import RequestFactory +from django_celery_beat.models import PeriodicTask, IntervalSchedule from bookwyrm import forms, models, views +from bookwyrm.management.commands import initdb from bookwyrm.tests.validate_html import validate_html @@ -25,14 +28,52 @@ class AutomodViews(TestCase): local=True, localname="mouse", ) + initdb.init_groups() + initdb.init_permissions() + group = Group.objects.get(name="moderator") + self.local_user.groups.set([group]) models.SiteSettings.objects.create() def test_automod_rules_get(self): + """there are so many views, this just makes sure it LOADS""" + schedule = IntervalSchedule.objects.create(every=1, period="days") + PeriodicTask.objects.create( + interval=schedule, + name="automod-task", + task="bookwyrm.models.antispam.automod_task", + ) + models.AutoMod.objects.create(created_by=self.local_user, string_match="hello") + view = views.AutoMod.as_view() + request = self.factory.get("") + request.user = self.local_user + + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_automod_rules_get_empty_with_schedule(self): + """there are so many views, this just makes sure it LOADS""" + schedule = IntervalSchedule.objects.create(every=1, period="days") + PeriodicTask.objects.create( + interval=schedule, + name="automod-task", + task="bookwyrm.models.antispam.automod_task", + ) + view = views.AutoMod.as_view() + request = self.factory.get("") + request.user = self.local_user + + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_automod_rules_get_empty_without_schedule(self): """there are so many views, this just makes sure it LOADS""" view = views.AutoMod.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True result = view(request) self.assertIsInstance(result, TemplateResponse) @@ -45,14 +86,33 @@ class AutomodViews(TestCase): form.data["string_match"] = "hello" form.data["flag_users"] = True form.data["flag_statuses"] = False - form.data["created_by"] = self.local_user + form.data["created_by"] = self.local_user.id view = views.AutoMod.as_view() request = self.factory.post("", form.data) request.user = self.local_user - request.user.is_superuser = True result = view(request) + self.assertIsInstance(result, TemplateResponse) validate_html(result.render()) self.assertEqual(result.status_code, 200) + + rule = models.AutoMod.objects.get() + self.assertTrue(rule.flag_users) + self.assertFalse(rule.flag_statuses) + + def test_schedule_automod_task(self): + """Schedule the task""" + self.assertFalse(IntervalSchedule.objects.exists()) + + form = forms.IntervalScheduleForm() + form.data["every"] = 1 + form.data["period"] = "days" + request = self.factory.post("", form.data) + request.user = self.local_user + + response = views.schedule_automod_task(request) + self.assertEqual(response.status_code, 302) + + self.assertTrue(IntervalSchedule.objects.exists()) diff --git a/bookwyrm/tests/views/admin/test_dashboard.py b/bookwyrm/tests/views/admin/test_dashboard.py index d05772c25..c36e2918f 100644 --- a/bookwyrm/tests/views/admin/test_dashboard.py +++ b/bookwyrm/tests/views/admin/test_dashboard.py @@ -1,10 +1,13 @@ """ test for app action functionality """ from unittest.mock import patch + +from django.contrib.auth.models import Group from django.template.response import TemplateResponse from django.test import TestCase from django.test.client import RequestFactory from bookwyrm import models, views +from bookwyrm.management.commands import initdb from bookwyrm.tests.validate_html import validate_html @@ -24,6 +27,10 @@ class DashboardViews(TestCase): local=True, localname="mouse", ) + initdb.init_groups() + initdb.init_permissions() + group = Group.objects.get(name="moderator") + self.local_user.groups.set([group]) models.SiteSettings.objects.create() @@ -32,7 +39,7 @@ class DashboardViews(TestCase): view = views.Dashboard.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True + result = view(request) self.assertIsInstance(result, TemplateResponse) validate_html(result.render()) diff --git a/bookwyrm/tests/views/admin/test_email_blocks.py b/bookwyrm/tests/views/admin/test_email_blocks.py index 4fe9412e9..3c0f548e6 100644 --- a/bookwyrm/tests/views/admin/test_email_blocks.py +++ b/bookwyrm/tests/views/admin/test_email_blocks.py @@ -1,11 +1,13 @@ """ test for app action functionality """ from unittest.mock import patch +from django.contrib.auth.models import Group from django.template.response import TemplateResponse from django.test import TestCase from django.test.client import RequestFactory from bookwyrm import models, views +from bookwyrm.management.commands import initdb from bookwyrm.tests.validate_html import validate_html @@ -25,6 +27,10 @@ class EmailBlocklistViews(TestCase): local=True, localname="mouse", ) + initdb.init_groups() + initdb.init_permissions() + group = Group.objects.get(name="moderator") + self.local_user.groups.set([group]) models.SiteSettings.objects.create() @@ -33,7 +39,6 @@ class EmailBlocklistViews(TestCase): view = views.EmailBlocklist.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True result = view(request) @@ -46,7 +51,6 @@ class EmailBlocklistViews(TestCase): view = views.EmailBlocklist.as_view() request = self.factory.post("", {"domain": "gmail.com"}) request.user = self.local_user - request.user.is_superuser = True result = view(request) @@ -65,7 +69,6 @@ class EmailBlocklistViews(TestCase): view = views.EmailBlocklist.as_view() request = self.factory.post("") request.user = self.local_user - request.user.is_superuser = True result = view(request, domain_id=domain.id) self.assertEqual(result.status_code, 302) diff --git a/bookwyrm/tests/views/admin/test_federation.py b/bookwyrm/tests/views/admin/test_federation.py index 340ed6052..33d7990b3 100644 --- a/bookwyrm/tests/views/admin/test_federation.py +++ b/bookwyrm/tests/views/admin/test_federation.py @@ -3,12 +3,14 @@ import os import json from unittest.mock import patch +from django.contrib.auth.models import Group from django.core.files.uploadedfile import SimpleUploadedFile from django.template.response import TemplateResponse from django.test import TestCase from django.test.client import RequestFactory from bookwyrm import forms, models, views +from bookwyrm.management.commands import initdb from bookwyrm.tests.validate_html import validate_html @@ -38,6 +40,10 @@ class FederationViews(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) + initdb.init_groups() + initdb.init_permissions() + group = Group.objects.get(name="moderator") + self.local_user.groups.set([group]) models.SiteSettings.objects.create() @@ -46,7 +52,7 @@ class FederationViews(TestCase): view = views.Federation.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True + result = view(request) self.assertIsInstance(result, TemplateResponse) validate_html(result.render()) @@ -58,7 +64,6 @@ class FederationViews(TestCase): view = views.FederatedServer.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True result = view(request, server.id) self.assertIsInstance(result, TemplateResponse) @@ -81,7 +86,6 @@ class FederationViews(TestCase): view = views.block_server request = self.factory.post("") request.user = self.local_user - request.user.is_superuser = True with patch("bookwyrm.suggested_users.bulk_remove_instance_task.delay") as mock: view(request, server.id) @@ -121,7 +125,6 @@ class FederationViews(TestCase): request = self.factory.post("") request.user = self.local_user - request.user.is_superuser = True with patch("bookwyrm.suggested_users.bulk_add_instance_task.delay") as mock: views.unblock_server(request, server.id) @@ -147,7 +150,6 @@ class FederationViews(TestCase): view = views.AddFederatedServer.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True result = view(request) self.assertIsInstance(result, TemplateResponse) @@ -164,7 +166,6 @@ class FederationViews(TestCase): view = views.AddFederatedServer.as_view() request = self.factory.post("", form.data) request.user = self.local_user - request.user.is_superuser = True view(request) server = models.FederatedServer.objects.get() @@ -196,7 +197,6 @@ class FederationViews(TestCase): }, ) request.user = self.local_user - request.user.is_superuser = True view(request) server.refresh_from_db() diff --git a/bookwyrm/tests/views/admin/test_ip_blocklist.py b/bookwyrm/tests/views/admin/test_ip_blocklist.py index af63ffaf3..a15a4d368 100644 --- a/bookwyrm/tests/views/admin/test_ip_blocklist.py +++ b/bookwyrm/tests/views/admin/test_ip_blocklist.py @@ -1,10 +1,13 @@ """ test for app action functionality """ from unittest.mock import patch + +from django.contrib.auth.models import Group from django.template.response import TemplateResponse from django.test import TestCase from django.test.client import RequestFactory from bookwyrm import forms, models, views +from bookwyrm.management.commands import initdb from bookwyrm.tests.validate_html import validate_html @@ -24,6 +27,10 @@ class IPBlocklistViews(TestCase): local=True, localname="mouse", ) + initdb.init_groups() + initdb.init_permissions() + group = Group.objects.get(name="moderator") + self.local_user.groups.set([group]) models.SiteSettings.objects.create() @@ -32,7 +39,6 @@ class IPBlocklistViews(TestCase): view = views.IPBlocklist.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True result = view(request) @@ -48,7 +54,6 @@ class IPBlocklistViews(TestCase): request = self.factory.post("", form.data) request.user = self.local_user - request.user.is_superuser = True result = view(request) @@ -67,7 +72,6 @@ class IPBlocklistViews(TestCase): request = self.factory.post("") request.user = self.local_user - request.user.is_superuser = True view(request, block.id) self.assertFalse(models.IPBlocklist.objects.exists()) diff --git a/bookwyrm/tests/views/admin/test_link_domains.py b/bookwyrm/tests/views/admin/test_link_domains.py index 5d440dc50..5b2b8e025 100644 --- a/bookwyrm/tests/views/admin/test_link_domains.py +++ b/bookwyrm/tests/views/admin/test_link_domains.py @@ -1,11 +1,13 @@ """ test for app action functionality """ from unittest.mock import patch +from django.contrib.auth.models import Group from django.template.response import TemplateResponse from django.test import TestCase from django.test.client import RequestFactory from bookwyrm import models, views +from bookwyrm.management.commands import initdb from bookwyrm.tests.validate_html import validate_html @@ -25,6 +27,11 @@ class LinkDomainViews(TestCase): local=True, localname="mouse", ) + initdb.init_groups() + initdb.init_permissions() + group = Group.objects.get(name="moderator") + self.local_user.groups.set([group]) + self.book = models.Edition.objects.create(title="hello") models.FileLink.objects.create( book=self.book, @@ -39,7 +46,6 @@ class LinkDomainViews(TestCase): view = views.LinkDomain.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True result = view(request, "pending") @@ -55,7 +61,6 @@ class LinkDomainViews(TestCase): view = views.LinkDomain.as_view() request = self.factory.post("", {"name": "ugh"}) request.user = self.local_user - request.user.is_superuser = True result = view(request, "pending", domain.id) self.assertEqual(result.status_code, 302) @@ -71,7 +76,6 @@ class LinkDomainViews(TestCase): view = views.update_domain_status request = self.factory.post("") request.user = self.local_user - request.user.is_superuser = True result = view(request, domain.id, "approved") self.assertEqual(result.status_code, 302) diff --git a/bookwyrm/tests/views/admin/test_reports.py b/bookwyrm/tests/views/admin/test_reports.py index d0875f2c2..e93b34341 100644 --- a/bookwyrm/tests/views/admin/test_reports.py +++ b/bookwyrm/tests/views/admin/test_reports.py @@ -2,11 +2,13 @@ import json from unittest.mock import patch +from django.contrib.auth.models import Group from django.template.response import TemplateResponse from django.test import TestCase from django.test.client import RequestFactory -from bookwyrm import forms, models, views +from bookwyrm import models, views +from bookwyrm.management.commands import initdb from bookwyrm.tests.validate_html import validate_html @@ -33,6 +35,10 @@ class ReportViews(TestCase): local=True, localname="rat", ) + initdb.init_groups() + initdb.init_permissions() + group = Group.objects.get(name="moderator") + self.local_user.groups.set([group]) models.SiteSettings.objects.create() def test_reports_page(self): @@ -40,7 +46,6 @@ class ReportViews(TestCase): view = views.ReportsAdmin.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True result = view(request) self.assertIsInstance(result, TemplateResponse) @@ -52,7 +57,6 @@ class ReportViews(TestCase): view = views.ReportsAdmin.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True models.Report.objects.create(reporter=self.local_user, user=self.rat) result = view(request) @@ -65,7 +69,6 @@ class ReportViews(TestCase): view = views.ReportAdmin.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True report = models.Report.objects.create(reporter=self.local_user, user=self.rat) result = view(request, report.id) @@ -79,7 +82,6 @@ class ReportViews(TestCase): view = views.ReportAdmin.as_view() request = self.factory.post("", {"note": "hi"}) request.user = self.local_user - request.user.is_superuser = True report = models.Report.objects.create(reporter=self.local_user, user=self.rat) view(request, report.id) @@ -89,59 +91,12 @@ class ReportViews(TestCase): self.assertEqual(comment.note, "hi") self.assertEqual(comment.report, report) - def test_report_modal_view(self): - """a user reports another user""" - request = self.factory.get("") - request.user = self.local_user - result = views.Report.as_view()(request, self.local_user.id) - - validate_html(result.render()) - - def test_make_report(self): - """a user reports another user""" - form = forms.ReportForm() - form.data["reporter"] = self.local_user.id - form.data["user"] = self.rat.id - request = self.factory.post("", form.data) - request.user = self.local_user - - views.Report.as_view()(request) - - report = models.Report.objects.get() - self.assertEqual(report.reporter, self.local_user) - self.assertEqual(report.user, self.rat) - - def test_report_link(self): - """a user reports a link as spam""" - book = models.Edition.objects.create(title="hi") - link = models.FileLink.objects.create( - book=book, added_by=self.local_user, url="https://skdjfs.sdf" - ) - domain = link.domain - domain.status = "approved" - domain.save() - - form = forms.ReportForm() - form.data["reporter"] = self.local_user.id - form.data["user"] = self.rat.id - form.data["links"] = link.id - request = self.factory.post("", form.data) - request.user = self.local_user - - views.Report.as_view()(request) - - report = models.Report.objects.get() - domain.refresh_from_db() - self.assertEqual(report.links.first().id, link.id) - self.assertEqual(domain.status, "pending") - def test_resolve_report(self): """toggle report resolution status""" report = models.Report.objects.create(reporter=self.local_user, user=self.rat) self.assertFalse(report.resolved) request = self.factory.post("") request.user = self.local_user - request.user.is_superuser = True # resolve views.resolve_report(request, report.id) @@ -161,7 +116,6 @@ class ReportViews(TestCase): self.assertTrue(self.rat.is_active) request = self.factory.post("") request.user = self.local_user - request.user.is_superuser = True # de-activate views.suspend_user(request, self.rat.id) @@ -180,7 +134,6 @@ class ReportViews(TestCase): self.assertTrue(self.rat.is_active) request = self.factory.post("", {"password": "password"}) request.user = self.local_user - request.user.is_superuser = True # de-activate with patch( diff --git a/bookwyrm/tests/views/admin/test_site.py b/bookwyrm/tests/views/admin/test_site.py new file mode 100644 index 000000000..85f785027 --- /dev/null +++ b/bookwyrm/tests/views/admin/test_site.py @@ -0,0 +1,85 @@ +""" test for app action functionality """ +from unittest.mock import patch + +from django.contrib.auth.models import Group +from django.template.response import TemplateResponse +from django.test import TestCase +from django.test.client import RequestFactory + +from bookwyrm import forms, models, views +from bookwyrm.management.commands import initdb +from bookwyrm.tests.validate_html import validate_html + + +class SiteSettingsViews(TestCase): + """Edit site settings""" + + def setUp(self): + """we need basic test data and mocks""" + self.factory = RequestFactory() + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + self.local_user = models.User.objects.create_user( + "mouse@local.com", + "mouse@mouse.mouse", + "password", + local=True, + localname="mouse", + ) + initdb.init_groups() + initdb.init_permissions() + group = Group.objects.get(name="admin") + self.local_user.groups.set([group]) + + self.site = models.SiteSettings.objects.create() + + def test_site_get(self): + """there are so many views, this just makes sure it LOADS""" + view = views.Site.as_view() + request = self.factory.get("") + request.user = self.local_user + + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_site_post(self): + """there are so many views, this just makes sure it LOADS""" + view = views.Site.as_view() + form = forms.SiteForm() + form.data["name"] = "Name!" + form.data["instance_tagline"] = "hi" + form.data["instance_description"] = "blah" + form.data["registration_closed_text"] = "blah" + form.data["invite_request_text"] = "blah" + form.data["code_of_conduct"] = "blah" + form.data["privacy_policy"] = "blah" + request = self.factory.post("", form.data) + request.user = self.local_user + + result = view(request) + + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + site = models.SiteSettings.objects.get() + self.assertEqual(site.name, "Name!") + + def test_site_post_invalid(self): + """there are so many views, this just makes sure it LOADS""" + view = views.Site.as_view() + form = forms.SiteForm() + request = self.factory.post("", form.data) + request.user = self.local_user + + result = view(request) + + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + self.site.refresh_from_db() + self.assertEqual(self.site.name, "BookWyrm") diff --git a/bookwyrm/tests/views/admin/test_user_admin.py b/bookwyrm/tests/views/admin/test_user_admin.py index 4cb3702d8..3f480d990 100644 --- a/bookwyrm/tests/views/admin/test_user_admin.py +++ b/bookwyrm/tests/views/admin/test_user_admin.py @@ -7,6 +7,7 @@ from django.test import TestCase from django.test.client import RequestFactory from bookwyrm import models, views +from bookwyrm.management.commands import initdb from bookwyrm.tests.validate_html import validate_html @@ -26,6 +27,10 @@ class UserAdminViews(TestCase): local=True, localname="mouse", ) + initdb.init_groups() + initdb.init_permissions() + group = Group.objects.get(name="moderator") + self.local_user.groups.set([group]) models.SiteSettings.objects.create() def test_user_admin_list_page(self): @@ -33,7 +38,7 @@ class UserAdminViews(TestCase): view = views.UserAdminList.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True + result = view(request) self.assertIsInstance(result, TemplateResponse) validate_html(result.render()) @@ -44,7 +49,6 @@ class UserAdminViews(TestCase): view = views.UserAdmin.as_view() request = self.factory.get("") request.user = self.local_user - request.user.is_superuser = True result = view(request, self.local_user.id) @@ -57,15 +61,14 @@ class UserAdminViews(TestCase): @patch("bookwyrm.suggested_users.remove_user_task.delay") def test_user_admin_page_post(self, *_): """set the user's group""" - group = Group.objects.create(name="editor") + group = Group.objects.get(name="editor") self.assertEqual( - list(self.local_user.groups.values_list("name", flat=True)), [] + list(self.local_user.groups.values_list("name", flat=True)), ["moderator"] ) view = views.UserAdmin.as_view() request = self.factory.post("", {"groups": [group.id]}) request.user = self.local_user - request.user.is_superuser = True with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): result = view(request, self.local_user.id) diff --git a/bookwyrm/tests/views/books/test_edit_book.py b/bookwyrm/tests/views/books/test_edit_book.py index c7869807b..1ac8336d8 100644 --- a/bookwyrm/tests/views/books/test_edit_book.py +++ b/bookwyrm/tests/views/books/test_edit_book.py @@ -48,7 +48,7 @@ class EditBookViews(TestCase): models.SiteSettings.objects.create() - def test_edit_book_page(self): + def test_edit_book_get(self): """there are so many views, this just makes sure it LOADS""" view = views.EditBook.as_view() request = self.factory.get("") @@ -59,18 +59,7 @@ class EditBookViews(TestCase): validate_html(result.render()) self.assertEqual(result.status_code, 200) - def test_edit_book_create_page(self): - """there are so many views, this just makes sure it LOADS""" - view = views.CreateBook.as_view() - request = self.factory.get("") - request.user = self.local_user - request.user.is_superuser = True - result = view(request) - self.assertIsInstance(result, TemplateResponse) - validate_html(result.render()) - self.assertEqual(result.status_code, 200) - - def test_edit_book(self): + def test_edit_book_post(self): """lets a user edit a book""" view = views.EditBook.as_view() self.local_user.groups.add(self.group) @@ -86,6 +75,23 @@ class EditBookViews(TestCase): self.book.refresh_from_db() self.assertEqual(self.book.title, "New Title") + def test_edit_book_post_invalid(self): + """book form is invalid""" + view = views.EditBook.as_view() + self.local_user.groups.add(self.group) + form = forms.EditionForm(instance=self.book) + form.data["title"] = "" + form.data["last_edited_by"] = self.local_user.id + request = self.factory.post("", form.data) + request.user = self.local_user + + result = view(request, self.book.id) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + # Title is unchanged + self.book.refresh_from_db() + self.assertEqual(self.book.title, "Example Edition") + def test_edit_book_add_author(self): """lets a user edit a book with new authors""" view = views.EditBook.as_view() @@ -234,3 +240,49 @@ class EditBookViews(TestCase): self.assertEqual(len(result["author_matches"]), 2) self.assertEqual(result["author_matches"][0]["name"], "Sappho") self.assertEqual(result["author_matches"][1]["name"], "Some Guy") + + def test_create_book_get(self): + """there are so many views, this just makes sure it LOADS""" + view = views.CreateBook.as_view() + request = self.factory.get("") + request.user = self.local_user + request.user.is_superuser = True + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_create_book_post_existing_work(self): + """Adding an edition to an existing work""" + author = models.Author.objects.create(name="Sappho") + view = views.CreateBook.as_view() + form = forms.EditionForm() + form.data["title"] = "A Title" + form.data["parent_work"] = self.work.id + form.data["authors"] = [author.id] + form.data["last_edited_by"] = self.local_user.id + request = self.factory.post("", form.data) + request.user = self.local_user + request.user.is_superuser = True + + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + result = view(request) + self.assertEqual(result.status_code, 302) + + new_edition = models.Edition.objects.get(title="A Title") + self.assertEqual(new_edition.parent_work, self.work) + self.assertEqual(new_edition.authors.first(), author) + + def test_create_book_post_invalid(self): + """book form is invalid""" + view = views.CreateBook.as_view() + self.local_user.groups.add(self.group) + form = forms.EditionForm(instance=self.book) + form.data["title"] = "" + form.data["last_edited_by"] = self.local_user.id + request = self.factory.post("", form.data) + request.user = self.local_user + + result = view(request) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) diff --git a/bookwyrm/tests/views/inbox/test_inbox_remove.py b/bookwyrm/tests/views/inbox/test_inbox_remove.py index 53288e0d3..d7b3f6778 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_remove.py +++ b/bookwyrm/tests/views/inbox/test_inbox_remove.py @@ -75,7 +75,9 @@ class InboxRemove(TestCase): def test_handle_remove_book_from_list(self): """listing a book""" - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_task.delay"): booklist = models.List.objects.create( name="test list", user=self.local_user, diff --git a/bookwyrm/tests/views/inbox/test_inbox_update.py b/bookwyrm/tests/views/inbox/test_inbox_update.py index 18b2e5d59..e8593c2be 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_update.py +++ b/bookwyrm/tests/views/inbox/test_inbox_update.py @@ -50,7 +50,9 @@ class InboxUpdate(TestCase): def test_update_list(self): """a new list""" - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_task.delay"): book_list = models.List.objects.create( name="hi", remote_id="https://example.com/list/22", user=self.local_user ) @@ -69,7 +71,8 @@ class InboxUpdate(TestCase): "curation": "curated", "@context": "https://www.w3.org/ns/activitystreams", } - views.inbox.activity_task(activity) + with patch("bookwyrm.lists_stream.remove_list_task.delay"): + views.inbox.activity_task(activity) book_list.refresh_from_db() self.assertEqual(book_list.name, "Test List") self.assertEqual(book_list.curation, "curated") diff --git a/bookwyrm/tests/views/landing/test_password.py b/bookwyrm/tests/views/landing/test_password.py index b1f7e59f0..c7c7e05d5 100644 --- a/bookwyrm/tests/views/landing/test_password.py +++ b/bookwyrm/tests/views/landing/test_password.py @@ -104,7 +104,9 @@ class PasswordViews(TestCase): """reset from code""" view = views.PasswordReset.as_view() code = models.PasswordReset.objects.create(user=self.local_user) - request = self.factory.post("", {"password": "hi", "confirm-password": "hi"}) + request = self.factory.post( + "", {"password": "longwordsecure", "confirm_password": "longwordsecure"} + ) with patch("bookwyrm.views.landing.password.login"): resp = view(request, code.code) self.assertEqual(resp.status_code, 302) @@ -114,7 +116,9 @@ class PasswordViews(TestCase): """reset from code""" view = views.PasswordReset.as_view() models.PasswordReset.objects.create(user=self.local_user) - request = self.factory.post("", {"password": "hi", "confirm-password": "hi"}) + request = self.factory.post( + "", {"password": "longwordsecure", "confirm_password": "longwordsecure"} + ) resp = view(request, "jhgdkfjgdf") validate_html(resp.render()) self.assertTrue(models.PasswordReset.objects.exists()) @@ -123,7 +127,18 @@ class PasswordViews(TestCase): """reset from code""" view = views.PasswordReset.as_view() code = models.PasswordReset.objects.create(user=self.local_user) - request = self.factory.post("", {"password": "hi", "confirm-password": "hihi"}) + request = self.factory.post( + "", {"password": "longwordsecure", "confirm_password": "hihi"} + ) + resp = view(request, code.code) + validate_html(resp.render()) + self.assertTrue(models.PasswordReset.objects.exists()) + + def test_password_reset_invalid(self): + """reset from code""" + view = views.PasswordReset.as_view() + code = models.PasswordReset.objects.create(user=self.local_user) + request = self.factory.post("", {"password": "a", "confirm_password": "a"}) resp = view(request, code.code) validate_html(resp.render()) self.assertTrue(models.PasswordReset.objects.exists()) diff --git a/bookwyrm/tests/views/landing/test_register.py b/bookwyrm/tests/views/landing/test_register.py index 24360a646..aa1ca7fb9 100644 --- a/bookwyrm/tests/views/landing/test_register.py +++ b/bookwyrm/tests/views/landing/test_register.py @@ -122,6 +122,17 @@ class RegisterViews(TestCase): self.assertEqual(models.User.objects.count(), 1) validate_html(response.render()) + def test_register_invalid_password(self, *_): + """gotta have an email""" + view = views.Register.as_view() + self.assertEqual(models.User.objects.count(), 1) + request = self.factory.post( + "register/", {"localname": "nutria", "password": "password", "email": "aa"} + ) + response = view(request) + self.assertEqual(models.User.objects.count(), 1) + validate_html(response.render()) + def test_register_error_and_invite(self, *_): """redirect to the invite page""" view = views.Register.as_view() diff --git a/bookwyrm/tests/views/lists/test_curate.py b/bookwyrm/tests/views/lists/test_curate.py index 9be8c2a15..9f3427b2c 100644 --- a/bookwyrm/tests/views/lists/test_curate.py +++ b/bookwyrm/tests/views/lists/test_curate.py @@ -36,7 +36,9 @@ class ListViews(TestCase): parent_work=work, ) - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_task.delay"): self.list = models.List.objects.create( name="Test List", user=self.local_user ) diff --git a/bookwyrm/tests/views/lists/test_embed.py b/bookwyrm/tests/views/lists/test_embed.py index dc61736d3..4191ffe0d 100644 --- a/bookwyrm/tests/views/lists/test_embed.py +++ b/bookwyrm/tests/views/lists/test_embed.py @@ -36,7 +36,9 @@ class ListViews(TestCase): parent_work=work, ) - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_task.delay"): self.list = models.List.objects.create( name="Test List", user=self.local_user ) diff --git a/bookwyrm/tests/views/lists/test_list.py b/bookwyrm/tests/views/lists/test_list.py index bcec0822f..98b0a461a 100644 --- a/bookwyrm/tests/views/lists/test_list.py +++ b/bookwyrm/tests/views/lists/test_list.py @@ -65,7 +65,9 @@ class ListViews(TestCase): parent_work=work_four, ) - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_task.delay"): self.list = models.List.objects.create( name="Test List", user=self.local_user ) @@ -244,7 +246,7 @@ class ListViews(TestCase): with patch( "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ) as mock: + ) as mock, patch("bookwyrm.lists_stream.remove_list_task.delay"): result = view(request, self.list.id) self.assertEqual(mock.call_count, 1) @@ -596,7 +598,7 @@ class ListViews(TestCase): def test_add_book_outsider(self): """put a book on a list""" self.list.curation = "open" - self.list.save(broadcast=False) + self.list.save(broadcast=False, update_fields=["curation"]) request = self.factory.post( "", { @@ -625,7 +627,7 @@ class ListViews(TestCase): def test_add_book_pending(self): """put a book on a list awaiting approval""" self.list.curation = "curated" - self.list.save(broadcast=False) + self.list.save(broadcast=False, update_fields=["curation"]) request = self.factory.post( "", { @@ -658,7 +660,7 @@ class ListViews(TestCase): def test_add_book_self_curated(self): """put a book on a list automatically approved""" self.list.curation = "curated" - self.list.save(broadcast=False) + self.list.save(broadcast=False, update_fields=["curation"]) request = self.factory.post( "", { @@ -687,7 +689,7 @@ class ListViews(TestCase): def test_add_book_permission_denied(self): """you can't add to that list""" self.list.curation = "closed" - self.list.save(broadcast=False) + self.list.save(broadcast=False, update_fields=["curation"]) request = self.factory.post( "", { diff --git a/bookwyrm/tests/views/lists/test_list_item.py b/bookwyrm/tests/views/lists/test_list_item.py index 50be3c286..b95282bef 100644 --- a/bookwyrm/tests/views/lists/test_list_item.py +++ b/bookwyrm/tests/views/lists/test_list_item.py @@ -32,7 +32,9 @@ class ListItemViews(TestCase): remote_id="https://example.com/book/1", parent_work=work, ) - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_task.delay"): self.list = models.List.objects.create( name="Test List", user=self.local_user ) diff --git a/bookwyrm/tests/views/lists/test_lists.py b/bookwyrm/tests/views/lists/test_lists.py index f65d2e4c2..c2263b933 100644 --- a/bookwyrm/tests/views/lists/test_lists.py +++ b/bookwyrm/tests/views/lists/test_lists.py @@ -39,7 +39,9 @@ class ListViews(TestCase): view = views.Lists.as_view() with patch( "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.add_list_task.delay"): + ), patch("bookwyrm.lists_stream.add_list_task.delay"), patch( + "bookwyrm.lists_stream.remove_list_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 @@ -62,7 +64,9 @@ class ListViews(TestCase): 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.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_task.delay"): booklist = models.List.objects.create( name="Public list", user=self.local_user ) @@ -82,7 +86,9 @@ class ListViews(TestCase): 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.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_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 @@ -108,7 +114,9 @@ class ListViews(TestCase): def test_user_lists_page(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.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_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 @@ -146,7 +154,7 @@ class ListViews(TestCase): request.user = self.local_user with patch( "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ) as mock: + ) as mock, patch("bookwyrm.lists_stream.remove_list_task.delay"): result = view(request) self.assertEqual(mock.call_count, 1) diff --git a/bookwyrm/tests/views/preferences/test_change_password.py b/bookwyrm/tests/views/preferences/test_change_password.py index 61837c4e1..879ffd03d 100644 --- a/bookwyrm/tests/views/preferences/test_change_password.py +++ b/bookwyrm/tests/views/preferences/test_change_password.py @@ -42,17 +42,71 @@ class ChangePasswordViews(TestCase): """change password""" view = views.ChangePassword.as_view() password_hash = self.local_user.password - request = self.factory.post("", {"password": "hi", "confirm-password": "hi"}) + request = self.factory.post( + "", + { + "current_password": "password", + "password": "longwordsecure", + "confirm_password": "longwordsecure", + }, + ) request.user = self.local_user with patch("bookwyrm.views.preferences.change_password.login"): - view(request) + result = view(request) + validate_html(result.render()) + self.local_user.refresh_from_db() self.assertNotEqual(self.local_user.password, password_hash) + def test_password_change_wrong_current(self): + """change password""" + view = views.ChangePassword.as_view() + password_hash = self.local_user.password + request = self.factory.post( + "", + { + "current_password": "not my password", + "password": "longwordsecure", + "confirm_password": "hihi", + }, + ) + request.user = self.local_user + result = view(request) + validate_html(result.render()) + self.local_user.refresh_from_db() + self.assertEqual(self.local_user.password, password_hash) + def test_password_change_mismatch(self): """change password""" view = views.ChangePassword.as_view() password_hash = self.local_user.password - request = self.factory.post("", {"password": "hi", "confirm-password": "hihi"}) + request = self.factory.post( + "", + { + "current_password": "password", + "password": "longwordsecure", + "confirm_password": "hihi", + }, + ) request.user = self.local_user - view(request) + result = view(request) + validate_html(result.render()) + self.local_user.refresh_from_db() + self.assertEqual(self.local_user.password, password_hash) + + def test_password_change_invalid(self): + """change password""" + view = views.ChangePassword.as_view() + password_hash = self.local_user.password + request = self.factory.post( + "", + { + "current_password": "password", + "password": "hi", + "confirm_password": "hi", + }, + ) + request.user = self.local_user + result = view(request) + validate_html(result.render()) + self.local_user.refresh_from_db() self.assertEqual(self.local_user.password, password_hash) diff --git a/bookwyrm/tests/views/test_export.py b/bookwyrm/tests/views/preferences/test_export.py similarity index 96% rename from bookwyrm/tests/views/test_export.py rename to bookwyrm/tests/views/preferences/test_export.py index 44c324164..7b13989f3 100644 --- a/bookwyrm/tests/views/test_export.py +++ b/bookwyrm/tests/views/preferences/test_export.py @@ -54,9 +54,9 @@ class ExportViews(TestCase): user=self.local_user, book=self.book, ) - request = self.factory.get("") + request = self.factory.post("") request.user = self.local_user - export = views.export_user_book_data(request) + export = views.Export.as_view()(request) self.assertIsInstance(export, StreamingHttpResponse) self.assertEqual(export.status_code, 200) result = list(export.streaming_content) diff --git a/bookwyrm/tests/views/shelf/test_shelf_actions.py b/bookwyrm/tests/views/shelf/test_shelf_actions.py index 93ff0a38e..290232580 100644 --- a/bookwyrm/tests/views/shelf/test_shelf_actions.py +++ b/bookwyrm/tests/views/shelf/test_shelf_actions.py @@ -32,6 +32,14 @@ class ShelfActionViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) + self.another_user = models.User.objects.create_user( + "rat@local.com", + "rat@rat.com", + "ratword", + local=True, + localname="rat", + remote_id="https://example.com/users/rat", + ) self.work = models.Work.objects.create(title="Test Work") self.book = models.Edition.objects.create( title="Example Edition", @@ -66,7 +74,7 @@ class ShelfActionViews(TestCase): def test_shelve_to_read(self, *_): """special behavior for the to-read shelf""" - shelf = models.Shelf.objects.get(identifier="to-read") + shelf = models.Shelf.objects.get(user=self.local_user, identifier="to-read") request = self.factory.post( "", {"book": self.book.id, "shelf": shelf.identifier} ) @@ -79,7 +87,7 @@ class ShelfActionViews(TestCase): def test_shelve_reading(self, *_): """special behavior for the reading shelf""" - shelf = models.Shelf.objects.get(identifier="reading") + shelf = models.Shelf.objects.get(user=self.local_user, identifier="reading") request = self.factory.post( "", {"book": self.book.id, "shelf": shelf.identifier} ) @@ -92,7 +100,7 @@ class ShelfActionViews(TestCase): def test_shelve_read(self, *_): """special behavior for the read shelf""" - shelf = models.Shelf.objects.get(identifier="read") + shelf = models.Shelf.objects.get(user=self.local_user, identifier="read") request = self.factory.post( "", {"book": self.book.id, "shelf": shelf.identifier} ) @@ -105,11 +113,13 @@ class ShelfActionViews(TestCase): def test_shelve_read_with_change_shelf(self, *_): """special behavior for the read shelf""" - previous_shelf = models.Shelf.objects.get(identifier="reading") + previous_shelf = models.Shelf.objects.get( + user=self.local_user, identifier="reading" + ) models.ShelfBook.objects.create( shelf=previous_shelf, user=self.local_user, book=self.book ) - shelf = models.Shelf.objects.get(identifier="read") + shelf = models.Shelf.objects.get(user=self.local_user, identifier="read") request = self.factory.post( "", @@ -160,11 +170,24 @@ class ShelfActionViews(TestCase): views.create_shelf(request) - shelf = models.Shelf.objects.get(name="new shelf name") + shelf = models.Shelf.objects.get(user=self.local_user, name="new shelf name") self.assertEqual(shelf.privacy, "unlisted") self.assertEqual(shelf.description, "desc") self.assertEqual(shelf.user, self.local_user) + def test_create_shelf_wrong_user(self, *_): + """a brand new custom shelf""" + form = forms.ShelfForm() + form.data["user"] = self.another_user.id + form.data["name"] = "new shelf name" + form.data["description"] = "desc" + form.data["privacy"] = "unlisted" + request = self.factory.post("", form.data) + request.user = self.local_user + + with self.assertRaises(PermissionDenied): + views.create_shelf(request) + def test_delete_shelf(self, *_): """delete a brand new custom shelf""" request = self.factory.post("") @@ -177,18 +200,8 @@ class ShelfActionViews(TestCase): def test_delete_shelf_unauthorized(self, *_): """delete a brand new custom shelf""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): - rat = models.User.objects.create_user( - "rat@local.com", - "rat@mouse.mouse", - "password", - local=True, - localname="rat", - ) request = self.factory.post("") - request.user = rat + request.user = self.another_user with self.assertRaises(PermissionDenied): views.delete_shelf(request, self.shelf.id) diff --git a/bookwyrm/tests/views/test_group.py b/bookwyrm/tests/views/test_group.py index e43b040ac..b0a0c925a 100644 --- a/bookwyrm/tests/views/test_group.py +++ b/bookwyrm/tests/views/test_group.py @@ -257,6 +257,29 @@ class GroupViews(TestCase): self.assertEqual(notification.related_group, self.testgroup) self.assertEqual(notification.notification_type, "REMOVE") + def test_remove_member_remove_self(self, _): + """Leave a group""" + models.GroupMember.objects.create( + user=self.rat, + group=self.testgroup, + ) + request = self.factory.post( + "", + { + "group": self.testgroup.id, + "user": self.rat.localname, + }, + ) + request.user = self.rat + result = views.remove_member(request) + self.assertEqual(result.status_code, 302) + self.assertEqual(models.GroupMember.objects.count(), 1) + self.assertEqual(models.GroupMember.objects.first().user, self.local_user) + notification = models.Notification.objects.get() + self.assertEqual(notification.user, self.local_user) + self.assertEqual(notification.related_group, self.testgroup) + self.assertEqual(notification.notification_type, "LEAVE") + def test_accept_membership(self, _): """accept an invite""" models.GroupMemberInvitation.objects.create( diff --git a/bookwyrm/tests/views/test_helpers.py b/bookwyrm/tests/views/test_helpers.py index a092a4c9a..ce1f6a735 100644 --- a/bookwyrm/tests/views/test_helpers.py +++ b/bookwyrm/tests/views/test_helpers.py @@ -112,7 +112,17 @@ class ViewsHelpers(TestCase): request = self.factory.get("", {"q": "Test Book"}, HTTP_USER_AGENT=USER_AGENT) self.assertTrue(views.helpers.is_bookwyrm_request(request)) - def test_existing_user(self, *_): + def test_handle_remote_webfinger_invalid(self, *_): + """Various ways you can send a bad query""" + # if there's no query, there's no result + result = views.helpers.handle_remote_webfinger(None) + self.assertIsNone(result) + + # malformed user + result = views.helpers.handle_remote_webfinger("noatsymbol") + self.assertIsNone(result) + + def test_handle_remote_webfinger_existing_user(self, *_): """simple database lookup by username""" result = views.helpers.handle_remote_webfinger("@mouse@local.com") self.assertEqual(result, self.local_user) @@ -124,7 +134,19 @@ class ViewsHelpers(TestCase): self.assertEqual(result, self.local_user) @responses.activate - def test_load_user(self, *_): + def test_handle_remote_webfinger_load_user_invalid_result(self, *_): + """find a remote user using webfinger, but fail""" + username = "mouse@example.com" + responses.add( + responses.GET, + f"https://example.com/.well-known/webfinger?resource=acct:{username}", + status=500, + ) + result = views.helpers.handle_remote_webfinger("@mouse@example.com") + self.assertIsNone(result) + + @responses.activate + def test_handle_remote_webfinger_load_user(self, *_): """find a remote user using webfinger""" username = "mouse@example.com" wellknown = { @@ -154,7 +176,7 @@ class ViewsHelpers(TestCase): self.assertIsInstance(result, models.User) self.assertEqual(result.username, "mouse@example.com") - def test_user_on_blocked_server(self, *_): + def test_handler_remote_webfinger_user_on_blocked_server(self, *_): """find a remote user using webfinger""" models.FederatedServer.objects.create( server_name="example.com", status="blocked" @@ -163,6 +185,38 @@ class ViewsHelpers(TestCase): result = views.helpers.handle_remote_webfinger("@mouse@example.com") self.assertIsNone(result) + @responses.activate + def test_subscribe_remote_webfinger(self, *_): + """remote subscribe templates""" + query = "mouse@example.com" + response = { + "subject": f"acct:{query}", + "links": [ + { + "rel": "self", + "type": "application/activity+json", + "href": "https://example.com/user/mouse", + "template": "hi", + }, + { + "rel": "http://ostatus.org/schema/1.0/subscribe", + "type": "application/activity+json", + "href": "https://example.com/user/mouse", + "template": "hello", + }, + ], + } + responses.add( + responses.GET, + f"https://example.com/.well-known/webfinger?resource=acct:{query}", + json=response, + status=200, + ) + template = views.helpers.subscribe_remote_webfinger(query) + self.assertEqual(template, "hello") + template = views.helpers.subscribe_remote_webfinger(f"@{query}") + self.assertEqual(template, "hello") + def test_handle_reading_status_to_read(self, *_): """posts shelve activities""" shelf = self.local_user.shelf_set.get(identifier="to-read") diff --git a/bookwyrm/tests/views/test_interaction.py b/bookwyrm/tests/views/test_interaction.py index 1d729f9a5..74878df7d 100644 --- a/bookwyrm/tests/views/test_interaction.py +++ b/bookwyrm/tests/views/test_interaction.py @@ -60,7 +60,7 @@ class InteractionViews(TestCase): notification = models.Notification.objects.get() self.assertEqual(notification.notification_type, "FAVORITE") self.assertEqual(notification.user, self.local_user) - self.assertEqual(notification.related_user, self.remote_user) + self.assertEqual(notification.related_users.first(), self.remote_user) def test_unfavorite(self, *_): """unfav a status""" @@ -98,7 +98,7 @@ class InteractionViews(TestCase): notification = models.Notification.objects.get() self.assertEqual(notification.notification_type, "BOOST") self.assertEqual(notification.user, self.local_user) - self.assertEqual(notification.related_user, self.remote_user) + self.assertEqual(notification.related_users.first(), self.remote_user) self.assertEqual(notification.related_status, status) def test_self_boost(self, *_): diff --git a/bookwyrm/tests/views/test_notifications.py b/bookwyrm/tests/views/test_notifications.py index 2a5cf7984..8e5dfa2b5 100644 --- a/bookwyrm/tests/views/test_notifications.py +++ b/bookwyrm/tests/views/test_notifications.py @@ -25,10 +25,12 @@ class NotificationViews(TestCase): local=True, localname="mouse", ) + self.another_user = models.User.objects.create_user( + "rat", "rat@rat.rat", "ratword", local=True, localname="rat" + ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): self.status = models.Status.objects.create( - content="hi", - user=self.local_user, + content="hi", user=self.local_user ) models.SiteSettings.objects.create() @@ -42,27 +44,31 @@ class NotificationViews(TestCase): validate_html(result.render()) self.assertEqual(result.status_code, 200) - def test_notifications_page_notifications(self): + def test_notifications_page_status_notifications(self): """there are so many views, this just makes sure it LOADS""" - models.Notification.objects.create( - user=self.local_user, + models.Notification.notify( + self.local_user, + self.another_user, notification_type="FAVORITE", related_status=self.status, ) - models.Notification.objects.create( - user=self.local_user, + models.Notification.notify( + self.local_user, + self.another_user, notification_type="BOOST", related_status=self.status, ) - models.Notification.objects.create( - user=self.local_user, + models.Notification.notify( + self.local_user, + self.another_user, notification_type="MENTION", related_status=self.status, ) self.status.reply_parent = self.status self.status.save(broadcast=False) - models.Notification.objects.create( - user=self.local_user, + models.Notification.notify( + self.local_user, + self.another_user, notification_type="REPLY", related_status=self.status, ) @@ -74,6 +80,200 @@ class NotificationViews(TestCase): validate_html(result.render()) self.assertEqual(result.status_code, 200) + def test_notifications_page_follow_request(self): + """import completed notification""" + models.Notification.notify( + self.local_user, + self.another_user, + notification_type="FOLLOW_REQUEST", + ) + view = views.Notifications.as_view() + request = self.factory.get("") + request.user = self.local_user + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + + def test_notifications_page_follows(self): + """import completed notification""" + models.Notification.notify( + self.local_user, + self.another_user, + notification_type="FOLLOW", + ) + view = views.Notifications.as_view() + request = self.factory.get("") + request.user = self.local_user + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + + def test_notifications_page_report(self): + """import completed notification""" + report = models.Report.objects.create( + user=self.another_user, + reporter=self.local_user, + ) + notification = models.Notification.objects.create( + user=self.local_user, + notification_type="REPORT", + ) + notification.related_reports.add(report) + + view = views.Notifications.as_view() + request = self.factory.get("") + request.user = self.local_user + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + + def test_notifications_page_import(self): + """import completed notification""" + import_job = models.ImportJob.objects.create(user=self.local_user, mappings={}) + models.Notification.objects.create( + user=self.local_user, notification_type="IMPORT", related_import=import_job + ) + view = views.Notifications.as_view() + request = self.factory.get("") + request.user = self.local_user + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_notifications_page_list(self): + """Adding books to lists""" + book = models.Edition.objects.create(title="shape") + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + book_list = models.List.objects.create(user=self.local_user, name="hi") + item = models.ListItem.objects.create( + book=book, user=self.another_user, book_list=book_list, order=1 + ) + models.Notification.notify_list_item(self.local_user, item) + view = views.Notifications.as_view() + request = self.factory.get("") + request.user = self.local_user + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_notifications_page_group_invite(self): + """group related notifications""" + group = models.Group.objects.create(user=self.another_user, name="group") + models.Notification.notify( + self.local_user, + self.another_user, + notification_type="INVITE", + related_group=group, + ) + view = views.Notifications.as_view() + request = self.factory.get("") + request.user = self.local_user + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_notifications_page_group_accept(self): + """group related notifications""" + group = models.Group.objects.create(user=self.another_user, name="group") + models.Notification.notify( + self.local_user, + self.another_user, + notification_type="ACCEPT", + related_group=group, + ) + view = views.Notifications.as_view() + request = self.factory.get("") + request.user = self.local_user + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_notifications_page_group_join(self): + """group related notifications""" + group = models.Group.objects.create(user=self.another_user, name="group") + models.Notification.notify( + self.local_user, + self.another_user, + notification_type="JOIN", + related_group=group, + ) + view = views.Notifications.as_view() + request = self.factory.get("") + request.user = self.local_user + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_notifications_page_group_leave(self): + """group related notifications""" + group = models.Group.objects.create(user=self.another_user, name="group") + models.Notification.notify( + self.local_user, + self.another_user, + notification_type="LEAVE", + related_group=group, + ) + view = views.Notifications.as_view() + request = self.factory.get("") + request.user = self.local_user + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_notifications_page_group_remove(self): + """group related notifications""" + group = models.Group.objects.create(user=self.another_user, name="group") + models.Notification.notify( + self.local_user, + self.another_user, + notification_type="REMOVE", + related_group=group, + ) + view = views.Notifications.as_view() + request = self.factory.get("") + request.user = self.local_user + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_notifications_page_group_changes(self): + """group related notifications""" + group = models.Group.objects.create(user=self.another_user, name="group") + models.Notification.notify( + self.local_user, + self.another_user, + notification_type="GROUP_PRIVACY", + related_group=group, + ) + models.Notification.notify( + self.local_user, + self.another_user, + notification_type="GROUP_NAME", + related_group=group, + ) + models.Notification.notify( + self.local_user, + self.another_user, + notification_type="GROUP_DESCRIPTION", + related_group=group, + ) + view = views.Notifications.as_view() + request = self.factory.get("") + request.user = self.local_user + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + def test_clear_notifications(self): """erase notifications""" models.Notification.objects.create( diff --git a/bookwyrm/tests/views/test_report.py b/bookwyrm/tests/views/test_report.py new file mode 100644 index 000000000..85dca8aea --- /dev/null +++ b/bookwyrm/tests/views/test_report.py @@ -0,0 +1,109 @@ +""" test for app action functionality """ +from unittest.mock import patch + +from django.test import TestCase +from django.test.client import RequestFactory + +from bookwyrm import forms, models, views +from bookwyrm.tests.validate_html import validate_html + + +class ReportViews(TestCase): + """every response to a get request, html or json""" + + def setUp(self): + """we need basic test data and mocks""" + self.factory = RequestFactory() + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + self.local_user = models.User.objects.create_user( + "mouse@local.com", + "mouse@mouse.mouse", + "password", + local=True, + localname="mouse", + ) + self.rat = models.User.objects.create_user( + "rat@local.com", + "rat@mouse.mouse", + "password", + local=True, + localname="rat", + ) + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.activitystreams.add_status_task.delay"): + self.status = models.Status.objects.create( + user=self.local_user, + content="Test status", + ) + models.SiteSettings.objects.create() + + def test_report_modal_view(self): + """a user reports another user""" + request = self.factory.get("") + request.user = self.local_user + result = views.Report.as_view()(request, self.local_user.id) + + validate_html(result.render()) + + def test_report_modal_view_with_status(self): + """a user reports another user""" + request = self.factory.get("") + request.user = self.local_user + result = views.Report.as_view()( + request, user_id=self.local_user.id, status_id=self.status.id + ) + + validate_html(result.render()) + + def test_report_modal_view_with_link_domain(self): + """a user reports another user""" + link = models.Link.objects.create( + url="http://example.com/hi", + added_by=self.local_user, + ) + request = self.factory.get("") + request.user = self.local_user + result = views.Report.as_view()(request, link_id=link.id) + + validate_html(result.render()) + + def test_make_report(self): + """a user reports another user""" + form = forms.ReportForm() + form.data["reporter"] = self.local_user.id + form.data["user"] = self.rat.id + request = self.factory.post("", form.data) + request.user = self.local_user + + views.Report.as_view()(request) + + report = models.Report.objects.get() + self.assertEqual(report.reporter, self.local_user) + self.assertEqual(report.user, self.rat) + + def test_report_link(self): + """a user reports a link as spam""" + book = models.Edition.objects.create(title="hi") + link = models.FileLink.objects.create( + book=book, added_by=self.local_user, url="https://skdjfs.sdf" + ) + domain = link.domain + domain.status = "approved" + domain.save() + + form = forms.ReportForm() + form.data["reporter"] = self.local_user.id + form.data["user"] = self.rat.id + form.data["links"] = link.id + request = self.factory.post("", form.data) + request.user = self.local_user + + views.Report.as_view()(request) + + report = models.Report.objects.get() + domain.refresh_from_db() + self.assertEqual(report.links.first().id, link.id) + self.assertEqual(domain.status, "pending") diff --git a/bookwyrm/tests/views/test_search.py b/bookwyrm/tests/views/test_search.py index 2df04f588..d6e00edb6 100644 --- a/bookwyrm/tests/views/test_search.py +++ b/bookwyrm/tests/views/test_search.py @@ -1,6 +1,5 @@ """ test for app action functionality """ import json -import pathlib from unittest.mock import patch from django.contrib.auth.models import AnonymousUser @@ -8,9 +7,9 @@ from django.http import JsonResponse from django.template.response import TemplateResponse from django.test import TestCase from django.test.client import RequestFactory -import responses from bookwyrm import models, views +from bookwyrm.book_search import SearchResult from bookwyrm.settings import DOMAIN from bookwyrm.tests.validate_html import validate_html @@ -65,12 +64,11 @@ class Views(TestCase): self.assertIsInstance(response, TemplateResponse) validate_html(response.render()) - @responses.activate def test_search_books(self): """searches remote connectors""" view = views.Search.as_view() - models.Connector.objects.create( + connector = models.Connector.objects.create( identifier="example.com", connector_file="openlibrary", base_url="https://example.com", @@ -78,26 +76,24 @@ class Views(TestCase): covers_url="https://example.com/covers", search_url="https://example.com/search?q=", ) - datafile = pathlib.Path(__file__).parent.joinpath("../data/ol_search.json") - search_data = json.loads(datafile.read_bytes()) - responses.add( - responses.GET, "https://example.com/search?q=Test%20Book", json=search_data - ) + mock_result = SearchResult(title="Mock Book", connector=connector, key="hello") request = self.factory.get("", {"q": "Test Book", "remote": True}) request.user = self.local_user with patch("bookwyrm.views.search.is_api_request") as is_api: is_api.return_value = False - response = view(request) + with patch("bookwyrm.connectors.connector_manager.search") as remote_search: + remote_search.return_value = [ + {"results": [mock_result], "connector": connector} + ] + response = view(request) + self.assertIsInstance(response, TemplateResponse) validate_html(response.render()) connector_results = response.context_data["results"] self.assertEqual(len(connector_results), 2) self.assertEqual(connector_results[0]["results"][0].title, "Test Book") - self.assertEqual( - connector_results[1]["results"][0].title, - "This Is How You Lose the Time War", - ) + self.assertEqual(connector_results[1]["results"][0].title, "Mock Book") # don't search remote request = self.factory.get("", {"q": "Test Book", "remote": True}) @@ -106,7 +102,11 @@ class Views(TestCase): request.user = anonymous_user with patch("bookwyrm.views.search.is_api_request") as is_api: is_api.return_value = False - response = view(request) + with patch("bookwyrm.connectors.connector_manager.search") as remote_search: + remote_search.return_value = [ + {"results": [mock_result], "connector": connector} + ] + response = view(request) self.assertIsInstance(response, TemplateResponse) validate_html(response.render()) connector_results = response.context_data["results"] @@ -140,7 +140,9 @@ class Views(TestCase): def test_search_lists(self): """searches remote connectors""" - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.remove_list_task.delay"): booklist = models.List.objects.create( user=self.local_user, name="test list" ) diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py index 355071573..1159b3863 100644 --- a/bookwyrm/tests/views/test_status.py +++ b/bookwyrm/tests/views/test_status.py @@ -10,12 +10,13 @@ from bookwyrm.settings import DOMAIN from bookwyrm.tests.validate_html import validate_html -# pylint: disable=invalid-name @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.lists_stream.populate_lists_task.delay") @patch("bookwyrm.activitystreams.remove_status_task.delay") @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") +# pylint: disable=invalid-name +# pylint: disable=too-many-public-methods class StatusViews(TestCase): """viewing and creating statuses""" @@ -75,6 +76,22 @@ class StatusViews(TestCase): self.assertEqual(status.book, self.book) self.assertIsNone(status.edited_date) + def test_create_status_wrong_user(self, *_): + """You can't compose statuses for someone else""" + view = views.CreateStatus.as_view() + form = forms.CommentForm( + { + "content": "hi", + "user": self.remote_user.id, + "book": self.book.id, + "privacy": "public", + } + ) + request = self.factory.post("", form.data) + request.user = self.local_user + with self.assertRaises(PermissionDenied): + view(request, "comment") + def test_create_status_reply(self, *_): """create a status in reply to an existing status""" view = views.CreateStatus.as_view() @@ -281,7 +298,7 @@ http://www.fish.com/""" result = views.status.to_markdown(text) self.assertEqual( result, - '

    hi and fish.com ' "is rad

    ", + '

    hi and fish.com is rad

    ', ) def test_to_markdown_detect_url(self, *_): @@ -297,7 +314,7 @@ http://www.fish.com/""" """this is mostly handled in other places, but nonetheless""" text = "[hi](http://fish.com) is rad" result = views.status.to_markdown(text) - self.assertEqual(result, '

    hi ' "is rad

    ") + self.assertEqual(result, '

    hi is rad

    ') def test_delete_status(self, mock, *_): """marks a status as deleted""" diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 5abacae14..faae7daca 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -126,7 +126,7 @@ urlpatterns = [ r"^settings/users/?$", views.UserAdminList.as_view(), name="settings-users" ), re_path( - r"^settings/users/(?P(local|federated))\/?$", + r"^settings/users/(?P(local|federated|deleted))\/?$", views.UserAdminList.as_view(), name="settings-users", ), @@ -287,7 +287,7 @@ urlpatterns = [ name="report-status", ), re_path( - r"^report/(?P\d+)/link/(?P\d+)?$", + r"^report/link/(?P\d+)?$", views.Report.as_view(), name="report-link", ), @@ -482,11 +482,6 @@ urlpatterns = [ name="prefs-password", ), re_path(r"^preferences/export/?$", views.Export.as_view(), name="prefs-export"), - re_path( - r"^preferences/export/file/?$", - views.export_user_book_data, - name="prefs-export-file", - ), re_path(r"^preferences/delete/?$", views.DeleteUser.as_view(), name="prefs-delete"), re_path(r"^preferences/block/?$", views.Block.as_view(), name="prefs-block"), re_path(r"^block/(?P\d+)/?$", views.Block.as_view()), diff --git a/bookwyrm/utils/isni.py b/bookwyrm/utils/isni.py index 180c5e388..ea0364e55 100644 --- a/bookwyrm/utils/isni.py +++ b/bookwyrm/utils/isni.py @@ -106,7 +106,7 @@ def find_authors_by_name(name_string, description=False): if titles: # some of the "titles" in ISNI are a little ...iffy - # '@' is used by ISNI/OCLC to index the starting point ignoring stop words + # @ is used by ISNI/OCLC to index the starting point ignoring stop words # (e.g. "The @Government of no one") title_elements = [ e diff --git a/bookwyrm/utils/sanitizer.py b/bookwyrm/utils/sanitizer.py new file mode 100644 index 000000000..f6c87358c --- /dev/null +++ b/bookwyrm/utils/sanitizer.py @@ -0,0 +1,26 @@ +"""Clean user-provided text""" +import bleach + + +def clean(input_text): + """Run through "bleach" """ + return bleach.clean( + input_text, + tags=[ + "p", + "blockquote", + "br", + "b", + "i", + "strong", + "em", + "pre", + "a", + "span", + "ul", + "ol", + "li", + ], + attributes=["href", "rel", "src", "alt"], + strip=True, + ) diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 2d085b02d..f199293c0 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -28,7 +28,7 @@ from .admin.user_admin import UserAdmin, UserAdminList # user preferences from .preferences.change_password import ChangePassword from .preferences.edit_user import EditUser -from .preferences.export import Export, export_user_book_data +from .preferences.export import Export from .preferences.delete_user import DeleteUser from .preferences.block import Block, unblock diff --git a/bookwyrm/views/admin/automod.py b/bookwyrm/views/admin/automod.py index f8c3e8e67..65eae71a9 100644 --- a/bookwyrm/views/admin/automod.py +++ b/bookwyrm/views/admin/automod.py @@ -33,8 +33,7 @@ class AutoMod(View): def post(self, request): """add rule""" form = forms.AutoModRuleForm(request.POST) - success = form.is_valid() - if success: + if form.is_valid(): form.save() form = forms.AutoModRuleForm() diff --git a/bookwyrm/views/admin/dashboard.py b/bookwyrm/views/admin/dashboard.py index b06b6ba00..19583bfa1 100644 --- a/bookwyrm/views/admin/dashboard.py +++ b/bookwyrm/views/admin/dashboard.py @@ -1,5 +1,7 @@ """ instance overview """ from datetime import timedelta +import re + from dateutil.parser import parse from packaging import version @@ -13,6 +15,7 @@ from django.views import View from bookwyrm import models, settings from bookwyrm.connectors.abstract_connector import get_data from bookwyrm.connectors.connector_manager import ConnectorException +from bookwyrm.utils import regex # pylint: disable= no-self-use @@ -26,91 +29,32 @@ class Dashboard(View): def get(self, request): """list of users""" - interval = int(request.GET.get("days", 1)) - now = timezone.now() - start = request.GET.get("start") - if start: - start = timezone.make_aware(parse(start)) - else: - start = now - timedelta(days=6 * interval) + data = get_charts_and_stats(request) - end = request.GET.get("end") - end = timezone.make_aware(parse(end)) if end else now - start = start.replace(hour=0, minute=0, second=0) + # Make sure email looks properly configured + email_config_error = re.findall( + r"[\s\@]", settings.EMAIL_SENDER_DOMAIN + ) or not re.match(regex.DOMAIN, settings.EMAIL_SENDER_DOMAIN) - user_queryset = models.User.objects.filter(local=True) - user_chart = Chart( - queryset=user_queryset, - queries={ - "total": lambda q, s, e: q.filter( - Q(is_active=True) | Q(deactivation_date__gt=e), - created_date__lte=e, - ).count(), - "active": lambda q, s, e: q.filter( - Q(is_active=True) | Q(deactivation_date__gt=e), - created_date__lte=e, - ) - .filter( - last_active_date__gt=e - timedelta(days=31), - ) - .count(), - }, + data["email_config_error"] = email_config_error + # pylint: disable=line-too-long + data[ + "email_sender" + ] = f"{settings.EMAIL_SENDER_NAME}@{settings.EMAIL_SENDER_DOMAIN}" + + site = models.SiteSettings.objects.get() + # pylint: disable=protected-access + data["missing_conduct"] = ( + not site.code_of_conduct + or site.code_of_conduct + == site._meta.get_field("code_of_conduct").get_default() ) - - status_queryset = models.Status.objects.filter(user__local=True, deleted=False) - status_chart = Chart( - queryset=status_queryset, - queries={ - "total": lambda q, s, e: q.filter( - created_date__gt=s, - created_date__lte=e, - ).count() - }, + data["missing_privacy"] = ( + not site.privacy_policy + or site.privacy_policy + == site._meta.get_field("privacy_policy").get_default() ) - register_chart = Chart( - queryset=user_queryset, - queries={ - "total": lambda q, s, e: q.filter( - created_date__gt=s, - created_date__lte=e, - ).count() - }, - ) - - works_chart = Chart( - queryset=models.Work.objects, - queries={ - "total": lambda q, s, e: q.filter( - created_date__gt=s, - created_date__lte=e, - ).count() - }, - ) - - data = { - "start": start.strftime("%Y-%m-%d"), - "end": end.strftime("%Y-%m-%d"), - "interval": interval, - "users": user_queryset.filter(is_active=True).count(), - "active_users": user_queryset.filter( - is_active=True, last_active_date__gte=now - timedelta(days=31) - ).count(), - "statuses": status_queryset.count(), - "works": models.Work.objects.count(), - "reports": models.Report.objects.filter(resolved=False).count(), - "pending_domains": models.LinkDomain.objects.filter( - status="pending" - ).count(), - "invite_requests": models.InviteRequest.objects.filter( - ignored=False, invite__isnull=True - ).count(), - "user_stats": user_chart.get_chart(start, end, interval), - "status_stats": status_chart.get_chart(start, end, interval), - "register_stats": register_chart.get_chart(start, end, interval), - "works_stats": works_chart.get_chart(start, end, interval), - } - # check version try: release = get_data(settings.RELEASE_API, timeout=3) @@ -126,6 +70,91 @@ class Dashboard(View): return TemplateResponse(request, "settings/dashboard/dashboard.html", data) +def get_charts_and_stats(request): + """Defines the dashbaord charts""" + interval = int(request.GET.get("days", 1)) + now = timezone.now() + start = request.GET.get("start") + if start: + start = timezone.make_aware(parse(start)) + else: + start = now - timedelta(days=6 * interval) + + end = request.GET.get("end") + end = timezone.make_aware(parse(end)) if end else now + start = start.replace(hour=0, minute=0, second=0) + + user_queryset = models.User.objects.filter(local=True) + user_chart = Chart( + queryset=user_queryset, + queries={ + "total": lambda q, s, e: q.filter( + Q(is_active=True) | Q(deactivation_date__gt=e), + created_date__lte=e, + ).count(), + "active": lambda q, s, e: q.filter( + Q(is_active=True) | Q(deactivation_date__gt=e), + created_date__lte=e, + ) + .filter( + last_active_date__gt=e - timedelta(days=31), + ) + .count(), + }, + ) + + status_queryset = models.Status.objects.filter(user__local=True, deleted=False) + status_chart = Chart( + queryset=status_queryset, + queries={ + "total": lambda q, s, e: q.filter( + created_date__gt=s, + created_date__lte=e, + ).count() + }, + ) + + register_chart = Chart( + queryset=user_queryset, + queries={ + "total": lambda q, s, e: q.filter( + created_date__gt=s, + created_date__lte=e, + ).count() + }, + ) + + works_chart = Chart( + queryset=models.Work.objects, + queries={ + "total": lambda q, s, e: q.filter( + created_date__gt=s, + created_date__lte=e, + ).count() + }, + ) + return { + "start": start.strftime("%Y-%m-%d"), + "end": end.strftime("%Y-%m-%d"), + "interval": interval, + "users": user_queryset.filter(is_active=True).count(), + "active_users": user_queryset.filter( + is_active=True, last_active_date__gte=now - timedelta(days=31) + ).count(), + "statuses": status_queryset.count(), + "works": models.Work.objects.count(), + "reports": models.Report.objects.filter(resolved=False).count(), + "pending_domains": models.LinkDomain.objects.filter(status="pending").count(), + "invite_requests": models.InviteRequest.objects.filter( + ignored=False, invite__isnull=True + ).count(), + "user_stats": user_chart.get_chart(start, end, interval), + "status_stats": status_chart.get_chart(start, end, interval), + "register_stats": register_chart.get_chart(start, end, interval), + "works_stats": works_chart.get_chart(start, end, interval), + } + + class Chart: """Data for a chart""" diff --git a/bookwyrm/views/admin/federation.py b/bookwyrm/views/admin/federation.py index cb05b779e..88bd43aac 100644 --- a/bookwyrm/views/admin/federation.py +++ b/bookwyrm/views/admin/federation.py @@ -29,6 +29,8 @@ class Federation(View): filters = {} if software := request.GET.get("application_type"): filters["application_type"] = software + if server := request.GET.get("server"): + filters["server_name"] = server servers = models.FederatedServer.objects.filter(status=status, **filters) @@ -60,7 +62,9 @@ class Federation(View): "sort": sort, "software_options": models.FederatedServer.objects.values_list( "application_type", flat=True - ).distinct(), + ) + .distinct() + .order_by("application_type"), "form": forms.ServerForm(), } return TemplateResponse(request, "settings/federation/instance_list.html", data) diff --git a/bookwyrm/views/admin/link_domains.py b/bookwyrm/views/admin/link_domains.py index 5f9ec6c06..0b8674170 100644 --- a/bookwyrm/views/admin/link_domains.py +++ b/bookwyrm/views/admin/link_domains.py @@ -45,6 +45,7 @@ class LinkDomain(View): @require_POST @login_required +@permission_required("bookwyrm.moderate_user") def update_domain_status(request, domain_id, status): """This domain seems fine""" domain = get_object_or_404(models.LinkDomain, id=domain_id) diff --git a/bookwyrm/views/admin/reports.py b/bookwyrm/views/admin/reports.py index c19e3db4a..a0b222ebe 100644 --- a/bookwyrm/views/admin/reports.py +++ b/bookwyrm/views/admin/reports.py @@ -83,7 +83,7 @@ class ReportAdmin(View): @login_required -@permission_required("bookwyrm_moderate_user") +@permission_required("bookwyrm.moderate_user") def suspend_user(_, user_id): """mark an account as inactive""" user = get_object_or_404(models.User, id=user_id) @@ -95,7 +95,7 @@ def suspend_user(_, user_id): @login_required -@permission_required("bookwyrm_moderate_user") +@permission_required("bookwyrm.moderate_user") def unsuspend_user(_, user_id): """mark an account as inactive""" user = get_object_or_404(models.User, id=user_id) @@ -107,7 +107,7 @@ def unsuspend_user(_, user_id): @login_required -@permission_required("bookwyrm_moderate_user") +@permission_required("bookwyrm.moderate_user") def moderator_delete_user(request, user_id): """permanently delete a user""" user = get_object_or_404(models.User, id=user_id) @@ -132,7 +132,7 @@ def moderator_delete_user(request, user_id): @login_required -@permission_required("bookwyrm_moderate_post") +@permission_required("bookwyrm.moderate_post") def resolve_report(_, report_id): """mark a report as (un)resolved""" report = get_object_or_404(models.Report, id=report_id) diff --git a/bookwyrm/views/admin/user_admin.py b/bookwyrm/views/admin/user_admin.py index df716d2cb..6ec6f93d2 100644 --- a/bookwyrm/views/admin/user_admin.py +++ b/bookwyrm/views/admin/user_admin.py @@ -22,24 +22,25 @@ class UserAdminList(View): def get(self, request, status="local"): """list of users""" filters = {} - server = request.GET.get("server") - if server: + exclusions = {} + if server := request.GET.get("server"): server = models.FederatedServer.objects.filter(server_name=server).first() filters["federated_server"] = server filters["federated_server__isnull"] = False - username = request.GET.get("username") - if username: + + if username := request.GET.get("username"): filters["username__icontains"] = username - scope = request.GET.get("scope") - if scope and scope == "local": - filters["local"] = True - email = request.GET.get("email") - if email: + + if email := request.GET.get("email"): filters["email__endswith"] = email - filters["local"] = status == "local" + filters["local"] = status in ["local", "deleted"] + if status == "deleted": + filters["deactivation_reason__icontains"] = "deletion" + else: + exclusions["deactivation_reason__icontains"] = "deletion" - users = models.User.objects.filter(**filters) + users = models.User.objects.filter(**filters).exclude(**exclusions) sort = request.GET.get("sort", "-created_date") sort_fields = [ @@ -65,7 +66,7 @@ class UserAdminList(View): @method_decorator(login_required, name="dispatch") @method_decorator( - permission_required("bookwyrm.moderate_users", raise_exception=True), + permission_required("bookwyrm.moderate_user", raise_exception=True), name="dispatch", ) class UserAdmin(View): @@ -80,8 +81,13 @@ class UserAdmin(View): def post(self, request, user): """update user group""" user = get_object_or_404(models.User, id=user) - form = forms.UserGroupForm(request.POST, instance=user) - if form.is_valid(): - form.save() + + if request.POST.get("groups") == "": + user.groups.set([]) + form = forms.UserGroupForm(instance=user) + else: + form = forms.UserGroupForm(request.POST, instance=user) + if form.is_valid(): + form.save() data = {"user": user, "group_form": form} return TemplateResponse(request, "settings/users/user.html", data) diff --git a/bookwyrm/views/follow.py b/bookwyrm/views/follow.py index 8bbcfca86..0090cbe32 100644 --- a/bookwyrm/views/follow.py +++ b/bookwyrm/views/follow.py @@ -1,7 +1,9 @@ """ views for actions you can take in the application """ import urllib.parse import re + from django.contrib.auth.decorators import login_required +from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect from django.template.response import TemplateResponse from django.views.decorators.http import require_POST @@ -13,6 +15,7 @@ from .helpers import ( handle_remote_webfinger, subscribe_remote_webfinger, WebFingerError, + is_api_request, ) @@ -34,6 +37,8 @@ def follow(request): # that means we should save to trigger a re-broadcast follow_request.save() + if is_api_request(request): + return HttpResponse() return redirect(to_follow.local_path) @@ -58,8 +63,10 @@ def unfollow(request): except models.UserFollowRequest.DoesNotExist: clear_cache(request.user, to_unfollow) + if is_api_request(request): + return HttpResponse() # this is handled with ajax so it shouldn't really matter - return redirect(request.headers.get("Referer", "/")) + return redirect("/") @login_required diff --git a/bookwyrm/views/goal.py b/bookwyrm/views/goal.py index b28c04766..57ff4bd75 100644 --- a/bookwyrm/views/goal.py +++ b/bookwyrm/views/goal.py @@ -70,7 +70,7 @@ class Goal(View): privacy=goal.privacy, ) - return redirect(request.headers.get("Referer", "/")) + return redirect("user-goal", request.user.localname, year) @require_POST @@ -79,4 +79,4 @@ def hide_goal(request): """don't keep bugging people to set a goal""" request.user.show_goal = False request.user.save(broadcast=False, update_fields=["show_goal"]) - return redirect(request.headers.get("Referer", "/")) + return redirect("/") diff --git a/bookwyrm/views/group.py b/bookwyrm/views/group.py index 9c282e48f..469f787d3 100644 --- a/bookwyrm/views/group.py +++ b/bookwyrm/views/group.py @@ -59,11 +59,11 @@ class Group(View): model = apps.get_model("bookwyrm.Notification", require_ready=True) for field in form.changed_data: notification_type = ( - "GROUP_PRIVACY" + model.GROUP_PRIVACY if field == "privacy" - else "GROUP_NAME" + else model.GROUP_NAME if field == "name" - else "GROUP_DESCRIPTION" + else model.GROUP_DESCRIPTION if field == "description" else None ) @@ -71,9 +71,9 @@ class Group(View): for membership in memberships: member = membership.user if member != request.user: - model.objects.create( - user=member, - related_user=request.user, + model.notify( + member, + request.user, related_group=user_group, notification_type=notification_type, ) @@ -244,24 +244,22 @@ def remove_member(request): memberships = models.GroupMember.objects.filter(group=group) model = apps.get_model("bookwyrm.Notification", require_ready=True) - notification_type = "LEAVE" if user == request.user else "REMOVE" + notification_type = model.LEAVE if user == request.user else model.REMOVE # let the other members know about it for membership in memberships: member = membership.user if member != request.user: - model.objects.create( - user=member, - related_user=user, + model.notify( + member, + user, related_group=group, notification_type=notification_type, ) # let the user (now ex-member) know as well, if they were removed - if notification_type == "REMOVE": - model.objects.create( - user=user, - related_group=group, - notification_type=notification_type, + if notification_type == model.REMOVE: + model.notify( + user, None, related_group=group, notification_type=notification_type ) return redirect(group.local_path) diff --git a/bookwyrm/views/helpers.py b/bookwyrm/views/helpers.py index 7d8eced7c..7be42a87b 100644 --- a/bookwyrm/views/helpers.py +++ b/bookwyrm/views/helpers.py @@ -148,13 +148,6 @@ def handle_reading_status(user, shelf, book, privacy): status.save() -def is_blocked(viewer, user): - """is this viewer blocked by the user?""" - if viewer.is_authenticated and viewer in user.blocks.all(): - return True - return False - - def load_date_in_user_tz_as_utc(date_str: str, user: models.User) -> datetime: """ensures that data is stored consistently in the UTC timezone""" if not date_str: diff --git a/bookwyrm/views/interaction.py b/bookwyrm/views/interaction.py index f59271bd1..35441a2cf 100644 --- a/bookwyrm/views/interaction.py +++ b/bookwyrm/views/interaction.py @@ -28,7 +28,7 @@ class Favorite(View): if is_api_request(request): return HttpResponse() - return redirect(request.headers.get("Referer", "/")) + return redirect("/") @method_decorator(login_required, name="dispatch") @@ -48,7 +48,7 @@ class Unfavorite(View): favorite.delete() if is_api_request(request): return HttpResponse() - return redirect(request.headers.get("Referer", "/")) + return redirect("/") @method_decorator(login_required, name="dispatch") @@ -67,7 +67,7 @@ class Boost(View): boosted_status=status, user=request.user ).exists(): # you already boosted that. - return redirect(request.headers.get("Referer", "/")) + return redirect("/") models.Boost.objects.create( boosted_status=status, @@ -76,7 +76,7 @@ class Boost(View): ) if is_api_request(request): return HttpResponse() - return redirect(request.headers.get("Referer", "/")) + return redirect("/") @method_decorator(login_required, name="dispatch") @@ -94,4 +94,4 @@ class Unboost(View): boost.delete() if is_api_request(request): return HttpResponse() - return redirect(request.headers.get("Referer", "/")) + return redirect("/") diff --git a/bookwyrm/views/landing/login.py b/bookwyrm/views/landing/login.py index ccee61297..0c464cb5e 100644 --- a/bookwyrm/views/landing/login.py +++ b/bookwyrm/views/landing/login.py @@ -58,7 +58,7 @@ class Login(View): user.update_active_date() if request.POST.get("first_login"): return set_language(user, redirect("get-started-profile")) - return set_language(user, redirect(request.GET.get("next", "/"))) + return set_language(user, redirect("/")) # maybe the user is pending email confirmation if models.User.objects.filter( @@ -77,7 +77,7 @@ class Login(View): class Logout(View): """log out""" - def get(self, request): + def post(self, request): """done with this place! outa here!""" logout(request) return redirect("/") diff --git a/bookwyrm/views/landing/password.py b/bookwyrm/views/landing/password.py index 90713e29d..7487b9414 100644 --- a/bookwyrm/views/landing/password.py +++ b/bookwyrm/views/landing/password.py @@ -3,10 +3,9 @@ from django.contrib.auth import login from django.core.exceptions import PermissionDenied from django.shortcuts import redirect from django.template.response import TemplateResponse -from django.utils.translation import gettext_lazy as _ from django.views import View -from bookwyrm import models +from bookwyrm import forms, models from bookwyrm.emailing import password_reset_email @@ -24,12 +23,13 @@ class PasswordResetRequest(View): def post(self, request): """create a password reset token""" email = request.POST.get("email") + data = {"sent_message": True, "email": email} try: user = models.User.viewer_aware_objects(request.user).get( email=email, email__isnull=False ) except models.User.DoesNotExist: - data = {"error": _("No user with that email address was found.")} + # Showing an error message would leak whether or not this email is in use return TemplateResponse( request, "landing/password_reset_request.html", data ) @@ -40,7 +40,6 @@ class PasswordResetRequest(View): # create a new reset code code = models.PasswordReset.objects.create(user=user) password_reset_email(code) - data = {"message": _(f"A password reset link was sent to {email}")} return TemplateResponse(request, "landing/password_reset_request.html", data) @@ -58,7 +57,8 @@ class PasswordReset(View): except models.PasswordReset.DoesNotExist: raise PermissionDenied() - return TemplateResponse(request, "landing/password_reset.html", {"code": code}) + data = {"code": code, "form": forms.PasswordResetForm()} + return TemplateResponse(request, "landing/password_reset.html", data) def post(self, request, code): """allow a user to change their password through an emailed token""" @@ -69,14 +69,12 @@ class PasswordReset(View): return TemplateResponse(request, "landing/password_reset.html", data) user = reset_code.user - - new_password = request.POST.get("password") - confirm_password = request.POST.get("confirm-password") - - if new_password != confirm_password: - data = {"errors": ["Passwords do not match"]} + form = forms.PasswordResetForm(request.POST, instance=user) + if not form.is_valid(): + data = {"code": code, "form": form} return TemplateResponse(request, "landing/password_reset.html", data) + new_password = form.cleaned_data["password"] user.set_password(new_password) user.save(broadcast=False, update_fields=["password"]) login(request, user) diff --git a/bookwyrm/views/landing/register.py b/bookwyrm/views/landing/register.py index e8de5f809..c5fd17424 100644 --- a/bookwyrm/views/landing/register.py +++ b/bookwyrm/views/landing/register.py @@ -134,19 +134,19 @@ class ConfirmEmail(View): class ResendConfirmEmail(View): """you probably didn't get the email because celery is slow but you can try this""" - def get(self, request, error=False): + def get(self, request): """resend link landing page""" - return TemplateResponse(request, "confirm_email/resend.html", {"error": error}) + return TemplateResponse(request, "confirm_email/resend.html") def post(self, request): """resend confirmation link""" email = request.POST.get("email") try: user = models.User.objects.get(email=email) + emailing.email_confirmation_email(user) except models.User.DoesNotExist: - return self.get(request, error=True) + pass - emailing.email_confirmation_email(user) return TemplateResponse( request, "confirm_email/confirm_email.html", {"valid": True} ) diff --git a/bookwyrm/views/notifications.py b/bookwyrm/views/notifications.py index 0a7a62002..e4549ba98 100644 --- a/bookwyrm/views/notifications.py +++ b/bookwyrm/views/notifications.py @@ -15,16 +15,17 @@ class Notifications(View): """people are interacting with you, get hyped""" notifications = ( request.user.notification_set.all() - .order_by("-created_date") + .order_by("-updated_date") .select_related( "related_status", "related_status__reply_parent", + "related_group", "related_import", - "related_report", - "related_user", - "related_book", - "related_list_item", - "related_list_item__book", + ) + .prefetch_related( + "related_reports", + "related_users", + "related_list_items", ) ) if notification_type == "mentions": diff --git a/bookwyrm/views/preferences/change_password.py b/bookwyrm/views/preferences/change_password.py index cdfc9d333..d66035560 100644 --- a/bookwyrm/views/preferences/change_password.py +++ b/bookwyrm/views/preferences/change_password.py @@ -1,10 +1,12 @@ """ class views for password management """ from django.contrib.auth import login from django.contrib.auth.decorators import login_required -from django.shortcuts import redirect from django.template.response import TemplateResponse from django.utils.decorators import method_decorator from django.views import View +from django.views.decorators.debug import sensitive_variables, sensitive_post_parameters + +from bookwyrm import forms # pylint: disable= no-self-use @@ -14,18 +16,24 @@ class ChangePassword(View): def get(self, request): """change password page""" - data = {"user": request.user} + data = {"form": forms.ChangePasswordForm()} return TemplateResponse(request, "preferences/change_password.html", data) + @method_decorator(sensitive_variables("new_password")) + @method_decorator(sensitive_post_parameters("current_password")) + @method_decorator(sensitive_post_parameters("password")) + @method_decorator(sensitive_post_parameters("confirm_password")) def post(self, request): """allow a user to change their password""" - new_password = request.POST.get("password") - confirm_password = request.POST.get("confirm-password") - - if new_password != confirm_password: - return redirect("prefs-password") + form = forms.ChangePasswordForm(request.POST, instance=request.user) + if not form.is_valid(): + data = {"form": form} + return TemplateResponse(request, "preferences/change_password.html", data) + new_password = form.cleaned_data["password"] request.user.set_password(new_password) request.user.save(broadcast=False, update_fields=["password"]) + login(request, request.user) - return redirect("user-feed", request.user.localname) + data = {"success": True, "form": forms.ChangePasswordForm()} + return TemplateResponse(request, "preferences/change_password.html", data) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index c0015fb86..2582dda3c 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -7,7 +7,6 @@ from django.http import StreamingHttpResponse from django.template.response import TemplateResponse from django.views import View from django.utils.decorators import method_decorator -from django.views.decorators.http import require_GET from bookwyrm import models @@ -20,35 +19,34 @@ class Export(View): """Request csv file""" return TemplateResponse(request, "preferences/export.html") - -@login_required -@require_GET -def export_user_book_data(request): - """Streaming the csv file of a user's book data""" - data = ( - models.Edition.viewer_aware_objects(request.user) - .filter( - Q(shelves__user=request.user) - | Q(readthrough__user=request.user) - | Q(review__user=request.user) - | Q(comment__user=request.user) - | Q(quotation__user=request.user) + def post(self, request): + """Streaming the csv file of a user's book data""" + data = ( + models.Edition.viewer_aware_objects(request.user) + .filter( + Q(shelves__user=request.user) + | Q(readthrough__user=request.user) + | Q(review__user=request.user) + | Q(comment__user=request.user) + | Q(quotation__user=request.user) + ) + .distinct() ) - .distinct() - ) - generator = csv_row_generator(data, request.user) + generator = csv_row_generator(data, request.user) - pseudo_buffer = Echo() - writer = csv.writer(pseudo_buffer) - # for testing, if you want to see the results in the browser: - # from django.http import JsonResponse - # return JsonResponse(list(generator), safe=False) - return StreamingHttpResponse( - (writer.writerow(row) for row in generator), - content_type="text/csv", - headers={"Content-Disposition": 'attachment; filename="bookwyrm-export.csv"'}, - ) + pseudo_buffer = Echo() + writer = csv.writer(pseudo_buffer) + # for testing, if you want to see the results in the browser: + # from django.http import JsonResponse + # return JsonResponse(list(generator), safe=False) + return StreamingHttpResponse( + (writer.writerow(row) for row in generator), + content_type="text/csv", + headers={ + "Content-Disposition": 'attachment; filename="bookwyrm-export.csv"' + }, + ) def csv_row_generator(books, user): diff --git a/bookwyrm/views/reading.py b/bookwyrm/views/reading.py index c1e6e5955..482da3cd0 100644 --- a/bookwyrm/views/reading.py +++ b/bookwyrm/views/reading.py @@ -52,9 +52,6 @@ class ReadingStatus(View): logger.exception("Invalid reading status type: %s", status) return HttpResponseBadRequest() - # invalidate related caches - cache.delete(f"active_shelf-{request.user.id}-{book_id}") - desired_shelf = get_object_or_404( models.Shelf, identifier=identifier, user=request.user ) @@ -65,6 +62,14 @@ class ReadingStatus(View): .get(id=book_id) ) + # invalidate related caches + cache.delete_many( + [ + f"active_shelf-{request.user.id}-{ed}" + for ed in book.parent_work.editions.values_list("id", flat=True) + ] + ) + # gets the first shelf that indicates a reading status, or None shelves = [ s @@ -74,13 +79,11 @@ class ReadingStatus(View): current_status_shelfbook = shelves[0] if shelves else None # checking the referer prevents redirecting back to the modal page - referer = request.headers.get("Referer", "/") - referer = "/" if "reading-status" in referer else referer if current_status_shelfbook is not None: if current_status_shelfbook.shelf.identifier != desired_shelf.identifier: current_status_shelfbook.delete() else: # It already was on the shelf - return redirect(referer) + return redirect("/") models.ShelfBook.objects.create( book=book, shelf=desired_shelf, user=request.user @@ -118,7 +121,7 @@ class ReadingStatus(View): if is_api_request(request): return HttpResponse() - return redirect(referer) + return redirect("/") @method_decorator(login_required, name="dispatch") @@ -200,7 +203,7 @@ def delete_readthrough(request): readthrough.raise_not_deletable(request.user) readthrough.delete() - return redirect(request.headers.get("Referer", "/")) + return redirect("/") @login_required @@ -211,4 +214,4 @@ def delete_progressupdate(request): update.raise_not_deletable(request.user) update.delete() - return redirect(request.headers.get("Referer", "/")) + return redirect("/") diff --git a/bookwyrm/views/report.py b/bookwyrm/views/report.py index 6469f3cb0..118f67988 100644 --- a/bookwyrm/views/report.py +++ b/bookwyrm/views/report.py @@ -13,9 +13,13 @@ from bookwyrm import emailing, forms, models class Report(View): """Make reports""" - def get(self, request, user_id, status_id=None, link_id=None): + def get(self, request, user_id=None, status_id=None, link_id=None): """static view of report modal""" - data = {"user": get_object_or_404(models.User, id=user_id)} + data = {"user": None} + if user_id: + # but normally we should have an error if the user is not found + data["user"] = get_object_or_404(models.User, id=user_id) + if status_id: data["status"] = status_id if link_id: diff --git a/bookwyrm/views/shelf/shelf_actions.py b/bookwyrm/views/shelf/shelf_actions.py index 5e7e6c0c9..7dbb83dea 100644 --- a/bookwyrm/views/shelf/shelf_actions.py +++ b/bookwyrm/views/shelf/shelf_actions.py @@ -13,9 +13,11 @@ def create_shelf(request): """user generated shelves""" form = forms.ShelfForm(request.POST) if not form.is_valid(): - return redirect(request.headers.get("Referer", "/")) + return redirect("user-shelves", request.user.localname) - shelf = form.save() + shelf = form.save(commit=False) + shelf.raise_not_editable(request.user) + shelf.save() return redirect(shelf.local_path) @@ -70,7 +72,7 @@ def shelve(request): ): current_read_status_shelfbook.delete() else: # It is already on the shelf - return redirect(request.headers.get("Referer", "/")) + return redirect("/") # create the new shelf-book entry models.ShelfBook.objects.create( @@ -86,7 +88,7 @@ def shelve(request): # Might be good to alert, or reject the action? except IntegrityError: pass - return redirect(request.headers.get("Referer", "/")) + return redirect("/") @login_required @@ -100,4 +102,4 @@ def unshelve(request, book_id=False): ) shelf_book.raise_not_deletable(request.user) shelf_book.delete() - return redirect(request.headers.get("Referer", "/")) + return redirect("/") diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index 670ea5717..c0a045f8a 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -16,9 +16,8 @@ from django.views.decorators.http import require_POST from markdown import markdown from bookwyrm import forms, models -from bookwyrm.sanitize_html import InputHtmlParser from bookwyrm.settings import DOMAIN -from bookwyrm.utils import regex +from bookwyrm.utils import regex, sanitizer from .helpers import handle_remote_webfinger, is_api_request from .helpers import load_date_in_user_tz_as_utc @@ -83,9 +82,10 @@ class CreateStatus(View): if is_api_request(request): logger.exception(form.errors) return HttpResponseBadRequest() - return redirect(request.headers.get("Referer", "/")) + return redirect("/") status = form.save(commit=False) + status.raise_not_editable(request.user) # save the plain, unformatted version of the status for future editing status.raw_content = status.content if hasattr(status, "quote"): @@ -147,7 +147,7 @@ class DeleteStatus(View): # perform deletion status.delete() - return redirect(request.headers.get("Referer", "/")) + return redirect("/") @login_required @@ -196,7 +196,7 @@ def edit_readthrough(request): if is_api_request(request): return HttpResponse() - return redirect(request.headers.get("Referer", "/")) + return redirect("/") def find_mentions(content): @@ -268,6 +268,4 @@ def to_markdown(content): content = format_links(content) content = markdown(content) # sanitize resulting html - sanitizer = InputHtmlParser() - sanitizer.feed(content) - return sanitizer.get_output() + return sanitizer.clean(content) diff --git a/bookwyrm/views/user.py b/bookwyrm/views/user.py index e00aaa8e4..a46c74642 100644 --- a/bookwyrm/views/user.py +++ b/bookwyrm/views/user.py @@ -60,6 +60,12 @@ class User(View): request.user, ) .filter(user=user) + .exclude( + privacy="direct", + review__isnull=True, + comment__isnull=True, + quotation__isnull=True, + ) .select_related( "user", "reply_parent", @@ -158,7 +164,7 @@ def hide_suggestions(request): """not everyone wants user suggestions""" request.user.show_suggested_users = False request.user.save(broadcast=False, update_fields=["show_suggested_users"]) - return redirect(request.headers.get("Referer", "/")) + return redirect("/") # pylint: disable=unused-argument diff --git a/bw-dev b/bw-dev index c9fa18135..b0fb04170 100755 --- a/bw-dev +++ b/bw-dev @@ -88,12 +88,13 @@ case "$CMD" in build) docker-compose build ;; - clean) - clean - ;; black) docker-compose run --rm dev-tools black celerywyrm bookwyrm ;; + pylint) + # pylint depends on having the app dependencies in place, so we run it in the web container + runweb pylint bookwyrm/ + ;; prettier) docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js ;; @@ -103,6 +104,7 @@ case "$CMD" in --config dev-tools/.stylelintrc.js ;; formatters) + runweb pylint bookwyrm/ docker-compose run --rm dev-tools black celerywyrm bookwyrm docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js docker-compose run --rm dev-tools npx stylelint \ @@ -195,7 +197,6 @@ case "$CMD" in echo " collectstatic" echo " compilemessages" echo " build" - echo " clean" echo " populate_streams [--stream=]" echo " populate_lists_streams" echo " populate_suggestions" diff --git a/complete_bwdev.fish b/complete_bwdev.fish index c1f28dd51..53f9e29b1 100644 --- a/complete_bwdev.fish +++ b/complete_bwdev.fish @@ -18,7 +18,6 @@ makemessages \ compilemessages \ update_locales \ build \ -clean \ black \ prettier \ stylelint \ @@ -56,7 +55,6 @@ __bw_complete "$commands" "makemessages" "extract all localizable mes __bw_complete "$commands" "compilemessages" "compile .po localization files to .mo" __bw_complete "$commands" "update_locales" "run makemessages and compilemessages for the en_US and additional locales" __bw_complete "$commands" "build" "build the containers" -__bw_complete "$commands" "clean" "bring the cluster down and remove all containers" __bw_complete "$commands" "black" "run Python code formatting tool" __bw_complete "$commands" "prettier" "run JavaScript code formatting tool" __bw_complete "$commands" "stylelint" "run SCSS linting tool" diff --git a/complete_bwdev.sh b/complete_bwdev.sh index 5dd025673..2a30a4c47 100644 --- a/complete_bwdev.sh +++ b/complete_bwdev.sh @@ -15,7 +15,6 @@ makemessages compilemessages update_locales build -clean black prettier stylelint diff --git a/complete_bwdev.zsh b/complete_bwdev.zsh index 5f7695ee1..65e36dd67 100644 --- a/complete_bwdev.zsh +++ b/complete_bwdev.zsh @@ -17,7 +17,6 @@ makemessages compilemessages update_locales build -clean black prettier stylelint diff --git a/docker-compose.yml b/docker-compose.yml index 488776efc..531467399 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -103,7 +103,7 @@ services: command: celery -A celerywyrm flower --basic_auth=${FLOWER_USER}:${FLOWER_PASSWORD} env_file: .env ports: - - ${FLOWER_PORT} + - ${FLOWER_PORT}:${FLOWER_PORT} volumes: - .:/app networks: diff --git a/locale/de_DE/LC_MESSAGES/django.mo b/locale/de_DE/LC_MESSAGES/django.mo index 4ce83f72b..83ef74102 100644 Binary files a/locale/de_DE/LC_MESSAGES/django.mo and b/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index 6f80c594e..7faa7b11f 100644 --- a/locale/de_DE/LC_MESSAGES/django.po +++ b/locale/de_DE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-04-30 13:02\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-12 17:43\n" "Last-Translator: Mouse Reeve \n" "Language-Team: German\n" "Language: de\n" @@ -46,6 +46,10 @@ msgstr "Unbegrenzt" msgid "Reading finish date cannot be before start date." msgstr "Enddatum darf nicht vor dem Startdatum liegen." +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "Das Datum für Lesen gestoppt kann nicht vor dem Lesestart sein." + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "Ein Benutzer mit diesem Benutzernamen existiert bereits" @@ -70,8 +74,8 @@ msgstr "Reihenfolge der Liste" msgid "Book Title" msgstr "Buchtitel" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Bewertung" @@ -117,29 +121,29 @@ msgstr "Warnung" msgid "Danger" msgstr "Gefahr" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" -msgstr "Automatisch generierter Report" +msgstr "Automatisch generierter Bericht" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Ausstehend" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "Selbstlöschung" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "Moderator*in suspendieren" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "Moderator*in löschen" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "Domainsperrung" @@ -238,7 +242,7 @@ msgstr "Käuflich erhältlich" #: bookwyrm/models/link.py:53 msgid "Available for loan" -msgstr "Zum Liehen erhältlich" +msgstr "Zum Ausleihen erhältlich" #: bookwyrm/models/link.py:70 #: bookwyrm/templates/settings/link_domains/link_domains.html:23 @@ -247,7 +251,7 @@ msgstr "Bestätigt" #: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289 msgid "Reviews" -msgstr "Besprechungen" +msgstr "Rezensionen" #: bookwyrm/models/user.py:33 msgid "Comments" @@ -396,12 +400,12 @@ msgstr "Verfolge deine Lektüre, sprich über Bücher, schreibe Besprechungen un #: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" -msgstr "Lerne deinen Admins kennen" +msgstr "Lerne deine Admins kennen" #: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." -msgstr "Die Moderator*innen und Administrator*innen von %(site_name)s halten diese Seite am Laufen. Beachte den Verhaltenskodex und melde, wenn andere Benutzer*innen dagegen verstoßen oder Spam verbreiten." +msgstr "Die Moderator*innen und Administrator*innen von %(site_name)s halten diese Seite am Laufen, setzen den Verhaltenskodex durch und reagieren, wenn Benutzer*innen Spam oder schlechtes Verhalten melden." #: bookwyrm/templates/about/about.html:115 msgid "Moderator" @@ -426,7 +430,7 @@ msgstr "Verhaltenskodex" #: bookwyrm/templates/about/layout.html:11 msgid "Active users:" -msgstr "Aktive Benutzer*innen:" +msgstr "Aktive Nutzer*innen:" #: bookwyrm/templates/about/layout.html:15 msgid "Statuses posted:" @@ -734,9 +738,9 @@ msgstr "ISNI:" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -757,8 +761,8 @@ msgstr "Speichern" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -780,7 +784,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "Das Laden von Daten wird eine Verbindung zu %(source_name)s aufbauen und überprüfen, ob Autor*in-Informationen vorliegen, die hier noch nicht bekannt sind. Bestehende Informationen werden nicht überschrieben." #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -806,7 +810,7 @@ msgstr "Fehler beim Laden des Titelbilds" #: bookwyrm/templates/book/book.html:108 msgid "Click to enlarge" -msgstr "Zum vergrößern anklicken" +msgstr "Zum Vergrößern anklicken" #: bookwyrm/templates/book/book.html:179 #, python-format @@ -829,7 +833,7 @@ msgstr "Beschreibung:" #, python-format msgid "%(count)s edition" msgid_plural "%(count)s editions" -msgstr[0] "" +msgstr[0] "%(count)s Auflage" msgstr[1] "%(count)s Auflagen" #: bookwyrm/templates/book/book.html:228 @@ -855,7 +859,7 @@ msgstr "Du hast keine Leseaktivität für dieses Buch." #: bookwyrm/templates/book/book.html:294 msgid "Your reviews" -msgstr "Deine Besprechungen" +msgstr "Deine Rezensionen" #: bookwyrm/templates/book/book.html:300 msgid "Your comments" @@ -949,42 +953,42 @@ msgstr "„%(book_title)s“ bearbeiten" msgid "Add Book" msgstr "Buch hinzufügen" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "Buchinfo bestätigen" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "Ist „%(name)s“ einer dieser Autor*innen?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "Autor*in von " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "Weitere Informationen auf isni.org finden" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "Neue*r Autor*in" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "Als neue*r Autor*in erstellen: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "Ist das eine Ausgabe eines vorhandenen Werkes?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "Dies ist ein neues Werk." -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "Zurück" @@ -1012,19 +1016,19 @@ msgstr "Sprachen:" #: bookwyrm/templates/book/edit/edit_book_form.html:86 msgid "Subjects:" -msgstr "Betreff:" +msgstr "Themen:" #: bookwyrm/templates/book/edit/edit_book_form.html:90 msgid "Add subject" -msgstr "Betreff hinzufügen" +msgstr "Thema hinzufügen" #: bookwyrm/templates/book/edit/edit_book_form.html:108 msgid "Remove subject" -msgstr "Betreff entfernen" +msgstr "Thema entfernen" #: bookwyrm/templates/book/edit/edit_book_form.html:131 msgid "Add Another Subject" -msgstr "Weiteren Betreff hinzufügen" +msgstr "Weiteres Thema hinzufügen" #: bookwyrm/templates/book/edit/edit_book_form.html:139 msgid "Publication" @@ -1075,7 +1079,7 @@ msgid "Add Another Author" msgstr "Weitere*n Autor*in hinzufügen" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "Titelbild" @@ -1124,7 +1128,7 @@ msgstr "Ausgaben von \"%(work_title)s\"" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" -msgstr "Sie können die gesuchte Auflage nicht finden?" +msgstr "Du kannst die gesuchte Auflage nicht finden?" #: bookwyrm/templates/book/editions/editions.html:75 msgid "Add another edition" @@ -1201,7 +1205,7 @@ msgstr "Domain" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "Status" @@ -1214,16 +1218,21 @@ msgstr "Status" msgid "Actions" msgstr "Aktionen" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "Unbekannter Benutzer" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "Spam melden" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "Keine Links für dieses Buch vorhanden." -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "Link zur Datei hinzufügen" @@ -1234,7 +1243,7 @@ msgstr "Datei-Links" #: bookwyrm/templates/book/file_links/links.html:9 msgid "Get a copy" -msgstr "Kopie erhalten" +msgstr "Exemplar erhalten" #: bookwyrm/templates/book/file_links/links.html:47 msgid "No links available" @@ -1320,7 +1329,7 @@ msgstr "Bestätigungscode:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "Absenden" @@ -1336,7 +1345,7 @@ msgstr "Bestätigungslink erneut senden" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1360,7 +1369,7 @@ msgid "Local users" msgstr "Lokale Benutzer*innen" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "Föderierte Gemeinschaft" @@ -1563,14 +1572,20 @@ msgstr "Du bist eingeladen, %(site_name)s beizutreten! Klicke auf den Link unten msgid "Learn more about %(site_name)s:" msgstr "Erfahre mehr über %(site_name)s:" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s hat das Verhalten von @%(reportee)s zur Moderation gekennzeichnet. " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "@%(reporter)s hat einen Link zur Moderation markiert." -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "@%(reporter)s hat das Verhalten von @%(reportee)s zur Moderation gekennzeichnet." + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "Bericht anzeigen" @@ -1607,7 +1622,7 @@ msgstr "Passwort für %(site_name)s zurücksetzen" #: bookwyrm/templates/setup/layout.html:12 #, python-format msgid "%(site_name)s home page" -msgstr "%(site_name)s-Startseite" +msgstr "%(site_name)s Startseite" #: bookwyrm/templates/embed-layout.html:40 bookwyrm/templates/layout.html:186 msgid "Contact site admin" @@ -1670,11 +1685,11 @@ msgstr "Hier sind noch keine Bücher! Versuche, nach Büchern zu suchen, um losz #: bookwyrm/templates/feed/suggested_books.html:13 msgid "Do you have book data from another service like GoodReads?" -msgstr "Haben Sie Buchdaten von einem anderen Service wie GoodReads?" +msgstr "Hast Du Buchdaten von einem anderen Service wie GoodReads?" #: bookwyrm/templates/feed/suggested_books.html:16 msgid "Import your reading history" -msgstr "Importieren Sie Ihren Leseverlauf" +msgstr "Importiere Deinen Leseverlauf" #: bookwyrm/templates/feed/suggested_users.html:5 #: bookwyrm/templates/get_started/users.html:6 @@ -1709,25 +1724,30 @@ msgstr "Zu deinen Büchern hinzufügen" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "Zu lesen" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" -msgstr "Aktuell lesend" +msgstr "Liest gerade" #: bookwyrm/templates/get_started/book_preview.html:12 #: bookwyrm/templates/shelf/shelf.html:88 #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "Gelesen" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "Lesen gestoppt" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "Was liest du gerade?" @@ -1970,33 +1990,33 @@ msgstr "Bücher importieren" msgid "Data source:" msgstr "Datenquelle:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "Du kannst deine Goodreads-Daten von der Import / Export-Seite deines Goodreads-Kontos downloaden." -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "Datei:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "Besprechungen einschließen" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "Datenschutzeinstellung für importierte Besprechungen:" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "Importieren" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "Zuletzt importiert" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "Keine aktuellen Importe" @@ -2055,8 +2075,8 @@ msgid "Row" msgstr "Zeile" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "Titel" @@ -2069,8 +2089,8 @@ msgid "Openlibrary key" msgstr "Openlibrary-Schlüssel" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "Autor*in" @@ -2253,16 +2273,21 @@ msgid "More about this site" msgstr "Mehr über diese Seite" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "Passwort bestätigen:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "Ein Link zum Zurücksetzen des Passworts wird an %(email)s gesendet, wenn ein Konto mit dieser E-Mail-Adresse existiert." + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "Ein Link zum Zurücksetzen deines Passworts wird an deine E-Mail-Adresse geschickt" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "Passwort zurücksetzen" @@ -2490,7 +2515,7 @@ msgstr "Notizen bearbeiten" #: bookwyrm/templates/lists/list.html:119 msgid "Add notes" -msgstr "Notiz hinzufügen" +msgstr "Notizen hinzufügen" #: bookwyrm/templates/lists/list.html:131 #, python-format @@ -2570,108 +2595,244 @@ msgstr "Alle Listen" msgid "Saved Lists" msgstr "Gespeicherte Listen" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "hat deine Einladung angenommen, der Gruppe „%(group_name)s“ beizutreten" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "%(related_user)s hat Ihre Einladung zur Gruppe akzeptiert \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "%(book_title)s zu deiner Liste „%(list_name)s“ hinzugefügt" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "%(related_user)s und %(second_user)s haben Ihre Einladung zur Gruppe \"%(group_name)s\" akzeptiert" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "hat vorgeschlagen, %(book_title)s zu deiner Liste „%(list_name)s“ hinzuzufügen" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "%(related_user)s und %(other_user_display_count)s andere haben Ihre Einladung zur Gruppe angenommen \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "hat deine Besprechung von %(book_title)s geteilt" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s hat %(book_title)s zu Ihrer Liste hinzugefügt \"%(list_name)s\"" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "hat deinen Kommentar zu%(book_title)s geteilt" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s schlug vor, %(book_title)s zu Ihrer Liste hinzuzufügen \"%(list_name)s\"" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "hat dein Zitat aus %(book_title)s geteilt" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s hat %(book_title)s und %(second_book_title)s zu Ihrer Liste hinzugefügt \"%(list_name)s\"" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "hat deinen Status geteilt" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s schlug vor, %(book_title)s und %(second_book_title)s zu Ihrer Liste hinzuzufügen \"%(list_name)s\"" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "hat deine Besprechung von %(book_title)s favorisiert" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "%(related_user)s hat %(book_title)s, %(second_book_title)s und %(display_count)s andere Bücher zu Ihrer Liste \"%(list_name)s hinzugefügt\"" +msgstr[1] "%(related_user)s hat %(book_title)s, %(second_book_title)s und %(display_count)s andere Bücher zu Ihrer Liste \"%(list_name)s hinzugefügt\"" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "hat deinen Kommentar zu %(book_title)s favorisiert" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "%(related_user)s schlug vor, %(book_title)s, %(second_book_title)s, und %(display_count)s weitere Bücher an Ihre Liste \"%(list_name)s\" hinzuzufügen" +msgstr[1] "%(related_user)s schlug vor, %(book_title)s, %(second_book_title)s, und %(display_count)s weitere Bücher an Ihre Liste \"%(list_name)s\" hinzuzufügen" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "hat dein Zitat aus %(book_title)s favorisiert" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "%(related_user)s hat Ihre Rezension von %(book_title)s geteilt" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "hat deinen Status favorisiert" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "%(related_user)s und %(second_user)s haben Ihre Rezension von %(book_title)s geteilt" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "folgt dir" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "%(related_user)s und %(other_user_display_count)s andere haben deine Rezension über %(book_title)s geteilt" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "möchte dir folgen" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "%(related_user)s hat deinen Kommentar über %(book_title)s geteilt" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "%(related_user)s und %(second_user)s haben deinen Kommentar über %(book_title)s geteilt" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "%(related_user)s und %(other_user_display_count)s andere haben deinen Kommentar über %(book_title)s geteilt" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "%(related_user)s hat dein Zitat aus %(book_title)s geteilt" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "%(related_user)s und %(second_user)s haben dein Zitat über %(book_title)s geteilt" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "%(related_user)s und %(other_user_display_count)s andere haben dein Zitat aus %(book_title)s geteilt" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "%(related_user)s hat Ihren Status geteilt" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "%(related_user)s und %(second_user)s haben Ihren Status geteilt" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "%(related_user)s und %(other_user_display_count)s andere haben Ihren Status geteilt" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "%(related_user)s gefällt Ihre Rezension von %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "%(related_user)s und %(second_user)s haben deine Rezension über %(book_title)s favorisiert" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "%(related_user)s und %(other_user_display_count)s andere haben deine Rezension über %(book_title)s favorisiert" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "%(related_user)s hat deinen Kommentar über %(book_title)s favorisiert" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "%(related_user)s und %(second_user)s haben deinen Kommentar über %(book_title)s favorisiert" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "%(related_user)s und %(other_user_display_count)s andere haben deinen Kommentar über %(book_title)s favorisiert" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "%(related_user)s hat dein Zitat aus %(book_title)s favorisiert" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "%(related_user)s und %(second_user)s haben dein Zitat über %(book_title)s favorisiert" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "%(related_user)s und %(other_user_display_count)s andere haben dein Zitat aus %(book_title)s favorisiert" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "%(related_user)s hat deinen Status favorisiert" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "%(related_user)s und %(second_user)s haben deinen Status favorisiert" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "%(related_user)s und %(other_user_display_count)s andere haben deinen Status favorisiert" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "%(related_user)s folgt Ihnen" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "%(related_user)s und %(second_user)s folgen Ihnen" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "%(related_user)s und %(other_user_display_count)s andere folgen Ihnen" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "%(related_user)s hat Ihnen eine Follower-Anfrage gesendet" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "Dein Import ist fertig." -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "hat dich eingeladen, der Gruppe „%(group_name)s“ beizutreten" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "%(related_user)s hat Sie eingeladen, der Gruppe \"%(group_name)s\" beizutreten" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "ist deiner Gruppe „%(group_name)s“ beigetreten" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "hat deine Gruppe „%(group_name)s“ verlassen" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "%(related_user)s hat Ihre Gruppe \"%(group_name)s\" verlassen" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "%(related_user)s und %(second_user)s haben deine Gruppe \"%(group_name)s\" verlassen" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "%(related_user)s und %(other_user_display_count)s andere haben deine Gruppe \"%(group_name)s\" verlassen" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "hat dich in einer Besprechung von %(book_title)s erwähnt" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "%(related_user)s hat dich in einer Rezension über %(book_title)s erwähnt" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "hat dich in einem Kommentar zu %(book_title)s erwähnt" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "%(related_user)s hat dich in einem Kommmentar über %(book_title)s erwähnt" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "hat dich in einem Zitat von %(book_title)s erwähnt" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "%(related_user)s hat dich in einem Zitat aus %(book_title)s erwähnt" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "hat dich in einem Status erwähnt" +msgid "%(related_user)s mentioned you in a status" +msgstr "%(related_user)s hat dich in einem Status erwähnt" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2685,28 +2846,35 @@ msgstr "Du wurdest aus der Gruppe „%(group_name)sreplied to your review of %(book_title)s" -msgstr "hat auf deine Besprechung von %(book_title)s geantwortet" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "%(related_user)s hat auf deine Rezension über %(book_title)s geantwortet" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "hat auf deinen Kommentar zu %(book_title)s geantwortet" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "%(related_user)s hat auf deinen Kommentar über %(book_title)s geantwortet" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "hat auf dein Zitat aus %(book_title)s geantwortet" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "%(related_user)s hat auf dein Zitat aus %(book_title)s geantwortet" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "hat auf deinen Status geantwortet" +msgid "%(related_user)s replied to your status" +msgstr "%(related_user)s hat auf deinen Status geantwortet" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "Eine neue Meldung muss moderiert werden." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "Ein neuer -Bericht muss moderiert werden" +msgstr[1] "%(display_count)s neue Berichte müssen moderiert werden" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "Inhaltswarnung" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2865,12 +3033,20 @@ msgstr "Momentan keine Benutzer*innen gesperrt." #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "Passwort ändern" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "Passwort erfolgreich geändert" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "Aktuelles Passwort:" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "Neues Passwort:" @@ -2947,7 +3123,7 @@ msgstr "Follower*innen manuell bestätigen" #: bookwyrm/templates/preferences/edit_user.html:123 msgid "Hide followers and following on profile" -msgstr "" +msgstr "Folgende und Gefolgte im Profil ausblenden" #: bookwyrm/templates/preferences/edit_user.html:128 msgid "Default post privacy:" @@ -2962,6 +3138,10 @@ msgstr "CSV-Export" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "Ihr Export enthält alle Bücher in Ihren Regalen, Bücher die Sie bewertet haben und Bücher mit Leseaktivität." +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "Datei herunterladen" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "Benutzer*inkonto" @@ -2988,6 +3168,11 @@ msgstr "„%(book_title)s“ abschließen" msgid "Start \"%(book_title)s\"" msgstr "„%(book_title)s“ beginnen" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "Höre auf zu lesen \"%(book_title)s\"" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3012,6 +3197,7 @@ msgstr "Lesedaten für „%(title)s“ aktualisieren" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "Zu lesen angefangen" @@ -3020,7 +3206,7 @@ msgstr "Zu lesen angefangen" msgid "Progress" msgstr "Fortschritt" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3034,23 +3220,27 @@ msgstr "Zwischenstände:" msgid "finished" msgstr "abgeschlossen" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "gestoppt" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "Zeige alle Zwischenstände" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "Diesen Zwischenstand löschen" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "angefangen" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "Lesedaten bearbeiten" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "Diese Lesedaten löschen" @@ -3180,13 +3370,13 @@ msgstr "Nein" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "Startdatum:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "Enddatum:" @@ -3257,11 +3447,11 @@ msgstr "Farbe:" #: bookwyrm/templates/settings/automod/rules.html:11 #: bookwyrm/templates/settings/layout.html:61 msgid "Auto-moderation rules" -msgstr "" +msgstr "Regeln für automatische Moderation" #: bookwyrm/templates/settings/automod/rules.html:18 msgid "Auto-moderation rules will create reports for any local user or status with fields matching the provided string." -msgstr "" +msgstr "Auto-Moderationsregeln erstellen Berichte für jeden lokalen Benutzer oder Status mit Feldern, die der angegebenen Zeichenfolge entsprechen." #: bookwyrm/templates/settings/automod/rules.html:19 msgid "Users or statuses that have already been reported (regardless of whether the report was resolved) will not be flagged." @@ -3277,11 +3467,11 @@ msgstr "Letzte Ausführung:" #: bookwyrm/templates/settings/automod/rules.html:40 msgid "Total run count:" -msgstr "" +msgstr "Gesamtanzahl:" #: bookwyrm/templates/settings/automod/rules.html:47 msgid "Enabled:" -msgstr "" +msgstr "Aktiviert:" #: bookwyrm/templates/settings/automod/rules.html:59 msgid "Delete schedule" @@ -3289,20 +3479,20 @@ msgstr "Zeitplan löschen" #: bookwyrm/templates/settings/automod/rules.html:63 msgid "Run now" -msgstr "" +msgstr "Jetzt ausführen" #: bookwyrm/templates/settings/automod/rules.html:64 msgid "Last run date will not be updated" -msgstr "" +msgstr "Letztes Ausführungsdatum wird nicht aktualisiert" #: bookwyrm/templates/settings/automod/rules.html:69 #: bookwyrm/templates/settings/automod/rules.html:92 msgid "Schedule scan" -msgstr "" +msgstr "Scan planen" #: bookwyrm/templates/settings/automod/rules.html:101 msgid "Successfully added rule" -msgstr "" +msgstr "Regel erfolgreich hinzugefügt" #: bookwyrm/templates/settings/automod/rules.html:107 msgid "Add Rule" @@ -3311,7 +3501,7 @@ msgstr "Regel hinzufügen" #: bookwyrm/templates/settings/automod/rules.html:116 #: bookwyrm/templates/settings/automod/rules.html:160 msgid "String match" -msgstr "" +msgstr "Zeichenfolgenübereinstimmung" #: bookwyrm/templates/settings/automod/rules.html:126 #: bookwyrm/templates/settings/automod/rules.html:163 @@ -3346,7 +3536,7 @@ msgid "Dashboard" msgstr "Übersicht" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "Benutzer*innen insgesamt" @@ -3364,57 +3554,31 @@ msgstr "Statusmeldungen" msgid "Works" msgstr "Werke" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s offene Meldung" -msgstr[1] "%(display_count)s offene Meldungen" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "%(display_count)s Domain muss überprüft werden" -msgstr[1] "%(display_count)s Domains müssen überprüft werden" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s Einladungsanfrage" -msgstr[1] "%(display_count)s Einladungsanfragen" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "Ein Update ist verfügbar! Sie verwenden v%(current)s, die neueste Version ist %(available)s." - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "Instanzaktivität" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "Intervall:" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "Tage" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "Wochen" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "Neuanmeldungen" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "Statusaktivitäten" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "Erstellte Werke" @@ -3430,6 +3594,49 @@ msgstr "Statusmeldungen veröffentlicht" msgid "Total" msgstr "Gesamt" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "%(display_count)s Domain muss überprüft werden" +msgstr[1] "%(display_count)s Domains müssen überprüft werden" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "Ihre ausgehende E-Mail-Adresse %(email_sender)skönnte falsch konfiguriert sein." + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "Überprüfen Sie EMAIL_SENDER_NAME und EMAIL_SENDER_DOMAIN in Ihrer .env-Datei." + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s Einladungsanfrage" +msgstr[1] "%(display_count)s Einladungsanfragen" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "Ihrer Instanz fehlt ein Verhaltenskodex." + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "In Ihrer Instanz fehlt eine Datenschutzerklärung." + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s offene Meldung" +msgstr[1] "%(display_count)s offene Meldungen" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "Ein Update ist verfügbar! Du verwendest v%(current)s, die neueste Version ist %(available)s." + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3834,7 +4041,7 @@ msgstr "Derzeit keine zur Freigabe anstehenden Domains" msgid "No domains currently blocked" msgstr "Derzeit keine Domains gesperrt" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "Keine Links für diese Domain vorhanden." @@ -3844,7 +4051,7 @@ msgstr "Zurück zu den Meldungen" #: bookwyrm/templates/settings/reports/report.html:24 msgid "Message reporter" -msgstr "" +msgstr "Nachrichtenmelder" #: bookwyrm/templates/settings/reports/report.html:28 msgid "Update on your report:" @@ -3862,11 +4069,11 @@ msgstr "Statusmeldung gelöscht" msgid "Reported links" msgstr "Gemeldete Links" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "Moderator*innenkommentare" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "Kommentieren" @@ -3876,12 +4083,17 @@ msgstr "Kommentieren" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "Bericht #%(report_id)s: Status gepostet von @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "Bericht #%(report_id)s: Link hinzugefügt von @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "Bericht #%(report_id)s: Link" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "Bericht #%(report_id)s: Benutzer @%(username)s" @@ -4034,7 +4246,7 @@ msgstr "Einladungsanfragen zulassen" #: bookwyrm/templates/settings/site.html:158 msgid "Set a question for invite requests" -msgstr "" +msgstr "Eine Frage für Einladungsanfragen festlegen" #: bookwyrm/templates/settings/site.html:163 msgid "Question:" @@ -4050,11 +4262,11 @@ msgstr "Hinweis für Einladungsanfragen:" #: bookwyrm/templates/settings/themes.html:10 msgid "Set instance default theme" -msgstr "" +msgstr "Instanz-Standard-Theme festlegen" #: bookwyrm/templates/settings/themes.html:19 msgid "Successfully added theme" -msgstr "" +msgstr "Theme erfolgreich hinzugefügt" #: bookwyrm/templates/settings/themes.html:26 msgid "How to add a theme" @@ -4062,15 +4274,15 @@ msgstr "Wie man ein Theme hinzufügt" #: bookwyrm/templates/settings/themes.html:29 msgid "Copy the theme file into the bookwyrm/static/css/themes directory on your server from the command line." -msgstr "" +msgstr "Kopieren Sie die Theme-Datei in das bookwyrm/static/css/themes-Verzeichnis auf Ihrem Server mittels der Kommandozeile." #: bookwyrm/templates/settings/themes.html:32 msgid "Run ./bw-dev collectstatic." -msgstr "" +msgstr "Führe ./bw-dev collectstatic aus." #: bookwyrm/templates/settings/themes.html:35 msgid "Add the file name using the form below to make it available in the application interface." -msgstr "" +msgstr "Fügen Sie den Dateinamen mit dem untenstehenden Formular hinzu, um ihn in der Anwendung verfügbar zu machen." #: bookwyrm/templates/settings/themes.html:42 #: bookwyrm/templates/settings/themes.html:83 @@ -4121,34 +4333,42 @@ msgstr "Dein Passwort:" msgid "Users: %(instance_name)s" msgstr "Benutzer*innen: %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "Gelöschte Benutzer" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "Benutzer*inname" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "Hinzugefügt am" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "Zuletzt aktiv" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "Entfernte Instanz" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "Aktiv" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "Gelöscht" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "Inaktiv" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "Nicht festgelegt" @@ -4159,7 +4379,7 @@ msgstr "Benutzer*inprofil anzeigen" #: bookwyrm/templates/settings/users/user_info.html:19 msgid "Go to user admin" -msgstr "" +msgstr "Gehe zur Benutzerverwaltung" #: bookwyrm/templates/settings/users/user_info.html:40 msgid "Local" @@ -4239,51 +4459,51 @@ msgstr "BookWyrm einrichten" #: bookwyrm/templates/setup/admin.html:7 msgid "Your account as a user and an admin" -msgstr "" +msgstr "Ihr Konto als Benutzer und Admin" #: bookwyrm/templates/setup/admin.html:13 msgid "Create your account" -msgstr "" +msgstr "Erstelle einen Account" #: bookwyrm/templates/setup/admin.html:20 msgid "Admin key:" -msgstr "" +msgstr "Adminschlüssel:" #: bookwyrm/templates/setup/admin.html:32 msgid "An admin key was created when you installed BookWyrm. You can get your admin key by running ./bw-dev admin_code from the command line on your server." -msgstr "" +msgstr "Ein Adminschlüssel wurde erstellt als Sie BookWyrm installierten. Sie können Ihren Adminschlüssel durch das Ausführen von ./bw-dev admin_code auf der Kommandozeile Ihres Servers herausfinden." #: bookwyrm/templates/setup/admin.html:45 msgid "As an admin, you'll be able to configure the instance name and information, and moderate your instance. This means you will have access to private information about your users, and are responsible for responding to reports of bad behavior or spam." -msgstr "" +msgstr "Als Administrator können Sie den Namen und die Informationen der Instanz konfigurieren und Ihre Instanz moderieren. Dies bedeutet, dass Sie Zugang zu privaten Informationen über Ihre Nutzer haben und verantwortlich für die Reaktion auf Berichte über Fehlverhalten oder Spam sind." #: bookwyrm/templates/setup/admin.html:51 msgid "Once the instance is set up, you can promote other users to moderator or admin roles from the admin panel." -msgstr "" +msgstr "Sobald die Instanz eingerichtet ist, können Sie andere Benutzer im Admin-Panel zu Moderatoren oder Administratoren befördern." #: bookwyrm/templates/setup/admin.html:55 msgid "Learn more about moderation" -msgstr "" +msgstr "Mehr über Moderation erfahren" #: bookwyrm/templates/setup/config.html:5 msgid "Instance Configuration" -msgstr "" +msgstr "Instanzkonfiguration" #: bookwyrm/templates/setup/config.html:7 msgid "Make sure everything looks right before proceeding" -msgstr "" +msgstr "Vergewissern Sie sich, dass alles richtig aussieht bevor Sie fortfahren" #: bookwyrm/templates/setup/config.html:18 msgid "You are running BookWyrm in debug mode. This should never be used in a production environment." -msgstr "" +msgstr "Sie verwenden BookWyrm im Debug Modus. Dies sollte nie in einer Produktionsumgebung verwendet werden." #: bookwyrm/templates/setup/config.html:30 msgid "Your domain appears to be misconfigured. It should not include protocol or slashes." -msgstr "" +msgstr "Ihre Domain scheint falsch konfiguriert zu sein. Sie sollte kein Protokoll oder Schrägstriche enthalten." #: bookwyrm/templates/setup/config.html:42 msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production." -msgstr "" +msgstr "Sie verwenden BookWyrm im Produktionsmodus ohne https. USE_HTTPS sollte in der Produktion aktiviert werden." #: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:45 msgid "Settings" @@ -4291,23 +4511,23 @@ msgstr "Einstellungen" #: bookwyrm/templates/setup/config.html:56 msgid "Instance domain:" -msgstr "" +msgstr "Instanz Domain:" #: bookwyrm/templates/setup/config.html:63 msgid "Protocol:" -msgstr "" +msgstr "Protokoll:" #: bookwyrm/templates/setup/config.html:81 msgid "Using S3:" -msgstr "" +msgstr "S3 benutzen:" #: bookwyrm/templates/setup/config.html:95 msgid "Default interface language:" -msgstr "" +msgstr "Standardsprache der Benutzeroberfläche:" #: bookwyrm/templates/setup/config.html:102 msgid "Email sender:" -msgstr "" +msgstr "E-Mail-Absender:" #: bookwyrm/templates/setup/config.html:109 msgid "Enable preview images:" @@ -4339,7 +4559,7 @@ msgstr "Instanzeinstellungen" #: bookwyrm/templates/setup/layout.html:15 msgid "Installing BookWyrm" -msgstr "" +msgstr "Installiere BookWyrm" #: bookwyrm/templates/setup/layout.html:18 msgid "Need help?" @@ -4359,46 +4579,51 @@ msgid "User profile" msgstr "Benutzer*inprofil" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Alle Bücher" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s Buch" msgstr[1] "%(formatted_count)s Bücher" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(Anzeige: %(start)s&endash;%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "Regal bearbeiten" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "Regal löschen" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "Ins Regal gestellt" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "Gestartet" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "Abgeschlossen" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "Bis" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "Dieses Regal ist leer." @@ -4666,7 +4891,7 @@ msgstr "Ziel setzen" #: bookwyrm/templates/snippets/goal_progress.html:7 msgctxt "Goal successfully completed" msgid "Success!" -msgstr "" +msgstr "Erfolg!" #: bookwyrm/templates/snippets/goal_progress.html:9 #, python-format @@ -4728,7 +4953,7 @@ msgid "(Optional)" msgstr "(Optional)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "Zwischenstand" @@ -4737,6 +4962,17 @@ msgstr "Zwischenstand" msgid "Start \"%(book_title)s\"" msgstr "„%(book_title)s“ beginnen" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "Lesen von \"%(book_title)s \" stoppen" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "Lesen gestoppt" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4784,23 +5020,23 @@ msgstr "Buch verschieben" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "Zu lesen beginnen" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "Auf Leseliste setzen" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "Aus %(name)s entfernen" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "Entfernen aus" @@ -4808,14 +5044,15 @@ msgstr "Entfernen aus" msgid "More shelves" msgstr "Mehr Regale" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "Aufhören zu lesen" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "Lesen abschließen" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "Inhaltswarnung" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "Status anzeigen" @@ -4903,6 +5140,16 @@ msgstr "hat %(book)s von %(book)s" msgstr "hat %(book)s besprochen" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "hat das Lesen von %(book)s von %(author_name)s beendet" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "hat das Lesen von %(book)s beendet" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5043,29 +5290,29 @@ msgstr "%(username)s folgt niemandem" msgid "Edit profile" msgstr "Profil bearbeiten" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "Alle %(size)s anzeigen" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "Alle Bücher anzeigen" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "Leseziel %(current_year)s" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "Benutzer*innenaktivität" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "RSS-Feed" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "Noch keine Aktivitäten!" @@ -5101,7 +5348,7 @@ msgstr "Keine Follower*innen, denen du folgst" msgid "View profile and more" msgstr "Profil und mehr ansehen" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "Abmelden" @@ -5114,7 +5361,7 @@ msgstr "Datei überschreitet die maximale Größe von 10MB" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "Keine gültige CSV-Datei" @@ -5122,14 +5369,13 @@ msgstr "Keine gültige CSV-Datei" msgid "Username or password are incorrect" msgstr "Benutzer*inname oder Passwort falsch" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "Es wurde kein*e Benutzer*in mit dieser E-Mail-Adresse gefunden." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "Falsches Passwort" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "Ein Link zum Zurücksetzen des Passworts wurde an {email} gesendet" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "Passwort stimmt nicht überein" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index e776c8268..8436cc4d8 100644 --- a/locale/en_US/LC_MESSAGES/django.po +++ b/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-05-23 21:04+0000\n" +"POT-Creation-Date: 2022-07-14 23:57+0000\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -47,6 +47,10 @@ msgstr "" msgid "Reading finish date cannot be before start date." msgstr "" +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "" + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "" @@ -71,8 +75,8 @@ msgstr "" msgid "Book Title" msgstr "" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "" @@ -118,7 +122,7 @@ msgstr "" msgid "Danger" msgstr "" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "" @@ -737,7 +741,7 @@ msgstr "" #: bookwyrm/templates/book/book.html:202 #: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -1076,7 +1080,7 @@ msgid "Add Another Author" msgstr "" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "" @@ -1202,7 +1206,7 @@ msgstr "" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "" @@ -1215,16 +1219,21 @@ msgstr "" msgid "Actions" msgstr "" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "" -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "" @@ -1321,7 +1330,7 @@ msgstr "" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "" @@ -1337,17 +1346,13 @@ msgstr "" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" msgstr "" -#: bookwyrm/templates/confirm_email/resend_modal.html:28 -msgid "No user matching this email address found." -msgstr "" - -#: bookwyrm/templates/confirm_email/resend_modal.html:38 +#: bookwyrm/templates/confirm_email/resend_modal.html:30 msgid "Resend link" msgstr "" @@ -1361,7 +1366,7 @@ msgid "Local users" msgstr "" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "" @@ -1564,14 +1569,20 @@ msgstr "" msgid "Learn more about %(site_name)s:" msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " +msgid "@%(reporter)s has flagged a link domain for moderation." msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "" + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "" @@ -1710,13 +1721,13 @@ msgstr "" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "" @@ -1725,10 +1736,15 @@ msgstr "" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "" @@ -2056,8 +2072,8 @@ msgid "Row" msgstr "" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "" @@ -2070,8 +2086,8 @@ msgid "Openlibrary key" msgstr "" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "" @@ -2254,16 +2270,21 @@ msgid "More about this site" msgstr "" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "" + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "" @@ -2571,67 +2592,193 @@ msgstr "" msgid "Saved Lists" msgstr "" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" +msgid "%(related_user)s boosted your review of %(book_title)s" msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" msgstr "" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" msgstr "" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" msgstr "" #: bookwyrm/templates/notifications/items/import.html:14 @@ -2639,9 +2786,9 @@ msgstr "" msgid "Your import completed." msgstr "" -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" msgstr "" #: bookwyrm/templates/notifications/items/join.html:16 @@ -2649,29 +2796,39 @@ msgstr "" msgid "has joined your group \"%(group_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" msgstr "" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" msgstr "" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" msgstr "" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" msgstr "" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" +msgid "%(related_user)s mentioned you in a status" msgstr "" #: bookwyrm/templates/notifications/items/remove.html:17 @@ -2686,27 +2843,34 @@ msgstr "" #: bookwyrm/templates/notifications/items/reply.html:21 #, python-format -msgid "replied to your review of %(book_title)s" +msgid "%(related_user)s replied to your review of %(book_title)s" msgstr "" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" +msgid "%(related_user)s replied to your comment on %(book_title)s" msgstr "" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" +msgid "%(related_user)s replied to your quote from %(book_title)s" msgstr "" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" +msgid "%(related_user)s replied to your status" msgstr "" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" msgstr "" #: bookwyrm/templates/notifications/items/update.html:16 @@ -2866,12 +3030,20 @@ msgstr "" #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "" @@ -2963,6 +3135,10 @@ msgstr "" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "" +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "" @@ -2989,6 +3165,11 @@ msgstr "" msgid "Start \"%(book_title)s\"" msgstr "" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3013,6 +3194,7 @@ msgstr "" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "" @@ -3021,7 +3203,7 @@ msgstr "" msgid "Progress" msgstr "" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3035,23 +3217,27 @@ msgstr "" msgid "finished" msgstr "" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "" @@ -3180,13 +3366,13 @@ msgstr "" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "" @@ -3346,7 +3532,7 @@ msgid "Dashboard" msgstr "" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "" @@ -3364,57 +3550,31 @@ msgstr "" msgid "Works" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "" -msgstr[1] "" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "" -msgstr[1] "" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "" -msgstr[1] "" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "" @@ -3430,6 +3590,49 @@ msgstr "" msgid "Total" msgstr "" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "" + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3834,7 +4037,7 @@ msgstr "" msgid "No domains currently blocked" msgstr "" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "" @@ -3862,11 +4065,11 @@ msgstr "" msgid "Reported links" msgstr "" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "" @@ -3876,12 +4079,17 @@ msgstr "" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "" @@ -4121,34 +4329,42 @@ msgstr "" msgid "Users: %(instance_name)s" msgstr "" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "" @@ -4359,46 +4575,51 @@ msgid "User profile" msgstr "" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "" msgstr[1] "" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "" @@ -4728,7 +4949,7 @@ msgid "(Optional)" msgstr "" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "" @@ -4737,6 +4958,17 @@ msgstr "" msgid "Start \"%(book_title)s\"" msgstr "" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4784,23 +5016,23 @@ msgstr "" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "" @@ -4808,12 +5040,13 @@ msgstr "" msgid "More shelves" msgstr "" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 -msgid "Finish reading" +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" msgstr "" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 +msgid "Finish reading" msgstr "" #: bookwyrm/templates/snippets/status/content_status.html:80 @@ -4903,6 +5136,16 @@ msgstr "" msgid "reviewed %(book)s" msgstr "" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5043,29 +5286,29 @@ msgstr "" msgid "Edit profile" msgstr "" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "" @@ -5101,7 +5344,7 @@ msgstr "" msgid "View profile and more" msgstr "" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "" @@ -5122,13 +5365,12 @@ msgstr "" msgid "Username or password are incorrect" msgstr "" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" msgstr "" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" msgstr "" #: bookwyrm/views/rss_feed.py:34 diff --git a/locale/es_ES/LC_MESSAGES/django.mo b/locale/es_ES/LC_MESSAGES/django.mo index d108960bf..86af3d550 100644 Binary files a/locale/es_ES/LC_MESSAGES/django.mo and b/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/locale/es_ES/LC_MESSAGES/django.po b/locale/es_ES/LC_MESSAGES/django.po index 9d31c52d8..806139558 100644 --- a/locale/es_ES/LC_MESSAGES/django.po +++ b/locale/es_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-04-30 10:04\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-11 16:22\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Spanish\n" "Language: es\n" @@ -46,6 +46,10 @@ msgstr "Sin límite" msgid "Reading finish date cannot be before start date." msgstr "La fecha final de lectura no puede ser anterior a la fecha de inicio." +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "La fecha final de lectura no puede ser anterior a la fecha de inicio." + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "Este nombre de usuario ya está en uso." @@ -70,8 +74,8 @@ msgstr "Orden de la lista" msgid "Book Title" msgstr "Título" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Valoración" @@ -117,29 +121,29 @@ msgstr "Aviso" msgid "Danger" msgstr "Cuidado" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "Informe generado automáticamente" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Pendiente" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "Auto-eliminación" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "Suspensión de moderador" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "Eliminación de moderador" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "Bloqueo de dominio" @@ -734,9 +738,9 @@ msgstr "ISNI:" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -757,8 +761,8 @@ msgstr "Guardar" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -780,7 +784,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "La carga de datos se conectará a %(source_name)s y comprobará si hay metadatos sobre este autor que no están presentes aquí. Los metadatos existentes no serán sobrescritos." #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -949,42 +953,42 @@ msgstr "Editar \"%(book_title)s\"" msgid "Add Book" msgstr "Agregar libro" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "Confirmar información de libro" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "¿Es \"%(name)s\" uno de estos autores?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "Autor/a de " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "Más información en isni.org" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "Este es un autor nuevo" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "Creando un autor nuevo: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "¿Es esta una edición de una obra ya existente?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "Esta es una obra nueva" -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "Volver" @@ -1075,7 +1079,7 @@ msgid "Add Another Author" msgstr "Añadir Otro Autor" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "Portada" @@ -1201,7 +1205,7 @@ msgstr "Dominio" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "Estado" @@ -1214,16 +1218,21 @@ msgstr "Estado" msgid "Actions" msgstr "Acciones" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "Usuario/a desconocido/a" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "Denunciar spam" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "Ningún enlace disponible para este libro." -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "Añadir enlace a archivo" @@ -1320,7 +1329,7 @@ msgstr "Código de confirmación:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "Enviar" @@ -1336,7 +1345,7 @@ msgstr "Reenviar enlace de confirmación" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1360,7 +1369,7 @@ msgid "Local users" msgstr "Usuarios locales" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "Comunidad federada" @@ -1563,14 +1572,20 @@ msgstr "Estás invitado a unirte con %(site_name)s! Haz clic en el enlace a cont msgid "Learn more about %(site_name)s:" msgstr "Más información sobre %(site_name)s:" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s ha marcado el comportamiento de @%(reportee)s para moderar. " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "" + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "Ver informe" @@ -1709,13 +1724,13 @@ msgstr "Añadir a tus libros" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "Para leer" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "Leyendo actualmente" @@ -1724,10 +1739,15 @@ msgstr "Leyendo actualmente" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "Leído" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "Lectura interrumpida" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "¿Qué estás leyendo?" @@ -1970,33 +1990,33 @@ msgstr "Importar libros" msgid "Data source:" msgstr "Fuente de datos:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "Puedes descargar tus datos de Goodreads desde la página de importación/exportación de tu cuenta de Goodreads." -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "Archivo de datos:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "Incluir reseñas" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "Configuración de privacidad para las reseñas importadas:" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "Importar" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "Importaciones recientes" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "No hay ninguna importación reciente" @@ -2055,8 +2075,8 @@ msgid "Row" msgstr "Fila" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "Título" @@ -2069,8 +2089,8 @@ msgid "Openlibrary key" msgstr "Clave de OpenLibrary" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "Autor/Autora" @@ -2253,16 +2273,21 @@ msgid "More about this site" msgstr "Más sobre este sitio" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "Confirmar contraseña:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "Se enviará un enlace para restablecer la contraseña a %(email)s si hay una cuenta usando esa dirección de correo electrónico." + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "Un enlace para restablecer tu contraseña se enviará a tu dirección de correo electrónico" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "Restablecer contraseña" @@ -2570,108 +2595,244 @@ msgstr "Todas las listas" msgid "Saved Lists" msgstr "Listas guardadas" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "aceptó su invitación para unirse al grupo «%(group_name)s»" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "%(related_user)s aceptó su invitación para unirse al grupo \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "agregó %(book_title)s a su lista «%(list_name)s»" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "sugirió agregar %(book_title)s a su lista «%(list_name)s»" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "difundió tu reseña de %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "difundió tu comentario en%(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "difundió tu cita de %(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "difundió tu estado" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "le gustó tu reseña de %(book_title)s" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "le gustó tu comentario sobre %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "le gustó tu cita de %(book_title)s" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "le gustó tu estado" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "te siguió" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "te quiere seguir" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "Tu importación ha terminado." -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "te invitó a unirte al grupo «%(group_name)s»" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "se ha unido a tu grupo «%(group_name)s»" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "ha dejado tu grupo «%(group_name)s»" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "te mencionó en una reseña de %(book_title)s" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "te mencionó en un comentario de %(book_title)s" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "te mencionó en una cita de %(book_title)s" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "te mencionó en un estado" +msgid "%(related_user)s mentioned you in a status" +msgstr "" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2685,28 +2846,35 @@ msgstr "Te han eliminado del grupo «%(group_name)sreplied to your review of %(book_title)s" -msgstr "respondió a tu reseña de %(book_title)s" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "respondió a tu comentario en %(book_title)s" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "respondió a tu cita de %(book_title)s" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "respondió a tu estado" +msgid "%(related_user)s replied to your status" +msgstr "" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "Un informe nuevo se requiere moderación." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "Advertencia de contenido" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2865,12 +3033,20 @@ msgstr "No hay ningún usuario bloqueado actualmente." #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "Cambiar contraseña" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "Nueva contraseña:" @@ -2962,6 +3138,10 @@ msgstr "Exportar CSV" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "Se exportarán todos los libros que tengas en las estanterías, las reseñas y los libros que estés leyendo." +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "Cuenta" @@ -2988,6 +3168,11 @@ msgstr "Terminar \"%(book_title)s\"" msgid "Start \"%(book_title)s\"" msgstr "Empezar \"%(book_title)s\"" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3012,6 +3197,7 @@ msgstr "Actualizar fechas de lectura de «%(title)s»" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "Lectura se empezó" @@ -3020,7 +3206,7 @@ msgstr "Lectura se empezó" msgid "Progress" msgstr "Progreso" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3034,23 +3220,27 @@ msgstr "Actualizaciones de progreso:" msgid "finished" msgstr "terminado" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "Mostrar todas las actualizaciones" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "Eliminar esta actualización de progreso" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "empezado" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "Editar fechas de lectura" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "Eliminar estas fechas de lectura" @@ -3180,13 +3370,13 @@ msgstr "Falso" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "Fecha de inicio:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "Fecha final:" @@ -3346,7 +3536,7 @@ msgid "Dashboard" msgstr "Tablero" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "Número de usuarios" @@ -3364,57 +3554,31 @@ msgstr "Estados" msgid "Works" msgstr "Obras" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s informe abierto" -msgstr[1] "%(display_count)s informes abiertos" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "%(display_count)s dominio necesita revisión" -msgstr[1] "%(display_count)s dominios necesitan revisión" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s solicitación de invitado" -msgstr[1] "%(display_count)s solicitaciones de invitado" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "Hay una actualización disponible. La versión que estás usando es la %(current)s, mientras que la actual es %(available)s." - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "Actividad de instancia" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "Intervalo:" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "Dias" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "Semanas" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "Actividad de inscripciones de usuarios" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "Actividad de estado" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "Obras creadas" @@ -3430,6 +3594,49 @@ msgstr "Estados publicados" msgid "Total" msgstr "Suma" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "%(display_count)s dominio necesita revisión" +msgstr[1] "%(display_count)s dominios necesitan revisión" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s solicitación de invitado" +msgstr[1] "%(display_count)s solicitaciones de invitado" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s informe abierto" +msgstr[1] "%(display_count)s informes abiertos" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "Hay una actualización disponible. La versión que estás usando es la %(current)s, mientras que la actual es %(available)s." + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3834,7 +4041,7 @@ msgstr "Ningún dominio pendiente actualmente" msgid "No domains currently blocked" msgstr "No hay dominios bloqueados actualmente" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "Ningún enlace disponible para este dominio." @@ -3862,11 +4069,11 @@ msgstr "El estado ha sido eliminado" msgid "Reported links" msgstr "Enlaces denunciados" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "Comentarios de moderador" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "Comentario" @@ -3876,12 +4083,17 @@ msgstr "Comentario" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "Reporte #%(report_id)s: Estado publicado por @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "Reporte #%(report_id)s: Enlace añadido por @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "Reporte #%(report_id)s: Usuario @%(username)s" @@ -4121,34 +4333,42 @@ msgstr "Tu contraseña:" msgid "Users: %(instance_name)s" msgstr "Usuarios %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "Nombre de usuario" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "Fecha agregada" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "Actividad reciente" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "Instancia remota" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "Activo" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "Inactivo" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "No establecido" @@ -4359,46 +4579,51 @@ msgid "User profile" msgstr "Perfil de usuario" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Todos los libros" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s libro" msgstr[1] "%(formatted_count)s libros" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(mostrando %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "Editar estantería" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "Eliminar estantería" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "Archivado" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "Empezado" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "Terminado" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "Esta estantería está vacía." @@ -4728,7 +4953,7 @@ msgid "(Optional)" msgstr "(Opcional)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "Actualizar progreso" @@ -4737,6 +4962,17 @@ msgstr "Actualizar progreso" msgid "Start \"%(book_title)s\"" msgstr "Empezar \"%(book_title)s\"" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4784,23 +5020,23 @@ msgstr "Mover libro" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "Empezar a leer" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "Quiero leer" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "Quitar de %(name)s" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "Eliminar de" @@ -4808,14 +5044,15 @@ msgstr "Eliminar de" msgid "More shelves" msgstr "Más estanterías" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "Terminar de leer" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "Advertencia de contenido" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "Mostrar estado" @@ -4903,6 +5140,16 @@ msgstr "reseñó %(book)s de %(book)s" msgstr "reseñó a %(book)s" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5043,29 +5290,29 @@ msgstr "%(username)s no sigue a nadie" msgid "Edit profile" msgstr "Editar perfil" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "Ver los %(size)s" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "Ver todos los libros" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "Objetivo de Lectura de %(current_year)s" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "Actividad del usuario" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "Feed RSS" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "¡Aún no actividades!" @@ -5101,7 +5348,7 @@ msgstr "No le sigue nadie que tu sigas" msgid "View profile and more" msgstr "Ver perfil y más" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "Cerrar sesión" @@ -5114,7 +5361,7 @@ msgstr "Archivo excede el tamaño máximo: 10MB" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "No un archivo csv válido" @@ -5122,14 +5369,13 @@ msgstr "No un archivo csv válido" msgid "Username or password are incorrect" msgstr "Nombre de usuario o contraseña es incorrecta" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "No se pudo encontrar un usuario con esa dirección de correo electrónico." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "Un enlace para reestablecer tu contraseña se envió a {email}" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/fi_FI/LC_MESSAGES/django.mo b/locale/fi_FI/LC_MESSAGES/django.mo index 91cf658f5..f5ece7df4 100644 Binary files a/locale/fi_FI/LC_MESSAGES/django.mo and b/locale/fi_FI/LC_MESSAGES/django.mo differ diff --git a/locale/fi_FI/LC_MESSAGES/django.po b/locale/fi_FI/LC_MESSAGES/django.po index e2ceaad3d..a05a7e631 100644 --- a/locale/fi_FI/LC_MESSAGES/django.po +++ b/locale/fi_FI/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-05-07 14:54\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-11 17:19\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Finnish\n" "Language: fi\n" @@ -46,6 +46,10 @@ msgstr "rajattomasti" msgid "Reading finish date cannot be before start date." msgstr "Lopetuspäivä ei voi olla ennen aloituspäivää." +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "Keskeytyspäivä ei voi olla ennen aloituspäivää." + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "Käyttäjänimi on jo varattu" @@ -70,8 +74,8 @@ msgstr "Lisäysjärjestys" msgid "Book Title" msgstr "Kirjan nimi" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Arvosana" @@ -117,29 +121,29 @@ msgstr "Varoitus" msgid "Danger" msgstr "Vaara" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "Automaattisesti luotu raportti" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Odottaa" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "Itse poistettu" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "Moderaattorin estämä" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "Moderaattorin poistama" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "Verkkotunnuksen esto" @@ -734,9 +738,9 @@ msgstr "ISNI:" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -757,8 +761,8 @@ msgstr "Tallenna" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -780,7 +784,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "Tietoja ladattaessa muodostetaan yhteys lähteeseen %(source_name)s ja sieltä haetaan metatietoja, joita ei vielä ole täällä. Olemassa olevia metatietoja ei korvata uusilla." #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -949,42 +953,42 @@ msgstr "Muokkaa teosta ”%(book_title)s”" msgid "Add Book" msgstr "Lisää kirja" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "Vahvista kirjan tiedot" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "Onko ”%(name)s” joku seuraavista tekijöistä?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "Tekijänä teoksessa " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "Lisätietoja osoitteessa isni.org" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "Uusi tekijä" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "Luodaan uusi tekijä: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "Onko tämä aiemmin lisätyn teoksen laitos?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "Uusi teos" -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "Takaisin" @@ -1075,7 +1079,7 @@ msgid "Add Another Author" msgstr "Yksi tekijä lisää" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "Kansikuva" @@ -1201,7 +1205,7 @@ msgstr "Verkkotunnus" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "Tila" @@ -1214,16 +1218,21 @@ msgstr "Tila" msgid "Actions" msgstr "Toiminnot" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "Tuntematon käyttäjä" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "Ilmoita roskapostiksi" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "Tähän kirjaan ei liity linkkejä." -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "Lisää linkki tiedostoon" @@ -1320,7 +1329,7 @@ msgstr "Vahvistuskoodi:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "Lähetä" @@ -1336,7 +1345,7 @@ msgstr "Lähetä vahvistuslinkki uudelleen" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1360,7 +1369,7 @@ msgid "Local users" msgstr "Paikalliset käyttäjät" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "Yhteisö fediversumissa" @@ -1563,14 +1572,20 @@ msgstr "%(site_name)s kutsuu liittymään! Luo käyttäjätili seuraavasta linki msgid "Learn more about %(site_name)s:" msgstr "Lue lisää %(site_name)s-yhteisöstä:" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s on lähettänyt moderointipyynnön käyttäjästä @%(reportee)s. " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "@%(reporter)s on merkinnyt verkkotunnuksen tarkastettavaksi." -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "@%(reporter)s on merkinnyt käyttäjän @%(reportee)s toiminnan tarkastettavaksi." + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "Näytä raportti" @@ -1709,13 +1724,13 @@ msgstr "Lisää omiin kirjoihin" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "Lukujono" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "Luettavana" @@ -1724,10 +1739,15 @@ msgstr "Luettavana" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "Luettu" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "Keskeytti lukemisen" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "Mitä luet?" @@ -1970,33 +1990,33 @@ msgstr "Tuo kirjoja" msgid "Data source:" msgstr "Tietolähde:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "Goodreads-tiedot voi ladata Goodreads-käyttäjätilin Import/Export-sivun kautta." -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "Datatiedosto:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "Myös arviot" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "Tuotavien arvioiden yksityisyysvalinta:" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "Tuo" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "Viimeksi tuotu" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "Ei viimeaikaisia tuonteja" @@ -2055,8 +2075,8 @@ msgid "Row" msgstr "Rivi" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "Nimi" @@ -2069,8 +2089,8 @@ msgid "Openlibrary key" msgstr "Openlibrary-avain" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "Tekijä" @@ -2253,16 +2273,21 @@ msgid "More about this site" msgstr "Tietoja sivustosta" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "Vahvista salasana:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "Osoitteeseen %(email)s lähetetään linkki salasanan palauttamiseksi, mikäli osoite on yhdistetty johonkin käyttäjätiliin." + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "Salasananpalautuslinkki lähetetään sähköpostiosoitteeseesi" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "Palauta salasana" @@ -2570,108 +2595,244 @@ msgstr "Kaikki listat" msgid "Saved Lists" msgstr "Tallennetut listat" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "hyväksyi kutsusi liittyä ryhmään ”%(group_name)s”" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "%(related_user)s hyväksyi kutsusi liittyä ryhmään %(group_name)s" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "lisäsi teoksen %(book_title)s listaasi ”%(list_name)s”" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "%(related_user)s ja %(second_user)s hyväksyivät kutsusi liittyä ryhmään %(group_name)s" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "ehdotti teosta %(book_title)s listaasi ”%(list_name)s”" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "%(related_user)s ja %(other_user_display_count)s muuta hyväksyivät kutsusi liittyä ryhmään %(group_name)s" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "kaiutti arviotasi teoksesta %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s lisäsi teoksen %(book_title)s listaasi %(list_name)s" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "kaiutti teokseen %(book_title)s liittyvää kommenttiasi" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s ehdotti teosta %(book_title)s lisättäväksi listaasi %(list_name)s" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "kaiutti lainaustasi teoksesta %(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s lisäsi teokset %(book_title)s ja %(second_book_title)s listaasi %(list_name)s" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "kaiutti tilapäivitystäsi" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s ehdotti teoksia %(book_title)s ja %(second_book_title)s lisättäväksi listaasi %(list_name)s" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "tykkäsi teosta %(book_title)s koskevasta arviostasi" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "%(related_user)s lisäsi teokset %(book_title)s ja %(second_book_title)s sekä %(display_count)s muun teoksen listaasi %(list_name)s" +msgstr[1] "%(related_user)s lisäsi teokset %(book_title)s ja %(second_book_title)s sekä %(display_count)s muuta teosta listaasi %(list_name)s" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "tykkäsi teosta %(book_title)s koskevasta kommentistasi" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "%(related_user)s ehdotti teoksia %(book_title)s ja %(second_book_title)s sekä %(display_count)s muuta teosta lisättäväksi listaasi %(list_name)s" +msgstr[1] "%(related_user)s ehdotti teoksia %(book_title)s ja %(second_book_title)s sekä %(display_count)s muuta teosta lisättäväksi listaasi %(list_name)s" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "tykkäsi lainauksestasi teoksesta %(book_title)s" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "%(related_user)s kaiutti arviotasi teoksesta %(book_title)s" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "tykkäsi tilapäivityksestäsi" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "%(related_user)s ja %(second_user)s kaiuttivat arviotasi teoksesta %(book_title)s" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "alkoi seurata sinua" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "%(related_user)s ja %(other_user_display_count)s muuta kaiuttivat arviotasi teoksesta %(book_title)s" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "lähetti pyynnön saada seurata sinua" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "%(related_user)s kaiutti teosta %(book_title)s koskevaa kommenttiasi" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "%(related_user)s ja %(second_user)s kaiuttivat teosta %(book_title)s koskevaa kommenttiasi" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "%(related_user)s ja %(other_user_display_count)s muuta kaiuttivat teosta %(book_title)s koskevaa kommenttiasi" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "%(related_user)s kaiuttia lainaustasi teoksesta %(book_title)s" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "%(related_user)s ja %(second_user)s kaiuttivat lainaustasi teoksesta %(book_title)s" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "%(related_user)s ja %(other_user_display_count)s muuta kaiuttivat lainaustasi teoksesta %(book_title)s" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "%(related_user)s kaiutti tilapäivitystäsi" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "%(related_user)s ja %(second_user)s kaiuttivat tilapäivitystäsi" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "%(related_user)s ja %(other_user_display_count)s muuta kaiuttivat tilapäivitystäsi" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "%(related_user)s tykkäsi teosta %(book_title)s koskevasta arviostasi" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "%(related_user)s ja %(second_user)s tykkäsivät teosta %(book_title)s koskevasta arviostasi" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "%(related_user)s ja %(other_user_display_count)s muuta tykkäsivät teosta %(book_title)s koskevasta arviostasi" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "%(related_user)s tykkäsi teosta %(book_title)s koskevasta kommentistasi" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "%(related_user)s ja %(second_user)s tykkäsivät teosta %(book_title)s koskevasta kommentistasi" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "%(related_user)s ja %(other_user_display_count)s muuta tykkäsivät teosta %(book_title)s koskevasta kommentistasi" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "%(related_user)s tykkäsi lainauksestasi teoksesta %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "%(related_user)s ja %(second_user)s tykkäsivät lainauksestasi teoksesta %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "%(related_user)s ja %(other_user_display_count)s muuta tykkäsivät lainauksestasi teoksesta %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "%(related_user)s tykkäsi tilapäivityksestäsi" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "%(related_user)s ja %(second_user)s tykkäsivät tilapäivityksestäsi" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "%(related_user)s ja %(other_user_display_count)s muuta tykkäsivät tilapäivityksestäsi" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "%(related_user)s alkoi seurata sinua" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "%(related_user)s ja %(second_user)s alkoivat seurata sinua" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "%(related_user)s ja %(other_user_display_count)s muuta alkoivat seurata sinua" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "%(related_user)s lähetti pyynnön saada seurata sinua" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "Tuonti valmis." -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "kutsui sinut ryhmään ”%(group_name)s”" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "%(related_user)s kutsui sinut liittymään ryhmään ”%(group_name)s”" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "liittyi ryhmääsi ”%(group_name)s”" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "on poistunut ryhmästäsi ”%(group_name)s”" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "%(related_user)s poistui ryhmästäsi ”%(group_name)s”" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "%(related_user)s ja %(second_user)s poistuivat ryhmästäsi ”%(group_name)s”" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "%(related_user)s ja %(other_user_display_count)s muuta poistuivat ryhmästäsi ”%(group_name)s”" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "mainitsi sinut teoksen %(book_title)s arviossa" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "%(related_user)s mainitsi sinut teosta %(book_title)s koskevassa arviossaan" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "mainitsi sinut teosta %(book_title)s koskevassa kommentissa" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "%(related_user)s mainitsi sinut teosta %(book_title)s koskevassa kommentissaan" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "mainitsi sinut lainauksessa teoksesta %(book_title)s" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "%(related_user)s mainitsi sinut lainauksessaan teoksesta %(book_title)s" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "mainitsi sinut tilapäivityksessä" +msgid "%(related_user)s mentioned you in a status" +msgstr "%(related_user)s mainitsi sinut tilapäivityksessään" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2685,28 +2846,35 @@ msgstr "Sinut on poistettu ryhmästä ”%(group_name #: bookwyrm/templates/notifications/items/reply.html:21 #, python-format -msgid "replied to your review of %(book_title)s" -msgstr "vastasi arvioosi teoksesta %(book_title)s" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "%(related_user)s vastasi teosta %(book_title)s koskevaan arvioosi" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "vastasi teosta %(book_title)s koskevaan kommenttiisi" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "%(related_user)s vastasi teosta %(book_title)s koskevaan kommenttiisi" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "vastasi lainaukseesi teoksesta %(book_title)s" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "%(related_user)s vastasi lainaukseesi teoksesta %(book_title)s" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "vastasi tilapäivitykseesi" +msgid "%(related_user)s replied to your status" +msgstr "%(related_user)s vastasi tilapäivitykseesi" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "Uusi raportti odottaa moderointipäätöstä." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "Uusi raportti odottaa tarkastusta" +msgstr[1] "%(display_count)s uutta raporttia odottaa tarkastusta" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "Sisältövaroitus" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2865,12 +3033,20 @@ msgstr "Ei estettyjä käyttäjiä." #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "Vaihda salasana" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "Salasanan vaihto onnistui" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "Nykyinen salasana:" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "Uusi salasana:" @@ -2962,6 +3138,10 @@ msgstr "CSV-vienti" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "Vienti sisältää kaikki hyllyissäsi olevat ja arvioimasi kirjat sekä kirjat, joita olet lukenut." +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "Lataa tiedosto" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "Käyttäjätili" @@ -2988,6 +3168,11 @@ msgstr "Merkitse ”%(book_title)s” luetuksi" msgid "Start \"%(book_title)s\"" msgstr "Aloita ”%(book_title)s”" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "Keskeytä teoksen ”%(book_title)s” lukeminen" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3012,6 +3197,7 @@ msgstr "Päivitä teoksen %(title)s lukuajankohtaa" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "Alkoi lukea" @@ -3020,7 +3206,7 @@ msgstr "Alkoi lukea" msgid "Progress" msgstr "Eteneminen" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3034,23 +3220,27 @@ msgstr "Etenemispäivitykset:" msgid "finished" msgstr "luettu" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "keskeytetty" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "Näytä kaikki päivitykset" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "Poista etenemispäivitys" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "aloitettu" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "Muokkaa lukuajankohtaa" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "Poista lukuajankohta" @@ -3180,13 +3370,13 @@ msgstr "Epätosi" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "Alkaen:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "Päättyen:" @@ -3346,7 +3536,7 @@ msgid "Dashboard" msgstr "Kojelauta" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "Käyttäjiä yhteensä" @@ -3364,57 +3554,31 @@ msgstr "Tilapäivityksiä" msgid "Works" msgstr "Teoksia" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s käsittelemätön raportti" -msgstr[1] "%(display_count)s käsittelemätöntä raporttia" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "%(display_count)s verkkotunnus vaatii tarkistusta" -msgstr[1] "%(display_count)s verkkotunnusta vaatii tarkistusta" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s kutsupyyntö" -msgstr[1] "%(display_count)s kutsupyyntöä" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "Päivitys saatavilla! Käytössäsi on versio %(current)s, ja viimeisin julkaistu versio on %(available)s." - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "Palvelimen aktiivisuus" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "Aikaväli:" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "päivä" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "viikko" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "Rekisteröityneitä käyttäjiä" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "Tilapäivityksiä" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "Luotuja teoksia" @@ -3430,6 +3594,49 @@ msgstr "Tilapäivityksiä" msgid "Total" msgstr "Yhteensä" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "%(display_count)s verkkotunnus vaatii tarkistusta" +msgstr[1] "%(display_count)s verkkotunnusta vaatii tarkistusta" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "Lähtevän sähköpostin osoitteesi %(email_sender)s saattaa olla määritelty väärin." + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "Tarkista .env-tiedostosta asetukset EMAIL_SENDER_NAME ja EMAIL_SENDER_DOMAIN." + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s kutsupyyntö" +msgstr[1] "%(display_count)s kutsupyyntöä" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "Palvelimeltasi puuttuu käyttöehdot." + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "Palvelimeltasi puuttuu tietosuojakäytäntö." + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s käsittelemätön raportti" +msgstr[1] "%(display_count)s käsittelemätöntä raporttia" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "Päivitys saatavilla! Käytössäsi on versio %(current)s, ja viimeisin julkaistu versio on %(available)s." + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3834,7 +4041,7 @@ msgstr "Ei odottavia verkkotunnuksia" msgid "No domains currently blocked" msgstr "Ei estettyjä verkkotunnuksia" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "Verkkotunnukselle ei ole linkkejä." @@ -3862,11 +4069,11 @@ msgstr "Tilapäivitys on poistettu" msgid "Reported links" msgstr "Raportoidut linkit" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "Moderaattorien kommentit" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "Kommentti" @@ -3876,12 +4083,17 @@ msgstr "Kommentti" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "Raportti %(report_id)s: käyttäjän @%(username)s tilapäivitys" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "Raportti %(report_id)s: käyttäjän @%(username)s lisäämä linkki" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "Raportti %(report_id)s: Verkkotunnus" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "Raportti %(report_id)s: käyttäjä @%(username)s" @@ -4121,34 +4333,42 @@ msgstr "Salasana:" msgid "Users: %(instance_name)s" msgstr "Käyttäjät: %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "Poistetut käyttäjät" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "Käyttäjänimi" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "Lisätty" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "Viimeksi paikalla" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "Etäpalvelin" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "Aktiivinen" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "Poistettu" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "Ei aktiivinen" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "Ei asetettu" @@ -4359,46 +4579,51 @@ msgid "User profile" msgstr "Käyttäjäprofiili" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Kaikki kirjat" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s kirja" msgstr[1] "%(formatted_count)s kirjaa" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(näytetään %(start)s–%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "Muokkaa hyllyä" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "Poista hylly" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "Hyllytetty" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "Aloitettu" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "Lopetettu" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "Saakka" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "Hylly on tyhjä." @@ -4728,7 +4953,7 @@ msgid "(Optional)" msgstr "(valinnainen)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "Etenemispäivitys" @@ -4737,6 +4962,17 @@ msgstr "Etenemispäivitys" msgid "Start \"%(book_title)s\"" msgstr "Aloita %(book_title)s" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "Keskeytä teoksen ”%(book_title)s” lukeminen" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "Keskeytti lukemisen" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4784,23 +5020,23 @@ msgstr "Siirrä kirja" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "Aloita lukeminen" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "Lisää lukujonoon" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "Poista hyllystä %(name)s" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "Poista hyllystä" @@ -4808,14 +5044,15 @@ msgstr "Poista hyllystä" msgid "More shelves" msgstr "Lisää hyllyjä" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "Keskeytä lukeminen" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "Lopeta lukeminen" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "Sisältövaroitus" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "Näytä tilapäivitys" @@ -4903,6 +5140,16 @@ msgstr "kirjoitti arvion teoksesta %(author_name)s%(book)s" msgstr "kirjoitti arvion teoksesta %(book)s" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "keskeytti teoksen %(author_name)s: %(book)s lukemisen" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "keskeytti teoksen %(book)s lukemisen" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5043,29 +5290,29 @@ msgstr "%(username)s ei seuraa muita käyttäjiä" msgid "Edit profile" msgstr "Muokkaa profiilia" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "Näytä kaikki %(size)s" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "Näytä kaikki kirjat" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "Lukutavoite vuodelle %(current_year)s" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "Käyttäjän toiminta" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "RSS-syöte" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "Ei toimintaa!" @@ -5101,7 +5348,7 @@ msgstr "Ei seuraajia, joita seuraat itse" msgid "View profile and more" msgstr "Näytä profiili ja muita tietoja" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "Kirjaudu ulos" @@ -5114,7 +5361,7 @@ msgstr "Tiedosto on enimmäiskokoa 10 Mt suurempi" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "Epäkelpo csv-tiedosto" @@ -5122,14 +5369,13 @@ msgstr "Epäkelpo csv-tiedosto" msgid "Username or password are incorrect" msgstr "Käyttäjänimi tai salasana on virheellinen" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "Tätä sähköpostiosoitetta käyttävää käyttäjää ei löytynyt." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "Väärä salasana" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "Osoitteeseen {email} lähetettiin salasananpalautuslinkki" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "Salasanat eivät täsmää" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo index 4cdcbf8ea..37de909b2 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 1b472de95..f8e62ff27 100644 --- a/locale/fr_FR/LC_MESSAGES/django.po +++ b/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-04-09 08:36\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-11 16:22\n" "Last-Translator: Mouse Reeve \n" "Language-Team: French\n" "Language: fr\n" @@ -46,6 +46,10 @@ msgstr "Sans limite" msgid "Reading finish date cannot be before start date." msgstr "La date de fin de lecture ne peut pas être antérieure à la date de début." +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "La date de fin de lecture ne peut pas être antérieure à la date de début." + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "Un compte du même nom existe déjà" @@ -70,8 +74,8 @@ msgstr "Ordre de la liste" msgid "Book Title" msgstr "Titre du livre" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Note" @@ -117,29 +121,29 @@ msgstr "Avertissement" msgid "Danger" msgstr "Danger" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "Rapport généré automatiquement" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "En attente" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "Auto-suppression" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "Suspension du modérateur" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "Suppression du modérateur" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "Blocage de domaine" @@ -734,9 +738,9 @@ msgstr "ISNI :" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -757,8 +761,8 @@ msgstr "Enregistrer" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -780,7 +784,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "Le chargement des données se connectera à %(source_name)s et vérifiera les métadonnées de cet auteur ou autrice qui ne sont pas présentes ici. Les métadonnées existantes ne seront pas écrasées." #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -949,42 +953,42 @@ msgstr "Modifier « %(book_title)s »" msgid "Add Book" msgstr "Ajouter un livre" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "Confirmer les informations de ce livre" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "Est-ce que \"%(name)s\" fait partie de ces auteurs ou autrices ?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "Auteur ou autrice de " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "Trouver plus d’informations sur isni.org" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "Il s’agit d’un nouvel auteur ou d’une nouvelle autrice." -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "Création d’un nouvel auteur/autrice : %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "Est‑ce l’édition d’un ouvrage existant ?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "Il s’agit d’un nouvel ouvrage." -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "Retour" @@ -1075,7 +1079,7 @@ msgid "Add Another Author" msgstr "Ajouter un autre auteur ou autrice" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "Couverture" @@ -1201,7 +1205,7 @@ msgstr "Domaine" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "Statut" @@ -1214,16 +1218,21 @@ msgstr "Statut" msgid "Actions" msgstr "Actions" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "Compte inconnu" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "Signaler un spam" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "Aucun lien disponible pour ce livre." -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "Ajouter un lien vers un fichier" @@ -1320,7 +1329,7 @@ msgstr "Code de confirmation :" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "Valider" @@ -1336,7 +1345,7 @@ msgstr "Envoyer le lien de confirmation de nouveau" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1360,7 +1369,7 @@ msgid "Local users" msgstr "Comptes locaux" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "Communauté fédérée" @@ -1563,14 +1572,20 @@ msgstr "Vous avez reçu une invitation à rejoindre %(site_name)s ! Cliquez le msgid "Learn more about %(site_name)s:" msgstr "En savoir plus sur %(site_name)s :" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s a signalé un comportement de @%(reportee)s pour modération. " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "@%(reporter)s a signalé le domaine d’un lien pour modération." -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "@%(reporter)s a signalé un comportement de @%(reportee)s pour modération." + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "Voir le signalement" @@ -1709,13 +1724,13 @@ msgstr "Ajouter à vos livres" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "À lire" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "Lectures en cours" @@ -1724,10 +1739,15 @@ msgstr "Lectures en cours" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "Lu" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "Lecture interrompue" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "Que lisez‑vous ?" @@ -1970,33 +1990,33 @@ msgstr "Importer des livres" msgid "Data source:" msgstr "Source de données :" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "Vous pouvez télécharger vos données Goodreads depuis la page Import/Export de votre compte Goodreads." -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "Fichier de données :" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "Importer les critiques" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "Confidentialité des critiques importées :" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "Importer" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "Importations récentes" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "Aucune importation récente" @@ -2055,8 +2075,8 @@ msgid "Row" msgstr "Ligne" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "Titre" @@ -2069,8 +2089,8 @@ msgid "Openlibrary key" msgstr "Clé Openlibrary" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "Auteur/autrice" @@ -2253,16 +2273,21 @@ msgid "More about this site" msgstr "En savoir plus sur ce site" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "Confirmez le mot de passe :" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "Un lien de réinitialisation du mot de passe sera envoyé à %(email)s s'il y a un compte utilisant cette adresse e-mail." + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "Un lien pour changer votre mot de passe sera envoyé à votre addresse email" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "Changer de mot de passe" @@ -2570,108 +2595,244 @@ msgstr "Toutes les listes" msgid "Saved Lists" msgstr "Listes sauvegardées" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "a accepté votre invitation à rejoindre le groupe \"%(group_name)s\"" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "%(related_user)s a accepté votre invitation à rejoindre le groupe \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "a ajouté %(book_title)s à votre liste \"%(list_name)s\"" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "%(related_user)s et %(second_user)s ont accepté votre invitation à rejoindre le groupe \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "a suggéré d'ajouter %(book_title)s à votre liste \"%(list_name)s\"" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "%(related_user)s et %(other_user_display_count)s autres ont accepté votre invitation à rejoindre le groupe \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "a partagé votre critique de %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s a ajouté %(book_title)s à votre liste \"%(list_name)s\"" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "a partagé votre commentaire sur %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s a suggéré d'ajouter %(book_title)s à votre liste \"%(list_name)s\"" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "a partagé votre citation de %(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s a ajouté %(book_title)s et %(second_book_title)s à votre liste \"%(list_name)s\"" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "a partagé votre statut" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s a suggéré d'ajouter %(book_title)s et %(second_book_title)s à votre liste \"%(list_name)s\"" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "a ajouté votre critique de %(book_title)s à ses favoris" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "%(related_user)s a ajouté %(book_title)s, %(second_book_title)s et %(display_count)s autre livre à votre liste \"%(list_name)s\"" +msgstr[1] "%(related_user)s a ajouté %(book_title)s, %(second_book_title)s et %(display_count)s autres livres dans votre liste \"%(list_name)s\"" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "a ajouté votre commentaire sur %(book_title)s à ses favoris" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "%(related_user)s a suggéré d'ajouter %(book_title)s, %(second_book_title)s et %(display_count)s autre livre à votre liste \"%(list_name)s\"" +msgstr[1] "%(related_user)s a suggéré d'ajouter %(book_title)s, %(second_book_title)s et %(display_count)s autres livres dans votre liste \"%(list_name)s\"" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "a ajouté votre citation de %(book_title)s à ses favoris" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "%(related_user)s a boosté votre critique de %(book_title)s" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "a ajouté votre statut à ses favoris" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "%(related_user)s et %(second_user)s ont boosté votre critique de %(book_title)s" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "vous suit" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "%(related_user)s et %(other_user_display_count)s autres ont boosté votre critique de %(book_title)s" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "vous a envoyé une demande d’abonnement" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "%(related_user)s a boosté votre commentaire sur %(book_title)s" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "%(related_user)s et %(second_user)s ont boosté votre commentaire sur %(book_title)s" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "%(related_user)s et %(other_user_display_count)s autres ont boosté votre commentaire sur %(book_title)s" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "%(related_user)s a boosté votre citation de %(book_title)s" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "%(related_user)s et %(second_user)s ont boosté votre citation de %(book_title)s" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "%(related_user)s et %(other_user_display_count)s autres ont boosté votre citation de %(book_title)s" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "%(related_user)s a boosté votre statut" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "%(related_user)s et %(second_user)s ont boosté votre statut" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "%(related_user)s et %(other_user_display_count)s autres ont boosté votre statut" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "%(related_user)s a aimé votre critique de %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "%(related_user)s et %(second_user)s ont aimé votre critique de %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "%(related_user)s et %(other_user_display_count)s autres ont aimé votre critique de %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "%(related_user)s a aimé votre commentaire sur %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "%(related_user)s et %(second_user)s ont aimé votre commentaire sur %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "%(related_user)s et %(other_user_display_count)s autres ont aimé votre commentaire sur %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "%(related_user)s a aimé votre citation de %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "%(related_user)s et %(second_user)s ont aimé votre citation de %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "%(related_user)s et %(other_user_display_count)s autres ont aimé votre citation de %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "%(related_user)s a aimé votre statut" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "%(related_user)s et %(second_user)s ont aimé votre statut" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "%(related_user)s et %(other_user_display_count)s autres ont aimé votre statut" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "%(related_user)s a commencé à vous suivre" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "%(related_user)s et %(second_user)s ont commencé à vous suivre" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "%(related_user)s et %(other_user_display_count)s autres ont commencé à vous suivre" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "%(related_user)s vous a envoyé une demande d'abonnement" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "Votre importation est terminée." -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "vous a invité·e à rejoindre le groupe \"%(group_name)s\"" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "%(related_user)s vous a invité à rejoindre le groupe \"%(group_name)s\"" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "a rejoint votre groupe \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "a quitté votre groupe \"%(group_name)s\"" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "%(related_user)s a quitté votre groupe \"%(group_name)s\"" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "%(related_user)s et %(second_user)s ont quitté votre groupe \"%(group_name)s\"" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "%(related_user)s et %(other_user_display_count)s autres ont quitté votre groupe \"%(group_name)s\"" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "vous a mentionné dans sa critique de %(book_title)s" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "%(related_user)s vous a mentionné(e) dans une critique de %(book_title)s" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "vous a mentionné dans son commentaire sur %(book_title)s" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "%(related_user)s vous a mentionné(e) dans un commentaire sur %(book_title)s" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "vous a mentionné dans sa citation de %(book_title)s" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "%(related_user)s vous a mentionné(e) dans une citation de %(book_title)s" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "vous a mentionné dans son statut" +msgid "%(related_user)s mentioned you in a status" +msgstr "%(related_user)s vous a mentionné(e) dans un statut" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2685,28 +2846,35 @@ msgstr "Vous avez été retiré·e du groupe \"%(grou #: bookwyrm/templates/notifications/items/reply.html:21 #, python-format -msgid "replied to your review of %(book_title)s" -msgstr "a répondu à votre critique de %(book_title)s" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "%(related_user)s a répondu à votre critique de %(book_title)s" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "a répondu à votre commentaire sur %(book_title)s" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "%(related_user)s a répondu à votre commentaire sur %(book_title)s" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "a répondu à votre citation de %(book_title)s" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "%(related_user)s a répondu à votre citation de %(book_title)s" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "a répondu à votre statut" +msgid "%(related_user)s replied to your status" +msgstr "%(related_user)s a répondu à votre statut" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "Un nouveau signalement a besoin d’être traité." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "Un nouveau signalement a besoin d’être traité" +msgstr[1] "%(display_count)s nouveaux signalements ont besoin d’être traités" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "Avertissement sur le contenu" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2865,12 +3033,20 @@ msgstr "Aucun compte bloqué actuellement" #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "Changer le mot de passe" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "Nouveau mot de passe :" @@ -2962,6 +3138,10 @@ msgstr "Export CSV" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "Votre export comprendra tous les livres sur vos étagères, les livres que vous avez critiqués, et les livres ayant une activité de lecture." +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "Compte" @@ -2988,6 +3168,11 @@ msgstr "Terminer \"%(book_title)s\"" msgid "Start \"%(book_title)s\"" msgstr "Commencer \"%(book_title)s\"" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "Interrompre la lecture de « %(book_title)s »" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3012,6 +3197,7 @@ msgstr "Mettre à jour les dates de lecture pour « %(title)s »" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "Lecture commencée le" @@ -3020,7 +3206,7 @@ msgstr "Lecture commencée le" msgid "Progress" msgstr "Progression" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3034,23 +3220,27 @@ msgstr "Progression :" msgid "finished" msgstr "terminé" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "interrompu" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "Montrer toutes les progressions" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "Supprimer cette mise à jour" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "commencé" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "Modifier les date de lecture" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "Supprimer ces dates de lecture" @@ -3180,13 +3370,13 @@ msgstr "Faux" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "Date de début :" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "Date de fin :" @@ -3346,7 +3536,7 @@ msgid "Dashboard" msgstr "Tableau de bord" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "Nombre total d'utilisateurs·rices" @@ -3364,57 +3554,31 @@ msgstr "Statuts" msgid "Works" msgstr "Œuvres" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s signalement ouvert" -msgstr[1] "%(display_count)s signalements ouverts" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "%(display_count)s domaine doit être vérifié" -msgstr[1] "%(display_count)s domaines doivent être vérifiés" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s demande d'invitation" -msgstr[1] "%(display_count)s demandes d'invitation" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "Une mise à jour est disponible ! Vous utilisez la version%(current)s et la dernière version est %(available)s." - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "Activité de l'instance" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "Intervalle :" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "Jours" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "Semaines" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "Nouvelles inscriptions" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "Nouveaux statuts" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "Œuvres créées" @@ -3430,6 +3594,49 @@ msgstr "Statuts publiés" msgid "Total" msgstr "Total" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "%(display_count)s domaine doit être vérifié" +msgstr[1] "%(display_count)s domaines doivent être vérifiés" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "Votre adresse e-mail sortante, %(email_sender)s, pourrait être mal configurée." + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "Vérifiez EMAIL_SENDER_NAME et EMAIL_SENDER_DOMAIN dans votre fichier .env." + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s demande d'invitation" +msgstr[1] "%(display_count)s demandes d'invitation" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "Il manque un code de conduite à votre instance." + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "Il manque une politique de confidentialité à votre instance." + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s signalement ouvert" +msgstr[1] "%(display_count)s signalements ouverts" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "Une mise à jour est disponible ! Vous utilisez la version%(current)s et la dernière version est %(available)s." + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3834,7 +4041,7 @@ msgstr "Aucun domaine en attente" msgid "No domains currently blocked" msgstr "Aucun domaine actuellement bloqué" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "Aucun lien n’est disponible pour ce domaine." @@ -3862,11 +4069,11 @@ msgstr "Le statut a été supprimé" msgid "Reported links" msgstr "Liens signalés" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "Commentaires de l’équipe de modération" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "Commentaire" @@ -3876,12 +4083,17 @@ msgstr "Commentaire" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "Signalement #%(report_id)s : statut posté par @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "Signalement #%(report_id)s : lien ajouté par @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "Rapport nº %(report_id)s : Domaine du lien" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "Signalement #%(report_id)s : compte @%(username)s" @@ -4121,34 +4333,42 @@ msgstr "Votre mot de passe:" msgid "Users: %(instance_name)s" msgstr "Comptes : %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "Comptes supprimés" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "Nom du compte" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "Date d’ajout" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "Dernière activité" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "Instance distante" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "Actif" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "Supprimé" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "Inactif" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "Non défini" @@ -4359,46 +4579,51 @@ msgid "User profile" msgstr "Profil utilisateur·rice" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Tous les livres" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s livre" msgstr[1] "%(formatted_count)s livres" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(affichage de %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "Modifier l’étagère" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "Supprimer l’étagère" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "Date d’ajout" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "Commencé" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "Terminé" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "Jusqu’à" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "Cette étagère est vide" @@ -4728,7 +4953,7 @@ msgid "(Optional)" msgstr "(Facultatif)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "Progression de la mise à jour" @@ -4737,6 +4962,17 @@ msgstr "Progression de la mise à jour" msgid "Start \"%(book_title)s\"" msgstr "Commencer « %(book_title)s »" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "Interrompre la lecture de « %(book_title)s »" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "Lecture interrompue" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4784,23 +5020,23 @@ msgstr "Déplacer le livre" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "Commencer la lecture" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "Je veux le lire" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "Retirer de %(name)s" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "Retirer de" @@ -4808,14 +5044,15 @@ msgstr "Retirer de" msgid "More shelves" msgstr "Plus d’étagères" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "Interrompre la lecture" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "Terminer la lecture" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "Avertissement sur le contenu" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "Afficher le statut" @@ -4903,6 +5140,16 @@ msgstr "a publié une critique de %(book)s par %(book)s" msgstr "a critiqué %(book)s" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "a interrompu la lecture de %(book)s par %(author_name)s" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "a interrompu la lecture de %(book)s" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5043,29 +5290,29 @@ msgstr "%(username)s ne suit personne" msgid "Edit profile" msgstr "Modifier le profil" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "Voir les %(size)s" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "Voir tous les livres" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "Défi lecture pour %(current_year)s" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "Activité du compte" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "Flux RSS" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "Aucune activité pour l’instant !" @@ -5101,7 +5348,7 @@ msgstr "Aucun·e abonné·e que vous suivez" msgid "View profile and more" msgstr "Voir le profil et plus" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "Se déconnecter" @@ -5114,7 +5361,7 @@ msgstr "Ce fichier dépasse la taille limite : 10 Mo" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s (%(subtitle)s)" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "Fichier CSV non valide" @@ -5122,14 +5369,13 @@ msgstr "Fichier CSV non valide" msgid "Username or password are incorrect" msgstr "Identifiant ou mot de passe incorrect" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "Aucun compte avec cette adresse email n’a été trouvé." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "Un lien de réinitialisation a été envoyé à {email}." +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/gl_ES/LC_MESSAGES/django.mo b/locale/gl_ES/LC_MESSAGES/django.mo index 94b9ad767..0336edd7f 100644 Binary files a/locale/gl_ES/LC_MESSAGES/django.mo and b/locale/gl_ES/LC_MESSAGES/django.mo differ diff --git a/locale/gl_ES/LC_MESSAGES/django.po b/locale/gl_ES/LC_MESSAGES/django.po index 8d05e8d93..ca3604f4c 100644 --- a/locale/gl_ES/LC_MESSAGES/django.po +++ b/locale/gl_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-04-09 14:02\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-14 05:48\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Galician\n" "Language: gl\n" @@ -46,6 +46,10 @@ msgstr "Sen límite" msgid "Reading finish date cannot be before start date." msgstr "A data final da lectura non pode ser anterior á de inicio." +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "A data do fin da lectura non pode ser anterior á de inicio." + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "Xa existe unha usuaria con este identificador" @@ -70,8 +74,8 @@ msgstr "Orde da lista" msgid "Book Title" msgstr "Título do libro" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Puntuación" @@ -117,29 +121,29 @@ msgstr "Advertencia" msgid "Danger" msgstr "Perigo" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "Denuncia creada automáticamente" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Pendente" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "Auto eliminación" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "Suspendido pola moderación" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "Eliminado pola moderación" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "Bloqueo de dominio" @@ -734,9 +738,9 @@ msgstr "ISNI:" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -757,8 +761,8 @@ msgstr "Gardar" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -780,7 +784,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "Ao cargar os datos vas conectar con %(source_name)s e comprobar se existen metadatos desta persoa autora que non están aquí presentes. Non se sobrescribirán os datos existentes." #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -949,42 +953,42 @@ msgstr "Editar \"%(book_title)s\"" msgid "Add Book" msgstr "Engadir libro" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "Confirma info do libro" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "É \"%(name)s\" un destas autoras?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "Autora de " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "Atopa máis información en isni.org" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "Esta é unha nova autora" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "Creando nova autora: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "É esta a edición dun traballo existente?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "Este é un novo traballo" -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "Atrás" @@ -1075,7 +1079,7 @@ msgid "Add Another Author" msgstr "Engade outra Autora" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "Portada" @@ -1201,7 +1205,7 @@ msgstr "Dominio" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "Estado" @@ -1214,16 +1218,21 @@ msgstr "Estado" msgid "Actions" msgstr "Accións" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "Usuaria descoñecida" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "Denunciar spam" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "Sen ligazóns para para este libro." -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "Engadir ligazón ao ficheiro" @@ -1320,7 +1329,7 @@ msgstr "Código de confirmación:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "Enviar" @@ -1336,7 +1345,7 @@ msgstr "Reenviar ligazón de confirmación" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1360,7 +1369,7 @@ msgid "Local users" msgstr "Usuarias locais" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "Comunidade federada" @@ -1563,14 +1572,20 @@ msgstr "Foches convidada a unirte a %(site_name)s! Preme na ligazón para crear msgid "Learn more about %(site_name)s:" msgstr "Coñece máis acerca de %(site_name)s:" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s marcou o comportamento de @%(reportee)s para revisión. " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "@%(reporter)s marcou o dominio dunha ligazón para revisar." -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "@%(reporter)s marcou o comportamento de @%(reportee)s para ser revisado." + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "Ver denuncia" @@ -1709,13 +1724,13 @@ msgstr "Engadir aos teus libros" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "Pendentes" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "Lectura actual" @@ -1724,10 +1739,15 @@ msgstr "Lectura actual" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "Lido" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "Deixei de ler" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "Que estás a ler?" @@ -1970,33 +1990,33 @@ msgstr "Importar libros" msgid "Data source:" msgstr "Fonte de datos:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "Podes descargar os teus datos de Goodreads desde a páxina de Exportación/Importación da túa conta Goodreads." -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "Ficheiro de datos:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "Incluír recensións" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "Axuste de privacidade para recensións importadas:" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "Importar" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "Importacións recentes" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "Sen importacións recentes" @@ -2055,8 +2075,8 @@ msgid "Row" msgstr "Fila" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "Título" @@ -2069,8 +2089,8 @@ msgid "Openlibrary key" msgstr "Chave en Openlibrary" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "Autor" @@ -2253,16 +2273,21 @@ msgid "More about this site" msgstr "Máis acerca deste sitio" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "Confirma o contrasinal:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "Imos enviar a %(email)s unha ligazón para restablecer o contrasinal se existe unha conta que usa ese enderezo." + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "Enviaremos unha ligazón ao teu email para restablecer o contrasinal" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "Restablecer contrasinal" @@ -2570,108 +2595,244 @@ msgstr "Tódalas listas" msgid "Saved Lists" msgstr "Listas gardadas" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "aceptou o teu convite para unirse ao grupo \"%(group_name)s\"" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "%(related_user)s aceptou o teu convite para unirte ao grupo \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "engadiu %(book_title)s á túa lista \"%(list_name)s\"" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "%(related_user)s e%(second_user)s aceptaron o teu convite para unirse ao grupo \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "suxeriu engadir %(book_title)s á túa lista \"%(list_name)s\"" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "promoveu a túa recensión de %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "promoveu o teu comentario acerca de %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "promoveu a túa cita acerca de %(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "promoveu a túa publicación" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "gustoulle a túa recensión de %(book_title)s" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "gustoulle o teu comentario para %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "gustoulle a túa cita de %(book_title)s" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "gustoulle a túa publicación" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "séguete" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "enviouche unha solicitude de seguimento" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "A importación completouse." -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "convidoute a unirte ao grupo \"%(group_name)s\"" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "uniuse ao teu grupo \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "deixou o teu grupo \"%(group_name)s\"" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "mencionoute nunha recensión sobre %(book_title)s" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "mencionoute nun comentario para %(book_title)s" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "mencionoute nunha cita en %(book_title)s" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "mencionoute nun estado" +msgid "%(related_user)s mentioned you in a status" +msgstr "" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2685,28 +2846,35 @@ msgstr "Foches eliminada do grupo \"%(group_name)sreplied to your review of %(book_title)s" -msgstr "respondeu á túa revisión de %(book_title)s" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "respondeu ao teu comentario en %(book_title)s" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "respondeu á túa cita de %(book_title)s" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "respondeu ao teu estado" +msgid "%(related_user)s replied to your status" +msgstr "" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "Hai unha nova denuncia para moderar." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "Aviso sobre o contido" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2865,12 +3033,20 @@ msgstr "Non tes usuarias bloqueadas." #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "Cambiar contrasinal" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "Novo contrasinal:" @@ -2962,6 +3138,10 @@ msgstr "Exportación CSV" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "A exportación incluirá tódolos libros dos estantes, libros que recensionaches e libros con actividade de lectura." +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "Descargar ficheiro" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "Conta" @@ -2988,6 +3168,11 @@ msgstr "Acabei \"%(book_title)s\"" msgid "Start \"%(book_title)s\"" msgstr "Comecei \"%(book_title)s\"" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "Deixar de ler \"%(book_title)s\"" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3012,6 +3197,7 @@ msgstr "Actualizar as datas de lectura para \"%(title)s\"" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "Comecei a ler" @@ -3020,7 +3206,7 @@ msgstr "Comecei a ler" msgid "Progress" msgstr "Progreso" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3034,23 +3220,27 @@ msgstr "Actualizacións da lectura:" msgid "finished" msgstr "rematado" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "detido" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "Mostrar tódalas actualizacións" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "Eliminar esta actualización da lectura" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "iniciado" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "Editar datas da lectura" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "Eliminar estas datas da lectura" @@ -3180,13 +3370,13 @@ msgstr "Falso" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "Data de inicio:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "Data de fin:" @@ -3346,7 +3536,7 @@ msgid "Dashboard" msgstr "Taboleiro" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "Total de usuarias" @@ -3364,57 +3554,31 @@ msgstr "Estados" msgid "Works" msgstr "Traballos" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s denuncia aberta" -msgstr[1] "%(display_count)s denuncias abertas" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "hai que revisar %(display_count)s dominio" -msgstr[1] "hai que revisar %(display_count)s dominios" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s solicitude de convite" -msgstr[1] "%(display_count)s solicitudes de convite" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "Hai unha actualización dispoñible! Estás a executar v%(current)s e a última versión é %(available)s." - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "Actividade na instancia" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "Intervalo:" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "Días" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "Semanas" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "Rexistros de usuarias" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "Actividade do estado" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "Traballos creados" @@ -3430,6 +3594,49 @@ msgstr "Estados publicados" msgid "Total" msgstr "Total" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "hai que revisar %(display_count)s dominio" +msgstr[1] "hai que revisar %(display_count)s dominios" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "O enderezo de envío de emails, %(email_sender)s, podería estar mal configurado." + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "Comproba o EMAIL_SENDER_NAME e EMAIL_SENDER_DOMAIN no teu ficheiro .env." + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s solicitude de convite" +msgstr[1] "%(display_count)s solicitudes de convite" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "A túa instancia non ten código de conduta." + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "A túa instancia non ten política de privacidade." + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s denuncia aberta" +msgstr[1] "%(display_count)s denuncias abertas" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "Hai unha actualización dispoñible! Estás a executar v%(current)s e a última versión é %(available)s." + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3834,7 +4041,7 @@ msgstr "Non hai dominios pendentes" msgid "No domains currently blocked" msgstr "Non hai dominios bloqueados" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "Non hai ligazóns dispoñibles para este dominio." @@ -3862,11 +4069,11 @@ msgstr "O estado foi eliminado" msgid "Reported links" msgstr "Ligazóns denunciadas" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "Comentarios da moderación" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "Comentario" @@ -3876,12 +4083,17 @@ msgstr "Comentario" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "Denuncia #%(report_id)s: Estado publicado por @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "Denuncia #%(report_id)s: Ligazón engadida por @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "Denuncia #%(report_id)s: Dominio na ligazón" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "Denuncia #%(report_id)s: Usuaria @%(username)s" @@ -4121,34 +4333,42 @@ msgstr "Contrasinal:" msgid "Users: %(instance_name)s" msgstr "Usuarias: %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "Usuarias eliminadas" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "Nome de usuaria" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "Data de alta" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "Última vez activa" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "Instancia remota" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "Activa" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "Eliminada" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "Inactiva" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "Non establecido" @@ -4359,46 +4579,51 @@ msgid "User profile" msgstr "Perfil da usuaria" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Tódolos libros" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s libro" msgstr[1] "%(formatted_count)s libros" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(mostrando %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "Editar estante" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "Eliminar estante" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "No estante" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "Comezado" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "Rematado" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "Ata" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "Este estante esta baleiro." @@ -4728,7 +4953,7 @@ msgid "(Optional)" msgstr "(Optativo)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "Actualización do progreso" @@ -4737,6 +4962,17 @@ msgstr "Actualización do progreso" msgid "Start \"%(book_title)s\"" msgstr "Comecei a ler \"%(book_title)s\"" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "Deixar de ler \"%(book_title)s\"" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "Deixei de ler" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4784,23 +5020,23 @@ msgstr "Mover libro" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "Comezar a ler" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "Quero ler" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "Eliminar de %(name)s" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "Eliminar de" @@ -4808,14 +5044,15 @@ msgstr "Eliminar de" msgid "More shelves" msgstr "Máis estantes" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "Deixar de ler" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "Rematar a lectura" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "Aviso sobre o contido" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "Mostrar estado" @@ -4903,6 +5140,16 @@ msgstr "recensionou %(book)s de %(book)s" msgstr "recensionou %(book)s" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "deixei de ler %(book)s de %(author_name)s" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "deixei de ler %(book)s" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5043,29 +5290,29 @@ msgstr "%(username)s non segue a ninguén" msgid "Edit profile" msgstr "Editar perfil" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "Ver tódolos %(size)s" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "Ver tódolos libros" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "Obxectivo de Lectura para %(current_year)s" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "Actividade da usuaria" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "Fonte RSS" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "Sen actividade!" @@ -5101,7 +5348,7 @@ msgstr "Sen seguidoras que ti segues" msgid "View profile and more" msgstr "Ver perfil e máis" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "Desconectar" @@ -5114,7 +5361,7 @@ msgstr "O ficheiro supera o tamaño máximo: 10MB" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "Non é un ficheiro csv válido" @@ -5122,14 +5369,13 @@ msgstr "Non é un ficheiro csv válido" msgid "Username or password are incorrect" msgstr "As credenciais non son correctas" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "Non atopamos unha usuaria con ese email." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "Contrasinal incorrecto" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "Enviamos unha ligazón de restablecemento a {email}" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "O contrasinal non concorda" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/it_IT/LC_MESSAGES/django.mo b/locale/it_IT/LC_MESSAGES/django.mo index df949ed1c..d02492a75 100644 Binary files a/locale/it_IT/LC_MESSAGES/django.mo and b/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/locale/it_IT/LC_MESSAGES/django.po b/locale/it_IT/LC_MESSAGES/django.po index 80b09cbe6..83b1bc843 100644 --- a/locale/it_IT/LC_MESSAGES/django.po +++ b/locale/it_IT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-04-20 22:49\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-11 16:22\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Italian\n" "Language: it\n" @@ -46,6 +46,10 @@ msgstr "Illimitato" msgid "Reading finish date cannot be before start date." msgstr "La data di fine lettura non può essere precedente alla data di inizio." +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "La data di fine lettura non può essere precedente alla data di inizio." + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "Esiste già un utente con questo nome utente" @@ -70,8 +74,8 @@ msgstr "Ordina Lista" msgid "Book Title" msgstr "Titolo del libro" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Valutazione" @@ -117,29 +121,29 @@ msgstr "Avviso" msgid "Danger" msgstr "Attenzione" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "Rapporto generato automaticamente" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "In attesa" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "Eliminazione automatica" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "Sospensione del moderatore" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "Cancellazione del moderatore" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "Blocco del dominio" @@ -734,9 +738,9 @@ msgstr "ISNI:" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -757,8 +761,8 @@ msgstr "Salva" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -780,7 +784,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "Il caricamento dei dati si collegherà a %(source_name)s e verificherà eventuali metadati relativi a questo autore che non sono presenti qui. I metadati esistenti non vengono sovrascritti." #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -949,42 +953,42 @@ msgstr "Modifica \"%(book_title)s\"" msgid "Add Book" msgstr "Aggiungi libro" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "Conferma informazioni sul libro" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "È \"%(name)s\" uno di questi autori?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "Autore di " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "Trova maggiori informazioni su isni.org" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "Questo è un nuovo autore" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "Creazione di un nuovo autore: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "È un'edizione di un'opera esistente?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "Si tratta di un nuovo lavoro" -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "Indietro" @@ -1075,7 +1079,7 @@ msgid "Add Another Author" msgstr "Aggiungi un altro autore" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "Copertina" @@ -1201,7 +1205,7 @@ msgstr "Dominio" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "Stato" @@ -1214,16 +1218,21 @@ msgstr "Stato" msgid "Actions" msgstr "Azioni" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "Utente sconosciuto" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "Segnala come spam" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "Nessun collegamento disponibile per questo libro." -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "Aggiungi collegamento al file" @@ -1320,7 +1329,7 @@ msgstr "Codice di conferma:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "Invia" @@ -1336,7 +1345,7 @@ msgstr "Invia di nuovo email di conferma" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1360,7 +1369,7 @@ msgid "Local users" msgstr "Utenti Locali" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "Comunità federata" @@ -1563,14 +1572,20 @@ msgstr "Sei invitato ad unirti a %(site_name)s! Clicca sul link qui sotto per cr msgid "Learn more about %(site_name)s:" msgstr "Ulteriori informazioni su %(site_name)s:" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s ha contrassegnato il comportamento di @%(reportee)s per la moderazione. " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "" + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "Visualizza report" @@ -1709,13 +1724,13 @@ msgstr "Aggiungi ai tuoi libri" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "Da leggere" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "Letture correnti" @@ -1724,10 +1739,15 @@ msgstr "Letture correnti" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "Letti" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "Lettura in pausa" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "Cosa stai leggendo?" @@ -1970,33 +1990,33 @@ msgstr "Importa libri" msgid "Data source:" msgstr "Sorgenti dati:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "Puoi scaricare i tuoi dati Goodreads dalla pagina \"Importa/Esporta\" del tuo account Goodreads." -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "Dati file:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "Includi recensioni" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "Impostazione della privacy per le recensioni importate:" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "Importa" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "Importazioni recenti" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "Nessuna importazione recente" @@ -2055,8 +2075,8 @@ msgid "Row" msgstr "Riga" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "Titolo" @@ -2069,8 +2089,8 @@ msgid "Openlibrary key" msgstr "Chiave OpenLibrary" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "Autore" @@ -2253,16 +2273,21 @@ msgid "More about this site" msgstr "Ulteriori informazioni su questo sito" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "Conferma la password:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "Un link di reset della password verrà mandato a \"%(email)s\" se esiste un account che usa questo indirizzo mail." + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "Il link per reimpostare la password è stato inviato al tuo indirizzo email" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "Reimposta password" @@ -2570,108 +2595,244 @@ msgstr "Tutte le liste" msgid "Saved Lists" msgstr "Liste Salvate" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "il tuo invito ad unirsi al gruppo \"%(group_name)s\" è stato accettato" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "aggiunto %(book_title)s alla tua lista \"%(list_name)s\"" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "suggerimento aggiunto %(book_title)s alla tua lista \"%(list_name)s\"" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "ha potenziato la tua recensione di %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "ha potenziato il tuo commento su%(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "ha potenziato la tua citazione da %(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "ha potenziato il tuo stato" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "ha apprezzato la tua recensione di %(book_title)s" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "ha apprezzato il tuo commento su %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "ha apprezzato la tua citazione da %(book_title)s" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "ha messo \"mi piace\" al tuo stato" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "ha iniziato a seguirti" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "ha richiesto di seguirti" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "La tua importazione è stata completata." -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "ti ha invitato a partecipare al gruppo \"%(group_name)s\"" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "è entrato nel tuo gruppo \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "ha abbandonato il tuo gruppo \"%(group_name)s\"" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "ti ha menzionato in una recensione di %(book_title)s" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "ti ha menzionato in un commento su %(book_title)s" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "ti ha menzionato in una citazione da %(book_title)s" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "ti ha menzionato in uno stato " +msgid "%(related_user)s mentioned you in a status" +msgstr "" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2685,28 +2846,35 @@ msgstr "Sei stato rimosso dal gruppo \"%(group_name)s #: bookwyrm/templates/notifications/items/reply.html:21 #, python-format -msgid "replied to your review of %(book_title)s" -msgstr "ha risposto alla tua recensione di %(book_title)s" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "ha risposto al tuo commento su %(book_title)s" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "ha risposto alla tua citazione da %(book_title)s" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "ha risposto al tuo stato" +msgid "%(related_user)s replied to your status" +msgstr "" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "Un nuovo report necessita di moderazione." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "Avviso sul contenuto" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2865,12 +3033,20 @@ msgstr "Nessun utente attualmente bloccato." #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "Modifica Password" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "Nuova password:" @@ -2962,6 +3138,10 @@ msgstr "Esporta CSV" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "La tua esportazione includerà tutti i libri sui tuoi scaffali, quelli che hai recensito e con attività di lettura." +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "Profilo" @@ -2988,6 +3168,11 @@ msgstr "Termina \"%(book_title)s\"" msgid "Start \"%(book_title)s\"" msgstr "Inizia \"%(book_title)s\"" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3012,6 +3197,7 @@ msgstr "Aggiorna date di lettura per \"%(title)s\"" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "Inizia la lettura" @@ -3020,7 +3206,7 @@ msgstr "Inizia la lettura" msgid "Progress" msgstr "Avanzamento" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3034,23 +3220,27 @@ msgstr "Aggiornamento progressi:" msgid "finished" msgstr "completato" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "Mostra tutti gli aggiornamenti" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "Elimina questo aggiornamento" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "iniziato" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "Modifica data di lettura" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "Elimina queste date di lettura" @@ -3180,13 +3370,13 @@ msgstr "Falso" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "Data d'inizio:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "Data di fine:" @@ -3346,7 +3536,7 @@ msgid "Dashboard" msgstr "Dashboard" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "Totale utenti" @@ -3364,57 +3554,31 @@ msgstr "Stati" msgid "Works" msgstr "Lavori" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s report aperto" -msgstr[1] "%(display_count)s reports aperti" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "%(display_count)s dominio necessita di una revisione" -msgstr[1] "%(display_count)s domini necessitano di una revisione" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s richiesta d'invito" -msgstr[1] "%(display_count)s richieste d'invito" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "È disponibile un aggiornamento! Stai eseguendo v%(current)s e l'ultima versione è %(available)s." - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "Attività di Istanza" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "Intervallo:" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "Giorni" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "Settimane" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "Attività di registrazione dell'utente" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "Attività di stato" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "Opere create" @@ -3430,6 +3594,49 @@ msgstr "Stati pubblicati" msgid "Total" msgstr "Totale" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "%(display_count)s dominio necessita di una revisione" +msgstr[1] "%(display_count)s domini necessitano di una revisione" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s richiesta d'invito" +msgstr[1] "%(display_count)s richieste d'invito" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s report aperto" +msgstr[1] "%(display_count)s reports aperti" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "È disponibile un aggiornamento! Stai eseguendo v%(current)s e l'ultima versione è %(available)s." + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3834,7 +4041,7 @@ msgstr "Nessun dominio attualmente in attesa" msgid "No domains currently blocked" msgstr "Nessun dominio attualmente bloccato" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "Nessun collegamento disponibile per questo libro." @@ -3862,11 +4069,11 @@ msgstr "Lo stato è stato eliminato" msgid "Reported links" msgstr "Collegamenti segnalati" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "Commenti del moderatore" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "Commenta" @@ -3876,12 +4083,17 @@ msgstr "Commenta" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "Report #%(report_id)s: Stato pubblicato da @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "Report #%(report_id)s: Collegamento aggiunto da @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "Report #%(report_id)s: %(username)s" @@ -4121,34 +4333,42 @@ msgstr "La tua password:" msgid "Users: %(instance_name)s" msgstr "Utenti: %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "Nome utente" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "Aggiunto in data" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "Attivo l'ultima volta" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "Istanza remota" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "Attivo" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "Inattivo" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "Non impostato" @@ -4359,46 +4579,51 @@ msgid "User profile" msgstr "Profilo utente" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Tutti i libri" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s libro" msgstr[1] "%(formatted_count)s libri" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(mostra %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "Modifica scaffale" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "Elimina scaffale" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "Scaffali" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "Iniziato" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "Completato" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "Questo scaffale è vuoto." @@ -4728,7 +4953,7 @@ msgid "(Optional)" msgstr "(Opzionale)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "Aggiornamento in corso" @@ -4737,6 +4962,17 @@ msgstr "Aggiornamento in corso" msgid "Start \"%(book_title)s\"" msgstr "Inizia \"%(book_title)s \"" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4784,23 +5020,23 @@ msgstr "Sposta libro" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "Inizia la lettura" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "Vuoi leggere" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "Rimuovi da %(name)s" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "Rimuovi da" @@ -4808,14 +5044,15 @@ msgstr "Rimuovi da" msgid "More shelves" msgstr "Altri scaffali" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "Finito di leggere" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "Avviso sul contenuto" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "Mostra stato" @@ -4903,6 +5140,16 @@ msgstr "ha recensito %(book)s di %(book)s" msgstr "ha recensito %(book)s" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5043,29 +5290,29 @@ msgstr "%(username)s non sta seguendo nessun utente" msgid "Edit profile" msgstr "Modifica profilo" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "Visualizza tutti i %(size)s" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "Visualizza tutti i libri" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "Obiettivo di lettura %(current_year)s" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "Attività dell’utente" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "Feed RSS" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "Ancora nessuna attività!" @@ -5101,7 +5348,7 @@ msgstr "Nessun follower che segui" msgid "View profile and more" msgstr "Visualizza profilo e altro" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "Esci" @@ -5114,7 +5361,7 @@ msgstr "Il file supera la dimensione massima: 10MB" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "Non è un file di csv valido" @@ -5122,14 +5369,13 @@ msgstr "Non è un file di csv valido" msgid "Username or password are incorrect" msgstr "Nome utente o password errati" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "Non è stato trovato nessun utente con questo indirizzo email." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "Il link per reimpostare la password è stato inviato a {email}" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/lt_LT/LC_MESSAGES/django.mo b/locale/lt_LT/LC_MESSAGES/django.mo index 034db6859..2f37afe61 100644 Binary files a/locale/lt_LT/LC_MESSAGES/django.mo and b/locale/lt_LT/LC_MESSAGES/django.mo differ diff --git a/locale/lt_LT/LC_MESSAGES/django.po b/locale/lt_LT/LC_MESSAGES/django.po index a5bb31df0..2eca28352 100644 --- a/locale/lt_LT/LC_MESSAGES/django.po +++ b/locale/lt_LT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-04-10 07:54\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-11 16:22\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Lithuanian\n" "Language: lt\n" @@ -46,6 +46,10 @@ msgstr "Neribota" msgid "Reading finish date cannot be before start date." msgstr "Skaitymo pabaigos data negali būti prieš skaitymo pradžios datą." +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "" + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "Toks naudotojo vardas jau egzistuoja" @@ -70,8 +74,8 @@ msgstr "Kaip pridėta į sąrašą" msgid "Book Title" msgstr "Knygos antraštė" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Įvertinimas" @@ -117,29 +121,29 @@ msgstr "Įspėjimas" msgid "Danger" msgstr "Pavojus" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "Automatiškai sugeneruota ataskaita" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Laukiama" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "Išsitrina savaime" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "Moderatorius nutraukė" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "Moderatorius ištrynė" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "Blokuoti pagal domeną" @@ -742,9 +746,9 @@ msgstr "ISNI:" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -765,8 +769,8 @@ msgstr "Išsaugoti" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -788,7 +792,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "Duomenų įkėlimas prisijungs prie %(source_name)s ir patikrins ar nėra naujos informacijos. Esantys metaduomenys nebus perrašomi." #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -961,42 +965,42 @@ msgstr "Redaguoti „%(book_title)s“" msgid "Add Book" msgstr "Pridėti knygą" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "Patvirtinti knygos informaciją" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "Ar \"%(name)s\" yra vienas iš šių autorių?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "Autorius " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "Daugiau informacijos isni.org" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "Tai naujas autorius" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "Kuriamas naujas autorius: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "Ar tai egzistuojančio darbo leidimas?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "Tai naujas darbas" -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "Atgal" @@ -1087,7 +1091,7 @@ msgid "Add Another Author" msgstr "Pridėti dar vieną autorių" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "Viršelis" @@ -1213,7 +1217,7 @@ msgstr "Domenas" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "Būsena" @@ -1226,16 +1230,21 @@ msgstr "Būsena" msgid "Actions" msgstr "Veiksmai" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "Pranešti apie brukalą" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "Šiai knygai nuorodų nėra." -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "Pridėti nuorodą į failą" @@ -1332,7 +1341,7 @@ msgstr "Patvirtinimo kodas:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "Siųsti" @@ -1348,7 +1357,7 @@ msgstr "Dar kartą išsiųsti patvirtinimo nuorodą" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1372,7 +1381,7 @@ msgid "Local users" msgstr "Vietiniai nariai" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "Sujungta bendruomenė" @@ -1579,14 +1588,20 @@ msgstr "Esate pakviesti prisijungti prie %(site_name)s! Spauskite nuorodą žemi msgid "Learn more about %(site_name)s:" msgstr "Sužinoti daugiau apie %(site_name)s:" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s pranešė apie netinkamą @%(reportee)s veiklą. " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "" + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "Peržiūrėti raportą" @@ -1725,13 +1740,13 @@ msgstr "Pridėti prie savo knygų" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "Norimos perskaityti" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "Šiuo metu skaitomos" @@ -1740,10 +1755,15 @@ msgstr "Šiuo metu skaitomos" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "Perskaitytos" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "Ką skaitome?" @@ -1990,33 +2010,33 @@ msgstr "Importuoti knygas" msgid "Data source:" msgstr "Duomenų šaltinis:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "Galite atsisiųsti savo „Goodreads“ duomenis iš Importavimo ir eksportavimo puslapio, esančio jūsų „Goodreads“ paskyroje." -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "Duomenų failas:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "Įtraukti atsiliepimus" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "Privatumo nustatymai svarbiems atsiliepimams:" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "Importuoti" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "Pastaruoju metu importuota" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "Pastaruoju metu neimportuota" @@ -2079,8 +2099,8 @@ msgid "Row" msgstr "Eilutė" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "Pavadinimas" @@ -2093,8 +2113,8 @@ msgid "Openlibrary key" msgstr "„Openlibrary“ raktas" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "Autorius" @@ -2277,16 +2297,21 @@ msgid "More about this site" msgstr "Daugiau apie šią svetainę" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "Patvirtinti slaptažodį:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "" + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "Jūsų el. pašto adresu bus išsiųsta nuoroda pakeisti slaptažodį" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "Atstatyti slaptažodį" @@ -2594,108 +2619,248 @@ msgstr "Visi sąrašai" msgid "Saved Lists" msgstr "Išsaugoti sąrašai" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "priėmė jūsų kvietimą prisijungti prie grupės „%(group_name)s“" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "į jūsų sąrašą „%(list_name)s“ pridėta %(book_title)s" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "į sąrašą „%(list_name)s\" patariama pridėti %(book_title)s" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "populiarino jūsų atsiliepimą apie %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "populiarino jūsų komentarą apie %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "populiarino jūsų citatą iš %(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "populiarino jūsų būseną" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "patiko jūsų atsiliepimas apie %(book_title)s" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "patiko jūsų komentaras apie %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "patiko jūsų citata iš %(book_title)s" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "patiko jūsų būsena" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "pradėjo jus sekti" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "nori jus sekti" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "Jūsų importas baigtas." -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "jus pakvietė prisijungti prie grupės „%(group_name)s“" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "prisijungė prie jūsų grupės „%(group_name)s“" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "paliko jūsų grupę „%(group_name)s“" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "paminėjo jus atsiliepime apie %(book_title)s" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "paminėjo jus komentare apie %(book_title)s" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "paminėjo jus citatoje iš %(book_title)s" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "paminėjo jus būsenoje" +msgid "%(related_user)s mentioned you in a status" +msgstr "" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2709,28 +2874,37 @@ msgstr "Buvote pašalintas iš grupės „%(group_nam #: bookwyrm/templates/notifications/items/reply.html:21 #, python-format -msgid "replied to your review of %(book_title)s" -msgstr "atsakė į jūsų atsiliepimą apie %(book_title)s" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "atsakė į jūsų komentarą apie %(book_title)s" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "atsakė į jūsų citatą iš %(book_title)s" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "atsakė į jūsų būseną" +msgid "%(related_user)s replied to your status" +msgstr "" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "Reikia moderuoti pranešimą." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "Įspėjimas dėl turinio" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2889,12 +3063,20 @@ msgstr "Blokuotų narių nėra." #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "Keisti slaptažodį" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "Naujas slaptažodis:" @@ -2986,6 +3168,10 @@ msgstr "CSV eksportas" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "Į eksportavimą įeis visos jūsų lentynose esančios knygos, peržiūrėtos knygos bei tos, kurias neseniai skaitėte." +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "Paskyra" @@ -3012,6 +3198,11 @@ msgstr "Užbaigti „%(book_title)s“" msgid "Start \"%(book_title)s\"" msgstr "Pradėti „%(book_title)s“" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3036,6 +3227,7 @@ msgstr "Atnaujinkite knygos „%(title)s“ skaitymo datas" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "Pradėjo skaityti" @@ -3044,7 +3236,7 @@ msgstr "Pradėjo skaityti" msgid "Progress" msgstr "Progresas" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3058,23 +3250,27 @@ msgstr "Informacija apie progresą:" msgid "finished" msgstr "baigta" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "Rodyti visus naujinius" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "Ištrinti progreso naujinį" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "pradėta" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "Redaguoti skaitymo datas" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "Ištrinti šias skaitymo datas" @@ -3204,13 +3400,13 @@ msgstr "Netiesa" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "Pradžios data:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "Pabaigos data:" @@ -3370,7 +3566,7 @@ msgid "Dashboard" msgstr "Suvestinė" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "Iš viso naudotojų" @@ -3388,63 +3584,31 @@ msgstr "Būsenos" msgid "Works" msgstr "Darbai" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s atvira ataskaita" -msgstr[1] "%(display_count)s atviros ataskaitos" -msgstr[2] "%(display_count)s atviros ataskaitos" -msgstr[3] "%(display_count)s atvirų ataskaitų" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "%(display_count)s domeną reikia peržiūrėti" -msgstr[1] "%(display_count)s domenus reikia peržiūrėti" -msgstr[2] "%(display_count)s domenus reikia peržiūrėti" -msgstr[3] "%(display_count)s domenus reikia peržiūrėti" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s prašymas pakviesti" -msgstr[1] "%(display_count)s prašymai pakviesti" -msgstr[2] "%(display_count)s prašymų pakviesti" -msgstr[3] "%(display_count)s prašymai pakviesti" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "Jau yra naujinys. Jūsų versija – %(current)s, o naujausia –%(available)s." - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "Serverio statistika" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "Intervalas:" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "Dienos" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "Savaitės" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "Naudotojo prisijungimo veikla" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "Būsenos" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "Darbai sukurti" @@ -3460,6 +3624,55 @@ msgstr "Būsenos publikuotos" msgid "Total" msgstr "Iš viso" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "%(display_count)s domeną reikia peržiūrėti" +msgstr[1] "%(display_count)s domenus reikia peržiūrėti" +msgstr[2] "%(display_count)s domenus reikia peržiūrėti" +msgstr[3] "%(display_count)s domenus reikia peržiūrėti" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s prašymas pakviesti" +msgstr[1] "%(display_count)s prašymai pakviesti" +msgstr[2] "%(display_count)s prašymų pakviesti" +msgstr[3] "%(display_count)s prašymai pakviesti" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s atvira ataskaita" +msgstr[1] "%(display_count)s atviros ataskaitos" +msgstr[2] "%(display_count)s atviros ataskaitos" +msgstr[3] "%(display_count)s atvirų ataskaitų" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "Jau yra naujinys. Jūsų versija – %(current)s, o naujausia –%(available)s." + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3866,7 +4079,7 @@ msgstr "Nėra domenų, laukiančių patvirtinimo" msgid "No domains currently blocked" msgstr "Šiuo metu užblokuotų domenų nėra" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "Šiam domenui nuorodų nėra." @@ -3894,11 +4107,11 @@ msgstr "Būsena ištrinta" msgid "Reported links" msgstr "Raportuotos nuorodos" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "Moderatoriaus komentarai" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "Komentuoti" @@ -3908,12 +4121,17 @@ msgstr "Komentuoti" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "Pranešimas #%(report_id)s: publikavo @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "Pranešimas #%(report_id)s: nuorodą pridėjo @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "Pranešimas #%(report_id)s: naudotojas @%(username)s" @@ -4153,34 +4371,42 @@ msgstr "Jūsų slaptažodis:" msgid "Users: %(instance_name)s" msgstr "Vartotojai: %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "Vartotojo vardas" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "Pridėjimo data" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "Paskutinį kartą aktyvus" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "Nutolęs serveris" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "Aktyvus" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "Neaktyvus" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "Nenustatytas" @@ -4391,11 +4617,11 @@ msgid "User profile" msgstr "Nario paskyra" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Visos knygos" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" @@ -4404,35 +4630,40 @@ msgstr[1] "%(formatted_count)s knygos" msgstr[2] "%(formatted_count)s knygų" msgstr[3] "%(formatted_count)s knygos" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(rodoma %(start)s–%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "Redaguoti lentyną" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "Ištrinti lentyną" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "Sudėta į lentynas" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "Pradėta" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "Baigta" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "Ši lentyna tuščia." @@ -4774,7 +5005,7 @@ msgid "(Optional)" msgstr "(Nebūtina)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "Atnaujinti progresą" @@ -4783,6 +5014,17 @@ msgstr "Atnaujinti progresą" msgid "Start \"%(book_title)s\"" msgstr "Pradėti „%(book_title)s“" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4830,23 +5072,23 @@ msgstr "Perkelti knygą" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "Pradėti skaityti" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "Noriu perskaityti" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "Pašalinti iš %(name)s" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "Panaikinti iš" @@ -4854,14 +5096,15 @@ msgstr "Panaikinti iš" msgid "More shelves" msgstr "Daugiau lentynų" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "Baigti skaityti" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "Įspėjimas dėl turinio" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "Rodyti būseną" @@ -4949,6 +5192,16 @@ msgstr "apžvelgė autoriaus %(author_name)s kny msgid "reviewed %(book)s" msgstr "apžvelgė %(book)s" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5089,29 +5342,29 @@ msgstr "%(username)s nieko neseka" msgid "Edit profile" msgstr "Redaguoti paskyrą" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "Žiūrėti visas %(size)s" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "Žiūrėti visas knygas" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "%(current_year)s skaitymo tikslas" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "Naudotojo aktyvumas" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "RSS srautas" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "Įrašų dar nėra" @@ -5151,7 +5404,7 @@ msgstr "Jūs kartu nieko nesekate" msgid "View profile and more" msgstr "Žiūrėti paskyrą ir dar daugiau" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "Atsijungti" @@ -5164,7 +5417,7 @@ msgstr "Failas viršijo maksimalų dydį: 10 MB" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "Netinkamas csv failas" @@ -5172,14 +5425,13 @@ msgstr "Netinkamas csv failas" msgid "Username or password are incorrect" msgstr "Naudotojo vardas arba slaptažodis neteisingi" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "Šiuo el. pašto adresu nerastas nei vienas narys." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "Slaptažodžio atstatymo nuoroda išsiųsta į {email}" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/no_NO/LC_MESSAGES/django.mo b/locale/no_NO/LC_MESSAGES/django.mo index 8df82422a..26490831e 100644 Binary files a/locale/no_NO/LC_MESSAGES/django.mo and b/locale/no_NO/LC_MESSAGES/django.mo differ diff --git a/locale/no_NO/LC_MESSAGES/django.po b/locale/no_NO/LC_MESSAGES/django.po index 21cd784c6..3ba81df84 100644 --- a/locale/no_NO/LC_MESSAGES/django.po +++ b/locale/no_NO/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-04-08 21:50\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-11 16:22\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Norwegian\n" "Language: no\n" @@ -46,6 +46,10 @@ msgstr "Ubegrenset" msgid "Reading finish date cannot be before start date." msgstr "Sluttdato kan ikke være før startdato." +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "" + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "" @@ -70,8 +74,8 @@ msgstr "Liste rekkefølge" msgid "Book Title" msgstr "Boktittel" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Vurdering" @@ -117,29 +121,29 @@ msgstr "" msgid "Danger" msgstr "" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Avventer" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "Selvsletting" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "Moderatør suspensjon" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "Moderatør sletting" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "Domeneblokkering" @@ -734,9 +738,9 @@ msgstr "ISNI:" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -757,8 +761,8 @@ msgstr "Lagre" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -780,7 +784,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "Laster inn data kobler til %(source_name)s og finner metadata om denne forfatteren som enda ikke finnes her. Eksisterende metadata vil ikke bli overskrevet." #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -949,42 +953,42 @@ msgstr "Rediger \"%(book_title)s" msgid "Add Book" msgstr "Legg til bok" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "Bekreft bokinformasjon" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "Er \"%(name)s\" en av disse forfatterne?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "Forfatter av " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "Finn mer informasjon på isni.org" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "Dette er en ny forfatter" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "Oppretter en ny forfatter: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "Er dette en utgave av et eksisterende verk?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "Dette er et nytt verk" -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "Tilbake" @@ -1075,7 +1079,7 @@ msgid "Add Another Author" msgstr "Legg til enda en forfatter" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "Omslag" @@ -1201,7 +1205,7 @@ msgstr "Domene" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "Status" @@ -1214,16 +1218,21 @@ msgstr "Status" msgid "Actions" msgstr "Handlinger" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "Rapporter spam" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "Ingen lenker er tilgjengelig for denne boka." -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "Legg til lenke til fil" @@ -1320,7 +1329,7 @@ msgstr "Bekreftelseskode:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "Send inn" @@ -1336,7 +1345,7 @@ msgstr "Send e-post på nytt" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1360,7 +1369,7 @@ msgid "Local users" msgstr "Lokale medlemmer" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "Føderte samfunn" @@ -1563,14 +1572,20 @@ msgstr "Du har blitt invitert til å delta i %(site_name)s! Klikk på lenken ned msgid "Learn more about %(site_name)s:" msgstr "Lær mer om %(site_name)s:" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s har flagget @%(reportee)s sin adferd for moderering. " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "" + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "Vis rapport" @@ -1709,13 +1724,13 @@ msgstr "Legg til i bøkene dine" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "Å lese" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "Leser nå" @@ -1724,10 +1739,15 @@ msgstr "Leser nå" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "Lest" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "Hva er det du leser nå?" @@ -1970,33 +1990,33 @@ msgstr "Importer bøker" msgid "Data source:" msgstr "Datakilde:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "Du kan laste ned Goodread-dataene dine fra Import/Export sida på Goodread-kontoen din." -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "Datafil:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "Inkluder anmeldelser" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "Personverninnstilling for importerte anmeldelser:" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "Importér" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "Nylig importer" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "Ingen nylige importer" @@ -2055,8 +2075,8 @@ msgid "Row" msgstr "Rad" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "Tittel" @@ -2069,8 +2089,8 @@ msgid "Openlibrary key" msgstr "Openlibrary nøkkel" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "Forfatter" @@ -2253,16 +2273,21 @@ msgid "More about this site" msgstr "Om dette nettstedet" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "Gjenta passordet:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "" + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "Lenke som lar deg lage nytt passord blir sendt til e-postadressen din" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "Nullstill passordet" @@ -2570,108 +2595,244 @@ msgstr "Alle lister" msgid "Saved Lists" msgstr "Lagrede lister" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "aksepterte invitasjonen din om å bli med i gruppa \"%(group_name)s\"" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "la til %(book_title)s i lista di \"%(list_name)s\"" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "foreslo å legge til %(book_title)s i lista di \"%(list_name)s\"" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "støttet anmeldelsen din av %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "støttet kommentaren din til %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "støttet sitatet ditt fra %(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "støttet -statusen din" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "likte anmeldelsen din av %(book_title)s" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "likte kommentaren din om %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "likte sitatet ditt fra %(book_title)s" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "likte statusen din" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "følger deg" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "har sendt deg en følgeforespørsel" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "Importen din er fullført." -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "inviterte deg til å bli med i gruppa \"%(group_name)s\"" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "har blitt med i gruppa di \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "har forlatt gruppa di\"%(group_name)s\"" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "nevnte deg i en anmeldelse av %(book_title)s" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "nevnte deg i en kommentar til %(book_title)s" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "nevnte deg i et sitat fra %(book_title)s" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "nevnte deg i en status" +msgid "%(related_user)s mentioned you in a status" +msgstr "" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2685,28 +2846,35 @@ msgstr "Du er fjernet fra %(group_name)s -gruppa" #: bookwyrm/templates/notifications/items/reply.html:21 #, python-format -msgid "replied to your review of %(book_title)s" -msgstr "svarte på anmeldelse din av %(book_title)s" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "svarte på kommentaren din til %(book_title)s" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "svarte på sitatet ditt fra %(book_title)s" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "svarte på statusoppdateringen din" +msgid "%(related_user)s replied to your status" +msgstr "" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "En ny rapport må gjennom moderering." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "Varsel om følsomt innhold" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2865,12 +3033,20 @@ msgstr "Ingen brukere er for tiden blokkert." #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "Endre passord" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "Nytt passord:" @@ -2962,6 +3138,10 @@ msgstr "" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "" +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "Konto" @@ -2988,6 +3168,11 @@ msgstr "Fullfør \"%(book_title)s\"" msgid "Start \"%(book_title)s\"" msgstr "Start \"%(book_title)s" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3012,6 +3197,7 @@ msgstr "Oppdatér lesedatoer for \"%(title)s\"" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "Begynte å lese" @@ -3020,7 +3206,7 @@ msgstr "Begynte å lese" msgid "Progress" msgstr "Fremdrift" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3034,23 +3220,27 @@ msgstr "Fremdriftsoppdateringer:" msgid "finished" msgstr "ferdig" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "Vis alle oppdateringer" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "Slett denne fremgangsoppdateringen" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "startet" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "Rediger lesedatoer" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "Slett disse lesedatoene" @@ -3178,13 +3368,13 @@ msgstr "Usant" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "Startdato:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "Sluttdato:" @@ -3344,7 +3534,7 @@ msgid "Dashboard" msgstr "Kontrollpanel" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "Totalt antall brukere" @@ -3362,57 +3552,31 @@ msgstr "Statuser" msgid "Works" msgstr "Verker" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s åpen rapport" -msgstr[1] "%(display_count)s åpne rapporter" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "%(display_count)s domene må godkjennes" -msgstr[1] "%(display_count)s domener må godkjennes" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s invitasjonsforespørsel" -msgstr[1] "%(display_count)s invitasjonsforespørsler" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "Instansaktivitet" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "Intervall:" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "Dager" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "Uker" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "Brukerregistreringsaktivitet" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "Statusaktivitet" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "Verker laget" @@ -3428,6 +3592,49 @@ msgstr "Statuser lagt ut" msgid "Total" msgstr "Totalt" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "%(display_count)s domene må godkjennes" +msgstr[1] "%(display_count)s domener må godkjennes" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s invitasjonsforespørsel" +msgstr[1] "%(display_count)s invitasjonsforespørsler" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s åpen rapport" +msgstr[1] "%(display_count)s åpne rapporter" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "" + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3832,7 +4039,7 @@ msgstr "Ingen domener venter for tiden på godkjenning" msgid "No domains currently blocked" msgstr "Ingen domener er for øyeblikket blokkert" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "Ingen lenker tilgjengelig til dette domenet." @@ -3860,11 +4067,11 @@ msgstr "Status er slettet" msgid "Reported links" msgstr "Rapporterte lenker" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "Moderatorkommentarer" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "Kommentar" @@ -3874,12 +4081,17 @@ msgstr "Kommentar" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "Rapportér #%(report_id)s: Status postet av @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "Rapportér #%(report_id)s: Lenke lagt til av @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "Rapportér #%(report_id)s: bruker @%(username)s" @@ -4119,34 +4331,42 @@ msgstr "Passordet ditt:" msgid "Users: %(instance_name)s" msgstr "Medlemmer: %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "Brukernavn" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "Lagt til dato" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "Sist aktiv" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "Ekstern instans" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "Aktiv" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "Inaktiv" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "Ikke angitt" @@ -4357,46 +4577,51 @@ msgid "User profile" msgstr "Brukerprofil" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Alle bøker" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s bok" msgstr[1] "%(formatted_count)s bøker" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(viser %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "Rediger hylle" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "Slett hylle" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "Lagt på hylla" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "Startet" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "Fullført" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "Denne hylla er tom." @@ -4726,7 +4951,7 @@ msgid "(Optional)" msgstr "(Valgfritt)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "Oppdater fremgang" @@ -4735,6 +4960,17 @@ msgstr "Oppdater fremgang" msgid "Start \"%(book_title)s\"" msgstr "Start \"%(book_title)s\"" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4782,23 +5018,23 @@ msgstr "Flytt bok" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "Begynn å lese" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "Ønsker å lese" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "Fjern fra %(name)s" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "Fjern fra" @@ -4806,14 +5042,15 @@ msgstr "Fjern fra" msgid "More shelves" msgstr "Flere hyller" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "Fullfør lesing" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "Varsel om følsomt innhold" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "Vis status" @@ -4901,6 +5138,16 @@ msgstr "anmeldte %(book)s av %(book)s" msgstr "anmeldte %(book)s" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5041,29 +5288,29 @@ msgstr "%(username)s følger ingen andre medlemmer" msgid "Edit profile" msgstr "Rediger profil" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "Vis alle %(size)s" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "Se alle bøker" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "%(current_year)s lesemål" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "Brukeraktivitet" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "RSS strøm" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "Ingen aktivitet enda!" @@ -5099,7 +5346,7 @@ msgstr "Ingen følgere du følger" msgid "View profile and more" msgstr "" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "Logg ut" @@ -5112,7 +5359,7 @@ msgstr "Filen overskrider maksimal størrelse: 10MB" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "Ikke en gyldig csv-fil" @@ -5120,14 +5367,13 @@ msgstr "Ikke en gyldig csv-fil" msgid "Username or password are incorrect" msgstr "Feil brukernavn eller passord" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "Ingen bruker med den e-postadressen ble funnet." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "En lenke for tilbakestilling av passord er sendt til {email}" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/pt_BR/LC_MESSAGES/django.mo b/locale/pt_BR/LC_MESSAGES/django.mo index 88416d0ef..bd053e54e 100644 Binary files a/locale/pt_BR/LC_MESSAGES/django.mo and b/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po index 617f15811..280e9c896 100644 --- a/locale/pt_BR/LC_MESSAGES/django.po +++ b/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-04-08 23:12\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-11 16:22\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt\n" @@ -46,6 +46,10 @@ msgstr "Ilimitado" msgid "Reading finish date cannot be before start date." msgstr "A data de término da leitura não pode ser anterior a de início." +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "" + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "Um usuário com este nome já existe" @@ -70,8 +74,8 @@ msgstr "Ordem de inserção" msgid "Book Title" msgstr "Título do livro" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Avaliação" @@ -117,29 +121,29 @@ msgstr "Atenção" msgid "Danger" msgstr "Perigo" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "Relatório gerado automaticamente" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Pendente" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "Autoexclusão" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "Suspensão de moderador" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "Exclusão de moderador" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "Bloqueio de domínio" @@ -734,9 +738,9 @@ msgstr "ISNI:" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -757,8 +761,8 @@ msgstr "Salvar" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -780,7 +784,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "Para carregar informações nos conectaremos a %(source_name)s e buscaremos metadados que ainda não temos sobre este/a autor/a. Metadados já existentes não serão substituídos." #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -949,42 +953,42 @@ msgstr "Editar \"%(book_title)s\"" msgid "Add Book" msgstr "Adicionar livro" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "Confirmar informações do livro" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "\"%(name)s\" é uma das pessoas citadas abaixo?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "Autor/a de " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "Conheça mais em isni.org" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "É um/a novo/a autor/a" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "Criando um/a novo/a autor/a: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "É uma edição de uma obra já registrada?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "É uma nova obra" -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "Voltar" @@ -1075,7 +1079,7 @@ msgid "Add Another Author" msgstr "Adicionar outro/a autor/a" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "Capa" @@ -1201,7 +1205,7 @@ msgstr "Domínio" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "Publicação" @@ -1214,16 +1218,21 @@ msgstr "Publicação" msgid "Actions" msgstr "Ações" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "Denunciar spam" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "Nenhum link disponível para este livro." -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "Adicionar link ao arquivo" @@ -1320,7 +1329,7 @@ msgstr "Código de confirmação:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "Enviar" @@ -1336,7 +1345,7 @@ msgstr "Reenviar link de confirmação" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1360,7 +1369,7 @@ msgid "Local users" msgstr "Usuários locais" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "Comunidade federada" @@ -1563,14 +1572,20 @@ msgstr "Você recebeu um convite para juntar-se a %(site_name)s! Clique no link msgid "Learn more about %(site_name)s:" msgstr "Saiba mais sobre %(site_name)s:" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s sinalizou o comportamento de @%(reportee)s para moderação. " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "" + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "Ver denúncia" @@ -1709,13 +1724,13 @@ msgstr "Adicionar aos seus livros" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "Quero ler" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "Lendo atualmente" @@ -1724,10 +1739,15 @@ msgstr "Lendo atualmente" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "Lido" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "O que você está lendo?" @@ -1970,33 +1990,33 @@ msgstr "Importar livros" msgid "Data source:" msgstr "Fonte dos dados:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "Você pode baixar seus dados do Goodreads na página de Importar/Exportar da sua conta." -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "Arquivo de dados:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "Incluir resenhas" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "Configurações de privacidade para resenhas importadas:" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "Importar" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "Importações recentes" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "Nenhuma importação recente" @@ -2055,8 +2075,8 @@ msgid "Row" msgstr "Linha" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "Título" @@ -2069,8 +2089,8 @@ msgid "Openlibrary key" msgstr "Chave Openlibrary" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "Autor/a" @@ -2253,16 +2273,21 @@ msgid "More about this site" msgstr "Mais sobre este site" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "Confirmar senha:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "" + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "Um link para redefinir sua senha será enviada para seu e-mail" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "Redefinir senha" @@ -2570,108 +2595,244 @@ msgstr "Todas as listas" msgid "Saved Lists" msgstr "Listas salvas" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "aceitou seu convite para participar do grupo \"%(group_name)s\"" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "adicionou %(book_title)s à sua lista \"%(list_name)s\"" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "sugeriu adicionar %(book_title)s à sua lista \"%(list_name)s\"" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "compartilhou sua resenha de %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "compartilhou seu comentário sobre %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "compartilhou sua citação de %(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "compartilhou sua publicação" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "curtiu sua resenha de %(book_title)s" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "curtiu seu comentário sobre %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "curtiu sua citação de %(book_title)s" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "curtiu sua publicação" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "te seguiu" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "pediu para te seguir" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "Sua importação foi concluída." -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "te convidou para participar do grupo \"%(group_name)s\"" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "entrou em seu grupo \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "saiu de seu grupo \"%(group_name)s\"" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "te mencionou em uma resenha de %(book_title)s" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "te mencionou em um comentário sobre %(book_title)s" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "te mencionou em uma citação de %(book_title)s" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "te mencionou em uma publicação" +msgid "%(related_user)s mentioned you in a status" +msgstr "" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2685,28 +2846,35 @@ msgstr "Você foi excluído(a) do grupo \"%(group_nam #: bookwyrm/templates/notifications/items/reply.html:21 #, python-format -msgid "replied to your review of %(book_title)s" -msgstr "respondeu à sua resenha de %(book_title)s" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "respondeu ao seu comentário sobre %(book_title)s" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "respondeu à sua citação de %(book_title)s" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "respondeu à sua publicação" +msgid "%(related_user)s replied to your status" +msgstr "" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "Uma nova denúncia para moderação." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "Aviso de conteúdo" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2865,12 +3033,20 @@ msgstr "Nenhum usuário bloqueado." #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "Alterar senha" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "Nova senha:" @@ -2962,6 +3138,10 @@ msgstr "Exportar CSV" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "Seu arquivo conterá todos os livros em suas estantes, suas resenhas e o andamento de suas leituras." +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "Conta" @@ -2988,6 +3168,11 @@ msgstr "Terminar \"%(book_title)s\"" msgid "Start \"%(book_title)s\"" msgstr "Começar \"%(book_title)s\"" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3012,6 +3197,7 @@ msgstr "Atualizar datas de leitura de \"%(title)s\"" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "Começou a ler" @@ -3020,7 +3206,7 @@ msgstr "Começou a ler" msgid "Progress" msgstr "Andamento" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3034,23 +3220,27 @@ msgstr "Registro de leitura:" msgid "finished" msgstr "terminado" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "Mostrar andamento da leitura" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "Excluir esta atualização de andamento" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "iniciado" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "Editar registro de leitura" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "Excluir estas datas de leitura" @@ -3180,13 +3370,13 @@ msgstr "Falso" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "Data de início:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "Data final:" @@ -3346,7 +3536,7 @@ msgid "Dashboard" msgstr "Painel" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "Total de usuários" @@ -3364,57 +3554,31 @@ msgstr "Publicações" msgid "Works" msgstr "Obras" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s denúncia aberta" -msgstr[1] "%(display_count)s denúncias abertas" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "%(display_count)s domínio precisa ser analisado" -msgstr[1] "%(display_count)s domínios precisam ser analisados" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s pedido de convite" -msgstr[1] "%(display_count)s pedidos de convite" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "Há uma atualização disponível! Você está usando a v%(current)s e o último lançamento é %(available)s." - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "Atividade da instância" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "Intervalo:" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "Dias" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "Semanas" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "Novos usuários" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "Publicações" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "Obras criadas" @@ -3430,6 +3594,49 @@ msgstr "Publicações feitas" msgid "Total" msgstr "Total" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "%(display_count)s domínio precisa ser analisado" +msgstr[1] "%(display_count)s domínios precisam ser analisados" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s pedido de convite" +msgstr[1] "%(display_count)s pedidos de convite" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s denúncia aberta" +msgstr[1] "%(display_count)s denúncias abertas" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "Há uma atualização disponível! Você está usando a v%(current)s e o último lançamento é %(available)s." + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3834,7 +4041,7 @@ msgstr "Nenhum domínio pendente de aprovação" msgid "No domains currently blocked" msgstr "Nenhum domínio bloqueado" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "Nenhum link disponível para este domínio." @@ -3862,11 +4069,11 @@ msgstr "A publicação foi excluída" msgid "Reported links" msgstr "Links denunciados" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "Comentários da moderação" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "Comentar" @@ -3876,12 +4083,17 @@ msgstr "Comentar" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "Denúncia #%(report_id)s: Publicação de @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "Denúncia #%(report_id)s: Link adicionado por @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "Denúncia #%(report_id)s: Usuário @%(username)s" @@ -4121,34 +4333,42 @@ msgstr "Sua senha:" msgid "Users: %(instance_name)s" msgstr "Usuários: %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "Nome de usuário" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "Data de inclusão" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "Última atividade" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "Instância remota" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "Ativo" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "Inativo" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "Não definido" @@ -4359,46 +4579,51 @@ msgid "User profile" msgstr "Perfil do usuário" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Todos os livros" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s livro" msgstr[1] "%(formatted_count)s livros" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(mostrando %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "Editar estante" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "Excluir estante" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "Adicionado" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "Iniciado" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "Terminado" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "Esta estante está vazia." @@ -4728,7 +4953,7 @@ msgid "(Optional)" msgstr "(Opcional)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "Atualizar andamento" @@ -4737,6 +4962,17 @@ msgstr "Atualizar andamento" msgid "Start \"%(book_title)s\"" msgstr "Começar \"%(book_title)s\"" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4784,23 +5020,23 @@ msgstr "Mover livro" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "Começar a ler" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "Quero ler" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "Remover de %(name)s" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "Remover de" @@ -4808,14 +5044,15 @@ msgstr "Remover de" msgid "More shelves" msgstr "Mais estantes" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "Terminar de ler" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "Aviso de conteúdo" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "Mostrar publicação" @@ -4903,6 +5140,16 @@ msgstr "resenhou %(book)s de %(book)s" msgstr "resenhou %(book)s" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5043,29 +5290,29 @@ msgstr "%(username)s não segue ninguém" msgid "Edit profile" msgstr "Editar perfil" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "Ver todos os %(size)s" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "Ver todos os livros" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "Meta de leitura para %(current_year)s" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "Atividade do usuário" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "Feed RSS" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "Nenhuma atividade ainda!" @@ -5101,7 +5348,7 @@ msgstr "Nenhum seguidor que você segue" msgid "View profile and more" msgstr "Ver perfil e mais" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "Sair" @@ -5114,7 +5361,7 @@ msgstr "Arquivo excede o tamanho máximo: 10MB" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "Não é um arquivo csv válido" @@ -5122,14 +5369,13 @@ msgstr "Não é um arquivo csv válido" msgid "Username or password are incorrect" msgstr "Nome de usuário ou senha incorretos" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "Não há nenhum usuário com este e-mail." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "Um link para redefinição da senha foi enviado para {email}" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/pt_PT/LC_MESSAGES/django.mo b/locale/pt_PT/LC_MESSAGES/django.mo index ad1072d56..0020b3296 100644 Binary files a/locale/pt_PT/LC_MESSAGES/django.mo and b/locale/pt_PT/LC_MESSAGES/django.mo differ diff --git a/locale/pt_PT/LC_MESSAGES/django.po b/locale/pt_PT/LC_MESSAGES/django.po index 844605068..e95cc26fd 100644 --- a/locale/pt_PT/LC_MESSAGES/django.po +++ b/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-05-06 23:27\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-11 16:21\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese\n" "Language: pt\n" @@ -46,6 +46,10 @@ msgstr "Ilimitado" msgid "Reading finish date cannot be before start date." msgstr "A data final de leitura não pode ser anterior à data de início." +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "" + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "Já existe um utilizador com este nome" @@ -70,8 +74,8 @@ msgstr "Ordem da Lista" msgid "Book Title" msgstr "Título do livro" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Classificação" @@ -117,29 +121,29 @@ msgstr "Alerta" msgid "Danger" msgstr "Perigo" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "Relatório gerado automaticamente" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Pendente" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "Auto-exclusão" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "Suspensão do moderador" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "Exclusão do moderador" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "Bloqueio de domínio" @@ -734,9 +738,9 @@ msgstr "ISNI:" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -757,8 +761,8 @@ msgstr "Salvar" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -780,7 +784,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "Carregar os dados irá conectar a %(source_name)s e verificar se há metadados sobre este autor que não estão aqui presentes. Os metadados existentes não serão substituídos." #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -949,42 +953,42 @@ msgstr "Editar \"%(book_title)s\"" msgid "Add Book" msgstr "Adicionar um Livro" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "Confirmar informações do livro" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "\"%(name)s\" é um destes autores?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "Autor de " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "Podes encontrar mais informações em isni.org" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "Este é um novo autor" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "Criar um novo autor: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "Esta é uma edição de um trabalho existente?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "Este é um novo trabalho" -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "Voltar" @@ -1075,7 +1079,7 @@ msgid "Add Another Author" msgstr "Adicionar outro autor(a)" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "Capa" @@ -1201,7 +1205,7 @@ msgstr "Domínio" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "Estado" @@ -1214,16 +1218,21 @@ msgstr "Estado" msgid "Actions" msgstr "Acções" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "Denunciar spam" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "Não existem links disponíveis para este livro." -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "" @@ -1320,7 +1329,7 @@ msgstr "Código de confirmação:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "Submeter" @@ -1336,7 +1345,7 @@ msgstr "Reenviar um E-Mail de confirmação" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1360,7 +1369,7 @@ msgid "Local users" msgstr "Utilizadores locais" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "Comunidade federada" @@ -1563,14 +1572,20 @@ msgstr "Estás convidado a juntar-te a %(site_name)s! Clica no link abaixo para msgid "Learn more about %(site_name)s:" msgstr "Saiba mais sobre %(site_name)s:" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s marcou o comportamento de @%(reportee)s para moderação. " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "" + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "Ver denúncia" @@ -1709,13 +1724,13 @@ msgstr "Adicionar aos teus livros" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "Para Ler" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "Leituras atuais" @@ -1724,10 +1739,15 @@ msgstr "Leituras atuais" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "Lido" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "O que andas a ler?" @@ -1970,33 +1990,33 @@ msgstr "Importar livros" msgid "Data source:" msgstr "Origem dos dados:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "Podes fazer download dos teus dados do Goodreads na Importar/Exportar página da tua conta do Goodreads." -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "Ficheiro de dados:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "Incluir criticas" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "Configuração de privacidade para criticas importadas:" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "Importar" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "Importações recentes" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "Nenhuma importação recente" @@ -2055,8 +2075,8 @@ msgid "Row" msgstr "Linha" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "Título" @@ -2069,8 +2089,8 @@ msgid "Openlibrary key" msgstr "Id da Openlibrary" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "Autor(a)" @@ -2253,16 +2273,21 @@ msgid "More about this site" msgstr "Mais sobre este site" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "Confirmar palavra-passe:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "" + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "O link para redefinir a tua palavra-passe foi enviado para o teu E-Mail" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "Redefinir palavra-passe" @@ -2570,108 +2595,244 @@ msgstr "Todas as listas" msgid "Saved Lists" msgstr "Listas salvas" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "aceitou o teu convite para participar no grupo \"%(group_name)s\"" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "adicionou o livro %(book_title)s à tua lista \"%(list_name)s\"" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "sugeriu adicionar o livro %(book_title)s à tua lista \"%(list_name)s\"" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "partilhou a tua critica de %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "partilhou o teu comentário em %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "partilhou a tua citação de %(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "partilhou o teu estado" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "gostou da tua critica de %(book_title)s" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "gostou do teu comentário em %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "gostou da tua citação de %(book_title)s" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "gostou do teu estado" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "seguiu-te" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "enviou um pedido para seguir-te" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "A tua importação de foi concluída." -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "convidou-te para participares no grupo \"%(group_name)s\"" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "juntou-se ao teu grupo \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "saiu do teu grupo \"%(group_name)s\"" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "mencionou-te numa crítica de %(book_title)s" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "mencionou-te num comentário em %(book_title)s" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "mencionou-te numa citação de %(book_title)s" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "mencionou-te num estado" +msgid "%(related_user)s mentioned you in a status" +msgstr "" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2685,28 +2846,35 @@ msgstr "Tu foste removido do grupo \"%(group_name)sreplied to your review of %(book_title)s" -msgstr "respondeu à tua crítica de %(book_title)s" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "respondeu ao teu comentário em %(book_title)s" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "respondeu à tua citação de %(book_title)s" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "respondeu ao teu estado" +msgid "%(related_user)s replied to your status" +msgstr "" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "Uma nova denúncia precisa de moderação." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "Aviso de Conteúdo" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2865,12 +3033,20 @@ msgstr "Não há utilizadores bloqueados." #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "Alterar Palavra-passe" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "Nova Palavra-passe:" @@ -2962,6 +3138,10 @@ msgstr "Exportar para CSV" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "A exportação incluirá todos os livros das tuas prateleiras, livros que tu já avaliaste e livros com a atividade da leitura." +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "Conta" @@ -2988,6 +3168,11 @@ msgstr "Concluir \"%(book_title)s\"" msgid "Start \"%(book_title)s\"" msgstr "Começar \"%(book_title)s\"" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3012,6 +3197,7 @@ msgstr "Atualizar datas de leitura para \"%(title)s\"" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "Leitura iniciada" @@ -3020,7 +3206,7 @@ msgstr "Leitura iniciada" msgid "Progress" msgstr "Progresso" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3034,23 +3220,27 @@ msgstr "Atualizações do progresso:" msgid "finished" msgstr "concluído" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "Mostrar todas as atualizações" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "Excluir esta atualização do progresso" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "iniciado" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "Editar datas de leitura" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "Excluir estas datas de leitura" @@ -3180,13 +3370,13 @@ msgstr "Falso" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "Data de início:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "Data de conclusão:" @@ -3346,7 +3536,7 @@ msgid "Dashboard" msgstr "Painel de controlo" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "Total de utilizadores" @@ -3364,57 +3554,31 @@ msgstr "Estados" msgid "Works" msgstr "Obras" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s denúncia aberta" -msgstr[1] "%(display_count)s denúncias abertas" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "" -msgstr[1] "" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s pedido de convite" -msgstr[1] "%(display_count)s pedidos de convite" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "Uma atualização está disponível! Estás a correr a versão v%(current)s e a mais recente é a %(available)s." - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "Atividade do domínio" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "Intervalo:" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "Dias" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "Semanas" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "Atividade de inscrição do utilizador" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "Atividade de estado" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "Obras criadas" @@ -3430,6 +3594,49 @@ msgstr "Estados publicados" msgid "Total" msgstr "Total" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s pedido de convite" +msgstr[1] "%(display_count)s pedidos de convite" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s denúncia aberta" +msgstr[1] "%(display_count)s denúncias abertas" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "Uma atualização está disponível! Estás a correr a versão v%(current)s e a mais recente é a %(available)s." + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3834,7 +4041,7 @@ msgstr "Nenhum domínio pendente no momento" msgid "No domains currently blocked" msgstr "Sem domínios bloqueado no momento" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "Não existem links disponíveis para este domínio." @@ -3862,11 +4069,11 @@ msgstr "O estado foi eliminado" msgid "Reported links" msgstr "Links reportados" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "Comentários do Moderador" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "Comentar" @@ -3876,12 +4083,17 @@ msgstr "Comentar" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "Reportar #%(report_id)s: Estado publicado por @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "Reportar #%(report_id)s: Link adicionado por @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "Reportar #%(report_id)s: Utilizador @%(username)s" @@ -4121,34 +4333,42 @@ msgstr "A tua palavra-passe:" msgid "Users: %(instance_name)s" msgstr "Utilizadores: %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "Nome de utilizador" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "Data de Adição" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "Última atividade" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "Domínio remoto" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "Ativo" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "Inativo" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "Não definido" @@ -4359,46 +4579,51 @@ msgid "User profile" msgstr "Perfil de utilizador" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Todos os livros" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s livro" msgstr[1] "%(formatted_count)s livros" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(a exibir %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "Editar prateleira" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "Apagar prateleira" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "Arquivado" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "Iniciado" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "Concluído" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "Esta prateleira está vazia." @@ -4728,7 +4953,7 @@ msgid "(Optional)" msgstr "(Opcional)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "Atualizar progresso" @@ -4737,6 +4962,17 @@ msgstr "Atualizar progresso" msgid "Start \"%(book_title)s\"" msgstr "Começar \"%(book_title)s\"" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4784,23 +5020,23 @@ msgstr "Mover livro" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "Começar a ler" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "Quero ler" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "Remover de %(name)s" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "Remover de" @@ -4808,14 +5044,15 @@ msgstr "Remover de" msgid "More shelves" msgstr "Mais prateleiras" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "Terminar leitura" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "Aviso de Conteúdo" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "Mostrar o estado" @@ -4903,6 +5140,16 @@ msgstr "" msgid "reviewed %(book)s" msgstr "criticou %(book)s" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5043,29 +5290,29 @@ msgstr "%(username)s não está a seguir ninguém" msgid "Edit profile" msgstr "Editar perfil" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "Ver todas as %(size)s" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "Ver todos os livros" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "Objetivo de leitura de %(current_year)s" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "Atividade do Utilizador" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "RSS Feed" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "Ainda sem atividade!" @@ -5101,7 +5348,7 @@ msgstr "Não há seguidores que tu segues" msgid "View profile and more" msgstr "Visualizar perfil e mais" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "Terminar sessão" @@ -5114,7 +5361,7 @@ msgstr "Ficheiro excede o tamanho máximo: 10MB" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "Não é um ficheiro csv válido" @@ -5122,14 +5369,13 @@ msgstr "Não é um ficheiro csv válido" msgid "Username or password are incorrect" msgstr "Nome de utilizador ou palavra-passe incorretos" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "Não foi encontrado nenhum utilizador com este E-Mail." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "Um link para redefinir a palavra-passe foi enviado para este {email}" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/ro_RO/LC_MESSAGES/django.mo b/locale/ro_RO/LC_MESSAGES/django.mo index f64e15d56..dd4e6c386 100644 Binary files a/locale/ro_RO/LC_MESSAGES/django.mo and b/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/locale/ro_RO/LC_MESSAGES/django.po b/locale/ro_RO/LC_MESSAGES/django.po index 48fd49161..cf376fb56 100644 --- a/locale/ro_RO/LC_MESSAGES/django.po +++ b/locale/ro_RO/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-05-16 21:13\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-11 16:22\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Romanian\n" "Language: ro\n" @@ -46,6 +46,10 @@ msgstr "Nelimitat" msgid "Reading finish date cannot be before start date." msgstr "Data de terminare a lecturii nu poate fi înainte de data de început." +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "" + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "Un utilizator cu acest nume există deja" @@ -70,8 +74,8 @@ msgstr "Ordonează după listă" msgid "Book Title" msgstr "Titlul cărții" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Rating" @@ -117,29 +121,29 @@ msgstr "Avertisment" msgid "Danger" msgstr "Pericol" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "Raport generat automat" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "În așteptare" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "Ștergere automată" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "Suspendat de moderator" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "Șters de moderator" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "Blocat de domeniu" @@ -738,9 +742,9 @@ msgstr "ISNI:" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -761,8 +765,8 @@ msgstr "Salvați" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -784,7 +788,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "Încărcatul de date se va conecta la %(source_name)s și verifica orice metadate despre autor care nu sunt prezente aici. Metadatele existente nu vor fi suprascrise." #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -955,42 +959,42 @@ msgstr "Editați „%(book_title)s”" msgid "Add Book" msgstr "Adăugați carte" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "Confirmați informațiile cărții" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "Este „%(name)s” unul dintre acești autori?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "Autor al " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "Aflați mai multe la isni.org" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "Acesta este un autor nou" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "Creați un autor nou: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "Este această o ediție a unei opere existente?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "Aceasta este o operă nouă" -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "Înapoi" @@ -1081,7 +1085,7 @@ msgid "Add Another Author" msgstr "Adăugați un alt autor" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "Copertă" @@ -1207,7 +1211,7 @@ msgstr "Domeniu" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "Status" @@ -1220,16 +1224,21 @@ msgstr "Status" msgid "Actions" msgstr "Acțiuni" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "Raportați spam" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "Nicio legătură disponibilă pentru această carte." -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "Adăugați o legătură către fișier" @@ -1326,7 +1335,7 @@ msgstr "Cod de confirmare:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "Trimiteți" @@ -1342,7 +1351,7 @@ msgstr "Retrimiteți legătura de confirmare" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1366,7 +1375,7 @@ msgid "Local users" msgstr "Utilizatori locali" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "Comunitate federată" @@ -1571,14 +1580,20 @@ msgstr "Sunteți invitat să vă alăturați %(site_name)s! Clic pe legătura de msgid "Learn more about %(site_name)s:" msgstr "Aflați mai multe despre %(site_name)s:" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s a marcat comportamentul (lui) %(reportee)s pentru moderare. " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "" + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "Vizualizați raportul" @@ -1717,13 +1732,13 @@ msgstr "Adăugați la cărțile dvs." #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "De citit" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "Lectură în curs" @@ -1732,10 +1747,15 @@ msgstr "Lectură în curs" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "Citite" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "Ce citiți?" @@ -1980,33 +2000,33 @@ msgstr "Importați cărți" msgid "Data source:" msgstr "Sursa de date:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "Puteți descărca datele dvs. GoodReads de pe pagina Import/Export a contului dvs. GoodReads." -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "Fișierul de date:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "Includeți recenzii" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "Setare de confidențialitate pentru recenziile importate:" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "Importați" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "Importuri recente" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "Niciun import recent" @@ -2067,8 +2087,8 @@ msgid "Row" msgstr "Linie" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "Titlu" @@ -2081,8 +2101,8 @@ msgid "Openlibrary key" msgstr "Cheie OpenLibrary" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "Autor" @@ -2265,16 +2285,21 @@ msgid "More about this site" msgstr "Mai multe despre acest site" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "Confirmați parola:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "" + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "O legătură pentru reinițializarea parolei dvs. va fi trimisă la adresa dvs." -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "Reinițializați parola" @@ -2582,108 +2607,246 @@ msgstr "Toate listele" msgid "Saved Lists" msgstr "Listele salvate" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "a acceptat invitația dvs. de a se alătura grupului „%(group_name)s”" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "a adăugat %(book_title)s listei dvs. „%(list_name)s”" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "a sugerat adăugarea %(book_title)s la lista dvs. „%(list_name)s”" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "a partajat recenzia dvs. a %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "a partajat comentariul dvs. despre %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "a partajat citatul dvs. din %(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "a partajat statusul dvs." +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "i-a plăcut recenzia dvs. despre %(book_title)s" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "i-a plăcut comentariul dvs. despre %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "i-a plăcut citatul dvs. despre %(book_title)s" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "i-a plăcut statusul dvs." +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "vă urmărește" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "v-a trimis o cerere de urmărire" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "importul dvs. s-a terminat." -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "v-a invitat să vă alăturați grupului „%(group_name)s”" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "s-a alăturat grupului dvs „%(group_name)s”" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "a părăsit grupul dvs. „%(group_name)s”" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "v-a menționat într-o recenzie a %(book_title)s" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "v-a menționat într-un comentariu despre %(book_title)s" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "v-a menționat într-un citat despre %(book_title)s" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "v-a menționat într-un status" +msgid "%(related_user)s mentioned you in a status" +msgstr "" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2697,28 +2860,36 @@ msgstr "Ați fost înlăturat de la grupul „%(group #: bookwyrm/templates/notifications/items/reply.html:21 #, python-format -msgid "replied to your review of %(book_title)s" -msgstr "a răspuns recenziei dvs. despre %(book_title)s" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "a răspuns comentariului dvs. despre %(book_title)s" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "a răspuns citatului dvs. din %(book_title)s" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "a răspuns statusului dvs." +msgid "%(related_user)s replied to your status" +msgstr "" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "Un raport nou are nevoie de moderare." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "Avertisment de conținut" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2877,12 +3048,20 @@ msgstr "Niciun utilizator blocat." #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "Schimbați parola" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "Parolă nouă:" @@ -2974,6 +3153,10 @@ msgstr "Export CSV" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "Exportul dvs. va include toate cărțile de pe etajerele dvs., cărți pe care le-ați revizuit și cărți cu activitate de lectură." +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "Cont" @@ -3000,6 +3183,11 @@ msgstr "Terminați „%(book_title)s”" msgid "Start \"%(book_title)s\"" msgstr "Începeți „%(book_title)s”" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3024,6 +3212,7 @@ msgstr "Actualizați datele de lectură pentru „%(title)s”" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "A început lectura" @@ -3032,7 +3221,7 @@ msgstr "A început lectura" msgid "Progress" msgstr "Progres" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3046,23 +3235,27 @@ msgstr "Progresie:" msgid "finished" msgstr "terminat" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "Afișați toate actualizările" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "Ștergeți această actualizare" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "începută" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "Editați datele de lectură" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "Ștergeți aceste date de lectură" @@ -3191,13 +3384,13 @@ msgstr "Fals" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "Data de început:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "Data de sfârșit:" @@ -3357,7 +3550,7 @@ msgid "Dashboard" msgstr "Tablou de bord" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "Număr total de utilizatori" @@ -3375,60 +3568,31 @@ msgstr "Statusuri" msgid "Works" msgstr "Opere" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s raport deschis" -msgstr[1] "" -msgstr[2] "%(display_count)s raporturi dechise" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "%(display_count)s domeniu care necesită revizuire" -msgstr[1] "" -msgstr[2] "%(display_count)s domenii care necesită revizii" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s cerere de invitare" -msgstr[1] "" -msgstr[2] "%(display_count)s cereri de invitare" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "O actualizare este disponibilă! Rulați în prezent v%(current)s, iar cea mai nouă versiune este %(available)s." - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "Activitatea instanței" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "Interval:" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "Zile" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "Săptămâni" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "Activitate de înscriere a utilizatorilor" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "Activitate stare" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "Opere create" @@ -3444,6 +3608,52 @@ msgstr "Stări publicate" msgid "Total" msgstr "Total" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "%(display_count)s domeniu care necesită revizuire" +msgstr[1] "" +msgstr[2] "%(display_count)s domenii care necesită revizii" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s cerere de invitare" +msgstr[1] "" +msgstr[2] "%(display_count)s cereri de invitare" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s raport deschis" +msgstr[1] "" +msgstr[2] "%(display_count)s raporturi dechise" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "O actualizare este disponibilă! Rulați în prezent v%(current)s, iar cea mai nouă versiune este %(available)s." + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3849,7 +4059,7 @@ msgstr "Niciun domeniu în așteptare" msgid "No domains currently blocked" msgstr "Niciun domeniu blocat" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "Nicio legătură disponibilă pentru acest domeniu." @@ -3877,11 +4087,11 @@ msgstr "Statusul a fost șters" msgid "Reported links" msgstr "Raportați legături" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "Comentarile moderatorului" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "Comentariu" @@ -3891,12 +4101,17 @@ msgstr "Comentariu" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "Raport #%(report_id)s: statut postat de @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "Raport #%(report_id)s: legătură adăugată de @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "Raport #%(report_id)s: utilizator @%(username)s" @@ -4136,34 +4351,42 @@ msgstr "Parola dvs.:" msgid "Users: %(instance_name)s" msgstr "Utilizatori: %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "Nume de utilizator" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "Data adăugării" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "Ultima dată activ(ă)" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "Instanță la distanță" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "Activ" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "Inactiv" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "Neconfigurat" @@ -4375,11 +4598,11 @@ msgid "User profile" msgstr "Profilul utilizatorului" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Toate cărțile" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" @@ -4387,35 +4610,40 @@ msgstr[0] "%(formatted_count)s carte" msgstr[1] "" msgstr[2] "%(formatted_count)s cărți" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(se afișează %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "Editați raft" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "Ștergeți raft" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "Pusă pe raft" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "Începută" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "Terminată" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "Acest raft este gol." @@ -4751,7 +4979,7 @@ msgid "(Optional)" msgstr "(Opțional)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "Actualizați progresul" @@ -4760,6 +4988,17 @@ msgstr "Actualizați progresul" msgid "Start \"%(book_title)s\"" msgstr "Începeți „%(book_title)s”" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4807,23 +5046,23 @@ msgstr "Mutați carte" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "Începeți să citiți" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "Vreau să citesc" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "Înlăturați de pe %(name)s" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "Înlăturați din" @@ -4831,14 +5070,15 @@ msgstr "Înlăturați din" msgid "More shelves" msgstr "Mai multe rafturi" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "Terminați de citit" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "Avertisment de conținut" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "Arătați stare" @@ -4926,6 +5166,16 @@ msgstr "a evaluat %(book)s de %(book)s" msgstr "a evaluat %(book)s" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5066,29 +5316,29 @@ msgstr "%(username)s nu urmărește pe nimeni" msgid "Edit profile" msgstr "Editați profil" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "Vizualizați toate %(size)s" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "Vizualizați toate cărțile" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "Obiectivul de lectură din %(current_year)s" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "Activitatea utilizatorului" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "Flux RSS" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "Încă nicio activitate!" @@ -5126,7 +5376,7 @@ msgstr "Niciun urmăritor pe care îl urmărești" msgid "View profile and more" msgstr "Vizualizați profil și multe altele" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "Deconectați-vă" @@ -5139,7 +5389,7 @@ msgstr "Fișierul depășește dimensiuneaz maximă: 10Mo" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "Nu este un fișier csv valid" @@ -5147,14 +5397,13 @@ msgstr "Nu este un fișier csv valid" msgid "Username or password are incorrect" msgstr "Numele de utilizator sau parola greșite" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "Nu a fost găsit niciun utilizator cu această adresă de email." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "O legătură cu resetarea parolei a fost trimisă la {email}" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/sv_SE/LC_MESSAGES/django.mo b/locale/sv_SE/LC_MESSAGES/django.mo index 70fc627ef..61c5aabb3 100644 Binary files a/locale/sv_SE/LC_MESSAGES/django.mo and b/locale/sv_SE/LC_MESSAGES/django.mo differ diff --git a/locale/sv_SE/LC_MESSAGES/django.po b/locale/sv_SE/LC_MESSAGES/django.po index 0ff609298..a881cf235 100644 --- a/locale/sv_SE/LC_MESSAGES/django.po +++ b/locale/sv_SE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-04-08 21:50\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-11 16:21\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Swedish\n" "Language: sv\n" @@ -46,6 +46,10 @@ msgstr "Obegränsad" msgid "Reading finish date cannot be before start date." msgstr "Slutdatum för läsning kan inte vara före startdatum." +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "" + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "En användare med det användarnamnet existerar redan" @@ -70,8 +74,8 @@ msgstr "Listordning" msgid "Book Title" msgstr "Bokens titel" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Betyg" @@ -117,29 +121,29 @@ msgstr "Varning" msgid "Danger" msgstr "Observera" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "Automatiskt genererad rapport" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Pågående" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "Självborttagning" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "Moderator-avstängning" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "Borttagning av moderator" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "Domänblockering" @@ -734,9 +738,9 @@ msgstr "ISNI:" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -757,8 +761,8 @@ msgstr "Spara" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -780,7 +784,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "Att ladda in data kommer att ansluta till %(source_name)s och kontrollera eventuella metadata om den här författaren som inte finns här. Befintliga metadata kommer inte att skrivas över." #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -949,42 +953,42 @@ msgstr "Redigera \"%(book_title)s\"" msgid "Add Book" msgstr "Lägg till bok" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "Bekräfta bokens info" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "Är \"%(name)s\" en utav dessa författare?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "Författare av " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "Hitta mer information på isni.org" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "Det här är en ny författare" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "Skapar en ny författare: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "Är det här en version av ett redan befintligt verk?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "Det här är ett nytt verk" -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "Bakåt" @@ -1075,7 +1079,7 @@ msgid "Add Another Author" msgstr "Lägg till en annan författare" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "Omslag" @@ -1201,7 +1205,7 @@ msgstr "Domän" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "Status" @@ -1214,16 +1218,21 @@ msgstr "Status" msgid "Actions" msgstr "Åtgärder" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "Rapportera skräppost" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "Inga länkar tillgängliga för den här boken." -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "Lägg till länk till filen" @@ -1320,7 +1329,7 @@ msgstr "Bekräftelsekod:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "Skicka in" @@ -1336,7 +1345,7 @@ msgstr "Skicka bekräftelselänken igen" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1360,7 +1369,7 @@ msgid "Local users" msgstr "Lokala användare" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "Federerad gemenskap" @@ -1563,14 +1572,20 @@ msgstr "Du är inbjuden att gå med i %(site_name)s! Klicka på länken nedan f msgid "Learn more about %(site_name)s:" msgstr "Lär dig mer om %(site_name)s:" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s har flaggat beteende av @%(reportee)s för moderering. " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "" + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "Visa rapport" @@ -1709,13 +1724,13 @@ msgstr "Lägg till i dina böcker" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "Att läsa" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "Läser just nu" @@ -1724,10 +1739,15 @@ msgstr "Läser just nu" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "Lästa" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "Vad läser du?" @@ -1970,33 +1990,33 @@ msgstr "Importera böcker" msgid "Data source:" msgstr "Datakälla:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "Du kan ladda ner Goodreads-data från Import/Export-sidan på ditt Goodreads-konto." -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "Datafil:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "Inkludera recensioner" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "Integritetsinställning för importerade recensioner:" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "Importera" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "Senaste importer" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "Ingen importering nyligen" @@ -2055,8 +2075,8 @@ msgid "Row" msgstr "Rad" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "Titel" @@ -2069,8 +2089,8 @@ msgid "Openlibrary key" msgstr "Openlibrary-nyckel" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "Författare" @@ -2253,16 +2273,21 @@ msgid "More about this site" msgstr "Mer om den här sidan" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "Bekräfta lösenordet:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "" + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "En länk för att återställa ditt lösenord kommer att skickas till din e-postadress" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "Återställ lösenordet" @@ -2570,108 +2595,244 @@ msgstr "Alla listor" msgid "Saved Lists" msgstr "Sparade listor" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "accepterade din inbjudning att gå med i gruppen \"%(group_name)s\"" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "lade till %(book_title)s till din lista \"%(list_name)s\"" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "föreslog att du skulle lägga till %(book_title)s till din lista \"%(list_name)s\"" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "ökade din recension av %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "ökade din kommentar på%(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "ökade ditt citat på%(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "ökade din status" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "gillade din recension av %(book_title)s" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "gillade din kommentar av %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" +msgstr[1] "" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "gillade ditt citat från %(book_title)s" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "gillade din status" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "följde dig" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "skickade en förfrågning om att följa till dig" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "Din import slutfördes." -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "bjöd in dig att gå med i gruppen \"%(group_name)s\"" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "har anslutit sig till din grupp \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "har lämnat din grupp \"%(group_name)s\"" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "nämnde dig i en recension av %(book_title)s" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "nämnde dig i en kommentar på %(book_title)s" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "nämnde dig i ett citat från %(book_title)s" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "nämnde dig i en status" +msgid "%(related_user)s mentioned you in a status" +msgstr "" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2685,28 +2846,35 @@ msgstr "Du har tagits bort från gruppen \"%(group_na #: bookwyrm/templates/notifications/items/reply.html:21 #, python-format -msgid "replied to your review of %(book_title)s" -msgstr "svarade på din recension av %(book_title)s" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "svarade på din kommentar av %(book_title)s" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "svarade på ditt citat av %(book_title)s" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "svarade på din status" +msgid "%(related_user)s replied to your status" +msgstr "" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "En ny rapport behöver moderering." +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "Innehållsvarning" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2865,12 +3033,20 @@ msgstr "Inga användare är för närvarande blockerade." #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "Ändra lösenord" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "Nytt lösenord:" @@ -2962,6 +3138,10 @@ msgstr "CSV-export" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "Din export inkluderar alla böcker som du har på din hylla, har recenserat och böcker med läsaktivitet." +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "Konto" @@ -2988,6 +3168,11 @@ msgstr "Avsluta \"%(book_title)s\"" msgid "Start \"%(book_title)s\"" msgstr "Påbörja \"%(book_title)s\"" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3012,6 +3197,7 @@ msgstr "Uppdatera läsdatum för \"%(title)s\"" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "Började läsa" @@ -3020,7 +3206,7 @@ msgstr "Började läsa" msgid "Progress" msgstr "Förlopp" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3034,23 +3220,27 @@ msgstr "Förloppsuppdateringar:" msgid "finished" msgstr "avslutad" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "Visa alla uppdateringar" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "Ta bort den här förloppsuppdateringen" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "påbörjades" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "Redigera läsdatum" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "Ta bort de här läsdatumen" @@ -3180,13 +3370,13 @@ msgstr "Falskt" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "Startdatum:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "Slutdatum:" @@ -3346,7 +3536,7 @@ msgid "Dashboard" msgstr "Översiktspanel" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "Totalt antal användare" @@ -3364,57 +3554,31 @@ msgstr "Statusar" msgid "Works" msgstr "Verk" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s öppen rapport" -msgstr[1] "%(display_count)s öppna rapporter" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "%(display_count)s domänen behöver granskning" -msgstr[1] "%(display_count)s domänerna behöver granskning" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s inbjudningsförfrågning" -msgstr[1] "%(display_count)s inbjudningsförfrågningar" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "En uppdatering är tillgänglig! Du kör v%(current)s och den senaste versionen är %(available)s." - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "Instansaktivitet" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "Intervall:" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "Dagar" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "Veckor" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "Användarens registreringsaktivitet" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "Statusaktivitet" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "Skapade verk" @@ -3430,6 +3594,49 @@ msgstr "Utlagda statusar" msgid "Total" msgstr "Totalt" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "%(display_count)s domänen behöver granskning" +msgstr[1] "%(display_count)s domänerna behöver granskning" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s inbjudningsförfrågning" +msgstr[1] "%(display_count)s inbjudningsförfrågningar" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s öppen rapport" +msgstr[1] "%(display_count)s öppna rapporter" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "En uppdatering är tillgänglig! Du kör v%(current)s och den senaste versionen är %(available)s." + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3834,7 +4041,7 @@ msgstr "Inga domäner väntar för närvarande" msgid "No domains currently blocked" msgstr "Inga domäner är blockerade för närvarande" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "Inga länkar tillgängliga för den här domänen." @@ -3862,11 +4069,11 @@ msgstr "Statusen har tagits bort" msgid "Reported links" msgstr "Rapporterade länkar" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "Moderatorns kommentarer" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "Kommentar" @@ -3876,12 +4083,17 @@ msgstr "Kommentar" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "Rapport #%(report_id)s: Status publicerades av @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "Rapport #%(report_id)s: Länken lades till av @%(username)s" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "Rapport #%(report_id)s: Användare @%(username)s" @@ -4121,34 +4333,42 @@ msgstr "Ditt lösenord:" msgid "Users: %(instance_name)s" msgstr "Användare: %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "Användarnamn" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "Lades till datum" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "Senast aktiv" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "Fjärrinstans" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "Aktiv" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "Inaktiv" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "Inte inställd" @@ -4359,46 +4579,51 @@ msgid "User profile" msgstr "Användarprofil" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Alla böcker" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s bok" msgstr[1] "%(formatted_count)s böcker" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(visar %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "Redigera hylla" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "Ta bort hylla" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "Lagd på hyllan" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "Påbörjade" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "Avslutade" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "Den här hyllan är tom." @@ -4728,7 +4953,7 @@ msgid "(Optional)" msgstr "(Valfritt)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "Uppdateringsförlopp" @@ -4737,6 +4962,17 @@ msgstr "Uppdateringsförlopp" msgid "Start \"%(book_title)s\"" msgstr "Börja \"%(book_title)s\"" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4784,23 +5020,23 @@ msgstr "Flytta boken" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "Börja läsa" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "Vill läsa" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "Ta bort från %(name)s" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "Ta bort från" @@ -4808,14 +5044,15 @@ msgstr "Ta bort från" msgid "More shelves" msgstr "Mer hyllor" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "Sluta läs" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "Innehållsvarning" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "Visa status" @@ -4903,6 +5140,16 @@ msgstr "recenserade %(book)s av %(book)s" msgstr "recenserade %(book)s" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5043,29 +5290,29 @@ msgstr "%(username)s följer inte någon användare" msgid "Edit profile" msgstr "Redigera profil" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "Visa alla %(size)s" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "Visa alla böcker" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "%(current_year)s läsmål" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "Användaraktivitet" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "RSS-flöde" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "Inga aktiviteter än!" @@ -5101,7 +5348,7 @@ msgstr "Inga följare som du följer" msgid "View profile and more" msgstr "" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "Logga ut" @@ -5114,7 +5361,7 @@ msgstr "Filen överskrider maximal storlek: 10 MB" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "Inte en giltig csv-fil" @@ -5122,14 +5369,13 @@ msgstr "Inte en giltig csv-fil" msgid "Username or password are incorrect" msgstr "Användarnamnet eller lösenordet är felaktigt" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "Ingen användare med den e-postadress hittades." +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "En länk för återställning av lösenordet har skickats till {email}" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo index 1d1227f80..28ca1472f 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 b1b37dc3d..941f6807f 100644 --- a/locale/zh_Hans/LC_MESSAGES/django.po +++ b/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-04-29 14:20\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-11 16:22\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Simplified\n" "Language: zh\n" @@ -46,6 +46,10 @@ msgstr "不受限" msgid "Reading finish date cannot be before start date." msgstr "读完日期不得早于开始日期。" +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "" + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "使用此用户名的用户已存在" @@ -70,8 +74,8 @@ msgstr "列表顺序" msgid "Book Title" msgstr "书名" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "评价" @@ -117,29 +121,29 @@ msgstr "警告" msgid "Danger" msgstr "危险" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "自动生成的举报" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "待处理" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "自我删除" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "仲裁员停用" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "仲裁员删除" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "域名屏蔽" @@ -730,9 +734,9 @@ msgstr "ISNI:" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -753,8 +757,8 @@ msgstr "保存" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -776,7 +780,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "加载数据会连接到 %(source_name)s 并检查这里还没有记录的与作者相关的元数据。现存的元数据不会被覆盖。" #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -943,42 +947,42 @@ msgstr "编辑《%(book_title)s》" msgid "Add Book" msgstr "添加书目" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "确认书目信息" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "“%(name)s” 是这些作者之一吗?" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "所著书有 " -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "在 isni.org 查找更多信息" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "这是一位新的作者" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "正在创建新的作者: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "这是已存在的作品的一个版本吗?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "这是一个新的作品。" -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "返回" @@ -1069,7 +1073,7 @@ msgid "Add Another Author" msgstr "添加其他作者" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "封面" @@ -1195,7 +1199,7 @@ msgstr "域名" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "状态" @@ -1208,16 +1212,21 @@ msgstr "状态" msgid "Actions" msgstr "动作" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "举报垃圾信息" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "此书没有可用链接。" -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "为文件添加链接" @@ -1314,7 +1323,7 @@ msgstr "确认代码:" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "提交" @@ -1330,7 +1339,7 @@ msgstr "重新发送确认链接" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1354,7 +1363,7 @@ msgid "Local users" msgstr "本地用户" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "跨站社区" @@ -1555,14 +1564,20 @@ msgstr "你受邀请加入 %(site_name)s!点击下面的连接来创建帐号 msgid "Learn more about %(site_name)s:" msgstr "进一步了解 %(site_name)s" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " -msgstr "@%(reporter)s 标记了 @%(reportee)s 的行为需要进行审核。 " +msgid "@%(reporter)s has flagged a link domain for moderation." +msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "" + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "查看报告" @@ -1701,13 +1716,13 @@ msgstr "添加到您的书籍中" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "想读" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "在读" @@ -1716,10 +1731,15 @@ msgstr "在读" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "读过" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "你在阅读什么?" @@ -1960,33 +1980,33 @@ msgstr "导入书目" msgid "Data source:" msgstr "数据来源:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "您可以从 Import/Export page 下载或导出您的 Goodread 数据。" -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "数据文件:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "纳入书评" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" msgstr "导入书评的隐私设定" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "导入" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "最近的导入" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "无最近的导入" @@ -2043,8 +2063,8 @@ msgid "Row" msgstr "行" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "标题" @@ -2057,8 +2077,8 @@ msgid "Openlibrary key" msgstr "Openlibrary key" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "作者" @@ -2241,16 +2261,21 @@ msgid "More about this site" msgstr "更多关于本站点的信息" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "确认密码:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "" + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "重设你的密码的链接将会被发送到你的邮箱地址" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "重设密码" @@ -2558,108 +2583,242 @@ msgstr "所有列表" msgid "Saved Lists" msgstr "保存的列表" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" -msgstr "接受了您的邀请,加入了 \"%(group_name)s\" 群组" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" -msgstr "添加了 %(book_title)s 到你的列表 “%(list_name)s”" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" -msgstr "建议了添加 %(book_title)s 到你的列表 “%(list_name)s” 中" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "转发了你的 %(book_title)s 的书评" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "转发了你的 %(book_title)s 的评论" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "转发了你的 %(book_title)s 的引用" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "boosted your status" -msgstr "转发了你的 状态" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:19 +#: bookwyrm/templates/notifications/items/add.html:66 #, python-format -msgid "liked your review of %(book_title)s" -msgstr "喜欢了你 %(book_title)s 的书评" +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:82 #, python-format -msgid "liked your comment on %(book_title)s" -msgstr "喜欢了你的 %(book_title)s 的评论" +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/boost.html:21 #, python-format -msgid "liked your quote from %(book_title)s" -msgstr "喜欢了你的 %(book_title)s 的引用" +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/boost.html:27 #, python-format -msgid "liked your status" -msgstr "喜欢了你的 状态" +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "关注了你" +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "向你发送了关注请求" +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "你的 导入 已完成。" -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" -msgstr "邀请您加入群组 \"%(group_name)s\"" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" msgstr "已加入您的群组 \"%(group_name)s\"" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" -msgstr "退出了您的群组 \"%(group_name)s\"" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "在 %(book_title)s 的书评 里提到了你" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "在 %(book_title)s 的评论 里提到了你" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "在 %(book_title)s 的引用 中提到了你" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "在 状态 中提到了你" +msgid "%(related_user)s mentioned you in a status" +msgstr "" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2673,28 +2832,34 @@ msgstr "您已经被从 \"%(group_name)s\" 组中 #: bookwyrm/templates/notifications/items/reply.html:21 #, python-format -msgid "replied to your review of %(book_title)s" -msgstr "回复 了你的 %(book_title)s 的书评" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "回复 了你的 %(book_title)s 的评论" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "回复 了你 %(book_title)s 中的引用" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "回复 了你的 状态" +msgid "%(related_user)s replied to your status" +msgstr "" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "有新的 报告 需要仲裁。" +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "内容警告" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2853,12 +3018,20 @@ msgstr "当前没有被屏蔽的用户。" #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "更改密码" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "新密码:" @@ -2950,6 +3123,10 @@ msgstr "CSV导出" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "你的导出将包括你书架上的所有书籍,你评论过的书籍,以及有阅读活动的书籍。" +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "帐号" @@ -2976,6 +3153,11 @@ msgstr "完成《%(book_title)s》" msgid "Start \"%(book_title)s\"" msgstr "开始《%(book_title)s》" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3000,6 +3182,7 @@ msgstr "更新 “%(title)s” 的阅读日期" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "已开始阅读" @@ -3008,7 +3191,7 @@ msgstr "已开始阅读" msgid "Progress" msgstr "进度" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3022,23 +3205,27 @@ msgstr "进度更新:" msgid "finished" msgstr "已完成" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "显示所有更新" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "删除此进度更新" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "已开始" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "编辑阅读日期" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "删除这些阅读日期" @@ -3168,13 +3355,13 @@ msgstr "否" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "开始日期:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "结束日期:" @@ -3334,7 +3521,7 @@ msgid "Dashboard" msgstr "仪表盘" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "用户总数" @@ -3352,54 +3539,31 @@ msgstr "状态" msgid "Works" msgstr "作品" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "%(display_count)s 条待处理报告" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "%(display_count)s 个域名需要审核" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "%(display_count)s 条邀请请求" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "有可用的更新!最新版本为:%(available)s,但你当前运行的版本为:%(current)s。" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "实例活动" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "区段:" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "天" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "周" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "用户注册活动" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "状态动态" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "创建的作品" @@ -3415,6 +3579,46 @@ msgstr "发布的状态" msgid "Total" msgstr "总数" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "%(display_count)s 个域名需要审核" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "%(display_count)s 条邀请请求" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "%(display_count)s 条待处理报告" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "有可用的更新!最新版本为:%(available)s,但你当前运行的版本为:%(current)s。" + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3818,7 +4022,7 @@ msgstr "没有当前待处理的域名" msgid "No domains currently blocked" msgstr "目前没有屏蔽的域名" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "此域名没有可用链接。" @@ -3846,11 +4050,11 @@ msgstr "状态已被删除" msgid "Reported links" msgstr "报告的链接" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "监察员评论" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "评论" @@ -3860,12 +4064,17 @@ msgstr "评论" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "报告 #%(report_id)s:由 @%(username)s 发布的状态" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "报告 #%(report_id)s:由 @%(username)s 添加的链接" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "报告 #%(report_id)s:用户 %(username)s" @@ -4105,34 +4314,42 @@ msgstr "你的密码:" msgid "Users: %(instance_name)s" msgstr "用户: %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "用户名" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "添加日期:" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "最后或缺" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "移除服务器" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "活跃" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "停用" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "未设置" @@ -4343,45 +4560,50 @@ msgid "User profile" msgstr "用户个人资料" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "所有书目" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s 本书籍" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(正在显示 %(start)s 到 %(end)s)" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "编辑书架" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "删除书架" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "上架时间" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "开始时间" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "完成时间" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "此书架是空的。" @@ -4705,7 +4927,7 @@ msgid "(Optional)" msgstr "(可选)" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "更新进度" @@ -4714,6 +4936,17 @@ msgstr "更新进度" msgid "Start \"%(book_title)s\"" msgstr "开始《%(book_title)s》" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4761,23 +4994,23 @@ msgstr "移动书目" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "开始阅读" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "想要阅读" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "从 %(name)s 移除" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "移除自" @@ -4785,14 +5018,15 @@ msgstr "移除自" msgid "More shelves" msgstr "更多书架" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "完成阅读" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "内容警告" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "显示状态" @@ -4880,6 +5114,16 @@ msgstr "写了 %(author_name)s%(book)s" msgstr "为 %(book)s 撰写了书评" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5020,29 +5264,29 @@ msgstr "%(username)s 没有关注任何用户" msgid "Edit profile" msgstr "编辑个人资料" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "查看所有 %(size)s 本" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "查看所有书目" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "%(current_year)s 阅读目标" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "用户活动" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "RSS 流" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "还没有活动!" @@ -5076,7 +5320,7 @@ msgstr "没有你关注的关注者" msgid "View profile and more" msgstr "查看档案和其他" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "登出" @@ -5089,7 +5333,7 @@ msgstr "文件超过了最大大小: 10MB" msgid "%(title)s: %(subtitle)s" msgstr "%(title)s:%(subtitle)s" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "不是有效的 csv 文件" @@ -5097,14 +5341,13 @@ msgstr "不是有效的 csv 文件" msgid "Username or password are incorrect" msgstr "用户名或密码不正确" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "没有找到使用该邮箱的用户。" +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "密码重置连接已发送给 {email}" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/locale/zh_Hant/LC_MESSAGES/django.mo b/locale/zh_Hant/LC_MESSAGES/django.mo index f9ca27be9..5f8f5aa41 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 4d4f155d6..2774d7184 100644 --- a/locale/zh_Hant/LC_MESSAGES/django.po +++ b/locale/zh_Hant/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-08 21:00+0000\n" -"PO-Revision-Date: 2022-04-08 21:50\n" +"POT-Creation-Date: 2022-07-11 15:53+0000\n" +"PO-Revision-Date: 2022-07-11 16:22\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Traditional\n" "Language: zh\n" @@ -46,6 +46,10 @@ msgstr "不受限" msgid "Reading finish date cannot be before start date." msgstr "" +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "" + #: bookwyrm/forms/landing.py:32 msgid "User with this username already exists" msgstr "" @@ -70,8 +74,8 @@ msgstr "列表順序" msgid "Book Title" msgstr "書名" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:187 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:188 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "評價" @@ -117,29 +121,29 @@ msgstr "" msgid "Danger" msgstr "" -#: bookwyrm/models/antispam.py:106 bookwyrm/models/antispam.py:140 +#: bookwyrm/models/antispam.py:101 bookwyrm/models/antispam.py:135 msgid "Automatically generated report" msgstr "" -#: bookwyrm/models/base_model.py:17 bookwyrm/models/link.py:72 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/link.py:72 #: bookwyrm/templates/import/import_status.html:200 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "" -#: bookwyrm/models/base_model.py:18 +#: bookwyrm/models/base_model.py:19 msgid "Self deletion" msgstr "" -#: bookwyrm/models/base_model.py:19 +#: bookwyrm/models/base_model.py:20 msgid "Moderator suspension" msgstr "" -#: bookwyrm/models/base_model.py:20 +#: bookwyrm/models/base_model.py:21 msgid "Moderator deletion" msgstr "" -#: bookwyrm/models/base_model.py:21 +#: bookwyrm/models/base_model.py:22 msgid "Domain block" msgstr "" @@ -730,9 +734,9 @@ msgstr "" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:202 -#: bookwyrm/templates/book/edit/edit_book.html:127 +#: bookwyrm/templates/book/edit/edit_book.html:135 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 -#: bookwyrm/templates/book/file_links/edit_links.html:82 +#: bookwyrm/templates/book/file_links/edit_links.html:86 #: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 @@ -753,8 +757,8 @@ msgstr "儲存" #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/cover_add_modal.html:33 -#: bookwyrm/templates/book/edit/edit_book.html:129 -#: bookwyrm/templates/book/edit/edit_book.html:132 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/edit/edit_book.html:140 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 @@ -776,7 +780,7 @@ msgid "Loading data will connect to %(source_name)s and check f msgstr "" #: bookwyrm/templates/author/sync_modal.html:24 -#: bookwyrm/templates/book/edit/edit_book.html:114 +#: bookwyrm/templates/book/edit/edit_book.html:122 #: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 @@ -943,42 +947,42 @@ msgstr "編輯 \"%(book_title)s\"" msgid "Add Book" msgstr "新增書目" -#: bookwyrm/templates/book/edit/edit_book.html:54 +#: bookwyrm/templates/book/edit/edit_book.html:62 msgid "Confirm Book Info" msgstr "確認書目資料" -#: bookwyrm/templates/book/edit/edit_book.html:62 +#: bookwyrm/templates/book/edit/edit_book.html:70 #, python-format msgid "Is \"%(name)s\" one of these authors?" msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:73 -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:81 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Author of " msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:83 msgid "Find more information at isni.org" msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:85 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "This is a new author" msgstr "這是一位新的作者" -#: bookwyrm/templates/book/edit/edit_book.html:92 +#: bookwyrm/templates/book/edit/edit_book.html:100 #, python-format msgid "Creating a new author: %(name)s" msgstr "正在建立新的作者: %(name)s" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:107 msgid "Is this an edition of an existing work?" msgstr "這是已存在的作品的另一個版本嗎?" -#: bookwyrm/templates/book/edit/edit_book.html:107 +#: bookwyrm/templates/book/edit/edit_book.html:115 msgid "This is a new work" msgstr "這是一個新的作品。" -#: bookwyrm/templates/book/edit/edit_book.html:116 +#: bookwyrm/templates/book/edit/edit_book.html:124 #: bookwyrm/templates/feed/status.html:21 msgid "Back" msgstr "返回" @@ -1069,7 +1073,7 @@ msgid "Add Another Author" msgstr "" #: bookwyrm/templates/book/edit/edit_book_form.html:220 -#: bookwyrm/templates/shelf/shelf.html:146 +#: bookwyrm/templates/shelf/shelf.html:147 msgid "Cover" msgstr "封面" @@ -1195,7 +1199,7 @@ msgstr "" #: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:47 #: bookwyrm/templates/settings/invites/status_filter.html:5 -#: bookwyrm/templates/settings/users/user_admin.html:52 +#: bookwyrm/templates/settings/users/user_admin.html:56 #: bookwyrm/templates/settings/users/user_info.html:24 msgid "Status" msgstr "狀態" @@ -1208,16 +1212,21 @@ msgstr "狀態" msgid "Actions" msgstr "動作" -#: bookwyrm/templates/book/file_links/edit_links.html:53 +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "" -#: bookwyrm/templates/book/file_links/edit_links.html:97 +#: bookwyrm/templates/book/file_links/edit_links.html:101 msgid "No links available for this book." msgstr "" -#: bookwyrm/templates/book/file_links/edit_links.html:108 +#: bookwyrm/templates/book/file_links/edit_links.html:112 #: bookwyrm/templates/book/file_links/links.html:18 msgid "Add link to file" msgstr "" @@ -1314,7 +1323,7 @@ msgstr "" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:116 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "提交" @@ -1330,7 +1339,7 @@ msgstr "" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 -#: bookwyrm/templates/landing/password_reset_request.html:18 +#: bookwyrm/templates/landing/password_reset_request.html:24 #: bookwyrm/templates/preferences/edit_user.html:53 #: bookwyrm/templates/snippets/register_form.html:27 msgid "Email address:" @@ -1354,7 +1363,7 @@ msgid "Local users" msgstr "本地使用者" #: bookwyrm/templates/directory/community_filter.html:12 -#: bookwyrm/templates/settings/users/user_admin.html:29 +#: bookwyrm/templates/settings/users/user_admin.html:33 msgid "Federated community" msgstr "跨站社群" @@ -1555,14 +1564,20 @@ msgstr "你受邀請加入 %(site_name)s!點選下面的連結來建立帳號 msgid "Learn more about %(site_name)s:" msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:6 -#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#: bookwyrm/templates/email/moderation_report/html_content.html:8 +#: bookwyrm/templates/email/moderation_report/text_content.html:6 #, python-format -msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " +msgid "@%(reporter)s has flagged a link domain for moderation." msgstr "" -#: bookwyrm/templates/email/moderation_report/html_content.html:9 -#: bookwyrm/templates/email/moderation_report/text_content.html:7 +#: bookwyrm/templates/email/moderation_report/html_content.html:14 +#: bookwyrm/templates/email/moderation_report/text_content.html:10 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation." +msgstr "" + +#: bookwyrm/templates/email/moderation_report/html_content.html:21 +#: bookwyrm/templates/email/moderation_report/text_content.html:15 msgid "View report" msgstr "" @@ -1701,13 +1716,13 @@ msgstr "" #: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 -#: bookwyrm/templatetags/shelf_tags.py:46 +#: bookwyrm/templatetags/shelf_tags.py:48 msgid "To Read" msgstr "想讀" #: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 -#: bookwyrm/templatetags/shelf_tags.py:48 +#: bookwyrm/templatetags/shelf_tags.py:50 msgid "Currently Reading" msgstr "在讀" @@ -1716,10 +1731,15 @@ msgstr "在讀" #: bookwyrm/templates/snippets/shelf_selector.html:47 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 -#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:50 +#: bookwyrm/templates/user/user.html:35 bookwyrm/templatetags/shelf_tags.py:52 msgid "Read" msgstr "讀過" +#: bookwyrm/templates/get_started/book_preview.html:13 +#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 +msgid "Stopped Reading" +msgstr "" + #: bookwyrm/templates/get_started/books.html:6 msgid "What are you reading?" msgstr "你在閱讀什麼?" @@ -1960,33 +1980,33 @@ msgstr "匯入書目" msgid "Data source:" msgstr "資料來源:" -#: bookwyrm/templates/import/import.html:39 +#: bookwyrm/templates/import/import.html:42 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." msgstr "" -#: bookwyrm/templates/import/import.html:44 +#: bookwyrm/templates/import/import.html:47 msgid "Data file:" msgstr "資料檔案:" -#: bookwyrm/templates/import/import.html:52 +#: bookwyrm/templates/import/import.html:55 msgid "Include reviews" msgstr "納入書評" -#: bookwyrm/templates/import/import.html:57 +#: bookwyrm/templates/import/import.html:60 msgid "Privacy setting for imported reviews:" -msgstr "匯入書評的隱私設定" +msgstr "匯入書評的私隱設定" -#: bookwyrm/templates/import/import.html:63 +#: bookwyrm/templates/import/import.html:66 #: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76 msgid "Import" msgstr "匯入" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:71 msgid "Recent Imports" msgstr "最近的匯入" -#: bookwyrm/templates/import/import.html:70 +#: bookwyrm/templates/import/import.html:73 msgid "No recent imports" msgstr "無最近的匯入" @@ -2043,8 +2063,8 @@ msgid "Row" msgstr "" #: bookwyrm/templates/import/import_status.html:103 -#: bookwyrm/templates/shelf/shelf.html:147 -#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:148 +#: bookwyrm/templates/shelf/shelf.html:170 msgid "Title" msgstr "標題" @@ -2057,8 +2077,8 @@ msgid "Openlibrary key" msgstr "" #: bookwyrm/templates/import/import_status.html:114 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Author" msgstr "作者" @@ -2241,16 +2261,21 @@ msgid "More about this site" msgstr "關於本網站的更多" #: bookwyrm/templates/landing/password_reset.html:34 -#: bookwyrm/templates/preferences/change_password.html:18 +#: bookwyrm/templates/preferences/change_password.html:40 #: bookwyrm/templates/preferences/delete_user.html:20 msgid "Confirm password:" msgstr "確認密碼:" #: bookwyrm/templates/landing/password_reset_request.html:14 +#, python-format +msgid "A password reset link will be sent to %(email)s if there is an account using that email address." +msgstr "" + +#: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" msgstr "重設你的密碼的連結將會被發送到你的郵箱地址" -#: bookwyrm/templates/landing/password_reset_request.html:28 +#: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" msgstr "重設密碼" @@ -2558,77 +2583,201 @@ msgstr "" msgid "Saved Lists" msgstr "" -#: bookwyrm/templates/notifications/items/accept.html:16 +#: bookwyrm/templates/notifications/items/accept.html:18 #, python-format -msgid "accepted your invitation to join group \"%(group_name)s\"" +msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/add.html:24 +#: bookwyrm/templates/notifications/items/accept.html:26 #, python-format -msgid "added %(book_title)s to your list \"%(list_name)s\"" +msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/add.html:31 +#: bookwyrm/templates/notifications/items/accept.html:36 #, python-format -msgid "suggested adding %(book_title)s to your list \"%(list_name)s\"" +msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/boost.html:19 +#: bookwyrm/templates/notifications/items/add.html:33 #, python-format -msgid "boosted your review of %(book_title)s" -msgstr "轉發了你的 %(book_title)s 的書評" - -#: bookwyrm/templates/notifications/items/boost.html:25 -#, python-format -msgid "boosted your comment on%(book_title)s" -msgstr "轉發了你的 %(book_title)s 的評論" - -#: bookwyrm/templates/notifications/items/boost.html:31 -#, python-format -msgid "boosted your quote from %(book_title)s" -msgstr "轉發了你的 %(book_title)s 的引用" - -#: bookwyrm/templates/notifications/items/boost.html:37 -#, python-format -msgid "boosted your status" -msgstr "轉發了你的 狀態" - -#: bookwyrm/templates/notifications/items/fav.html:19 -#, python-format -msgid "liked your review of %(book_title)s" +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:25 +#: bookwyrm/templates/notifications/items/add.html:39 #, python-format -msgid "liked your comment on %(book_title)s" +msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:31 +#: bookwyrm/templates/notifications/items/add.html:47 #, python-format -msgid "liked your quote from %(book_title)s" +msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/fav.html:37 +#: bookwyrm/templates/notifications/items/add.html:54 #, python-format -msgid "liked your status" +msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/follow.html:15 -msgid "followed you" -msgstr "關注了你" +#: bookwyrm/templates/notifications/items/add.html:66 +#, python-format +msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" -#: bookwyrm/templates/notifications/items/follow_request.html:11 -msgid "sent you a follow request" -msgstr "向你傳送了關注請求" +#: bookwyrm/templates/notifications/items/add.html:82 +#, python-format +msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\"" +msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\"" +msgstr[0] "" + +#: bookwyrm/templates/notifications/items/boost.html:21 +#, python-format +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:27 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:50 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:59 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:73 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:82 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "" #: bookwyrm/templates/notifications/items/import.html:14 #, python-format msgid "Your import completed." msgstr "你的 匯入 已完成。" -#: bookwyrm/templates/notifications/items/invite.html:15 +#: bookwyrm/templates/notifications/items/invite.html:16 #, python-format -msgid "invited you to join the group \"%(group_name)s\"" +msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" msgstr "" #: bookwyrm/templates/notifications/items/join.html:16 @@ -2636,30 +2785,40 @@ msgstr "" msgid "has joined your group \"%(group_name)s\"" msgstr "" -#: bookwyrm/templates/notifications/items/leave.html:16 +#: bookwyrm/templates/notifications/items/leave.html:18 #, python-format -msgid "has left your group \"%(group_name)s\"" +msgid "%(related_user)s has left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:26 +#, python-format +msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\"" +msgstr "" + +#: bookwyrm/templates/notifications/items/leave.html:36 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\"" msgstr "" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format -msgid "mentioned you in a review of %(book_title)s" -msgstr "在 %(book_title)s 的書評 裡提到了你" +msgid "%(related_user)s mentioned you in a review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format -msgid "mentioned you in a comment on %(book_title)s" -msgstr "在 %(book_title)s 的評論 裡提到了你" +msgid "%(related_user)s mentioned you in a comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format -msgid "mentioned you in a quote from %(book_title)s" -msgstr "在 %(book_title)s 的引用 中提到了你" +msgid "%(related_user)s mentioned you in a quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format -msgid "mentioned you in a status" -msgstr "在 狀態 中提到了你" +msgid "%(related_user)s mentioned you in a status" +msgstr "" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -2673,28 +2832,34 @@ msgstr "" #: bookwyrm/templates/notifications/items/reply.html:21 #, python-format -msgid "replied to your review of %(book_title)s" -msgstr "回覆 了你的 %(book_title)s 的書評" +msgid "%(related_user)s replied to your review of %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format -msgid "replied to your comment on %(book_title)s" -msgstr "回覆 了你的 %(book_title)s 的評論" +msgid "%(related_user)s replied to your comment on %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format -msgid "replied to your quote from %(book_title)s" -msgstr "回覆 了你 %(book_title)s 中的引用" +msgid "%(related_user)s replied to your quote from %(book_title)s" +msgstr "" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format -msgid "replied to your status" -msgstr "回覆 了你的 狀態" +msgid "%(related_user)s replied to your status" +msgstr "" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format -msgid "A new report needs moderation." -msgstr "有新的 舉報 需要仲裁。" +msgid "A new report needs moderation" +msgid_plural "%(display_count)s new reports need moderation" +msgstr[0] "" + +#: bookwyrm/templates/notifications/items/status_preview.html:4 +#: bookwyrm/templates/snippets/status/content_status.html:73 +msgid "Content warning" +msgstr "" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -2853,12 +3018,20 @@ msgstr "當前沒有被封鎖的使用者。" #: bookwyrm/templates/preferences/change_password.html:4 #: bookwyrm/templates/preferences/change_password.html:7 -#: bookwyrm/templates/preferences/change_password.html:21 +#: bookwyrm/templates/preferences/change_password.html:52 #: bookwyrm/templates/preferences/layout.html:20 msgid "Change Password" msgstr "更改密碼" -#: bookwyrm/templates/preferences/change_password.html:14 +#: bookwyrm/templates/preferences/change_password.html:15 +msgid "Successfully changed password" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:22 +msgid "Current password:" +msgstr "" + +#: bookwyrm/templates/preferences/change_password.html:36 msgid "New password:" msgstr "新密碼:" @@ -2950,6 +3123,10 @@ msgstr "" msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." msgstr "" +#: bookwyrm/templates/preferences/export.html:20 +msgid "Download file" +msgstr "" + #: bookwyrm/templates/preferences/layout.html:11 msgid "Account" msgstr "帳號" @@ -2976,6 +3153,11 @@ msgstr "" msgid "Start \"%(book_title)s\"" msgstr "" +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -3000,6 +3182,7 @@ msgstr "" #: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21 +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24 msgid "Started reading" msgstr "已開始閱讀" @@ -3008,7 +3191,7 @@ msgstr "已開始閱讀" msgid "Progress" msgstr "進度" -#: bookwyrm/templates/readthrough/readthrough_form.html:24 +#: bookwyrm/templates/readthrough/readthrough_form.html:25 #: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 msgid "Finished reading" @@ -3022,23 +3205,27 @@ msgstr "進度更新:" msgid "finished" msgstr "已完成" -#: bookwyrm/templates/readthrough/readthrough_list.html:25 +#: bookwyrm/templates/readthrough/readthrough_list.html:16 +msgid "stopped" +msgstr "" + +#: bookwyrm/templates/readthrough/readthrough_list.html:27 msgid "Show all updates" msgstr "顯示所有更新" -#: bookwyrm/templates/readthrough/readthrough_list.html:41 +#: bookwyrm/templates/readthrough/readthrough_list.html:43 msgid "Delete this progress update" msgstr "刪除此進度更新" -#: bookwyrm/templates/readthrough/readthrough_list.html:53 +#: bookwyrm/templates/readthrough/readthrough_list.html:55 msgid "started" msgstr "已開始" -#: bookwyrm/templates/readthrough/readthrough_list.html:60 +#: bookwyrm/templates/readthrough/readthrough_list.html:62 msgid "Edit read dates" msgstr "編輯閱讀日期" -#: bookwyrm/templates/readthrough/readthrough_list.html:68 +#: bookwyrm/templates/readthrough/readthrough_list.html:70 msgid "Delete these read dates" msgstr "刪除這些閱讀日期" @@ -3166,13 +3353,13 @@ msgstr "否" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:94 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 msgid "Start date:" msgstr "開始日期:" #: bookwyrm/templates/settings/announcements/announcement.html:62 #: bookwyrm/templates/settings/announcements/edit_announcement.html:89 -#: bookwyrm/templates/settings/dashboard/dashboard.html:100 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "結束日期:" @@ -3332,7 +3519,7 @@ msgid "Dashboard" msgstr "" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:123 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "" @@ -3350,54 +3537,31 @@ msgstr "" msgid "Works" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:43 -#, python-format -msgid "%(display_count)s open report" -msgid_plural "%(display_count)s open reports" -msgstr[0] "" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:55 -#, python-format -msgid "%(display_count)s domain needs review" -msgid_plural "%(display_count)s domains need review" -msgstr[0] "" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:67 -#, python-format -msgid "%(display_count)s invite request" -msgid_plural "%(display_count)s invite requests" -msgstr[0] "" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:79 -#, python-format -msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." -msgstr "" - -#: bookwyrm/templates/settings/dashboard/dashboard.html:88 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:106 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:110 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:111 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:129 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:135 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:141 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "" @@ -3413,6 +3577,46 @@ msgstr "" msgid "Total" msgstr "" +#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 +#, python-format +msgid "%(display_count)s domain needs review" +msgid_plural "%(display_count)s domains need review" +msgstr[0] "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(email_sender)s, may be misconfigured." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11 +msgid "Check the EMAIL_SENDER_NAME and EMAIL_SENDER_DOMAIN in your .env file." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9 +#, python-format +msgid "%(display_count)s invite request" +msgid_plural "%(display_count)s invite requests" +msgstr[0] "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8 +msgid "Your instance is missing a code of conduct." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 +msgid "Your instance is missing a privacy policy." +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9 +#, python-format +msgid "%(display_count)s open report" +msgid_plural "%(display_count)s open reports" +msgstr[0] "" + +#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8 +#, python-format +msgid "An update is available! You're running v%(current)s and the latest release is %(available)s." +msgstr "" + #: bookwyrm/templates/settings/email_blocklist/domain_form.html:5 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10 msgid "Add domain" @@ -3816,7 +4020,7 @@ msgstr "" msgid "No domains currently blocked" msgstr "" -#: bookwyrm/templates/settings/link_domains/link_table.html:39 +#: bookwyrm/templates/settings/link_domains/link_table.html:43 msgid "No links available for this domain." msgstr "" @@ -3844,11 +4048,11 @@ msgstr "狀態已被刪除" msgid "Reported links" msgstr "" -#: bookwyrm/templates/settings/reports/report.html:63 +#: bookwyrm/templates/settings/reports/report.html:65 msgid "Moderator Comments" msgstr "監察員評論" -#: bookwyrm/templates/settings/reports/report.html:84 +#: bookwyrm/templates/settings/reports/report.html:86 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" msgstr "評論" @@ -3858,12 +4062,17 @@ msgstr "評論" msgid "Report #%(report_id)s: Status posted by @%(username)s" msgstr "" -#: bookwyrm/templates/settings/reports/report_header.html:12 +#: bookwyrm/templates/settings/reports/report_header.html:13 #, python-format msgid "Report #%(report_id)s: Link added by @%(username)s" msgstr "" -#: bookwyrm/templates/settings/reports/report_header.html:18 +#: bookwyrm/templates/settings/reports/report_header.html:17 +#, python-format +msgid "Report #%(report_id)s: Link domain" +msgstr "" + +#: bookwyrm/templates/settings/reports/report_header.html:24 #, python-format msgid "Report #%(report_id)s: User @%(username)s" msgstr "" @@ -4103,34 +4312,42 @@ msgstr "" msgid "Users: %(instance_name)s" msgstr "使用者: %(instance_name)s" -#: bookwyrm/templates/settings/users/user_admin.html:40 +#: bookwyrm/templates/settings/users/user_admin.html:29 +msgid "Deleted users" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 msgid "Username" msgstr "使用者名稱" -#: bookwyrm/templates/settings/users/user_admin.html:44 +#: bookwyrm/templates/settings/users/user_admin.html:48 msgid "Date Added" msgstr "新增日期:" -#: bookwyrm/templates/settings/users/user_admin.html:48 +#: bookwyrm/templates/settings/users/user_admin.html:52 msgid "Last Active" msgstr "最後活躍" -#: bookwyrm/templates/settings/users/user_admin.html:57 +#: bookwyrm/templates/settings/users/user_admin.html:61 msgid "Remote instance" msgstr "移除伺服器" -#: bookwyrm/templates/settings/users/user_admin.html:74 +#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_info.html:28 msgid "Active" msgstr "活躍" -#: bookwyrm/templates/settings/users/user_admin.html:79 +#: bookwyrm/templates/settings/users/user_admin.html:86 +msgid "Deleted" +msgstr "" + +#: bookwyrm/templates/settings/users/user_admin.html:92 #: bookwyrm/templates/settings/users/user_info.html:32 msgid "Inactive" msgstr "停用" -#: bookwyrm/templates/settings/users/user_admin.html:88 +#: bookwyrm/templates/settings/users/user_admin.html:101 #: bookwyrm/templates/settings/users/user_info.html:127 msgid "Not set" msgstr "未設定" @@ -4341,45 +4558,50 @@ msgid "User profile" msgstr "" #: bookwyrm/templates/shelf/shelf.html:39 -#: bookwyrm/templatetags/shelf_tags.py:44 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:46 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "所有書目" -#: bookwyrm/templates/shelf/shelf.html:96 +#: bookwyrm/templates/shelf/shelf.html:97 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "" -#: bookwyrm/templates/shelf/shelf.html:103 +#: bookwyrm/templates/shelf/shelf.html:104 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:115 +#: bookwyrm/templates/shelf/shelf.html:116 msgid "Edit shelf" msgstr "編輯書架" -#: bookwyrm/templates/shelf/shelf.html:123 +#: bookwyrm/templates/shelf/shelf.html:124 msgid "Delete shelf" msgstr "刪除書架" -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:177 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:178 msgid "Shelved" msgstr "上架時間" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:153 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Started" msgstr "開始時間" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Finished" msgstr "完成時間" -#: bookwyrm/templates/shelf/shelf.html:209 +#: bookwyrm/templates/shelf/shelf.html:154 +#: bookwyrm/templates/shelf/shelf.html:184 +msgid "Until" +msgstr "" + +#: bookwyrm/templates/shelf/shelf.html:210 msgid "This shelf is empty." msgstr "此書架是空的。" @@ -4703,7 +4925,7 @@ msgid "(Optional)" msgstr "" #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61 msgid "Update progress" msgstr "更新進度" @@ -4712,6 +4934,17 @@ msgstr "更新進度" msgid "Start \"%(book_title)s\"" msgstr "開始 \"%(book_title)s\"" +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32 +#: bookwyrm/templates/snippets/shelf_selector.html:54 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 +msgid "Stopped reading" +msgstr "" + #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format msgid "Want to Read \"%(book_title)s\"" @@ -4759,23 +4992,23 @@ msgstr "移動書目" #: bookwyrm/templates/snippets/shelf_selector.html:39 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:24 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33 msgid "Start reading" msgstr "開始閱讀" -#: bookwyrm/templates/snippets/shelf_selector.html:54 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 +#: bookwyrm/templates/snippets/shelf_selector.html:61 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55 msgid "Want to read" msgstr "想要閱讀" -#: bookwyrm/templates/snippets/shelf_selector.html:75 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 +#: bookwyrm/templates/snippets/shelf_selector.html:82 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73 #, python-format msgid "Remove from %(name)s" msgstr "從 %(name)s 移除" -#: bookwyrm/templates/snippets/shelf_selector.html:88 +#: bookwyrm/templates/snippets/shelf_selector.html:95 msgid "Remove from" msgstr "" @@ -4783,14 +5016,15 @@ msgstr "" msgid "More shelves" msgstr "更多書架" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 +msgid "Stop reading" +msgstr "" + +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" msgstr "完成閱讀" -#: bookwyrm/templates/snippets/status/content_status.html:73 -msgid "Content warning" -msgstr "" - #: bookwyrm/templates/snippets/status/content_status.html:80 msgid "Show status" msgstr "" @@ -4878,6 +5112,16 @@ msgstr "" msgid "reviewed %(book)s" msgstr "" +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10 +#, python-format +msgid "stopped reading %(book)s by %(author_name)s" +msgstr "" + +#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17 +#, python-format +msgid "stopped reading %(book)s" +msgstr "" + #: bookwyrm/templates/snippets/status/headers/to_read.html:10 #, python-format msgid "wants to read %(book)s by %(author_name)s" @@ -5018,29 +5262,29 @@ msgstr "%(username)s 沒有關注任何使用者" msgid "Edit profile" msgstr "編輯使用者資料" -#: bookwyrm/templates/user/user.html:37 +#: bookwyrm/templates/user/user.html:38 #, python-format msgid "View all %(size)s" msgstr "檢視所有 %(size)s 本" -#: bookwyrm/templates/user/user.html:51 +#: bookwyrm/templates/user/user.html:52 msgid "View all books" msgstr "檢視所有書目" -#: bookwyrm/templates/user/user.html:58 +#: bookwyrm/templates/user/user.html:59 #, python-format msgid "%(current_year)s Reading Goal" msgstr "" -#: bookwyrm/templates/user/user.html:65 +#: bookwyrm/templates/user/user.html:66 msgid "User Activity" msgstr "使用者活動" -#: bookwyrm/templates/user/user.html:69 +#: bookwyrm/templates/user/user.html:70 msgid "RSS feed" msgstr "RSS 訂閱" -#: bookwyrm/templates/user/user.html:80 +#: bookwyrm/templates/user/user.html:81 msgid "No activities yet!" msgstr "還沒有活動!" @@ -5074,7 +5318,7 @@ msgstr "" msgid "View profile and more" msgstr "" -#: bookwyrm/templates/user_menu.html:72 +#: bookwyrm/templates/user_menu.html:78 msgid "Log out" msgstr "登出" @@ -5087,7 +5331,7 @@ msgstr "檔案超過了最大大小: 10MB" msgid "%(title)s: %(subtitle)s" msgstr "" -#: bookwyrm/views/imports/import_data.py:67 +#: bookwyrm/views/imports/import_data.py:70 msgid "Not a valid csv file" msgstr "不是有效的 csv 檔案" @@ -5095,14 +5339,13 @@ msgstr "不是有效的 csv 檔案" msgid "Username or password are incorrect" msgstr "" -#: bookwyrm/views/landing/password.py:32 -msgid "No user with that email address was found." -msgstr "沒有找到使用該郵箱的使用者。" +#: bookwyrm/views/preferences/change_password.py:35 +msgid "Incorrect password" +msgstr "" -#: bookwyrm/views/landing/password.py:43 -#, python-brace-format -msgid "A password reset link was sent to {email}" -msgstr "密碼重置連結已傳送給 {email}" +#: bookwyrm/views/preferences/change_password.py:42 +msgid "Password does not match" +msgstr "" #: bookwyrm/views/rss_feed.py:34 #, python-brace-format diff --git a/poetry.lock b/poetry.lock index 8885c09a8..25e20617f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -69,7 +69,7 @@ python-versions = ">=3.6" [[package]] name = "atomicwrites" -version = "1.4.0" +version = "1.4.1" description = "Atomic file writes." category = "dev" optional = false @@ -127,16 +127,32 @@ typing-extensions = ">=3.7.4" colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] +[[package]] +name = "bleach" +version = "5.0.1" +description = "An easy safelist-based HTML-sanitizing tool." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.2)"] +dev = ["build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "Sphinx (==4.3.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)", "black (==22.3.0)", "mypy (==0.961)"] + [[package]] name = "boto3" -version = "1.24.7" +version = "1.24.39" description = "The AWS SDK for Python" category = "main" optional = false python-versions = ">= 3.7" [package.dependencies] -botocore = ">=1.27.7,<1.28.0" +botocore = ">=1.27.39,<1.28.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -145,7 +161,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.27.7" +version = "1.27.39" description = "Low-level, data-driven core of boto 3." category = "main" optional = false @@ -212,7 +228,7 @@ zstd = ["zstandard"] [[package]] name = "certifi" -version = "2022.5.18.1" +version = "2022.6.15" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -228,11 +244,11 @@ python-versions = "*" [[package]] name = "charset-normalizer" -version = "2.0.12" +version = "2.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = ">=3.5.0" +python-versions = ">=3.6.0" [package.extras] unicode_backport = ["unicodedata2"] @@ -288,7 +304,7 @@ six = "*" [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.5" description = "Cross-platform colored terminal text." category = "main" optional = false @@ -332,7 +348,7 @@ dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "im [[package]] name = "django" -version = "3.2.13" +version = "3.2.14" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." category = "main" optional = false @@ -518,21 +534,21 @@ python-versions = ">=3.7" [[package]] name = "googleapis-common-protos" -version = "1.56.2" +version = "1.56.4" description = "Common protobufs used in Google APIs" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -protobuf = ">=3.15.0,<4.0.0dev" +protobuf = ">=3.15.0,<5.0.0dev" [package.extras] grpc = ["grpcio (>=1.0.0,<2.0.0dev)"] [[package]] name = "grpcio" -version = "1.46.3" +version = "1.47.0" description = "HTTP/2-based RPC framework" category = "main" optional = false @@ -542,7 +558,7 @@ python-versions = ">=3.6" six = ">=1.5.2" [package.extras] -protobuf = ["grpcio-tools (>=1.46.3)"] +protobuf = ["grpcio-tools (>=1.47.0)"] [[package]] name = "gunicorn" @@ -560,7 +576,7 @@ tornado = ["tornado (>=0.2)"] [[package]] name = "humanize" -version = "4.1.0" +version = "4.2.3" description = "Python humanize utilities" category = "main" optional = false @@ -587,7 +603,7 @@ python-versions = "*" [[package]] name = "jmespath" -version = "1.0.0" +version = "1.0.1" description = "JSON Matching Expressions" category = "main" optional = false @@ -645,7 +661,7 @@ testing = ["coverage", "pyyaml"] [[package]] name = "marshmallow" -version = "3.16.0" +version = "3.17.0" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." category = "main" optional = false @@ -655,9 +671,9 @@ python-versions = ">=3.7" packaging = ">=17.0" [package.extras] -dev = ["pytest", "pytz", "simplejson", "mypy (==0.960)", "flake8 (==4.0.1)", "flake8-bugbear (==22.4.25)", "pre-commit (>=2.4,<3.0)", "tox"] +dev = ["pytest", "pytz", "simplejson", "mypy (==0.961)", "flake8 (==4.0.1)", "flake8-bugbear (==22.6.22)", "pre-commit (>=2.4,<3.0)", "tox"] docs = ["sphinx (==4.5.0)", "sphinx-issues (==3.0.1)", "alabaster (==0.7.12)", "sphinx-version-warning (==1.1.2)", "autodocsumm (==0.2.8)"] -lint = ["mypy (==0.960)", "flake8 (==4.0.1)", "flake8-bugbear (==22.4.25)", "pre-commit (>=2.4,<3.0)"] +lint = ["mypy (==0.961)", "flake8 (==4.0.1)", "flake8-bugbear (==22.6.22)", "pre-commit (>=2.4,<3.0)"] tests = ["pytest", "pytz", "simplejson"] [[package]] @@ -840,14 +856,14 @@ python-versions = "*" [[package]] name = "pillow" -version = "9.1.1" +version = "9.2.0" description = "Python Imaging Library (Fork)" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinx-rtd-theme (>=1.0)", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] [[package]] @@ -874,7 +890,7 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.29" +version = "3.0.30" description = "Library for building powerful interactive command lines in Python" category = "main" optional = false @@ -885,8 +901,8 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "3.20.1" -description = "Protocol Buffers" +version = "4.21.4" +description = "" category = "main" optional = false python-versions = ">=3.7" @@ -1044,7 +1060,7 @@ hiredis = ["hiredis (>=0.1.3)"] [[package]] name = "regex" -version = "2022.6.2" +version = "2022.7.25" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -1131,11 +1147,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tornado" -version = "6.1" +version = "6.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." category = "main" optional = false -python-versions = ">= 3.5" +python-versions = ">= 3.7" [[package]] name = "typed-ast" @@ -1147,7 +1163,7 @@ python-versions = ">=3.6" [[package]] name = "typing-extensions" -version = "4.2.0" +version = "4.3.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "dev" optional = false @@ -1182,6 +1198,14 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "wrapt" version = "1.14.1" @@ -1205,7 +1229,7 @@ multidict = ">=4.0" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "2d1e09628f6d06e84edc7f2d50b4dcaf83910fd90c02d875ab8d4010371f7ec9" +content-hash = "847366a38d8bfe9102e868e951e9af0096a6786a601ce169bdc84db8bbc6e82b" [metadata.files] aiohttp = [ @@ -1303,8 +1327,7 @@ async-timeout = [ {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, ] atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, ] attrs = [ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, @@ -1321,29 +1344,33 @@ billiard = [ black = [ {file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"}, ] +bleach = [ + {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, + {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, +] boto3 = [ - {file = "boto3-1.24.7-py3-none-any.whl", hash = "sha256:925a34a55257219f4601e803951fd4d61ed6eac2208dc834a04fe150b03f265e"}, - {file = "boto3-1.24.7.tar.gz", hash = "sha256:6e243e28c804dccd2015935acfac0567e1861b20fdd96aa47f232b47aa214a69"}, + {file = "boto3-1.24.39-py3-none-any.whl", hash = "sha256:057b4132e81f5ba63dc7d9d989023f3e81216999d76edabffade5bad5ae9bd3e"}, + {file = "boto3-1.24.39.tar.gz", hash = "sha256:c303fa76dde0422476ed2413fde8e34f539fede087910ad1f911fee6546a4be3"}, ] botocore = [ - {file = "botocore-1.27.7-py3-none-any.whl", hash = "sha256:3e0cbe26f08fe9a3f6df5de4dcc3bef686e01ba5f79ad03ffbe79d92f51ecea5"}, - {file = "botocore-1.27.7.tar.gz", hash = "sha256:dc83ef991c730ab0f06b51fcefda74f493b990903b882452aff78c123e3040e2"}, + {file = "botocore-1.27.39-py3-none-any.whl", hash = "sha256:b5eb8731542e7e987465be80ce206d72de6774e16d4e808e636d92c467779d7e"}, + {file = "botocore-1.27.39.tar.gz", hash = "sha256:12d9f5866da51738201d00f6df76571e2f46233d8effb5cdcfe871616bff6197"}, ] celery = [ {file = "celery-5.2.2-py3-none-any.whl", hash = "sha256:5a68a351076cfac4f678fa5ffd898105c28825a2224902da006970005196d061"}, {file = "celery-5.2.2.tar.gz", hash = "sha256:2844eb040e915398623a43253a8e1016723442ece6b0751a3c416d8a2b34216f"}, ] certifi = [ - {file = "certifi-2022.5.18.1-py3-none-any.whl", hash = "sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a"}, - {file = "certifi-2022.5.18.1.tar.gz", hash = "sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7"}, + {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, + {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, ] chardet = [ {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, - {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, + {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, + {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, ] click = [ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, @@ -1362,8 +1389,8 @@ click-repl = [ {file = "click_repl-0.2.0-py3-none-any.whl", hash = "sha256:94b3fbbc9406a236f176e0506524b2937e4b23b6f4c0c0b2a0a83f8a64e9194b"}, ] colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, ] colorthief = [ {file = "colorthief-0.2.1-py2.py3-none-any.whl", hash = "sha256:b04fc8ce5cf9c888768745e29cb19b7b688d5711af6fba26e8057debabec56b9"}, @@ -1407,8 +1434,8 @@ deprecated = [ {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, ] django = [ - {file = "Django-3.2.13-py3-none-any.whl", hash = "sha256:b896ca61edc079eb6bbaa15cf6071eb69d6aac08cce5211583cfb41515644fdf"}, - {file = "Django-3.2.13.tar.gz", hash = "sha256:6d93497a0a9bf6ba0e0b1a29cccdc40efbfc76297255b1309b3a884a688ec4b6"}, + {file = "Django-3.2.14-py3-none-any.whl", hash = "sha256:a8681e098fa60f7c33a4b628d6fcd3fe983a0939ff1301ecacac21d0b38bad56"}, + {file = "Django-3.2.14.tar.gz", hash = "sha256:677182ba8b5b285a4e072f3ac17ceee6aff1b5ce77fd173cc5b6a2d3dc022fcf"}, ] django-appconf = [ {file = "django-appconf-1.0.5.tar.gz", hash = "sha256:be3db0be6c81fa84742000b89a81c016d70ae66a7ccb620cdef592b1f1a6aaa4"}, @@ -1516,72 +1543,64 @@ frozenlist = [ {file = "frozenlist-1.3.0.tar.gz", hash = "sha256:ce6f2ba0edb7b0c1d8976565298ad2deba6f8064d2bebb6ffce2ca896eb35b0b"}, ] googleapis-common-protos = [ - {file = "googleapis-common-protos-1.56.2.tar.gz", hash = "sha256:b09b56f5463070c2153753ef123f07d2e49235e89148e9b2459ec8ed2f68d7d3"}, - {file = "googleapis_common_protos-1.56.2-py2.py3-none-any.whl", hash = "sha256:023eaea9d8c1cceccd9587c6af6c20f33eeeb05d4148670f2b0322dc1511700c"}, + {file = "googleapis-common-protos-1.56.4.tar.gz", hash = "sha256:c25873c47279387cfdcbdafa36149887901d36202cb645a0e4f29686bf6e4417"}, + {file = "googleapis_common_protos-1.56.4-py2.py3-none-any.whl", hash = "sha256:8eb2cbc91b69feaf23e32452a7ae60e791e09967d81d4fcc7fc388182d1bd394"}, ] grpcio = [ - {file = "grpcio-1.46.3-cp310-cp310-linux_armv7l.whl", hash = "sha256:4c05dbc164c2d3015109292ffeed68292807a6cb1225f9a36699bf2166634908"}, - {file = "grpcio-1.46.3-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:c6a460b6aaf43428d48fececad864cc562458b944df80568e490d985d8576292"}, - {file = "grpcio-1.46.3-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:707b85fa0cf606a9ab02246bd3142c76e154f1c30f00f7346b2afa3d0b315d5a"}, - {file = "grpcio-1.46.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c63e7c61c0b06f838e8f45ffd3a7c68a520c4c026b2e0e8b1ad29c456d0f859"}, - {file = "grpcio-1.46.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6fe85e5873d9784ab82cf261d9fc07ed67a4459ba69fbe1187ef8b8e3d9e30e"}, - {file = "grpcio-1.46.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df980c4901a92ca649e18036ff67c7c8cad239b2759c2472694f7ab0f0b4ffb9"}, - {file = "grpcio-1.46.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7b59982e405159385d5796aa1e0817ec83affb3eb4c2a5b7ca39413d17d7e332"}, - {file = "grpcio-1.46.3-cp310-cp310-win32.whl", hash = "sha256:6d51fa98bd40d4593f819a3fec8a078a192958d24f84c3daf15b5ad7705d4c48"}, - {file = "grpcio-1.46.3-cp310-cp310-win_amd64.whl", hash = "sha256:e9bba429eb743471715e6dadf006a70a77cb6afb065aa4a6eaa9efd76b09e336"}, - {file = "grpcio-1.46.3-cp36-cp36m-linux_armv7l.whl", hash = "sha256:a898b0f13bda2dfe786952cc1ea705762fa6c3ae799b4bb0525d7821605ae968"}, - {file = "grpcio-1.46.3-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:9014aee70e29911008d2f388011cabf2c7fe4fe29918ce5f71513a660494069a"}, - {file = "grpcio-1.46.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9c97106134de70f8323b12738ac0adf0615688b69253002910d0c5d42d202a77"}, - {file = "grpcio-1.46.3-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d41ea8efb87b1ae4e576b13d94f2b470297a1495ae6b2c9d1047952731bf168f"}, - {file = "grpcio-1.46.3-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:ab18e85082003d7883a4d069065436e61cb27c2c2150e7965ce93658f17bc8da"}, - {file = "grpcio-1.46.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:307ff1d6237d5c383196660a12db021c20280227f9f4423d88d6b2ab20c8b1d0"}, - {file = "grpcio-1.46.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c9106ef35239767b3aa9dc1a79856ad499655f853fca9f92f9dd3182d646627"}, - {file = "grpcio-1.46.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e0ae8e8523308bf7ab0b7d6aa686011de59b19fb06abb253f302d0b5da2a5905"}, - {file = "grpcio-1.46.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:4fd0aa30a938893060defd5f222604461db55f9a81a028b154479b91deac7074"}, - {file = "grpcio-1.46.3-cp36-cp36m-win32.whl", hash = "sha256:f7637b55662e56a64c07846bc0d2da6232a6e893b22c39790f2e41d03ac1a826"}, - {file = "grpcio-1.46.3-cp36-cp36m-win_amd64.whl", hash = "sha256:97801afa96a819f911d030b490dbea95b246de02433bac69c5acf150081686e4"}, - {file = "grpcio-1.46.3-cp37-cp37m-linux_armv7l.whl", hash = "sha256:3585a6fa3d97fc8f030bbf0e88185b5eb345a340f6732e165d5c22df54de5bc6"}, - {file = "grpcio-1.46.3-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:dc6d15cbcceaebaacf2994280ed1c01d42b5772059b30afd8a76152e9d23daa4"}, - {file = "grpcio-1.46.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e0486485d59d5865149010966ef3df99c5df97ab8b01f10e26f8759d6e10fafc"}, - {file = "grpcio-1.46.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5210ec7a1638daa61da16487fbfafb3dbb7b8cd44382d9262316bbb58a5b1cf7"}, - {file = "grpcio-1.46.3-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:e278fa30d2b5652f7e43970c86ad34c639146443553678b746909aae204924dc"}, - {file = "grpcio-1.46.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d4148f1f76516b01cccf2273b45bc706847f1560ccb55aa6e29df851e9ca8cc"}, - {file = "grpcio-1.46.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01f3f7a6cdb111cf276ffff9c892fa32624e03999bac809d3f3d8321d98b6855"}, - {file = "grpcio-1.46.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:91aaccbe1c035ad2bcd1b8a25cebd11839070eb70fb6573e9d0197ddbca5d96b"}, - {file = "grpcio-1.46.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:26136c19d96e2138f04412101f3730d66f5f1515dc912ac0d415587c8208d826"}, - {file = "grpcio-1.46.3-cp37-cp37m-win32.whl", hash = "sha256:a8f40dafcdc3e0e378387953528eaf4e35758161f3b10d96199f12b11afbe2c2"}, - {file = "grpcio-1.46.3-cp37-cp37m-win_amd64.whl", hash = "sha256:a6bb52df85a4bd6d3bad16b4e7cc43efe95469b74a856c87a2c5bef496c9147f"}, - {file = "grpcio-1.46.3-cp38-cp38-linux_armv7l.whl", hash = "sha256:2334ceeab4084e80433693451452cba26afc1607a7974133af3b3635fc8aa935"}, - {file = "grpcio-1.46.3-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:2c96a6103caec84985bb2cffac2b261f8cac2641e7a70d4b43b7d08754a6cfe7"}, - {file = "grpcio-1.46.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7a39d39da8855b03be2d7348387986bab6a322031fcc8b04fa5e72355e7b13a1"}, - {file = "grpcio-1.46.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4caf87a06de88e3611a4610c57ef55b78801843d1f5a9e5fd6b75e887dad3340"}, - {file = "grpcio-1.46.3-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:ffbbb228e6fc6f85b34aac428eb76b4fc6591d771e487ce46eb16b4b7e18b91d"}, - {file = "grpcio-1.46.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c89ae010c57333dd3c692e0892199a59df1ddfd467cdfea31f98331d0e8cf87"}, - {file = "grpcio-1.46.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34b206cdf78dd1c14d93e10e7308750c36b4e6754d579895cba74341875e2fb5"}, - {file = "grpcio-1.46.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a19b3ecdb8ddf60e4b034def27636065e49ac1ee3c85854a16353cf52c2afd83"}, - {file = "grpcio-1.46.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aac6e66acae82be5c99a0a40ab8f5733d7df76a04f242cf42ecc34cfb1e947bd"}, - {file = "grpcio-1.46.3-cp38-cp38-win32.whl", hash = "sha256:aff6d961d6bc5e34e12e148383671f8da5d17e47ed606ec15f483def3053b206"}, - {file = "grpcio-1.46.3-cp38-cp38-win_amd64.whl", hash = "sha256:71d46c2f3c0512bac3d658af3193e3d645c96123af56bd07a8416474c69df2cf"}, - {file = "grpcio-1.46.3-cp39-cp39-linux_armv7l.whl", hash = "sha256:5969f63f3cf92538f83f26949d393d9fc59de670f47cf7c2a0e1e0d30b770294"}, - {file = "grpcio-1.46.3-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:5f8134d4a7e76c8c6644bd3ce728b9894933575155d02c09922986d5d8d6e48c"}, - {file = "grpcio-1.46.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:53fff69fd4d315adddda226e7b71804d1f12adf3a4162126dc520725624a483a"}, - {file = "grpcio-1.46.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3af2cc4e41f87d3b57f624b1b14321c1d0f030b191da60f9eeeda5448d83240c"}, - {file = "grpcio-1.46.3-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:5fb7779ae01c20c4fad5831e98003b3f036acfe6b77697d6a9baa0f9a7f14daf"}, - {file = "grpcio-1.46.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56636ebf8db63ba50d272dfd73c92538950525120311676246f8f6a81b0aa144"}, - {file = "grpcio-1.46.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a5012ba00cf8b7ce9e6ac2312ace0b0e16fe9502c18340c8c3ecb734a759831"}, - {file = "grpcio-1.46.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:be1679d814a292a701f45df324e25b060435dd13159e9b08a16e2a2396c4391c"}, - {file = "grpcio-1.46.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4faaba7db078a0001a8c1a4370d56dc454c03b4613b6acec01f14b90c8dd03cf"}, - {file = "grpcio-1.46.3-cp39-cp39-win32.whl", hash = "sha256:f5c6393fa645183ae858ebfbf72ab94e7ebafb5cd849dcf4ae8c53a83cce4e24"}, - {file = "grpcio-1.46.3-cp39-cp39-win_amd64.whl", hash = "sha256:158b90d4f1354f40e435f4c866057acc29a4364b214c31049c8b8c903646fbab"}, - {file = "grpcio-1.46.3.tar.gz", hash = "sha256:4b8fd8b1cd553635274b83cd984f0755e6779886eca53c1c71d48215962eb689"}, + {file = "grpcio-1.47.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:544da3458d1d249bb8aed5504adf3e194a931e212017934bf7bfa774dad37fb3"}, + {file = "grpcio-1.47.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:b88bec3f94a16411a1e0336eb69f335f58229e45d4082b12d8e554cedea97586"}, + {file = "grpcio-1.47.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:06c0739dff9e723bca28ec22301f3711d85c2e652d1c8ae938aa0f7ad632ef9a"}, + {file = "grpcio-1.47.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4508e8abd67ebcccd0fbde6e2b1917ba5d153f3f20c1de385abd8722545e05f"}, + {file = "grpcio-1.47.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9723784cf264697024778dcf4b7542c851fe14b14681d6268fb984a53f76df1"}, + {file = "grpcio-1.47.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1bb9afa85e797a646bfcd785309e869e80a375c959b11a17c9680abebacc0cb0"}, + {file = "grpcio-1.47.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d9ad7122f60157454f74a850d1337ba135146cef6fb7956d78c7194d52db0fe"}, + {file = "grpcio-1.47.0-cp310-cp310-win32.whl", hash = "sha256:0425b5577be202d0a4024536bbccb1b052c47e0766096e6c3a5789ddfd5f400d"}, + {file = "grpcio-1.47.0-cp310-cp310-win_amd64.whl", hash = "sha256:d0d481ff55ea6cc49dab2c8276597bd4f1a84a8745fedb4bc23e12e9fb9d0e45"}, + {file = "grpcio-1.47.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:5f57b9b61c22537623a5577bf5f2f970dc4e50fac5391090114c6eb3ab5a129f"}, + {file = "grpcio-1.47.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:14d2bc74218986e5edf5527e870b0969d63601911994ebf0dce96288548cf0ef"}, + {file = "grpcio-1.47.0-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:c79996ae64dc4d8730782dff0d1daacc8ce7d4c2ba9cef83b6f469f73c0655ce"}, + {file = "grpcio-1.47.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a24b50810aae90c74bbd901c3f175b9645802d2fbf03eadaf418ddee4c26668"}, + {file = "grpcio-1.47.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55782a31ec539f15b34ee56f19131fe1430f38a4be022eb30c85e0b0dcf57f11"}, + {file = "grpcio-1.47.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:35dfd981b03a3ec842671d1694fe437ee9f7b9e6a02792157a2793b0eba4f478"}, + {file = "grpcio-1.47.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:664a270d3eac68183ad049665b0f4d0262ec387d5c08c0108dbcfe5b351a8b4d"}, + {file = "grpcio-1.47.0-cp36-cp36m-win32.whl", hash = "sha256:9298d6f2a81f132f72a7e79cbc90a511fffacc75045c2b10050bb87b86c8353d"}, + {file = "grpcio-1.47.0-cp36-cp36m-win_amd64.whl", hash = "sha256:815089435d0f113719eabf105832e4c4fa1726b39ae3fb2ca7861752b0f70570"}, + {file = "grpcio-1.47.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:7191ffc8bcf8a630c547287ab103e1fdf72b2e0c119e634d8a36055c1d988ad0"}, + {file = "grpcio-1.47.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:1ec63bbd09586e5cda1bdc832ae6975d2526d04433a764a1cc866caa399e50d4"}, + {file = "grpcio-1.47.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:08307dc5a6ac4da03146d6c00f62319e0665b01c6ffe805cfcaa955c17253f9c"}, + {file = "grpcio-1.47.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:668350ea02af018ca945bd629754d47126b366d981ab88e0369b53bc781ffb14"}, + {file = "grpcio-1.47.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64e097dd08bb408afeeaee9a56f75311c9ca5b27b8b0278279dc8eef85fa1051"}, + {file = "grpcio-1.47.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0d8a7f3eb6f290189f48223a5f4464c99619a9de34200ce80d5092fb268323d2"}, + {file = "grpcio-1.47.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f89de64d9eb3478b188859214752db50c91a749479011abd99e248550371375f"}, + {file = "grpcio-1.47.0-cp37-cp37m-win32.whl", hash = "sha256:67cd275a651532d28620eef677b97164a5438c5afcfd44b15e8992afa9eb598c"}, + {file = "grpcio-1.47.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f515782b168a4ec6ea241add845ccfebe187fc7b09adf892b3ad9e2592c60af1"}, + {file = "grpcio-1.47.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:91cd292373e85a52c897fa5b4768c895e20a7dc3423449c64f0f96388dd1812e"}, + {file = "grpcio-1.47.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a278d02272214ec33f046864a24b5f5aab7f60f855de38c525e5b4ef61ec5b48"}, + {file = "grpcio-1.47.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:bfdb8af4801d1c31a18d54b37f4e49bb268d1f485ecf47f70e78d56e04ff37a7"}, + {file = "grpcio-1.47.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e63e0619a5627edb7a5eb3e9568b9f97e604856ba228cc1d8a9f83ce3d0466e"}, + {file = "grpcio-1.47.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc34d182c4fd64b6ff8304a606b95e814e4f8ed4b245b6d6cc9607690e3ef201"}, + {file = "grpcio-1.47.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a6b2432ac2353c80a56d9015dfc5c4af60245c719628d4193ecd75ddf9cd248c"}, + {file = "grpcio-1.47.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcd5d932842df503eb0bf60f9cc35e6fe732b51f499e78b45234e0be41b0018d"}, + {file = "grpcio-1.47.0-cp38-cp38-win32.whl", hash = "sha256:43857d06b2473b640467467f8f553319b5e819e54be14c86324dad83a0547818"}, + {file = "grpcio-1.47.0-cp38-cp38-win_amd64.whl", hash = "sha256:96cff5a2081db82fb710db6a19dd8f904bdebb927727aaf4d9c427984b79a4c1"}, + {file = "grpcio-1.47.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:68b5e47fcca8481f36ef444842801928e60e30a5b3852c9f4a95f2582d10dcb2"}, + {file = "grpcio-1.47.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0cd44d78f302ff67f11a8c49b786c7ccbed2cfef6f4fd7bb0c3dc9255415f8f7"}, + {file = "grpcio-1.47.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:4706c78b0c183dca815bbb4ef3e8dd2136ccc8d1699f62c585e75e211ad388f6"}, + {file = "grpcio-1.47.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:324e363bad4d89a8ec7124013371f268d43afd0ac0fdeec1b21c1a101eb7dafb"}, + {file = "grpcio-1.47.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b821403907e865e8377af3eee62f0cb233ea2369ba0fcdce9505ca5bfaf4eeb3"}, + {file = "grpcio-1.47.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2061dbe41e43b0a5e1fd423e8a7fb3a0cf11d69ce22d0fac21f1a8c704640b12"}, + {file = "grpcio-1.47.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8dbef03853a0dbe457417c5469cb0f9d5bf47401b49d50c7dad3c495663b699b"}, + {file = "grpcio-1.47.0-cp39-cp39-win32.whl", hash = "sha256:090dfa19f41efcbe760ae59b34da4304d4be9a59960c9682b7eab7e0b6748a79"}, + {file = "grpcio-1.47.0-cp39-cp39-win_amd64.whl", hash = "sha256:55cd8b13c5ef22003889f599b8f2930836c6f71cd7cf3fc0196633813dc4f928"}, + {file = "grpcio-1.47.0.tar.gz", hash = "sha256:5dbba95fab9b35957b4977b8904fc1fa56b302f9051eff4d7716ebb0c087f801"}, ] gunicorn = [ {file = "gunicorn-20.0.4-py2.py3-none-any.whl", hash = "sha256:cd4a810dd51bf497552cf3f863b575dabd73d6ad6a91075b65936b151cbf4f9c"}, {file = "gunicorn-20.0.4.tar.gz", hash = "sha256:1904bb2b8a43658807108d59c3f3d56c2b6121a701161de0ddf9ad140073c626"}, ] humanize = [ - {file = "humanize-4.1.0-py3-none-any.whl", hash = "sha256:953b393f5bd67e19d47a4c0fd20c3a3537853967b307e49729c4755d3551753c"}, - {file = "humanize-4.1.0.tar.gz", hash = "sha256:3a119b242ec872c029d8b7bf8435a61a5798f124b244a08013aec5617302f80e"}, + {file = "humanize-4.2.3-py3-none-any.whl", hash = "sha256:bed628920d45cd5018abb095710f0c03a8336d6ac0790e7647c6a328f3880b81"}, + {file = "humanize-4.2.3.tar.gz", hash = "sha256:2bc1fdd831cd00557d3010abdd84d3e41b4a96703a3eaf6c24ee290b26b75a44"}, ] idna = [ {file = "idna-2.8-py2.py3-none-any.whl", hash = "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"}, @@ -1592,8 +1611,8 @@ iniconfig = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] jmespath = [ - {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"}, - {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"}, + {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, + {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] kombu = [ {file = "kombu-5.2.4-py3-none-any.whl", hash = "sha256:8b213b24293d3417bcf0d2f5537b7f756079e3ea232a8386dcc89a59fd2361a4"}, @@ -1616,8 +1635,8 @@ markdown = [ {file = "Markdown-3.3.3.tar.gz", hash = "sha256:5d9f2b5ca24bc4c7a390d22323ca4bad200368612b5aaa7796babf971d2b2f18"}, ] marshmallow = [ - {file = "marshmallow-3.16.0-py3-none-any.whl", hash = "sha256:53a1e0ee69f79e1f3e80d17393b25cfc917eda52f859e8183b4af72c3390c1f1"}, - {file = "marshmallow-3.16.0.tar.gz", hash = "sha256:a762c1d8b2bcb0e5c8e964850d03f9f3bffd6a12b626f3c14b9d6b1841999af5"}, + {file = "marshmallow-3.17.0-py3-none-any.whl", hash = "sha256:00040ab5ea0c608e8787137627a8efae97fabd60552a05dc889c888f814e75eb"}, + {file = "marshmallow-3.17.0.tar.gz", hash = "sha256:635fb65a3285a31a30f276f30e958070f5214c7196202caa5c7ecf28f5274bc7"}, ] multidict = [ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"}, @@ -1736,44 +1755,64 @@ pilkit = [ {file = "pilkit-2.0.tar.gz", hash = "sha256:ddb30c2f0198a147e56b151476c3bb9fe045fbfd5b0a0fa2a3148dba62d1559f"}, ] pillow = [ - {file = "Pillow-9.1.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:42dfefbef90eb67c10c45a73a9bc1599d4dac920f7dfcbf4ec6b80cb620757fe"}, - {file = "Pillow-9.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e"}, - {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c857532c719fb30fafabd2371ce9b7031812ff3889d75273827633bca0c4602"}, - {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59789a7d06c742e9d13b883d5e3569188c16acb02eeed2510fd3bfdbc1bd1530"}, - {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d45dbe4b21a9679c3e8b3f7f4f42a45a7d3ddff8a4a16109dff0e1da30a35b2"}, - {file = "Pillow-9.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e9ed59d1b6ee837f4515b9584f3d26cf0388b742a11ecdae0d9237a94505d03a"}, - {file = "Pillow-9.1.1-cp310-cp310-win32.whl", hash = "sha256:b3fe2ff1e1715d4475d7e2c3e8dabd7c025f4410f79513b4ff2de3d51ce0fa9c"}, - {file = "Pillow-9.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5b650dbbc0969a4e226d98a0b440c2f07a850896aed9266b6fedc0f7e7834108"}, - {file = "Pillow-9.1.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:0b4d5ad2cd3a1f0d1df882d926b37dbb2ab6c823ae21d041b46910c8f8cd844b"}, - {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9370d6744d379f2de5d7fa95cdbd3a4d92f0b0ef29609b4b1687f16bc197063d"}, - {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b761727ed7d593e49671d1827044b942dd2f4caae6e51bab144d4accf8244a84"}, - {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a66fe50386162df2da701b3722781cbe90ce043e7d53c1fd6bd801bca6b48d4"}, - {file = "Pillow-9.1.1-cp37-cp37m-win32.whl", hash = "sha256:2b291cab8a888658d72b575a03e340509b6b050b62db1f5539dd5cd18fd50578"}, - {file = "Pillow-9.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:1d4331aeb12f6b3791911a6da82de72257a99ad99726ed6b63f481c0184b6fb9"}, - {file = "Pillow-9.1.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8844217cdf66eabe39567118f229e275f0727e9195635a15e0e4b9227458daaf"}, - {file = "Pillow-9.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b6617221ff08fbd3b7a811950b5c3f9367f6e941b86259843eab77c8e3d2b56b"}, - {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20d514c989fa28e73a5adbddd7a171afa5824710d0ab06d4e1234195d2a2e546"}, - {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:088df396b047477dd1bbc7de6e22f58400dae2f21310d9e2ec2933b2ef7dfa4f"}, - {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53c27bd452e0f1bc4bfed07ceb235663a1df7c74df08e37fd6b03eb89454946a"}, - {file = "Pillow-9.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3f6c1716c473ebd1649663bf3b42702d0d53e27af8b64642be0dd3598c761fb1"}, - {file = "Pillow-9.1.1-cp38-cp38-win32.whl", hash = "sha256:c67db410508b9de9c4694c57ed754b65a460e4812126e87f5052ecf23a011a54"}, - {file = "Pillow-9.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:f054b020c4d7e9786ae0404278ea318768eb123403b18453e28e47cdb7a0a4bf"}, - {file = "Pillow-9.1.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c17770a62a71718a74b7548098a74cd6880be16bcfff5f937f900ead90ca8e92"}, - {file = "Pillow-9.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a"}, - {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f372d0f08eff1475ef426344efe42493f71f377ec52237bf153c5713de987251"}, - {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09e67ef6e430f90caa093528bd758b0616f8165e57ed8d8ce014ae32df6a831d"}, - {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66daa16952d5bf0c9d5389c5e9df562922a59bd16d77e2a276e575d32e38afd1"}, - {file = "Pillow-9.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d78ca526a559fb84faaaf84da2dd4addef5edb109db8b81677c0bb1aad342601"}, - {file = "Pillow-9.1.1-cp39-cp39-win32.whl", hash = "sha256:55e74faf8359ddda43fee01bffbc5bd99d96ea508d8a08c527099e84eb708f45"}, - {file = "Pillow-9.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c150dbbb4a94ea4825d1e5f2c5501af7141ea95825fadd7829f9b11c97aaf6c"}, - {file = "Pillow-9.1.1-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:769a7f131a2f43752455cc72f9f7a093c3ff3856bf976c5fb53a59d0ccc704f6"}, - {file = "Pillow-9.1.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:488f3383cf5159907d48d32957ac6f9ea85ccdcc296c14eca1a4e396ecc32098"}, - {file = "Pillow-9.1.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b525a356680022b0af53385944026d3486fc8c013638cf9900eb87c866afb4c"}, - {file = "Pillow-9.1.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6e760cf01259a1c0a50f3c845f9cad1af30577fd8b670339b1659c6d0e7a41dd"}, - {file = "Pillow-9.1.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4165205a13b16a29e1ac57efeee6be2dfd5b5408122d59ef2145bc3239fa340"}, - {file = "Pillow-9.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937a54e5694684f74dcbf6e24cc453bfc5b33940216ddd8f4cd8f0f79167f765"}, - {file = "Pillow-9.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:baf3be0b9446a4083cc0c5bb9f9c964034be5374b5bc09757be89f5d2fa247b8"}, - {file = "Pillow-9.1.1.tar.gz", hash = "sha256:7502539939b53d7565f3d11d87c78e7ec900d3c72945d4ee0e2f250d598309a0"}, + {file = "Pillow-9.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a9c9bc489f8ab30906d7a85afac4b4944a572a7432e00698a7239f44a44e6efb"}, + {file = "Pillow-9.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:510cef4a3f401c246cfd8227b300828715dd055463cdca6176c2e4036df8bd4f"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7888310f6214f19ab2b6df90f3f06afa3df7ef7355fc025e78a3044737fab1f5"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831e648102c82f152e14c1a0938689dbb22480c548c8d4b8b248b3e50967b88c"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cc1d2451e8a3b4bfdb9caf745b58e6c7a77d2e469159b0d527a4554d73694d1"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:136659638f61a251e8ed3b331fc6ccd124590eeff539de57c5f80ef3a9594e58"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6e8c66f70fb539301e064f6478d7453e820d8a2c631da948a23384865cd95544"}, + {file = "Pillow-9.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37ff6b522a26d0538b753f0b4e8e164fdada12db6c6f00f62145d732d8a3152e"}, + {file = "Pillow-9.2.0-cp310-cp310-win32.whl", hash = "sha256:c79698d4cd9318d9481d89a77e2d3fcaeff5486be641e60a4b49f3d2ecca4e28"}, + {file = "Pillow-9.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:254164c57bab4b459f14c64e93df11eff5ded575192c294a0c49270f22c5d93d"}, + {file = "Pillow-9.2.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:408673ed75594933714482501fe97e055a42996087eeca7e5d06e33218d05aa8"}, + {file = "Pillow-9.2.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:727dd1389bc5cb9827cbd1f9d40d2c2a1a0c9b32dd2261db522d22a604a6eec9"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50dff9cc21826d2977ef2d2a205504034e3a4563ca6f5db739b0d1026658e004"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb6259196a589123d755380b65127ddc60f4c64b21fc3bb46ce3a6ea663659b0"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0554af24df2bf96618dac71ddada02420f946be943b181108cac55a7a2dcd4"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:15928f824870535c85dbf949c09d6ae7d3d6ac2d6efec80f3227f73eefba741c"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:bdd0de2d64688ecae88dd8935012c4a72681e5df632af903a1dca8c5e7aa871a"}, + {file = "Pillow-9.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5b87da55a08acb586bad5c3aa3b86505f559b84f39035b233d5bf844b0834b1"}, + {file = "Pillow-9.2.0-cp311-cp311-win32.whl", hash = "sha256:b6d5e92df2b77665e07ddb2e4dbd6d644b78e4c0d2e9272a852627cdba0d75cf"}, + {file = "Pillow-9.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6bf088c1ce160f50ea40764f825ec9b72ed9da25346216b91361eef8ad1b8f8c"}, + {file = "Pillow-9.2.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:2c58b24e3a63efd22554c676d81b0e57f80e0a7d3a5874a7e14ce90ec40d3069"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef7592281f7c174d3d6cbfbb7ee5984a671fcd77e3fc78e973d492e9bf0eb3f"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dcd7b9c7139dc8258d164b55696ecd16c04607f1cc33ba7af86613881ffe4ac8"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a138441e95562b3c078746a22f8fca8ff1c22c014f856278bdbdd89ca36cff1b"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:93689632949aff41199090eff5474f3990b6823404e45d66a5d44304e9cdc467"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:f3fac744f9b540148fa7715a435d2283b71f68bfb6d4aae24482a890aed18b59"}, + {file = "Pillow-9.2.0-cp37-cp37m-win32.whl", hash = "sha256:fa768eff5f9f958270b081bb33581b4b569faabf8774726b283edb06617101dc"}, + {file = "Pillow-9.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:69bd1a15d7ba3694631e00df8de65a8cb031911ca11f44929c97fe05eb9b6c1d"}, + {file = "Pillow-9.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:030e3460861488e249731c3e7ab59b07c7853838ff3b8e16aac9561bb345da14"}, + {file = "Pillow-9.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:74a04183e6e64930b667d321524e3c5361094bb4af9083db5c301db64cd341f3"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d33a11f601213dcd5718109c09a52c2a1c893e7461f0be2d6febc2879ec2402"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fd6f5e3c0e4697fa7eb45b6e93996299f3feee73a3175fa451f49a74d092b9f"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a647c0d4478b995c5e54615a2e5360ccedd2f85e70ab57fbe817ca613d5e63b8"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:4134d3f1ba5f15027ff5c04296f13328fecd46921424084516bdb1b2548e66ff"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:bc431b065722a5ad1dfb4df354fb9333b7a582a5ee39a90e6ffff688d72f27a1"}, + {file = "Pillow-9.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1536ad017a9f789430fb6b8be8bf99d2f214c76502becc196c6f2d9a75b01b76"}, + {file = "Pillow-9.2.0-cp38-cp38-win32.whl", hash = "sha256:2ad0d4df0f5ef2247e27fc790d5c9b5a0af8ade9ba340db4a73bb1a4a3e5fb4f"}, + {file = "Pillow-9.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:ec52c351b35ca269cb1f8069d610fc45c5bd38c3e91f9ab4cbbf0aebc136d9c8"}, + {file = "Pillow-9.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ed2c4ef2451de908c90436d6e8092e13a43992f1860275b4d8082667fbb2ffc"}, + {file = "Pillow-9.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ad2f835e0ad81d1689f1b7e3fbac7b01bb8777d5a985c8962bedee0cc6d43da"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea98f633d45f7e815db648fd7ff0f19e328302ac36427343e4432c84432e7ff4"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7761afe0126d046974a01e030ae7529ed0ca6a196de3ec6937c11df0df1bc91c"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a54614049a18a2d6fe156e68e188da02a046a4a93cf24f373bffd977e943421"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:5aed7dde98403cd91d86a1115c78d8145c83078e864c1de1064f52e6feb61b20"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:13b725463f32df1bfeacbf3dd197fb358ae8ebcd8c5548faa75126ea425ccb60"}, + {file = "Pillow-9.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:808add66ea764ed97d44dda1ac4f2cfec4c1867d9efb16a33d158be79f32b8a4"}, + {file = "Pillow-9.2.0-cp39-cp39-win32.whl", hash = "sha256:337a74fd2f291c607d220c793a8135273c4c2ab001b03e601c36766005f36885"}, + {file = "Pillow-9.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:fac2d65901fb0fdf20363fbd345c01958a742f2dc62a8dd4495af66e3ff502a4"}, + {file = "Pillow-9.2.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ad2277b185ebce47a63f4dc6302e30f05762b688f8dc3de55dbae4651872cdf3"}, + {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c7b502bc34f6e32ba022b4a209638f9e097d7a9098104ae420eb8186217ebbb"}, + {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1f14f5f691f55e1b47f824ca4fdcb4b19b4323fe43cc7bb105988cad7496be"}, + {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:dfe4c1fedfde4e2fbc009d5ad420647f7730d719786388b7de0999bf32c0d9fd"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:f07f1f00e22b231dd3d9b9208692042e29792d6bd4f6639415d2f23158a80013"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1802f34298f5ba11d55e5bb09c31997dc0c6aed919658dfdf0198a2fe75d5490"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17d4cafe22f050b46d983b71c707162d63d796a1235cdf8b9d7a112e97b15bac"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96b5e6874431df16aee0c1ba237574cb6dff1dcb173798faa6a9d8b399a05d0e"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0030fdbd926fb85844b8b92e2f9449ba89607231d3dd597a21ae72dc7fe26927"}, + {file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"}, ] pluggy = [ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, @@ -1784,34 +1823,24 @@ prometheus-client = [ {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.29-py3-none-any.whl", hash = "sha256:62291dad495e665fca0bda814e342c69952086afb0f4094d0893d357e5c78752"}, - {file = "prompt_toolkit-3.0.29.tar.gz", hash = "sha256:bd640f60e8cecd74f0dc249713d433ace2ddc62b65ee07f96d358e0b152b6ea7"}, + {file = "prompt_toolkit-3.0.30-py3-none-any.whl", hash = "sha256:d8916d3f62a7b67ab353a952ce4ced6a1d2587dfe9ef8ebc30dd7c386751f289"}, + {file = "prompt_toolkit-3.0.30.tar.gz", hash = "sha256:859b283c50bde45f5f97829f77a4674d1c1fcd88539364f1b28a37805cfd89c0"}, ] protobuf = [ - {file = "protobuf-3.20.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996"}, - {file = "protobuf-3.20.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3"}, - {file = "protobuf-3.20.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cd68be2559e2a3b84f517fb029ee611546f7812b1fdd0aa2ecc9bc6ec0e4fdde"}, - {file = "protobuf-3.20.1-cp310-cp310-win32.whl", hash = "sha256:9016d01c91e8e625141d24ec1b20fed584703e527d28512aa8c8707f105a683c"}, - {file = "protobuf-3.20.1-cp310-cp310-win_amd64.whl", hash = "sha256:32ca378605b41fd180dfe4e14d3226386d8d1b002ab31c969c366549e66a2bb7"}, - {file = "protobuf-3.20.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9be73ad47579abc26c12024239d3540e6b765182a91dbc88e23658ab71767153"}, - {file = "protobuf-3.20.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:097c5d8a9808302fb0da7e20edf0b8d4703274d140fd25c5edabddcde43e081f"}, - {file = "protobuf-3.20.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20"}, - {file = "protobuf-3.20.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cdee09140e1cd184ba9324ec1df410e7147242b94b5f8b0c64fc89e38a8ba531"}, - {file = "protobuf-3.20.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:af0ebadc74e281a517141daad9d0f2c5d93ab78e9d455113719a45a49da9db4e"}, - {file = "protobuf-3.20.1-cp37-cp37m-win32.whl", hash = "sha256:755f3aee41354ae395e104d62119cb223339a8f3276a0cd009ffabfcdd46bb0c"}, - {file = "protobuf-3.20.1-cp37-cp37m-win_amd64.whl", hash = "sha256:62f1b5c4cd6c5402b4e2d63804ba49a327e0c386c99b1675c8a0fefda23b2067"}, - {file = "protobuf-3.20.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:06059eb6953ff01e56a25cd02cca1a9649a75a7e65397b5b9b4e929ed71d10cf"}, - {file = "protobuf-3.20.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:cb29edb9eab15742d791e1025dd7b6a8f6fcb53802ad2f6e3adcb102051063ab"}, - {file = "protobuf-3.20.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:69ccfdf3657ba59569c64295b7d51325f91af586f8d5793b734260dfe2e94e2c"}, - {file = "protobuf-3.20.1-cp38-cp38-win32.whl", hash = "sha256:dd5789b2948ca702c17027c84c2accb552fc30f4622a98ab5c51fcfe8c50d3e7"}, - {file = "protobuf-3.20.1-cp38-cp38-win_amd64.whl", hash = "sha256:77053d28427a29987ca9caf7b72ccafee011257561259faba8dd308fda9a8739"}, - {file = "protobuf-3.20.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f50601512a3d23625d8a85b1638d914a0970f17920ff39cec63aaef80a93fb7"}, - {file = "protobuf-3.20.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:284f86a6207c897542d7e956eb243a36bb8f9564c1742b253462386e96c6b78f"}, - {file = "protobuf-3.20.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7403941f6d0992d40161aa8bb23e12575637008a5a02283a930addc0508982f9"}, - {file = "protobuf-3.20.1-cp39-cp39-win32.whl", hash = "sha256:db977c4ca738dd9ce508557d4fce0f5aebd105e158c725beec86feb1f6bc20d8"}, - {file = "protobuf-3.20.1-cp39-cp39-win_amd64.whl", hash = "sha256:7e371f10abe57cee5021797126c93479f59fccc9693dafd6bd5633ab67808a91"}, - {file = "protobuf-3.20.1-py2.py3-none-any.whl", hash = "sha256:adfc6cf69c7f8c50fd24c793964eef18f0ac321315439d94945820612849c388"}, - {file = "protobuf-3.20.1.tar.gz", hash = "sha256:adc31566d027f45efe3f44eeb5b1f329da43891634d61c75a5944e9be6dd42c9"}, + {file = "protobuf-4.21.4-cp310-abi3-win32.whl", hash = "sha256:e113f3d1629cebc911b107ce704f1a17d7e1589efef5c498e202bd47df223955"}, + {file = "protobuf-4.21.4-cp310-abi3-win_amd64.whl", hash = "sha256:cb50d93ef748671b7e2537658869e00aaa8175d717d8e73a23fcd58842883229"}, + {file = "protobuf-4.21.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:142ef5d73d6cd1bd8ab539d7d73c3722f31d33e64914e01bb91439cfcef11a9f"}, + {file = "protobuf-4.21.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:47b7cf3e542fd50a3a7c24d0da13451bc362a32c0a9b905714942ea8cf35fa11"}, + {file = "protobuf-4.21.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:adeccfbffbf4c9d1e77da86dc995d76c837d01387e412066cc803ad037000892"}, + {file = "protobuf-4.21.4-cp37-cp37m-win32.whl", hash = "sha256:5e47947fbfefd5a1bdc7c28eea1d197ea6dba5812789c2429667831a55ef71b7"}, + {file = "protobuf-4.21.4-cp37-cp37m-win_amd64.whl", hash = "sha256:d9b0398ff68017015ec2a37fb0ab390363a654362b15ca2e4543d3c82587768f"}, + {file = "protobuf-4.21.4-cp38-cp38-win32.whl", hash = "sha256:2ea8c841cc6422aea07d0f4f71f0e5e6e130de9a4b6c31a53b9d2a41a75f2d54"}, + {file = "protobuf-4.21.4-cp38-cp38-win_amd64.whl", hash = "sha256:a8119c029c60cf29b7eea5a9f56648482388e874611243f41cd10aff0a0e5461"}, + {file = "protobuf-4.21.4-cp39-cp39-win32.whl", hash = "sha256:0275902f8292039d4a022319d3f86e8b231ac4c51d7be4cb797890fb78c16b85"}, + {file = "protobuf-4.21.4-cp39-cp39-win_amd64.whl", hash = "sha256:5b95c5f515334dd3a811762e3c588b469bf39d4ee7b7f47ac1e0c41dc73809f7"}, + {file = "protobuf-4.21.4-py2.py3-none-any.whl", hash = "sha256:fd62b6eda64e199b5da651d6be42af2aa8e30805961af1fc5f70292affca78e3"}, + {file = "protobuf-4.21.4-py3-none-any.whl", hash = "sha256:7e51f6244e53e936abadf624ab3a0f06dc106b27473997374fbb34e6b2eb1e60"}, + {file = "protobuf-4.21.4.tar.gz", hash = "sha256:5783dc0d6edae631145337fabb18503b4f77274f94cdd22a4b26b9fe5029e718"}, ] psycopg2 = [ {file = "psycopg2-2.8.4-cp27-cp27m-win32.whl", hash = "sha256:72772181d9bad1fa349792a1e7384dde56742c14af2b9986013eb94a240f005b"}, @@ -1905,80 +1934,80 @@ redis = [ {file = "redis-3.4.1.tar.gz", hash = "sha256:0dcfb335921b88a850d461dc255ff4708294943322bd55de6cfd68972490ca1f"}, ] regex = [ - {file = "regex-2022.6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:042d122f9fee3ceb6d7e3067d56557df697d1aad4ff5f64ecce4dc13a90a7c01"}, - {file = "regex-2022.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffef4b30785dc2d1604dfb7cf9fca5dc27cd86d65f7c2a9ec34d6d3ae4565ec2"}, - {file = "regex-2022.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0afa6a601acf3c0dc6de4e8d7d8bbce4e82f8542df746226cd35d4a6c15e9456"}, - {file = "regex-2022.6.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a11cbe8eb5fb332ae474895b5ead99392a4ea568bd2a258ab8df883e9c2bf92"}, - {file = "regex-2022.6.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c1f62ee2ba880e221bc950651a1a4b0176083d70a066c83a50ef0cb9b178e12"}, - {file = "regex-2022.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aba3d13c77173e9bfed2c2cea7fc319f11c89a36fcec08755e8fb169cf3b0df"}, - {file = "regex-2022.6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:249437f7f5b233792234aeeecb14b0aab1566280de42dfc97c26e6f718297d68"}, - {file = "regex-2022.6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:179410c79fa86ef318d58ace233f95b87b05a1db6dc493fa29404a43f4b215e2"}, - {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5e201b1232d81ca1a7a22ab2f08e1eccad4e111579fd7f3bbf60b21ef4a16cea"}, - {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fdecb225d0f1d50d4b26ac423e0032e76d46a788b83b4e299a520717a47d968c"}, - {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:be57f9c7b0b423c66c266a26ad143b2c5514997c05dd32ce7ca95c8b209c2288"}, - {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ed657a07d8a47ef447224ea00478f1c7095065dfe70a89e7280e5f50a5725131"}, - {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:24908aefed23dd065b4a668c0b4ca04d56b7f09d8c8e89636cf6c24e64e67a1e"}, - {file = "regex-2022.6.2-cp310-cp310-win32.whl", hash = "sha256:775694cd0bb2c4accf2f1cdd007381b33ec8b59842736fe61bdbad45f2ac7427"}, - {file = "regex-2022.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:809bbbbbcf8258049b031d80932ba71627d2274029386f0452e9950bcfa2c6e8"}, - {file = "regex-2022.6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ecd2b5d983eb0adf2049d41f95205bdc3de4e6cc2350e9c80d4409d3a75229de"}, - {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4c101746a8dac0401abefa716b357c546e61ea2e3d4a564a9db9eac57ccbce"}, - {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:166ae7674d0a0e0f8044e7335ba86d0716c9d49465cff1b153f908e0470b8300"}, - {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5eac5d8a8ac9ccf00805d02a968a36f5c967db6c7d2b747ab9ed782b3b3a28b"}, - {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f57823f35b18d82b201c1b27ce4e55f88e79e81d9ca07b50ce625d33823e1439"}, - {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4d42e3b7b23473729adbf76103e7df75f9167a5a80b1257ca30688352b4bb2dc"}, - {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2932e728bee0a634fe55ee54d598054a5a9ffe4cd2be21ba2b4b8e5f8064c2c"}, - {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:17764683ea01c2b8f103d99ae9de2473a74340df13ce306c49a721f0b1f0eb9e"}, - {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:2ac29b834100d2c171085ceba0d4a1e7046c434ddffc1434dbc7f9d59af1e945"}, - {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:f43522fb5d676c99282ca4e2d41e8e2388427c0cf703db6b4a66e49b10b699a8"}, - {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:9faa01818dad9111dbf2af26c6e3c45140ccbd1192c3a0981f196255bf7ec5e6"}, - {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:17443f99b8f255273731f915fdbfea4d78d809bb9c3aaf67b889039825d06515"}, - {file = "regex-2022.6.2-cp36-cp36m-win32.whl", hash = "sha256:4a5449adef907919d4ce7a1eab2e27d0211d1b255bf0b8f5dd330ad8707e0fc3"}, - {file = "regex-2022.6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:4d206703a96a39763b5b45cf42645776f5553768ea7f3c2c1a39a4f59cafd4ba"}, - {file = "regex-2022.6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fcd7c432202bcb8b642c3f43d5bcafc5930d82fe5b2bf2c008162df258445c1d"}, - {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:186c5a4a4c40621f64d771038ede20fca6c61a9faa8178f9e305aaa0c2442a97"}, - {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:047b2d1323a51190c01b6604f49fe09682a5c85d3c1b2c8b67c1cd68419ce3c4"}, - {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30637e7fa4acfed444525b1ab9683f714be617862820578c9fd4e944d4d9ad1f"}, - {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3adafe6f2c6d86dbf3313866b61180530ca4dcd0c264932dc8fa1ffb10871d58"}, - {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67ae3601edf86e15ebe40885e5bfdd6002d34879070be15cf18fc0d80ea24fed"}, - {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:48dddddce0ea7e7c3e92c1e0c5a28c13ca4dc9cf7e996c706d00479652bff76c"}, - {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:68e5c641645351eb9eb12c465876e76b53717f99e9b92aea7a2dd645a87aa7aa"}, - {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8fd5f8ae42f789538bb634bdfd69b9aa357e76fdfd7ad720f32f8994c0d84f1e"}, - {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:71988a76fcb68cc091e901fddbcac0f9ad9a475da222c47d3cf8db0876cb5344"}, - {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:4b8838f70be3ce9e706df9d72f88a0aa7d4c1fea61488e06fdf292ccb70ad2be"}, - {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:663dca677bd3d2e2b5b7d0329e9f24247e6f38f3b740dd9a778a8ef41a76af41"}, - {file = "regex-2022.6.2-cp37-cp37m-win32.whl", hash = "sha256:24963f0b13cc63db336d8da2a533986419890d128c551baacd934c249d51a779"}, - {file = "regex-2022.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ceff75127f828dfe7ceb17b94113ec2df4df274c4cd5533bb299cb099a18a8ca"}, - {file = "regex-2022.6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a6f2698cfa8340dfe4c0597782776b393ba2274fe4c079900c7c74f68752705"}, - {file = "regex-2022.6.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8a08ace913c4101f0dc0be605c108a3761842efd5f41a3005565ee5d169fb2b"}, - {file = "regex-2022.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26dbe90b724efef7820c3cf4a0e5be7f130149f3d2762782e4e8ac2aea284a0b"}, - {file = "regex-2022.6.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5f759a1726b995dc896e86f17f9c0582b54eb4ead00ed5ef0b5b22260eaf2d0"}, - {file = "regex-2022.6.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1fc26bb3415e7aa7495c000a2c13bf08ce037775db98c1a3fac9ff04478b6930"}, - {file = "regex-2022.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52684da32d9003367dc1a1c07e059b9bbaf135ad0764cd47d8ac3dba2df109bc"}, - {file = "regex-2022.6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c1264eb40a71cf2bff43d6694ab7254438ca19ef330175060262b3c8dd3931a"}, - {file = "regex-2022.6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bc635ab319c9b515236bdf327530acda99be995f9d3b9f148ab1f60b2431e970"}, - {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:27624b490b5d8880f25dac67e1e2ea93dfef5300b98c6755f585799230d6c746"}, - {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:555f7596fd1f123f8c3a67974c01d6ef80b9769e04d660d6c1a7cc3e6cff7069"}, - {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:933e72fbe1829cbd59da2bc51ccd73d73162f087f88521a87a8ec9cb0cf10fa8"}, - {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cff5c87e941292c97d11dc81bd20679f56a2830f0f0e32f75b8ed6e0eb40f704"}, - {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c757f3a27b6345de13ef3ca956aa805d7734ce68023e84d0fc74e1f09ce66f7a"}, - {file = "regex-2022.6.2-cp38-cp38-win32.whl", hash = "sha256:a58d21dd1a2d6b50ed091554ff85e448fce3fe33a4db8b55d0eba2ca957ed626"}, - {file = "regex-2022.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:495a4165172848503303ed05c9d0409428f789acc27050fe2cf0a4549188a7d5"}, - {file = "regex-2022.6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1ab5cf7d09515548044e69d3a0ec77c63d7b9dfff4afc19653f638b992573126"}, - {file = "regex-2022.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1ea28f0ee6cbe4c0367c939b015d915aa9875f6e061ba1cf0796ca9a3010570"}, - {file = "regex-2022.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3de1ecf26ce85521bf73897828b6d0687cc6cf271fb6ff32ac63d26b21f5e764"}, - {file = "regex-2022.6.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa7c7044aabdad2329974be2246babcc21d3ede852b3971a90fd8c2056c20360"}, - {file = "regex-2022.6.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53d69d77e9cfe468b000314dd656be85bb9e96de088a64f75fe128dfe1bf30dd"}, - {file = "regex-2022.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c8d61883a38b1289fba9944a19a361875b5c0170b83cdcc95ea180247c1b7d3"}, - {file = "regex-2022.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5429202bef174a3760690d912e3a80060b323199a61cef6c6c29b30ce09fd17"}, - {file = "regex-2022.6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e85b10280cf1e334a7c95629f6cbbfe30b815a4ea5f1e28d31f79eb92c2c3d93"}, - {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c400dfed4137f32127ea4063447006d7153c974c680bf0fb1b724cce9f8567fc"}, - {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f648037c503985aed39f85088acab6f1eb6a0482d7c6c665a5712c9ad9eaefc"}, - {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e7b2ff451f6c305b516281ec45425dd423223c8063218c5310d6f72a0a7a517c"}, - {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:be456b4313a86be41706319c397c09d9fdd2e5cdfde208292a277b867e99e3d1"}, - {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c3db393b21b53d7e1d3f881b64c29d886cbfdd3df007e31de68b329edbab7d02"}, - {file = "regex-2022.6.2-cp39-cp39-win32.whl", hash = "sha256:d70596f20a03cb5f935d6e4aad9170a490d88fc4633679bf00c652e9def4619e"}, - {file = "regex-2022.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:3b9b6289e03dbe6a6096880d8ac166cb23c38b4896ad235edee789d4e8697152"}, - {file = "regex-2022.6.2.tar.gz", hash = "sha256:f7b43acb2c46fb2cd506965b2d9cf4c5e64c9c612bac26c1187933c7296bf08c"}, + {file = "regex-2022.7.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:55911aba9bae9ad826971d2c80428425625a3dd0c00b94e9bb19361888b983a6"}, + {file = "regex-2022.7.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1dee18c683a0603445ff9e77ffc39f1a3997f43ee07ae04ac80228fc5565fc4d"}, + {file = "regex-2022.7.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42702dba0281bcafbcf194770ecb987d60854946071c622777e6d207b3c169bc"}, + {file = "regex-2022.7.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff0e0c3a48c635529a1723d2fea9326da1dacdba5db20be1a4eeaf56580e3949"}, + {file = "regex-2022.7.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5f1e598b9b823fb37f2f1baf930bb5f30ae4a3d9b67dfdc63f8f2374f336679"}, + {file = "regex-2022.7.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e19695f7b8de8a3b7d940288abedf48dfcfc0cd8d36f360e5b1bc5e1c3f02a72"}, + {file = "regex-2022.7.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd0b115c4fab388b1131c89518cdd98db38d88c55cedfffc71de33c92eeee9c6"}, + {file = "regex-2022.7.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8e324436b7f8bbb8e7b3c4593b01d1dce7215befc83a60569ff34a38d6c250ae"}, + {file = "regex-2022.7.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:39ed69803697f1e1e9f1fb1e0b5a8116c55c130745ecd39485cc6255d3b9f046"}, + {file = "regex-2022.7.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:513be18bcf5f27076990dd111f72270d33188653e772023985be92a2c5438382"}, + {file = "regex-2022.7.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e4a72f70ad7aa3df8244da55cf21e28b6f0640a8d8e0065dfa7ec477dd2b4ea4"}, + {file = "regex-2022.7.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3ef5a4ced251a501962d1c8797d15978dd97661721e337cbe88d8bcdb9cd0d56"}, + {file = "regex-2022.7.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f86be4e30cf2ffcd67845251c8549d70740cd6eec77bd38d977c4c0640eefc24"}, + {file = "regex-2022.7.25-cp310-cp310-win32.whl", hash = "sha256:4d4640ab9fd3659378eab2ee6f47c3e04b4a269bf206475652c6d8520a9301cc"}, + {file = "regex-2022.7.25-cp310-cp310-win_amd64.whl", hash = "sha256:af3d5c74af5ae5d04d597ea61e5e9e0b84e84509e58d1e52aaefbae81cb697bb"}, + {file = "regex-2022.7.25-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a23653a18c1d69760a2d8b6793478815cf5dc8c12f3b6e608e50aed49829f0ef"}, + {file = "regex-2022.7.25-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccf10d7d0f25a3c5e123c97ffbab8d4b1429a3c25fbd50812010075bd5d844fd"}, + {file = "regex-2022.7.25-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:933752abc9931cb53eccbd4ab3aedbcd0f1797c0a1b19ed385952e265636b2b6"}, + {file = "regex-2022.7.25-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:750b5de7982e568c1bb60388dea1c3abd674d1d579b87ef1b945ba4da53eb5e2"}, + {file = "regex-2022.7.25-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac0dd2f11a165a79e271a04226378a008c83368031c6a9294a6df9cd1c13c05"}, + {file = "regex-2022.7.25-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48018c71ce7b2fe80c1eb16b9104d7d04d07567e9333159810a4ae5ef8cdf01f"}, + {file = "regex-2022.7.25-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:15bc8cddffe3a9181572c6bcdf45b145691fff1b5712767e7d7a6ef5d32f424f"}, + {file = "regex-2022.7.25-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:50dd20fd10dafd9b697f1c0629285790d86e66946caa2c6a1135f67846d9b495"}, + {file = "regex-2022.7.25-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:438b36fbf9446b94325eaeeb1336e2291cd81daeef91b9c728c0946ffbc42ba4"}, + {file = "regex-2022.7.25-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:7378a6fba8a043b3c5fb8cf915044c814ebb2463b0a7137ec09ae0b1b10f5484"}, + {file = "regex-2022.7.25-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:609a97626bf310e8cd7c79173e6ed8acab7f01ed4519b7936e998b54b3eb8d31"}, + {file = "regex-2022.7.25-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:9b8d411a547b47852020242f9c384da35d4c65ccf159ae55a3ba0e50b6220932"}, + {file = "regex-2022.7.25-cp36-cp36m-win32.whl", hash = "sha256:fbbf9858a3043f632c9da2a82e4ce895016dfb401f59ab110900121121ee73b7"}, + {file = "regex-2022.7.25-cp36-cp36m-win_amd64.whl", hash = "sha256:1903a2a6c4463488452e953a49f7e6663cfea9ff5e75b09333cbcc840e727a5b"}, + {file = "regex-2022.7.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:76696de39cbbbf976aa85cbd7b1f3ea2d98b3bc9889f6739fdb6cda85a7f05aa"}, + {file = "regex-2022.7.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c12e5c14eeb5e484c688f2db57ca4a8182d09b40ab69f73147dc32bcdf849d"}, + {file = "regex-2022.7.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbc0c5b350036ce49a8fd6015a29e4621de725fa99d9e985d3d76b820d44e5a9"}, + {file = "regex-2022.7.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c942696b541ce6be4e3cc2c963b48671277b38ebd4a28af803b511b2885759b7"}, + {file = "regex-2022.7.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fddd2ef742f05a18fde1d1c74df12fa6f426945cfb6fefba3fa1c5380e2dd2bf"}, + {file = "regex-2022.7.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1b83baa19355c8dd0ec23e725f18450be01bc464ba1f1865cfada03594fa629"}, + {file = "regex-2022.7.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3ef700d411b900fcff91f1ef16771bf085a9f9a376d16d8a643e8a20ff6dcb7b"}, + {file = "regex-2022.7.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b24133df3d3c57a901f6a63ba3783d6eed1d0561ed1cafd027f0789e76a10615"}, + {file = "regex-2022.7.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1228f5a6be5b45ce7b66a69a77682632f0ce64cea1d7da505f33972e01f1f3fe"}, + {file = "regex-2022.7.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:9eec276e6419de4f93824f9373b28a2a8eaed04f28514000cc6a41b64703d804"}, + {file = "regex-2022.7.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:ab950bbafafe9bf2e0a75b9f17291500fa7794f398834f1f4a71c18dddece130"}, + {file = "regex-2022.7.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a60840ebd37fe0152b5be50b56e8a958e1430837475311986f867dabad1c7474"}, + {file = "regex-2022.7.25-cp37-cp37m-win32.whl", hash = "sha256:a0c38edcc78556625cbadf48eb87decd5d3c5e82fc4810dd22c19a5498d2329d"}, + {file = "regex-2022.7.25-cp37-cp37m-win_amd64.whl", hash = "sha256:f755fba215ddafa26211e33ac91b48dcebf84ff28590790e5b7711b46fa4095d"}, + {file = "regex-2022.7.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8d928237cf78cfe3b46b608f87e255c45a1e11d04e7dd2c49cb60200cbd6f987"}, + {file = "regex-2022.7.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ea9f01224c25101c5f2c6dceebd29d1431525637d596241935640e4de0fbb822"}, + {file = "regex-2022.7.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d2a85a4a134011eb517f2a752f4e488b0a4f6b6ad00ef247f9fac57f9ff4f0"}, + {file = "regex-2022.7.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9163ef45bfebc39838848330cb94f79b563f738c60fc0a20a7f0a30f13ec1573"}, + {file = "regex-2022.7.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0798f6b97c3f8139c95af7b128a60909f5305b2e431a012083063298b2481e5d"}, + {file = "regex-2022.7.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03cdd06061426378a83e8a5bdec9cc71b964c35e329f68fb7058d08791780c83"}, + {file = "regex-2022.7.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f898bf0a9613cc8b7f7af6fdcd80cc8e7659787908834c63391f22271fdb1c14"}, + {file = "regex-2022.7.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b131c7c94da56f8f1c59b4540c37c20973119608ec8cf42b3ebb40a94f3afc2c"}, + {file = "regex-2022.7.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a2afa24d06301f4ffcb00244d30df1c12e65cabf30dcb0ba8b871d6b0c54d19e"}, + {file = "regex-2022.7.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d3ce546e54cfafa9dee60b11b7f99b87058d81ab62bd05e366fc5bf6b2c1383a"}, + {file = "regex-2022.7.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f7329e66c6bd9950eb428f225db3982e5f54e53d3d95951da424dce9aa621eae"}, + {file = "regex-2022.7.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ae6cd6ce16681d345592d74a0a92b25a9530d4055be460af425e654d891cdee4"}, + {file = "regex-2022.7.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fddd7ddd520661085ffd91f1db74b18e4cf5ed9b6e939aa7d31ca1ea67bc7621"}, + {file = "regex-2022.7.25-cp38-cp38-win32.whl", hash = "sha256:f049a9fdacdbc4e84afcec7a3b14a8309699a7347c95a525d49c4b9a9c353cee"}, + {file = "regex-2022.7.25-cp38-cp38-win_amd64.whl", hash = "sha256:50497f3d8a1e8d8055c6da1768c98f5b618039e572aacdcccd642704db6077eb"}, + {file = "regex-2022.7.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:89f4c531409ef01aa12b7c15bb489415e219c186725d44bc12a8f279afde3fe2"}, + {file = "regex-2022.7.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:535a2392a0f11f7df80f43e63a5b69c51bb29a10a690e4ae5ad721b9fe50684d"}, + {file = "regex-2022.7.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f3de4baf25e960a3048a6ecd0246cedcdfeb462a741d55e9a42e91add5a4a99"}, + {file = "regex-2022.7.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2c8f542c5afd36e60237dbbabc95722135047d4c2844b9c4bff74c7177a50a1"}, + {file = "regex-2022.7.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc49d9c6289df4c7895c85094872ef98ce7f609ba0ecbeb77acdd7f8362cda7d"}, + {file = "regex-2022.7.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:730cc311757153d59bf2bcf06d4026e3c998c1919c06557ad0e382235049b376"}, + {file = "regex-2022.7.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14882770017436aabe4cfa2651a9777f9faa2625bc0f6cdaec362697a8a964c3"}, + {file = "regex-2022.7.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1991348464df42a6bc04601e1241dfa4a9ec4d599338dc64760f2c299e1cb996"}, + {file = "regex-2022.7.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:03d7ff80e3a276ef460baaa745d425162c19d8ea093d60ecf47f52ffee37aea5"}, + {file = "regex-2022.7.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ed42feff196aaf262db1878d5ac553a3bcef147caf1362e7095f1115b71ae0e1"}, + {file = "regex-2022.7.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4433690ff474fd95a3058085aed5fe12ac4e09d4f4b2b983de35e3a6c899afa0"}, + {file = "regex-2022.7.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:454c2c81d34eb4e1d015acbca0488789c17fc84188e336365eaa31a16c964c04"}, + {file = "regex-2022.7.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a06d6ada6bef79aaa550ef37c7d529da60b81c02838d9dd9c5ab788becfc57d4"}, + {file = "regex-2022.7.25-cp39-cp39-win32.whl", hash = "sha256:cc018ce0f1b62df155a5b9c9a81464040a87e97fd9bd05e0febe92568c63e678"}, + {file = "regex-2022.7.25-cp39-cp39-win_amd64.whl", hash = "sha256:26d6e9a6431626c20821d0165a4c4508acb20a57e4c04ee77c96f01b7fe4c09c"}, + {file = "regex-2022.7.25.tar.gz", hash = "sha256:bd0883e86964cd61360ffc36dbebbc49b928e92a306f886eab02c11dfde5b7aa"}, ] requests = [ {file = "requests-2.22.0-py2.py3-none-any.whl", hash = "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"}, @@ -2020,47 +2049,17 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tornado = [ - {file = "tornado-6.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32"}, - {file = "tornado-6.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c"}, - {file = "tornado-6.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05"}, - {file = "tornado-6.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910"}, - {file = "tornado-6.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b"}, - {file = "tornado-6.1-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675"}, - {file = "tornado-6.1-cp35-cp35m-win32.whl", hash = "sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5"}, - {file = "tornado-6.1-cp35-cp35m-win_amd64.whl", hash = "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68"}, - {file = "tornado-6.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb"}, - {file = "tornado-6.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c"}, - {file = "tornado-6.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921"}, - {file = "tornado-6.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558"}, - {file = "tornado-6.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c"}, - {file = "tornado-6.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085"}, - {file = "tornado-6.1-cp36-cp36m-win32.whl", hash = "sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575"}, - {file = "tornado-6.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795"}, - {file = "tornado-6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f"}, - {file = "tornado-6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102"}, - {file = "tornado-6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4"}, - {file = "tornado-6.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd"}, - {file = "tornado-6.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01"}, - {file = "tornado-6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d"}, - {file = "tornado-6.1-cp37-cp37m-win32.whl", hash = "sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df"}, - {file = "tornado-6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37"}, - {file = "tornado-6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95"}, - {file = "tornado-6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a"}, - {file = "tornado-6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5"}, - {file = "tornado-6.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288"}, - {file = "tornado-6.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f"}, - {file = "tornado-6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6"}, - {file = "tornado-6.1-cp38-cp38-win32.whl", hash = "sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326"}, - {file = "tornado-6.1-cp38-cp38-win_amd64.whl", hash = "sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c"}, - {file = "tornado-6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5"}, - {file = "tornado-6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe"}, - {file = "tornado-6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea"}, - {file = "tornado-6.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2"}, - {file = "tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0"}, - {file = "tornado-6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd"}, - {file = "tornado-6.1-cp39-cp39-win32.whl", hash = "sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c"}, - {file = "tornado-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4"}, - {file = "tornado-6.1.tar.gz", hash = "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791"}, + {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, + {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, + {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, + {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, + {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, ] typed-ast = [ {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, @@ -2089,8 +2088,8 @@ typed-ast = [ {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, ] typing-extensions = [ - {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, - {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, + {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, + {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, ] urllib3 = [ {file = "urllib3-1.25.11-py2.py3-none-any.whl", hash = "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e"}, @@ -2104,6 +2103,10 @@ wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, ] +webencodings = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] wrapt = [ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, diff --git a/pyproject.toml b/pyproject.toml index 280300216..cab0cbea2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,9 +9,10 @@ packages = [ { include = "bookwyrm"}, { include = "celerywyrm" } ] [tool.poetry.dependencies] python = "^3.9" aiohttp = "3.8.1" +bleach = "5.0.1" celery = "5.2.2" colorthief = "0.2.1" -Django = "^3.2" +Django = "3.2.14" django-celery-beat = "2.2.1" django-compressor = "2.4.1" django-imagekit = "4.1.0"